Class: WhittakerTech::Midas::Coin::Converter::BankProvider

Inherits:
Object
  • Object
show all
Defined in:
app/models/whittaker_tech/midas/coin/converter/bank_provider.rb

Overview

Default currency-conversion provider: wraps Money.default_bank (or any explicit Money::Bank::* instance) behind the adapter interface WhittakerTech::Midas::Coin::Converter expects.

Adapter interface (duck-typed):

#exchange(money, currency_code) -> Money
#name -> String                             (recorded as Exchange#source)
#exchange_at(money, currency_code, at:) -> Money   (optional; only
needed to support a non-default at:. This provider does not define
it — the default Money::Bank::VariableExchange has no historical
capability at all.)

Since:

  • 0.3.0

Instance Method Summary collapse

Constructor Details

#initialize(bank = Money.default_bank) ⇒ BankProvider

Returns a new instance of BankProvider.

Since:

  • 0.3.0



17
18
19
# File 'app/models/whittaker_tech/midas/coin/converter/bank_provider.rb', line 17

def initialize(bank = Money.default_bank)
  @bank = bank
end

Instance Method Details

#exchange(money, currency_code) ⇒ Money

Parameters:

  • money (Money)

    the value to convert (native currency)

  • currency_code (String)

    target ISO 4217 code

Returns:

  • (Money)

Since:

  • 0.3.0



24
25
26
27
28
29
# File 'app/models/whittaker_tech/midas/coin/converter/bank_provider.rb', line 24

def exchange(money, currency_code)
  # NOTE: deliberately NOT `money.exchange_to(currency_code)` — that
  # method hardcodes Money.default_bank internally (money gem 6.x) and
  # would silently ignore a `using:` override. Call the bank directly.
  @bank.exchange_with(money, Money::Currency.new(currency_code))
end

#nameString

Returns recorded on Exchange#source.

Returns:

  • (String)

    recorded on Exchange#source

Since:

  • 0.3.0



32
33
34
# File 'app/models/whittaker_tech/midas/coin/converter/bank_provider.rb', line 32

def name
  "money:#{@bank.class.name}"
end