Class: Gem::Requirement

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/rubygems/version.rb

Overview

Requirement version includes a prefaced comparator in addition to a version number.

A Requirement object can actually contain multiple, er, requirements, as in (> 1.2, < 2.0).

Constant Summary collapse

OPS =
{
  "="  =>  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 < r.bump }
}
OP_RE =
Regexp.new(OPS.keys.collect{|k| Regexp.quote(k)}.join("|"))
REQ_RE =
/\s*(#{OP_RE})\s*/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reqs) ⇒ Requirement

Constructs a version requirement instance

str
String Array

the version requirement string (e.g. [“> 1.23”])



236
237
238
239
240
241
242
# File 'lib/rubygems/version.rb', line 236

def initialize(reqs)
  @requirements = reqs.collect do |rq|
    op, version_string = parse(rq)
    [op, Version.new(version_string)]
  end
  @version = nil   # Avoid warnings.
end

Class Method Details

.create(input) ⇒ Object

Factory method to create a Version::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.



212
213
214
215
216
217
218
219
220
221
222
# File 'lib/rubygems/version.rb', line 212

def self.create(input)
  if input.kind_of?(Requirement)
    return input
  elsif input.kind_of?(Array)
    return self.new(input)
  elsif input.respond_to? :to_str
    return self.new([input.to_str])
  else
    return self.default
  end
end

.defaultObject

A default “version requirement” can surely only be ‘> 0’.



227
228
229
# File 'lib/rubygems/version.rb', line 227

def self.default
  self.new(['> 0.0.0'])
end

Instance Method Details

#as_listObject



259
260
261
262
263
264
# File 'lib/rubygems/version.rb', line 259

def as_list
  normalize
  @requirements.collect { |req|
    "#{req[0]} #{req[1]}"
  }
end

#hashObject



315
316
317
# File 'lib/rubygems/version.rb', line 315

def hash
  to_s.hash
end

#normalizeObject



266
267
268
269
270
271
272
# File 'lib/rubygems/version.rb', line 266

def normalize
  return if not defined? @version or @version.nil?
  @requirements = [parse(@version)]
  @nums = nil
  @version = nil
  @op = nil
end

#satisfied_by?(version) ⇒ Boolean

Is the requirement satifised by version.

version
Gem::Version

the version to compare against

return
Boolean

true if this requirement is satisfied by

the version, otherwise false

Returns:

  • (Boolean)


281
282
283
284
# File 'lib/rubygems/version.rb', line 281

def satisfied_by?(version)
  normalize
  @requirements.all? { |op, rv| satisfy?(op, version, rv) }
end

#to_sObject

Overrides to check for comparator

str
String

the version requirement string

return
Boolean

true if the string format is correct, otherwise false

NOTE: Commented out because I don’t think it is used.

def correct?(str)
  /^#{REQ_RE}#{NUM_RE}$/.match(str)
end


255
256
257
# File 'lib/rubygems/version.rb', line 255

def to_s
  as_list.join(", ")
end