39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/xrechnung/member_container.rb', line 39
def member(member_name, **kwargs)
attr_reader member_name
kwargs[:default].freeze
setter_name = :"#{member_name}="
member = Member.new(**kwargs)
@members[member_name] = member
define_method setter_name do |in_value|
in_value = member.transform_value.call(in_value) if member.transform_value
if member.type && !in_value.nil? && Array(member.type).none? { |t| in_value.is_a?(t) }
raise ArgumentError, "expected #{member.type} for :#{member_name}, got: #{in_value.class}"
end
instance_variable_set :"@#{member_name}", in_value
end
end
|