Class: RSMP::SXL::Processing::VersionRequirement

Inherits:
Object
  • Object
show all
Defined in:
lib/rsmp/sxl/processing/version_requirement.rb

Overview

Parses the version requirement syntax defined by RSMP Core.

Constant Summary collapse

EXACT_VERSION =
/\A(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)\z/
PARTIAL_VERSION =
/\A(0|[1-9]\d*)\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?\z/
CLAUSE =
/\A(~|>=|<=|>|<)?\s*(\d+(?:\.\d+){1,2})\z/

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ VersionRequirement

Returns a new instance of VersionRequirement.



23
24
25
26
# File 'lib/rsmp/sxl/processing/version_requirement.rb', line 23

def initialize(source)
  @source = source.to_s
  @predicates = parse(@source)
end

Instance Attribute Details

#sourceObject (readonly)

Returns the value of attribute source.



12
13
14
# File 'lib/rsmp/sxl/processing/version_requirement.rb', line 12

def source
  @source
end

Class Method Details

.exact_version(value, label: 'version') ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/rsmp/sxl/processing/version_requirement.rb', line 14

def self.exact_version(value, label: 'version')
  string = value.to_s
  unless EXACT_VERSION.match?(string)
    raise Error, "Invalid #{label} #{value.inspect}; expected MAJOR.MINOR.PATCH"
  end

  Gem::Version.new(string)
end

Instance Method Details

#satisfied_by?(version) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
# File 'lib/rsmp/sxl/processing/version_requirement.rb', line 28

def satisfied_by?(version)
  version = self.class.exact_version(version) unless version.is_a?(Gem::Version)
  @predicates.all? { |predicate| predicate.call(version) }
end