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

32 lines
726 B
Ruby
Raw Normal View History

# frozen_string_literal: true
class Logic::IncludeOperator < Logic::BinaryOperator
def operation = :include?
2022-09-26 21:11:43 +02:00
def errors(type_de_champs = [])
result = []
2022-09-26 21:07:43 +02:00
if left_not_a_list?(type_de_champs)
result << { type: :required_list }
2022-09-26 21:19:00 +02:00
elsif right_value_not_in_list?(type_de_champs)
result << {
type: :not_included,
stable_id: @left.stable_id,
right: @right
}
end
2022-09-26 21:11:43 +02:00
result + @left.errors(type_de_champs) + @right.errors(type_de_champs)
end
private
2022-09-26 21:07:43 +02:00
def left_not_a_list?(type_de_champs)
@left.type(type_de_champs) != :enums
end
2022-09-26 21:19:00 +02:00
def right_value_not_in_list?(type_de_champs)
!@left.options(type_de_champs).map(&:second).include?(@right.value)
end
end