Sha256: 2da9f158436a759de61b18069ab56ed388aab787ce1a0d2a03574c1fe2df5668
Contents?: true
Size: 1.22 KB
Versions: 2
Compression:
Stored size: 1.22 KB
Contents
require 'thread' class Currency class ExchangeBank def self.instance @@singleton end def initialize @rates = {} @mutex = Mutex.new end def add_rate(from, to, rate) @mutex.synchronize do @rates["#{from}_TO_#{to}".upcase] = rate end end def get_rate(from, to) @mutex.synchronize do @rates["#{from}_TO_#{to}".upcase] end end def same_currency?(currency1, currency2) currency1.upcase == currency2.upcase end def exchange(cents, from_currency, to_currency) rate = get_rate(from_currency, to_currency) if rate (cents * rate).floor else from_currency = Currency.from_code(from_currency) to_currency = Currency.from_code(to_currency) if from_currency && to_currency && from_currency.exchange_rate && to_currency.exchange_rate && (from_currency.exchange_currency == to_currency.exchange_currency) ((cents * from_currency.exchange_rate) / to_currency.exchange_rate).floor else raise Money::UnknownRate, "No conversion rate known for '#{from_currency}' -> '#{to_currency}'" end end end @@singleton = ExchangeBank.new end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
currencies-0.3.0 | lib/currencies/exchange_bank.rb |
currencies-0.2.1 | lib/currencies/exchange_bank.rb |