Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
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 34 def initialize name, *requirements if Regexp === name then msg = ["NOTE: Dependency.new w/ a regexp is deprecated.", "Dependency.new called from #{Gem.location_of_caller.join(":")}"] warn msg.join("\n") unless Gem::Deprecate.skip end 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 compatibility. See the comments in # +requirement+ for the dirty details. @version_requirements = @requirement end
Dependencies are ordered by name.
# File rubygems/dependency.rb, line 154 def <=> other self.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 164 def =~ other unless Gem::Dependency === other return unless other.respond_to?(:name) && other.respond_to?(:version) other = Gem::Dependency.new other.name, other.version end return false unless name === other.name 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
# File rubygems/dependency.rb, line 182 def match? name, version return false unless self.name === name return true if requirement.none? requirement.satisfied_by? Gem::Version.new(version) end
# File rubygems/dependency.rb, line 189 def matches_spec? spec return false unless name === spec.name return true if requirement.none? requirement.satisfied_by?(spec.version) end
# File rubygems/dependency.rb, line 215 def matching_specs platform_only = false matches = Gem::Specification.find_all { |spec| self.name === spec.name and # TODO: == instead of === requirement.satisfied_by? spec.version } if platform_only matches.reject! { |spec| not Gem::Platform.match spec.platform } end matches = matches.sort_by { |s| s.sort_obj } # HACK: shouldn't be needed end
Merges the requirements of other
into this dependency
# File rubygems/dependency.rb, line 199 def merge other unless name == other.name then raise ArgumentError, "#{self} and #{other} have different names" end default = Gem::Requirement.default self_req = self.requirement other_req = other.requirement return self.class.new name, self_req if other_req == default return self.class.new name, other_req if self_req == default self.class.new name, self_req.as_list.concat(other_req.as_list) end
Does this dependency require a prerelease?
# File rubygems/dependency.rb, line 76 def prerelease? @prerelease || requirement.prerelease? end
What does this dependency require?
# File rubygems/dependency.rb, line 98 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
# File rubygems/dependency.rb, line 125 def requirements_list requirement.as_list end
True if the dependency will not always match the latest version.
# File rubygems/dependency.rb, line 233 def specific? @requirement.specific? end
# File rubygems/dependency.rb, line 255 def to_spec matches = self.to_specs matches.find { |spec| spec.activated? } or matches.last end
# File rubygems/dependency.rb, line 237 def to_specs matches = matching_specs true # TODO: check Gem.activated_spec[self.name] in case matches falls outside if matches.empty? then specs = Gem::Specification.all_names.join ", " error = Gem::LoadError.new "Could not find #{name} (#{requirement}) amongst [#{specs}]" error.name = self.name error.requirement = self.requirement raise error end # TODO: any other resolver validations should go here matches end
Dependency type.
# File rubygems/dependency.rb, line 140 def type @type ||= :runtime 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.