class Rox::Core::ValueCompareExtensions
Public Class Methods
new(parser)
click to toggle source
# File lib/rox/core/roxx/value_compare_extensions.rb, line 4 def initialize(parser) @parser = parser end
Public Instance Methods
extend()
click to toggle source
# File lib/rox/core/roxx/value_compare_extensions.rb, line 8 def extend @parser.add_operator('lt') do |_parser, stack, _context| begin op1 = stack.pop.to_f op2 = stack.pop.to_f stack.push(op1 < op2) rescue StandardError stack.push(false) end end @parser.add_operator('lte') do |_parser, stack, _context| begin op1 = stack.pop.to_f op2 = stack.pop.to_f stack.push(op1 <= op2) rescue StandardError stack.push(false) end end @parser.add_operator('gt') do |_parser, stack, _context| begin op1 = stack.pop.to_f op2 = stack.pop.to_f stack.push(op1 > op2) rescue StandardError stack.push(false) end end @parser.add_operator('gte') do |_parser, stack, _context| begin op1 = stack.pop.to_f op2 = stack.pop.to_f stack.push(op1 >= op2) rescue StandardError stack.push(false) end end @parser.add_operator('numne') do |_parser, stack, _context| begin op1 = stack.pop.to_f op2 = stack.pop.to_f stack.push(op1 != op2) rescue StandardError stack.push(false) end end @parser.add_operator('numeq') do |_parser, stack, _context| begin op1 = stack.pop.to_f op2 = stack.pop.to_f stack.push(op1 == op2) rescue StandardError stack.push(false) end end @parser.add_operator('semverNe') do |_parser, stack, _context| op1 = stack.pop op2 = stack.pop if op1.is_a?(String) && op2.is_a?(String) version1, version2 = normalize_versions(op1, op2) stack.push(Gem::Version.new(version1) != Gem::Version.new(version2)) else stack.push(false) end end @parser.add_operator('semverEq') do |_parser, stack, _context| op1 = stack.pop op2 = stack.pop if op1.is_a?(String) && op2.is_a?(String) version1, version2 = normalize_versions(op1, op2) stack.push(Gem::Version.new(version1) == Gem::Version.new(version2)) else stack.push(false) end end @parser.add_operator('semverLt') do |_parser, stack, _context| op1 = stack.pop op2 = stack.pop if op1.is_a?(String) && op2.is_a?(String) version1, version2 = normalize_versions(op1, op2) stack.push(Gem::Version.new(version1) < Gem::Version.new(version2)) else stack.push(false) end end @parser.add_operator('semverLte') do |_parser, stack, _context| op1 = stack.pop op2 = stack.pop if op1.is_a?(String) && op2.is_a?(String) version1, version2 = normalize_versions(op1, op2) stack.push(Gem::Version.new(version1) <= Gem::Version.new(version2)) else stack.push(false) end end @parser.add_operator('semverGt') do |_parser, stack, _context| op1 = stack.pop op2 = stack.pop if op1.is_a?(String) && op2.is_a?(String) version1, version2 = normalize_versions(op1, op2) stack.push(Gem::Version.new(version1) > Gem::Version.new(version2)) else stack.push(false) end end @parser.add_operator('semverGte') do |_parser, stack, _context| op1 = stack.pop op2 = stack.pop if op1.is_a?(String) && op2.is_a?(String) version1, version2 = normalize_versions(op1, op2) stack.push(Gem::Version.new(version1) >= Gem::Version.new(version2)) else stack.push(false) end end end
normalize_versions(version1, version2)
click to toggle source
# File lib/rox/core/roxx/value_compare_extensions.rb, line 136 def normalize_versions(version1, version2) # Gem::Version treats versions "1.1", "1.1.0", "1.1.0.0", etc as equal. # Fix this behavior. segment_count1 = version1.split('.').length segment_count2 = version2.split('.').length return [version1, version2] if segment_count1 == segment_count2 if segment_count1 < segment_count2 version1 += "#{'.0' * (segment_count2 - segment_count1)}.0" version2 += '.1' else version1 += '.1' version2 += "#{'.0' * (segment_count1 - segment_count2)}.0" end [version1, version2] end