From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/lib/rubygems/source/specific_file.rb | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 jni/ruby/lib/rubygems/source/specific_file.rb (limited to 'jni/ruby/lib/rubygems/source/specific_file.rb') diff --git a/jni/ruby/lib/rubygems/source/specific_file.rb b/jni/ruby/lib/rubygems/source/specific_file.rb new file mode 100644 index 0000000..250a839 --- /dev/null +++ b/jni/ruby/lib/rubygems/source/specific_file.rb @@ -0,0 +1,72 @@ +## +# A source representing a single .gem file. This is used for installation of +# local gems. + +class Gem::Source::SpecificFile < Gem::Source + + ## + # The path to the gem for this specific file. + + attr_reader :path + + ## + # Creates a new SpecificFile for the gem in +file+ + + def initialize(file) + @uri = nil + @path = ::File.expand_path(file) + + @package = Gem::Package.new @path + @spec = @package.spec + @name = @spec.name_tuple + end + + ## + # The Gem::Specification extracted from this .gem. + + attr_reader :spec + + def load_specs *a # :nodoc: + [@name] + end + + def fetch_spec name # :nodoc: + return @spec if name == @name + raise Gem::Exception, "Unable to find '#{name}'" + @spec + end + + def download spec, dir = nil # :nodoc: + return @path if spec == @spec + raise Gem::Exception, "Unable to download '#{spec.full_name}'" + end + + def pretty_print q # :nodoc: + q.group 2, '[SpecificFile:', ']' do + q.breakable + q.text @path + end + end + + ## + # Orders this source against +other+. + # + # If +other+ is a SpecificFile from a different gem name +nil+ is returned. + # + # If +other+ is a SpecificFile from the same gem name the versions are + # compared using Gem::Version#<=> + # + # Otherwise Gem::Source#<=> is used. + + def <=> other + case other + when Gem::Source::SpecificFile then + return nil if @spec.name != other.spec.name + + @spec.version <=> other.spec.version + else + super + end + end + +end -- cgit v1.2.3