Class: Bundler::RemoteSpecification
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
Comparable,
MatchPlatform ,
GemHelpers
|
|
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
- #name readonly
- #platform readonly
- #remote rw
- #source rw
- #version readonly
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
-
#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
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 106
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 76
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 13
attr_writer :dependencies
#name (readonly)
[ GitHub ]#platform (readonly)
[ GitHub ]#remote (rw)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 14
attr_accessor :source, :remote
#source (rw)
[ GitHub ]# File 'lib/bundler/remote_specification.rb', line 14
attr_accessor :source, :remote
#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 41
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 52
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 100
def _remote_specification @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform]) @_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \ " missing from the server! Try installing with `--full-index` as a workaround.") 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 26
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 110
def respond_to?(method, include_all = false) super || _remote_specification.respond_to?(method, include_all) 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 96
def to_ary nil end