demarches-normaliennes/app/models/logic/binary_operator.rb

49 lines
955 B
Ruby
Raw Normal View History

2022-06-09 12:14:08 +02:00
class Logic::BinaryOperator < Logic::Term
attr_reader :left, :right
2022-07-05 14:37:53 +02:00
def initialize(left, right, id = nil)
2022-06-09 12:14:08 +02:00
@left, @right = left, right
2022-07-05 14:37:53 +02:00
super(id)
2022-06-09 12:14:08 +02:00
end
def to_h
{
"op" => self.class.name,
"left" => @left.to_h,
2022-07-05 14:37:53 +02:00
"right" => @right.to_h,
"id" => @id
2022-06-09 12:14:08 +02:00
}
end
def self.from_h(h)
2022-07-05 14:37:53 +02:00
self.new(Logic.from_h(h['left']), Logic.from_h(h['right']), h['id'])
2022-06-09 12:14:08 +02:00
end
def errors(stable_ids = [])
errors = []
if @left.type != :number || @right.type != :number
errors += ["les types sont incompatibles : #{self}"]
end
errors + @left.errors(stable_ids) + @right.errors(stable_ids)
end
def type = :boolean
def compute(champs = [])
l = @left.compute(champs)
r = @right.compute(champs)
l.send(operation, r)
end
def to_s = "(#{@left} #{operation} #{@right})"
def ==(other)
self.class == other.class &&
@left == other.left &&
@right == other.right
end
end