class Money::Bank::Base

Money::Bank::Base is the basic interface for creating a money exchange object, also called Bank.

A Bank is responsible for storing exchange rates, take a Money object as input and returns the corresponding Money object converted into an other currency.

This class exists for aiding in the creating of other classes to exchange money between different currencies. When creating a subclass you will need to implement the following methods to exchange money between currencies:

See Money::Bank::VariableExchange for a real example.

Also, you can extend Money::Bank::VariableExchange instead of Money::Bank::Base if your bank implementation needs to store rates internally.

@abstract Subclass and override #exchange_with to implement a custom

+Money::Bank+ class. You can also override +#setup+ instead of
+#initialize+ to setup initial variables, etc.

Attributes

rounding_method[R]

The rounding method to use when exchanging rates.

@return [Proc]

Public Class Methods

instance() click to toggle source

Returns the singleton instance of the Base bank.

@return [Money::Bank::Base]

# File lib/money/bank/base.rb, line 45
def self.instance
  @singleton ||= self.new
end
new(&block) click to toggle source

Initializes a new Money::Bank::Base object. An optional block can be passed to dictate the rounding method that #exchange_with can use.

@yield [n] Optional block to use when rounding after exchanging one

currency for another.

@yieldparam [Float] n The resulting float after exchanging one currency

for another.

@yieldreturn [Integer]

@return [Money::Bank::Base]

@example

Money::Bank::Base.new #=> #<Money::Bank::Base @rounding_method=nil>
Money::Bank::Base.new {|n|
  n.floor
} #=> #<Money::Bank::Base @round_method=#<Proc>>
# File lib/money/bank/base.rb, line 70
def initialize(&block)
  @rounding_method = block
  setup
end

Public Instance Methods

exchange_with(from, to_currency, &block) click to toggle source

Exchanges the given Money object to a new Money object in to_currency.

@abstract Subclass and override #exchange_with to implement a custom

+Money::Bank+ class.

@raise NotImplementedError

@param [Money] from The Money object to exchange from. @param [Money::Currency, String, Symbol] to_currency The currency

string or object to exchange to.

@yield [n] Optional block to use to round the result after making

the exchange.

@yieldparam [Float] n The result after exchanging from one currency to

the other.

@yieldreturn [Integer]

@return [Money]

# File lib/money/bank/base.rb, line 103
def exchange_with(from, to_currency, &block)
  raise NotImplementedError, "#exchange_with must be implemented"
end
same_currency?(currency1, currency2) click to toggle source

Given two currency strings or object, checks whether they're both the same currency. Return true if the currencies are the same, false otherwise.

@param [Money::Currency, String, Symbol] currency1 The first currency

to compare.

@param [Money::Currency, String, Symbol] currency2 The second currency

to compare.

@return [Boolean]

@example

same_currency?("usd", "USD")                #=> true
same_currency?("usd", "EUR")                #=> false
same_currency?("usd", Currency.new("USD"))   #=> true
same_currency?("usd", "USD")                #=> true
# File lib/money/bank/base.rb, line 123
def same_currency?(currency1, currency2)
  Currency.wrap(currency1) == Currency.wrap(currency2)
end
setup() click to toggle source

Called after initialize. Subclasses can use this method to setup variables, etc that they normally would in #initialize.

@abstract Subclass and override #setup to implement a custom

+Money::Bank+ class.

@return [self]

# File lib/money/bank/base.rb, line 82
def setup
end