demarches-normaliennes/app/models/logic/n_ary_operator.rb
simon lehericey b715d1f495 Revert "Add id to term"
This reverts commit 87385d03fd.
2022-07-06 09:44:54 +02:00

43 lines
1 KiB
Ruby

class Logic::NAryOperator < Logic::Term
attr_reader :operands
def initialize(operands)
@operands = operands
end
def to_h
{
"term" => self.class.name,
"operands" => @operands.map(&:to_h)
}
end
def self.from_h(h)
self.new(h['operands'].map { |operand_h| Logic.from_h(operand_h) })
end
def errors(stable_ids = [])
errors = []
if @operands.empty?
errors += ["opérateur '#{operator_name}' vide"]
end
not_booleans = @operands.filter { |operand| operand.type != :boolean }
if not_booleans.present?
errors += ["'#{operator_name}' ne contient pas que des booléens : #{not_booleans.map(&:to_s).join(', ')}"]
end
errors + @operands.flat_map { |operand| operand.errors(stable_ids) }
end
def type = :boolean
def ==(other)
self.class == other.class &&
@operands.count == other.operands.count &&
@operands.all? do |operand|
@operands.count { |o| o == operand } == other.operands.count { |o| o == operand }
end
end
end