Class: Bundler::RemoteSpecification

Inherits:
Object
  • Object
show all
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

StubSpecification

Constant Summary

Constant Summary

Constants included from GemHelpers

GemHelpers::GENERICS, GemHelpers::GENERIC_CACHE

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from MatchPlatform

#match_platform

Methods included from GemHelpers

#generic

Constructor Details

#initialize(name, version, platform, spec_fetcher) ⇒ RemoteSpecification



16
17
18
19
20
21
# File 'lib/bundler/remote_specification.rb', line 16

def initialize(name, version, platform, spec_fetcher)
  @name         = name
  @version      = 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)



74
75
76
77
78
79
80
# File 'lib/bundler/remote_specification.rb', line 74

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

#nameObject (readonly)

Returns the value of attribute name



13
14
15
# File 'lib/bundler/remote_specification.rb', line 13

def name
  @name
end

#platformObject (readonly)

Returns the value of attribute platform



13
14
15
# File 'lib/bundler/remote_specification.rb', line 13

def platform
  @platform
end

#remoteObject

Returns the value of attribute remote



14
15
16
# File 'lib/bundler/remote_specification.rb', line 14

def remote
  @remote
end

#sourceObject

Returns the value of attribute source



14
15
16
# File 'lib/bundler/remote_specification.rb', line 14

def source
  @source
end

#versionObject (readonly)

Returns the value of attribute version



13
14
15
# File 'lib/bundler/remote_specification.rb', line 13

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.



40
41
42
43
44
45
46
# File 'lib/bundler/remote_specification.rb', line 40

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.



51
52
53
# File 'lib/bundler/remote_specification.rb', line 51

def __swap__(spec)
  @_remote_specification = spec
end

#fetch_platformObject

Needed before installs, since the arch matters then and quick specs don't bother to include the arch in the platform string



25
26
27
# File 'lib/bundler/remote_specification.rb', line 25

def fetch_platform
  @platform = _remote_specification.platform
end

#full_nameObject



29
30
31
32
33
34
35
# File 'lib/bundler/remote_specification.rb', line 29

def full_name
  if platform == Gem::Platform::RUBY or platform.nil? then
    "#{@name}-#{@version}"
  else
    "#{@name}-#{@version}-#{platform}"
  end
end

#sort_objArray

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 Also:

  • #<=>
  • Gem::Specification#sort_obj


64
65
66
# File 'lib/bundler/remote_specification.rb', line 64

def sort_obj
  [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1]
end