Sha256: 99279d67bcdf5f079170372b7785cdbf9910ead88ab4004427bece568743e0d0
Contents?: true
Size: 897 Bytes
Versions: 16
Compression:
Stored size: 897 Bytes
Contents
module MoneyAccessor def self.included(base) base.extend(ClassMethods) end module ClassMethods def money_accessor(*columns) variable_get = self <= Struct ? :[] : :instance_variable_get variable_set = self <= Struct ? :[]= : :instance_variable_set Array(columns).flatten.each do |name| variable_name = self <= Struct ? name : "@#{name}" define_method(name) do value = public_send(variable_get, variable_name) value.blank? ? nil : Money.new(value) end define_method("#{name}=") do |value| if value.blank? || !value.respond_to?(:to_money) public_send(variable_set, variable_name, nil) nil else money = value.to_money public_send(variable_set, variable_name, money.value) money end end end end end end
Version data entries
16 entries across 16 versions & 1 rubygems