24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/explicit/type/one_of.rb', line 24
def validate(value)
errors = []
@subtypes.each do |subtype|
case subtype.validate(value)
in [:ok, validated_value]
return [ :ok, validated_value ]
in [:error, err]
errors << err
end
end
if (err = guess_error_for_intended_subtype_via_matching_literal(value:, errors:))
return [ :error, err ]
end
if (err = guess_error_for_intended_subtype_via_matching_keys(value:, errors:))
return [ :error, err ]
end
separator =
if ::I18n.exists?("explicit.errors.one_of_separator")
::I18n.t("explicit.errors.one_of_separator")
else
::I18n.t("explicit.errors.one_of_separator", locale: :en)
end
error =
if @subtypes_are_records
errors.map { ::JSON.pretty_generate(_1) }.join("\n\n#{separator}\n\n")
else
errors.join(" #{separator} ")
end
[ :error, error ]
end
|