Object
The Dependency class holds a Gem name and a Gem::Requirement.
Valid dependency types.
Constructs a dependency with name and
requirements. The last argument can optionally be the
dependency type, which defaults to :runtime.
# File rubygems/dependency.rb, line 51
def initialize name, *requirements
type = Symbol === requirements.last ? requirements.pop : :runtime
requirements = requirements.first if 1 == requirements.length # unpack
unless TYPES.include? type
raise ArgumentError, "Valid types are #{TYPES.inspect}, "
+ "not #{@type.inspect}"
end
@name = name
@requirement = Gem::Requirement.create requirements
@type = type
@prerelease = false
# This is for Marshal backwards compatability. See the comments in
# +requirement+ for the dirty details.
@version_requirements = @requirement
end
Dependencies are ordered by name.
# File rubygems/dependency.rb, line 184
def <=> other
[@name] <=> [other.name]
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.
# File rubygems/dependency.rb, line 194
def =~ other
unless Gem::Dependency === other
other = Gem::Dependency.new other.name, other.version rescue return false
end
pattern = name
if Regexp === pattern then
return false unless pattern =~ other.name
else
return false unless pattern == other.name
end
reqs = other.requirement.requirements
return false unless reqs.length == 1
return false unless reqs.first.first == '='
version = reqs.first.last
requirement.satisfied_by? version
end
Rails subclasses Gem::Dependency and uses this method, so we’ll hack around it.
# File rubygems/dependency.rb, line 217
def match?(spec_name, spec_version)
pattern = name
if Regexp === pattern
return false unless pattern =~ spec_name
else
return false unless pattern == spec_name
end
return true if requirement.none?
requirement.satisfied_by? Gem::Version.new(spec_version)
end
Does this dependency require a prerelease?
# File rubygems/dependency.rb, line 87
def prerelease?
@prerelease || requirement.prerelease?
end
What does this dependency require?
# File rubygems/dependency.rb, line 109
def requirement
return @requirement if defined?(@requirement) and @requirement
# @version_requirements and @version_requirement are legacy ivar
# names, and supported here because older gems need to keep
# working and Dependency doesn't implement marshal_dump and
# marshal_load. In a happier world, this would be an
# attr_accessor. The horrifying instance_variable_get you see
# below is also the legacy of some old restructurings.
#
# Note also that because of backwards compatibility (loading new
# gems in an old RubyGems installation), we can't add explicit
# marshaling to this class until we want to make a big
# break. Maybe 2.0.
#
# Children, define explicit marshal and unmarshal behavior for
# public classes. Marshal formats are part of your public API.
if defined?(@version_requirement) && @version_requirement
version = @version_requirement.instance_variable_get :@version
@version_requirement = nil
@version_requirements = Gem::Requirement.new version
end
@requirement = @version_requirements if defined?(@version_requirements)
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.