module Xrechnung::MemberContainer::ClassMethods
Public Instance Methods
after_initialize(&block)
click to toggle source
# File lib/xrechnung/member_container.rb, line 58 def after_initialize(&block) @after_initialize_blocks ||= [] if block @after_initialize_blocks << block else @after_initialize_blocks end end
member(member_name, type: nil, default: nil, optional: false, transform_value: nil)
click to toggle source
@param [String] member_name @param [Array<Class>, Class] type @param [Object] default @param [TrueClass, FalseClass] optional When true, omits tag rather than rendering an empty tag on nil @param [Proc] transform_value A Proc which is called with the input value to perform type conversion.
# File lib/xrechnung/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 after_initialize do send(setter_name, default) 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