Module: EGPRates

Defined in:
lib/egp_rates.rb,
lib/egp_rates/cae.rb,
lib/egp_rates/cbe.rb,
lib/egp_rates/cib.rb,
lib/egp_rates/egb.rb,
lib/egp_rates/nbe.rb,
lib/egp_rates/nbg.rb,
lib/egp_rates/ube.rb,
lib/egp_rates/aaib.rb,
lib/egp_rates/adib.rb,
lib/egp_rates/bank.rb,
lib/egp_rates/blom.rb,
lib/egp_rates/edbe.rb,
lib/egp_rates/midb.rb,
lib/egp_rates/alex_bank.rb,
lib/egp_rates/banque_misr.rb,
lib/egp_rates/faisal_bank.rb,
lib/egp_rates/al_baraka_bank.rb,
lib/egp_rates/banque_du_caire.rb,
lib/egp_rates/suez_canal_bank.rb,
lib/egp_rates/al_ahli_bank_of_kuwait.rb

Overview

Base Module

Defined Under Namespace

Classes: AAIB, ADIB, AlAhliBankOfKuwait, AlBarakaBank, AlexBank, Bank, BanqueDuCaire, BanqueMisr, Blom, CAE, CBE, CIB, EDBE, EGB, FaisalBank, MIDB, NBE, NBG, ResponseError, SuezCanalBank, UBE

Class Method Summary collapse

Class Method Details

.exchange_rate(sym = :USD, cache_result = true) ⇒ Hash

Return the exchange rate of a single currency from different banks

Parameters:

  • sym, (Symbol)

    3 charachter ISO symbol of the currency

  • cache_result, (Boolean)

    a boolean to indicate whether or not the result of the exchange_rates call be cached

Returns:

  • (Hash)

    of the exchange rates in different banks for a specific currency



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/egp_rates.rb', line 72

def self.exchange_rate(sym = :USD, cache_result = true)
  @exchange_rates ||= exchange_rates if cache_result
  @exchange_rates   = exchange_rates unless cache_result

  @exchange_rates.each_with_object({}) do |rates, result|
    begin
      result[rates[0]] = {
        sell: rates[1][:sell].fetch(sym.upcase, 'N/A'),
        buy:  rates[1][:buy].fetch(sym.upcase,  'N/A')
      }
    rescue TypeError
      result[rates[0]] = rates[1]
    end
  end
end

.exchange_ratesHash

Threaded execution to get the exchange rates from different banks

Returns:

  • (Hash)

    of the exchange rates of different banks {

    BANK: {
      sell: { SYM: rate, SYM: rate },
      buy:  { SYM: rate, SYM: rate }
    },
    BANK: {
      sell: { SYM: rate, SYM: rate },
      buy:  { SYM: rate, SYM: rate }
    },
    

    }



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/egp_rates.rb', line 48

def self.exchange_rates
  semaphore = Mutex.new
  # Fetch all the constants (Banks) implemented
  (constants - [:Bank, :ResponseError]).each_with_object({}) do |klass, rates|
    Thread.new do
      bank = EGPRates.const_get(klass).new

      semaphore.synchronize do
        begin
          rates[klass] = bank.exchange_rates
        rescue ResponseError
          rates[klass] = 'Failed to get exchange rates'
        end
      end
    end.join
  end
end