In Files

  • rubygems/dependency.rb

Class/Module Index [+]

Quicksearch

Gem::Dependency

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

Constants

TYPES

Valid dependency types.

Attributes

name[RW]

Dependency name or regular expression.

prerelease[W]

Allows you to force this dependency to be a prerelease.

type[R]

Dependency type.

Public Class Methods

new(name, *requirements) click to toggle source

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
            

Public Instance Methods

<=>(other) click to toggle source

Dependencies are ordered by name.

 
               # File rubygems/dependency.rb, line 184
def <=> other
  [@name] <=> [other.name]
end
            
=~(other) click to toggle source

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
            
__requirement() click to toggle source

Rails subclasses Gem::Dependency and uses this method, so we’ll hack around it.

Alias for: requirement
match?(spec_name, spec_version) click to toggle source
 
               # 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
            
prerelease?() click to toggle source

Does this dependency require a prerelease?

 
               # File rubygems/dependency.rb, line 87
def prerelease?
  @prerelease || requirement.prerelease?
end
            
requirement() click to toggle source

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
            
Also aliased as: __requirement
requirements_list() click to toggle source
 
               # File rubygems/dependency.rb, line 142
def requirements_list
  requirement.as_list
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 visit Documenting-ruby.org.

blog comments powered by Disqus