Class: Bundler::RemoteSpecification
- Inherits:
-
Object
- Object
- Bundler::RemoteSpecification
- Includes:
- MatchPlatform, Comparable
- Defined in:
- lib/bundler/remote_specification.rb
Overview
Represents a lazily loaded gem specification, where the full specification is on the source server in rubygems’ “quick” index. The proxy object is to be seeded with what we’re given from the source’s abbreviated index - the full specification will only be fetched when necessary.
Direct Known Subclasses
Constant Summary
Constants included from GemHelpers
GemHelpers::GENERICS, GemHelpers::GENERIC_CACHE
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#platform ⇒ Object
readonly
Returns the value of attribute platform.
-
#remote ⇒ Object
Returns the value of attribute remote.
-
#source ⇒ Object
Returns the value of attribute source.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Compare this specification against another object.
-
#__swap__(spec) ⇒ Object
Because Rubyforge cannot be trusted to provide valid specifications once the remote gem is downloaded, the backend specification will be swapped out.
-
#fetch_platform ⇒ Object
Needed before installs, since the arch matters then and quick specs don’t bother to include the arch in the platform string.
- #full_name ⇒ Object
-
#initialize(name, version, platform, spec_fetcher) ⇒ RemoteSpecification
constructor
A new instance of RemoteSpecification.
-
#sort_obj ⇒ Array
Create a delegate used for sorting.
Methods included from MatchPlatform
Methods included from GemHelpers
generic, generic_local_platform
Constructor Details
#initialize(name, version, platform, spec_fetcher) ⇒ RemoteSpecification
Returns a new instance of RemoteSpecification.
17 18 19 20 21 22 |
# File 'lib/bundler/remote_specification.rb', line 17 def initialize(name, version, platform, spec_fetcher) @name = name @version = Gem::Version.create version @platform = platform @spec_fetcher = spec_fetcher end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &blk) ⇒ Object (private)
77 78 79 80 81 82 83 |
# File 'lib/bundler/remote_specification.rb', line 77 def method_missing(method, *args, &blk) if Gem::Specification.new.respond_to?(method) _remote_specification.send(method, *args, &blk) else super end end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
14 15 16 |
# File 'lib/bundler/remote_specification.rb', line 14 def name @name end |
#platform ⇒ Object (readonly)
Returns the value of attribute platform.
14 15 16 |
# File 'lib/bundler/remote_specification.rb', line 14 def platform @platform end |
#remote ⇒ Object
Returns the value of attribute remote.
15 16 17 |
# File 'lib/bundler/remote_specification.rb', line 15 def remote @remote end |
#source ⇒ Object
Returns the value of attribute source.
15 16 17 |
# File 'lib/bundler/remote_specification.rb', line 15 def source @source end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
14 15 16 |
# File 'lib/bundler/remote_specification.rb', line 14 def version @version end |
Instance Method Details
#<=>(other) ⇒ Object
Compare this specification against another object. Using sort_obj is compatible with Gem::Specification and other Bundler or RubyGems objects. Otherwise, use the default Object comparison.
41 42 43 44 45 46 47 |
# File 'lib/bundler/remote_specification.rb', line 41 def <=>(other) if other.respond_to?(:sort_obj) sort_obj <=> other.sort_obj else super end end |
#__swap__(spec) ⇒ Object
Because Rubyforge cannot be trusted to provide valid specifications once the remote gem is downloaded, the backend specification will be swapped out.
52 53 54 |
# File 'lib/bundler/remote_specification.rb', line 52 def __swap__(spec) @_remote_specification = spec end |
#fetch_platform ⇒ Object
Needed before installs, since the arch matters then and quick specs don’t bother to include the arch in the platform string
26 27 28 |
# File 'lib/bundler/remote_specification.rb', line 26 def fetch_platform @platform = _remote_specification.platform end |
#full_name ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/bundler/remote_specification.rb', line 30 def full_name if platform == Gem::Platform::RUBY || platform.nil? "#{@name}-#{@version}" else "#{@name}-#{@version}-#{platform}" end end |
#sort_obj ⇒ Array
Create a delegate used for sorting. This strategy is copied from RubyGems 2.23 and ensures that Bundler’s specifications can be compared and sorted with RubyGems’ own specifications.
65 66 67 |
# File 'lib/bundler/remote_specification.rb', line 65 def sort_obj [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1] end |