Class: Bundler::RemoteSpecification
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Inherits: | Object |
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.
Constant Summary
GemHelpers
- Included
Class Method Summary
Instance Attribute Summary
- #dependencies rw
- #dependencies=(value) rw
- #insecurely_materialized? ⇒ Boolean readonly
- #locked_platform rw
- #name readonly
- #platform readonly
- #remote rw
- #source rw
- #version readonly
GemHelpers
- Included
FetchMetadata
- Included
#matches_current_ruby? | A fallback is included because the original version of the specification API didn’t include that field, so some marshalled specs in the index have it set to |
#matches_current_rubygems? |
MatchMetadata
- Included
Instance Method Summary
-
#<=>(other)
Compare this specification against another object.
-
#__swap__(spec)
Because Rubyforge cannot be trusted to provide valid specifications once the remote gem is downloaded, the backend specification will be swapped out.
-
#fetch_platform
Needed before installs, since the arch matters then and quick specs don’t bother to include the arch in the platform string.
- #full_name
- #git_version
- #respond_to?(method, include_all = false) ⇒ Boolean
- #runtime_dependencies
-
#sort_obj ⇒ Array
Create a delegate used for sorting.
- #to_s
- #_remote_specification private
- #method_missing(method, *args, &blk) private
- #to_ary private
MatchPlatform
- Included
GemHelpers
- Included
Constructor Details
.new(name, version, platform, spec_fetcher) ⇒ RemoteSpecification
# File 'lib/bundler/remote_specification.rb', line 17
def initialize(name, version, platform, spec_fetcher) @name = name @version = Gem::Version.create version @original_platform = platform || Gem::Platform::RUBY @platform = Gem::Platform.new(platform) @spec_fetcher = spec_fetcher @dependencies = nil @locked_platform = nil end
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &blk) (private)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 117
def method_missing(method, *args, &blk) _remote_specification.send(method, *args, &blk) end
Instance Attribute Details
#dependencies (rw)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 83
def dependencies @dependencies ||= begin deps = method_missing(:dependencies) # allow us to handle when the specs dependencies are an array of array of string # in order to delay the crash to `#__swap__` where it results in a friendlier error # see https://github.com/rubygems/bundler/issues/5797 deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) } deps end end
#dependencies=(value) (rw)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 14
attr_writer :dependencies
#insecurely_materialized? ⇒ Boolean
(readonly)
[ GitHub ]
#locked_platform (rw)
[ GitHub ]#name (readonly)
[ GitHub ]#platform (readonly)
[ GitHub ]#remote (rw)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 15
attr_accessor :source, :remote, :locked_platform
#source (rw)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 15
attr_accessor :source, :remote, :locked_platform
#version (readonly)
[ GitHub ]Instance Method Details
#<=>(other)
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.
# File 'lib/bundler/remote_specification.rb', line 48
def <=>(other) if other.respond_to?(:sort_obj) sort_obj <=> other.sort_obj else super end end
#__swap__(spec)
Because Rubyforge cannot be trusted to provide valid specifications once the remote gem is downloaded, the backend specification will be swapped out.
# File 'lib/bundler/remote_specification.rb', line 59
def __swap__(spec) raise APIResponseInvalidDependenciesError unless spec.dependencies.all? {|d| d.is_a?(Gem::Dependency) } SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies) @_remote_specification = spec end
#_remote_specification (private)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 111
def _remote_specification @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform]) @_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \ " missing from the server!") end
#fetch_platform
Needed before installs, since the arch matters then and quick specs don’t bother to include the arch in the platform string
# File 'lib/bundler/remote_specification.rb', line 33
def fetch_platform @platform = _remote_specification.platform end
#full_name
[ GitHub ]#git_version
[ GitHub ]
#respond_to?(method, include_all = false) ⇒ Boolean
# File 'lib/bundler/remote_specification.rb', line 121
def respond_to?(method, include_all = false) super || _remote_specification.respond_to?(method, include_all) end
#runtime_dependencies
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 96
def runtime_dependencies dependencies.select(&:runtime?) 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.
#to_ary (private)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 107
def to_ary nil end