Class Gem::Dependency
In: lib/rubygems/dependency.rb
Parent: Object

The Dependency class holds a Gem name and a Gem::Requirement.

Methods

<=>   =~   match?   matches_spec?   merge   new   prerelease?   requirement   requirements_list   type  

Constants

TYPES = [ :development, :runtime, ]   Valid dependency types.

Attributes

name  [RW]  Dependency name or regular expression.
prerelease  [W]  Allows you to force this dependency to be a prerelease.

Public Class methods

Constructs a dependency with name and requirements. The last argument can optionally be the dependency type, which defaults to :runtime.

[Source]

    # File lib/rubygems/dependency.rb, line 34
34:   def initialize name, *requirements
35:     type         = Symbol === requirements.last ? requirements.pop : :runtime
36:     requirements = requirements.first if 1 == requirements.length # unpack
37: 
38:     unless TYPES.include? type
39:       raise ArgumentError, "Valid types are #{TYPES.inspect}, "
40:         + "not #{type.inspect}"
41:     end
42: 
43:     @name        = name
44:     @requirement = Gem::Requirement.create requirements
45:     @type        = type
46:     @prerelease  = false
47: 
48:     # This is for Marshal backwards compatibility. See the comments in
49:     # +requirement+ for the dirty details.
50: 
51:     @version_requirements = @requirement
52:   end

Public Instance methods

Dependencies are ordered by name.

[Source]

     # File lib/rubygems/dependency.rb, line 148
148:   def <=> other
149:     self.name <=> other.name
150:   end

Uses this dependency as a pattern to compare to other. This dependency will match if the name matches the other‘s name, and other has only an equal version requirement that satisfies this dependency.

[Source]

     # File lib/rubygems/dependency.rb, line 158
158:   def =~ other
159:     unless Gem::Dependency === other
160:       return unless other.respond_to?(:name) && other.respond_to?(:version)
161:       other = Gem::Dependency.new other.name, other.version
162:     end
163: 
164:     return false unless name === other.name
165: 
166:     reqs = other.requirement.requirements
167: 
168:     return false unless reqs.length == 1
169:     return false unless reqs.first.first == '='
170: 
171:     version = reqs.first.last
172: 
173:     requirement.satisfied_by? version
174:   end

[Source]

     # File lib/rubygems/dependency.rb, line 176
176:   def match? name, version
177:     return false unless self.name === name
178:     return true if requirement.none?
179: 
180:     requirement.satisfied_by? Gem::Version.new(version)
181:   end

[Source]

     # File lib/rubygems/dependency.rb, line 183
183:   def matches_spec? spec
184:     return false unless name === spec.name
185:     return true  if requirement.none?
186: 
187:     requirement.satisfied_by?(spec.version)
188:   end

Merges the requirements of other into this dependency

[Source]

     # File lib/rubygems/dependency.rb, line 193
193:   def merge other
194:     unless name == other.name then
195:       raise ArgumentError,
196:             "#{self} and #{other} have different names"
197:     end
198: 
199:     default = Gem::Requirement.default
200:     self_req  = self.requirement
201:     other_req = other.requirement
202: 
203:     return self.class.new name, self_req  if other_req == default
204:     return self.class.new name, other_req if self_req  == default
205: 
206:     self.class.new name, self_req.as_list.concat(other_req.as_list)
207:   end

Does this dependency require a prerelease?

[Source]

    # File lib/rubygems/dependency.rb, line 70
70:   def prerelease?
71:     @prerelease || requirement.prerelease?
72:   end

What does this dependency require?

[Source]

     # File lib/rubygems/dependency.rb, line 92
 92:   def requirement
 93:     return @requirement if defined?(@requirement) and @requirement
 94: 
 95:     # @version_requirements and @version_requirement are legacy ivar
 96:     # names, and supported here because older gems need to keep
 97:     # working and Dependency doesn't implement marshal_dump and
 98:     # marshal_load. In a happier world, this would be an
 99:     # attr_accessor. The horrifying instance_variable_get you see
100:     # below is also the legacy of some old restructurings.
101:     #
102:     # Note also that because of backwards compatibility (loading new
103:     # gems in an old RubyGems installation), we can't add explicit
104:     # marshaling to this class until we want to make a big
105:     # break. Maybe 2.0.
106:     #
107:     # Children, define explicit marshal and unmarshal behavior for
108:     # public classes. Marshal formats are part of your public API.
109: 
110:     if defined?(@version_requirement) && @version_requirement
111:       version = @version_requirement.instance_variable_get :@version
112:       @version_requirement  = nil
113:       @version_requirements = Gem::Requirement.new version
114:     end
115: 
116:     @requirement = @version_requirements if defined?(@version_requirements)
117:   end

[Source]

     # File lib/rubygems/dependency.rb, line 119
119:   def requirements_list
120:     requirement.as_list
121:   end

Dependency type.

[Source]

     # File lib/rubygems/dependency.rb, line 134
134:   def type
135:     @type ||= :runtime
136:   end

[Validate]