- #
- C
- D
- E
- N
- P
- S
- T
OPS | = | { #:nodoc: "=" => lambda { |v, r| v == r }, "!=" => lambda { |v, r| v != r }, ">" => lambda { |v, r| v > r }, "<" => lambda { |v, r| v < r }, ">=" => lambda { |v, r| v >= r }, "<=" => lambda { |v, r| v <= r }, "~>" => lambda { |v, r| v >= r && v.release < r.bump } } |
PATTERN_RAW | = | "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*" |
PATTERN | = | /\A#{PATTERN_RAW}\z/ |
DefaultRequirement | = | [">=", Gem::Version.new(0)] |
REFACTOR: There's no reason that this can't be unified with .new. .new is the standard Ruby factory method.
A default “version requirement” can surely only be '>= 0'.
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 lib/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 lib/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
FIX: maybe this should be using default ?
A requirement is a prerelease if any of the versions inside of it are prereleases
True if version
satisfies this Requirement.
# File lib/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
True if the requirement will not always match the latest version.