Module: Xrechnung::MemberContainer::ClassMethods

Defined in:
lib/xrechnung/member_container.rb

Instance Method Summary collapse

Instance Method Details

#member(member_name, **kwargs) ⇒ Object

Parameters:

  • member_name (String)
  • type (Array<Class>, Class)
  • default (Object)
  • optional (TrueClass, FalseClass)

    When true, omits tag rather than rendering an empty tag on nil

  • transform_value (Proc)

    A Proc which is called with the input value to perform type conversion.



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

#membersObject



30
31
32
# File 'lib/xrechnung/member_container.rb', line 30

def members
  @members
end