30 lines
587 B
Ruby
30 lines
587 B
Ruby
|
class Logic::IncludeOperator < Logic::BinaryOperator
|
||
|
def operation = :include?
|
||
|
|
||
|
def errors(stable_ids = [])
|
||
|
result = []
|
||
|
|
||
|
if left_not_a_list?
|
||
|
result << { type: :required_list }
|
||
|
elsif right_value_not_in_list?
|
||
|
result << {
|
||
|
type: :not_included,
|
||
|
stable_id: @left.stable_id,
|
||
|
right: @right
|
||
|
}
|
||
|
end
|
||
|
|
||
|
result + @left.errors(stable_ids) + @right.errors(stable_ids)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def left_not_a_list?
|
||
|
@left.type != :enums
|
||
|
end
|
||
|
|
||
|
def right_value_not_in_list?
|
||
|
!@left.options.map(&:second).include?(@right.value)
|
||
|
end
|
||
|
end
|