module CustomFields::Types::Money::Target::ClassMethods
Public Instance Methods
apply_money_custom_field(klass, rule)
click to toggle source
Adds a Money
field
uses the money gem (github.com/RubyMoney/money)
@param [ Class ] klass The class to modify @param [ Hash ] rule It contains the name of the field and if it is required or not
if allow_currency_from_symbol is set the formatted_name_field will return the amount and the currency
# File lib/custom_fields/types/money.rb, line 55 def apply_money_custom_field(klass, rule) # the field names name = rule['name'] names = { name: name.to_sym, cents_field: "#{name}_cents".to_sym, currency_field: "#{name}_currency".to_sym, formatted_name_field: "formatted_#{name}".to_sym, allow_currency_from_symbol: "#{name}_allow_currency_from_symbol".to_sym, default_currency: "#{name}_default_currency".to_sym } # fields klass.field names[:cents_field], type: ::Integer, localize: false klass.field names[:currency_field], type: ::String, localize: false # getters and setters klass.send(:define_method, name) { _get_money(names) } klass.send(:define_method, :"#{name}=") { |value| _set_money(value, names) } klass.send(:define_method, names[:formatted_name_field]) { _get_formatted_money(names) } klass.send(:define_method, :"#{names[:formatted_name_field]}=") { |value| _set_money(value, names) } klass.send(:define_method, names[:allow_currency_from_symbol]) { rule['allow_currency_from_symbol'] } klass.send(:define_method, names[:default_currency]) { rule['default_currency'] } # validations klass.validate { _check_money(names) } if rule['required'] klass.validates_presence_of(names[:cents_field], names[:currency_field]) if rule['required'] klass.validates_numericality_of names[:cents_field], only_integer: true, if: names[:cents_field] end
money_attribute_get(instance, name)
click to toggle source
# File lib/custom_fields/types/money.rb, line 87 def money_attribute_get(instance, name) if value = instance.send(:"formatted_#{name}") { name => value, "formatted_#{name}" => value } else {} end end
money_attribute_set(instance, name, attributes)
click to toggle source
# File lib/custom_fields/types/money.rb, line 95 def money_attribute_set(instance, name, attributes) return unless attributes.key?(name) || attributes.key?("formatted_#{name}") value = attributes[name] || attributes["formatted_#{name}"] instance.send(:"formatted_#{name}=", value) end