class Copper::Comparison
Public Instance Methods
value(vars = {})
click to toggle source
# File lib/copper/comparison.rb, line 4 def value(vars = {}) lhs = elements[0].value(vars) comp_op = elements[1].value(vars) rhs = elements[2].value(vars) return true if rhs.nil? && lhs.nil? return false if rhs.nil? || lhs.nil? puts "[DEBUG] Comparing #{lhs} (#{lhs.class.name}) #{comp_op} #{rhs} (#{rhs.class.name})" if $debug begin case comp_op when '=' return equality(lhs, rhs) when '==' return equality(lhs, rhs) when '>' return lhs > rhs when '<' return lhs < rhs when '<=' return lhs <= rhs when '>=' return lhs > rhs when '!=' return lhs != rhs when 'in' # this depends on the types rhs_class = ::Copper::DataTypes::DataType.get_class(rhs.class.name) rhs_obj = rhs_class.new(rhs) if rhs_obj.respond_to?(:in) return rhs_obj.in(lhs) else raise ::Copper::RuntimeError, "in is not a valid comparision on #{rhs_class.name}" end when '->' # this is a special case to pipe lhs to console console(lhs) end rescue NoMethodError => exc raise ParseError, "comparison error: #{exc.message}" end end
Private Instance Methods
equality(lhs, rhs)
click to toggle source
# File lib/copper/comparison.rb, line 50 def equality(lhs, rhs) if lhs.is_a?(::Array) && rhs.is_a?(::Array) return lhs.sort == rhs.sort else return lhs == rhs end rescue ArgumentError => exc raise ParseError, "equality comparison failed: #{exc.message}" end