Module: Moolah::ChargeClassBuilder

Defined in:
lib/moolah/charge_class_builder.rb

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Class Method Summary collapse

Class Method Details

.build(charge_attributes) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/moolah/charge_class_builder.rb', line 40

def self.build(charge_attributes)
  Class.new do
    include Anemic::Model

    charge_attributes.each do |attr|
      attribute attr.to_sym, Money, default: Money.zero
    end

    extend ClassMethods
    include InstanceMethods

    def initialize(construct_attributes = {})
      unexpected_attributes = construct_attributes.to_h.keys.reject { |k| self.class.attribute_defaults.include?(k.to_sym) }

      if unexpected_attributes.any?
        raise ArgumentError, "unexpected attributes given: #{unexpected_attributes}. Only #{self.attributes.keys} allowed"
      end

      super
    end
  end
end