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
|
# File 'lib/xml_laborabrechnungsdaten/member_container.rb', line 36
def member(member_name, type: nil, default: nil, optional: false, transform_value: nil)
attr_reader member_name
setter_name = :"#{member_name}="
@members[member_name] = { optional: optional, setter_name: setter_name }
if !default.nil?
after_initialize do
value =
if default.respond_to?(:call)
default.call
else
begin
default.dup
rescue TypeError
default
end
end
send(setter_name, value)
end
end
define_method setter_name do |in_value|
in_value = transform_value.call(in_value) if transform_value
if type && !in_value.nil? && Array(type).none? { |t| in_value.is_a?(t) }
raise ArgumentError, "expected #{type} for :#{member_name}, got: #{in_value.class}"
end
instance_variable_set :"@#{member_name}", in_value
end
end
|