# class Bundler::RemoteSpecification

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.

### Attributes

dependencies[W]
name[R]
platform[R]
remote[RW]
source[RW]
version[R]

### Public Class Methods

new(name, version, platform, spec_fetcher) click to toggle source

    # File lib/bundler/remote_specification.rb, line 18
    def initialize(name, version, platform, spec_fetcher)
      @name         = name
      @version      = Gem::Version.create version
      @platform     = platform
      @spec_fetcher = spec_fetcher
      @dependencies = nil
    end

### Public Instance Methods

<=>(other) click to toggle source

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.

Calls superclass method Object#<=>

    # File lib/bundler/remote_specification.rb, line 43
    def <=>(other)
      if other.respond_to?(:sort_obj)
        sort_obj <=> other.sort_obj
      else
        super
      end
    end

__swap__(spec) click to toggle source

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 54
    def __swap__(spec)
      SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
      @_remote_specification = spec
    end

dependencies() click to toggle source

    # 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
        # see https://github.com/bundler/bundler/issues/5797
        deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) }

        deps
      end
    end

fetch_platform() click to toggle source

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 28
    def fetch_platform
      @platform = _remote_specification.platform
    end

full_name() click to toggle source

    # File lib/bundler/remote_specification.rb, line 32
    def full_name
      if platform == Gem::Platform::RUBY || platform.nil?
        "#{@name}-#{@version}"
      else
        "#{@name}-#{@version}-#{platform}"
      end
    end

git_version() click to toggle source

    # File lib/bundler/remote_specification.rb, line 88
    def git_version
      return unless loaded_from && source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

respond_to?(method, include_all = false) click to toggle source
Calls superclass method `Object#respond_to?`

    # File lib/bundler/remote_specification.rb, line 109
    def respond_to?(method, include_all = false)
      super || _remote_specification.respond_to?(method, include_all)
    end

sort_obj() click to toggle source

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.

@see #<=> @see `Gem::Specification#sort_obj`

@return [Array] an object you can use to compare and sort this

    specification against other specifications

    # File lib/bundler/remote_specification.rb, line 68
    def sort_obj
      [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1]
    end

to_s() click to toggle source

    # File lib/bundler/remote_specification.rb, line 72
    def to_s
      "#<#{self.class} name=#{name} version=#{version} platform=#{platform}>"
    end

### Private Instance Methods

_remote_specification() click to toggle source

    # File lib/bundler/remote_specification.rb, line 99
    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

method_missing(method, *args, &blk) click to toggle source

    # File lib/bundler/remote_specification.rb, line 105
    def method_missing(method, *args, &blk)
      _remote_specification.send(method, *args, &blk)
    end

to_ary() click to toggle source

    # File lib/bundler/remote_specification.rb, line 95
    def to_ary
      nil
    end