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
57
58
59
60
61
# 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

  return unless member.is_private

  private member_name
  private setter_name
end

#membersObject



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

def members
  @members
end