class SemanticRange::Comparator

Attributes

operator[R]
semver[R]
value[R]

Public Class Methods

new(comp, loose) click to toggle source
# File lib/semantic_range/comparator.rb, line 4
def initialize(comp, loose)
  comp = comp.value if comp.is_a?(Comparator)
  @loose = loose

  parse(comp)

  @value = @semver == ANY ? '' : @operator + @semver.version
end

Public Instance Methods

intersects(comp, loose: false, platform: nil)

Support for older non-inquisitive method versions

Alias for: intersects?
intersects?(comp, loose: false, platform: nil) click to toggle source
# File lib/semantic_range/comparator.rb, line 33
def intersects?(comp, loose: false, platform: nil)
  comp = Comparator.new(comp, loose)

  if @operator == ''
    range_b = Range.new(comp.value, loose: loose, platform: platform)
    SemanticRange.satisfies?(@value, range_b, loose: loose, platform: platform)
  elsif comp.operator == ''
    range_a = Range.new(@value, loose: loose, platform: platform)
    SemanticRange.satisfies?(comp.semver, range_a, loose: loose, platform: platform)
  else
    same_direction_increasing      = (@operator == '>=' || @operator == '>') && (comp.operator == '>=' || comp.operator == '>')
    same_direction_decreasing      = (@operator == '<=' || @operator == '<') && (comp.operator == '<=' || comp.operator == '<')
    same_version                   = @semver.raw == comp.semver.raw
    different_directions_inclusive = (@operator == '>=' || @operator == '<=') && (comp.operator == '>=' || comp.operator == '<=')
    opposite_directions_lte        = SemanticRange.cmp(@semver, '<', comp.semver, loose: loose) &&
        ((@operator == '>=' || @operator == '>') && (comp.operator == '<=' || comp.operator == '<'))
    opposite_directions_gte        = SemanticRange.cmp(@semver, '>', comp.semver, loose: loose) &&
        ((@operator == '<=' || @operator == '<') && (comp.operator == '>=' || comp.operator == '>'))

    same_direction_increasing || same_direction_decreasing || (same_version && different_directions_inclusive) ||
        opposite_directions_lte || opposite_directions_gte
  end
end
Also aliased as: intersects
parse(comp) click to toggle source
# File lib/semantic_range/comparator.rb, line 23
def parse(comp)
  m = comp.match(@loose ? COMPARATORLOOSE : COMPARATOR)
  raise InvalidComparator.new(comp) unless m

  @operator = m[1]
  @operator = '' if @operator == '='

  @semver = !m[2] ? ANY : Version.new(m[2], loose: @loose)
end
satisfies_range(range, loose: false, platform: nil)
Alias for: satisfies_range?
satisfies_range?(range, loose: false, platform: nil) click to toggle source
# File lib/semantic_range/comparator.rb, line 57
def satisfies_range?(range, loose: false, platform: nil)
  range = Range.new(range, loose: loose, platform: platform)

  range.set.any? do |comparators|
    comparators.all? do |comparator|
      intersects?(comparator, loose: loose, platform: platform)
    end
  end
end
Also aliased as: satisfies_range
test(version) click to toggle source
# File lib/semantic_range/comparator.rb, line 17
def test(version)
  return true if @semver == ANY
  version = Version.new(version, @loose) if version.is_a?(String)
  SemanticRange.cmp(version, @operator, @semver, loose: @loose)
end
to_s() click to toggle source
# File lib/semantic_range/comparator.rb, line 13
def to_s
  @value
end