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
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/axn/core/contract_for_subfields.rb', line 33
def _expects_subfields(
*fields,
on:,
readers: true,
allow_blank: false,
allow_nil: false,
optional: false,
default: nil,
preprocess: nil,
sensitive: false,
metadata: {},
**validations
)
root = on.to_s.split(".").first.to_sym
unless internal_field_configs.map(&:field).include?(root) || subfield_configs.map(&:field).include?(root)
raise ArgumentError,
"expects called with `on: #{on}`, but no such method exists (are you sure you've declared `expects :#{root}`?)"
end
if on.to_s.include?(".") && (!default.nil? || !preprocess.nil? || sensitive)
raise ArgumentError,
"`default:`/`preprocess:`/`sensitive:` are not supported with a nested (dotted) `on:` (got on: #{on.inspect})"
end
_parse_subfield_configs(*fields, on:, readers:, allow_blank:, allow_nil:, optional:, preprocess:, sensitive:, default:,
metadata:, **validations).tap do |configs|
duplicated = subfield_configs.map(&:field) & configs.map(&:field)
raise Axn::DuplicateFieldError, "Duplicate field(s) declared: #{duplicated.join(', ')}" if duplicated.any?
self.subfield_configs += configs
end
end
|