Class: MilkTea::PackageVersionReq

Inherits:
Object
  • Object
show all
Defined in:
lib/milk_tea/packages/version.rb

Defined Under Namespace

Classes: Constraint

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(constraints) ⇒ PackageVersionReq

Returns a new instance of PackageVersionReq.



143
144
145
# File 'lib/milk_tea/packages/version.rb', line 143

def initialize(constraints)
  @constraints = constraints.freeze
end

Instance Attribute Details

#constraintsObject (readonly)

Returns the value of attribute constraints.



79
80
81
# File 'lib/milk_tea/packages/version.rb', line 79

def constraints
  @constraints
end

Class Method Details

.parse(value, label: "package version requirement") ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/milk_tea/packages/version.rb', line 81

def self.parse(value, label: "package version requirement")
  text = value.to_s.strip
  raise PackageVersionError, "#{label} cannot be empty" if text.empty?

  segments = text.split(",", -1).map(&:strip)
  if segments.empty? || segments.any?(&:empty?)
    raise PackageVersionError, "#{label} #{text.inspect} contains an empty constraint"
  end

  constraints = segments.flat_map do |segment|
    parse_segment(segment, label:)
  end

  new(constraints)
end

Instance Method Details

#exact?Boolean

Returns:

  • (Boolean)


147
148
149
# File 'lib/milk_tea/packages/version.rb', line 147

def exact?
  constraints.length == 1 && constraints.first.operator == :eq
end

#exact_versionObject



151
152
153
# File 'lib/milk_tea/packages/version.rb', line 151

def exact_version
  constraints.first.version if exact?
end

#matches?(version) ⇒ Boolean

Returns:

  • (Boolean)


155
156
157
158
# File 'lib/milk_tea/packages/version.rb', line 155

def matches?(version)
  candidate = PackageVersion.parse(version)
  constraints.all? { |constraint| constraint.matches?(candidate) }
end

#to_sObject



160
161
162
# File 'lib/milk_tea/packages/version.rb', line 160

def to_s
  constraints.map(&:to_s).join(", ")
end