REFACTOR: There’s no reason that this can’t be unified with .new. .new is the standard Ruby factory method.
# File rubygems/requirement.rb, line 47
def self.create input
case input
when Gem::Requirement then
input
when Gem::Version, Array then
new input
else
if input.respond_to? :to_str then
new [input.to_str]
else
default
end
end
end
A default “version requirement” can surely only be ‘>= 0’.
# File rubygems/requirement.rb, line 65
def self.default
new '>= 0'
end
Constructs a requirement from requirements. Requirements can
be Strings, Gem::Versions, or Arrays of those. nil and
duplicate requirements are ignored. An empty set of
requirements is the same as ">= 0".
# File rubygems/requirement.rb, line 112
def initialize *requirements
requirements = requirements.flatten
requirements.compact!
requirements.uniq!
if requirements.empty?
@requirements = [DefaultRequirement]
else
@requirements = requirements.map! { |r| self.class.parse r }
end
end
REFACTOR: Little two element arrays like this have no real semantic value. I’d love to see something like this: Constraint = Struct.new(:operator, :version); (or similar) and have a Requirement be a list of Constraints.
# File rubygems/requirement.rb, line 86
def self.parse obj
return ["=", obj] if Gem::Version === obj
unless PATTERN =~ obj.to_s
raise BadRequirementError, "Illformed requirement [#{obj.inspect}]"
end
if $1 == ">=" && $2 == "0"
DefaultRequirement
else
[$1 || "=", Gem::Version.new($2)]
end
end
DOC: this should probably be :nodoc’d
# File rubygems/requirement.rb, line 218
def == other
Gem::Requirement === other and to_s == other.to_s
end
# File rubygems/requirement.rb, line 173
def encode_with(coder)
coder.add 'requirements', @requirements
end
FIX: maybe this should be using default ?
# File rubygems/requirement.rb, line 128
def none?
if @requirements.size == 1
@requirements[0] == DefaultRequirement
else
false
end
end
A requirement is a prerelease if any of the versions inside of it are prereleases
# File rubygems/requirement.rb, line 181
def prerelease?
requirements.any? { |r| r.last.prerelease? }
end
True if version satisfies this Requirement.
# File rubygems/requirement.rb, line 194
def satisfied_by? version
raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless
Gem::Version === version
# #28965: syck has a bug with unquoted '=' YAML.loading as YAML::DefaultKey
requirements.all? { |op, rv| (OPS[op] || OPS["="]).call version, rv }
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.