module Sequel::Plugins::MoneyAccessors::ClassMethods
Public Instance Methods
money_accessor(amount_column, currency_column)
click to toggle source
Setup money accessor
@param amount_column [Symbol] amount column @param currency_column [Symbol] currency column @example
class Order < Sequel::Model money_accessor :amount, :currency end order = Order.create(amount: 200, currency: "EUR") order.amount # => #<Money fractional:20000.0 currency:RUB> order.currency # => "EUR"
# File lib/sequel/plugins/money_accessors.rb, line 24 def money_accessor(amount_column, currency_column) money_getter(amount_column, currency_column) money_setter(amount_column, currency_column) end
money_getter(amount_column, currency_column)
click to toggle source
Calls superclass method
# File lib/sequel/plugins/money_accessors.rb, line 29 def money_getter(amount_column, currency_column) include_accessors_module! @_money_accessors_module.module_eval do define_method(amount_column) do amount, currency = super(), send(currency_column) return unless amount && currency Money.from_amount(amount.to_d, currency) end end end
money_setter(amount_column, currency_column)
click to toggle source
Calls superclass method
# File lib/sequel/plugins/money_accessors.rb, line 40 def money_setter(amount_column, currency_column) include_accessors_module! @_money_accessors_module.module_eval do define_method("#{amount_column}=") do |value| case value when Money amount = value.to_d currency = value.currency.to_s when nil amount = currency = nil else raise MoneyClassRequired, "#{amount_column} value must be either Money instance or nil" end super(amount) send("#{currency_column}=", currency) end end end
Private Instance Methods
include_accessors_module!()
click to toggle source
# File lib/sequel/plugins/money_accessors.rb, line 62 def include_accessors_module! return if defined?(@_money_accessors_module) @_money_accessors_module = Module.new prepend @_money_accessors_module end