Class: Gem::Requirement
- Inherits:
-
Object
- Object
- Gem::Requirement
- Includes:
- Comparable
- Defined in:
- lib/rubygems/requirement.rb
Overview
A Requirement is a set of one or more version restrictions. It supports a few (=, !=, >, <, >=, <=, ~>) different restriction operators.
Constant Summary
- OPS =
:nodoc:
{ #: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 =
/\A\s*(#{quoted})?\s*(#{Gem::Version::VERSION_PATTERN})\s*\z/
Instance Attribute Summary (collapse)
-
- (Object) requirements
readonly
An array of requirement pairs.
Class Method Summary (collapse)
-
+ (Object) create(input)
Factory method to create a Gem::Requirement object.
-
+ (Object) default
A default "version requirement" can surely only be '>= 0'.
-
+ (Object) parse(obj)
Parse obj, returning an [op, version] pair.
Instance Method Summary (collapse)
-
- (Object) <=>(other)
:nodoc:.
-
- (Object) as_list
:nodoc:.
-
- (Object) hash
:nodoc:.
-
- (Requirement) initialize(*requirements)
constructor
Constructs a requirement from requirements.
-
- (Object) marshal_dump
:nodoc:.
-
- (Object) marshal_load(array)
:nodoc:.
- - (Boolean) none?
- - (Boolean) prerelease?
-
- (Object) pretty_print(q)
:nodoc:.
-
- (Boolean) satisfied_by?(version)
True if version satisfies this Requirement.
-
- (Object) to_s
:nodoc:.
Constructor Details
- (Requirement) initialize(*requirements)
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".
90 91 92 93 94 95 96 97 98 |
# File 'lib/rubygems/requirement.rb', line 90 def initialize *requirements requirements = requirements.flatten requirements.compact! requirements.uniq! requirements << ">= 0" if requirements.empty? @none = (requirements == ">= 0") @requirements = requirements.map! { |r| self.class.parse r } end |
Instance Attribute Details
- (Object) requirements (readonly)
An array of requirement pairs. The first element of the pair is the op, and the second is the Gem::Version.
82 83 84 |
# File 'lib/rubygems/requirement.rb', line 82 def requirements @requirements end |
Class Method Details
+ (Object) create(input)
Factory method to create a Gem::Requirement object. Input may be a Version, a String, or nil. Intended to simplify client code.
If the input is "weird", the default version requirement is returned.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rubygems/requirement.rb', line 30 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 |
+ (Object) default
A default "version requirement" can surely only be '>= 0'. -- This comment once said:
"A default "version requirement" can surely only be '> 0'."
52 53 54 |
# File 'lib/rubygems/requirement.rb', line 52 def self.default new '>= 0' end |
+ (Object) parse(obj)
Parse obj, returning an [op, version] pair. obj can be a String or a Gem::Version.
If obj is a String, it can be either a full requirement specification, like ">= 1.2", or a simple version number, like "1.2".
parse("> 1.0") # => [">", "1.0"]
parse("1.0") # => ["=", "1.0"]
parse(Gem::Version.new("1.0")) # => ["=, "1.0"]
68 69 70 71 72 73 74 75 76 |
# File 'lib/rubygems/requirement.rb', line 68 def self.parse obj return ["=", obj] if Gem::Version === obj unless PATTERN =~ obj.to_s raise ArgumentError, "Illformed requirement [#{obj.inspect}]" end [$1 || "=", Gem::Version.new($2)] end |
Instance Method Details
- (Object) <=>(other)
:nodoc:
141 142 143 |
# File 'lib/rubygems/requirement.rb', line 141 def <=> other # :nodoc: to_s <=> other.to_s end |
- (Object) as_list
:nodoc:
104 105 106 |
# File 'lib/rubygems/requirement.rb', line 104 def as_list # :nodoc: requirements.map { |op, version| "#{op} #{version}" } end |
- (Object) hash
:nodoc:
108 109 110 |
# File 'lib/rubygems/requirement.rb', line 108 def hash # :nodoc: requirements.hash end |
- (Object) marshal_dump
:nodoc:
112 113 114 |
# File 'lib/rubygems/requirement.rb', line 112 def marshal_dump # :nodoc: [@requirements] end |
- (Object) marshal_load(array)
:nodoc:
116 117 118 |
# File 'lib/rubygems/requirement.rb', line 116 def marshal_load array # :nodoc: @requirements = array[0] end |
- (Boolean) none?
100 101 102 |
# File 'lib/rubygems/requirement.rb', line 100 def none? @none ||= (to_s == ">= 0") end |
- (Boolean) prerelease?
120 121 122 |
# File 'lib/rubygems/requirement.rb', line 120 def prerelease? requirements.any? { |r| r.last.prerelease? } end |
- (Object) pretty_print(q)
:nodoc:
124 125 126 127 128 |
# File 'lib/rubygems/requirement.rb', line 124 def pretty_print q # :nodoc: q.group 1, 'Gem::Requirement.new(', ')' do q.pp as_list end end |
- (Boolean) satisfied_by?(version)
True if version satisfies this Requirement.
133 134 135 |
# File 'lib/rubygems/requirement.rb', line 133 def satisfied_by? version requirements.all? { |op, rv| OPS[op].call version, rv } end |
- (Object) to_s
:nodoc:
137 138 139 |
# File 'lib/rubygems/requirement.rb', line 137 def to_s # :nodoc: as_list.join ", " end |