Class: Money::Bank::XeCurrency

Inherits:
VariableExchange
  • Object
show all
Defined in:
lib/money/bank/xe_currency.rb

Defined Under Namespace

Classes: XeCurrencyFetchError

Constant Summary collapse

SERVICE_HOST =
"www.xe.com"
SERVICE_PATH =
"/currencyconverter/convert"

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeXeCurrency

Returns a new instance of XeCurrency.



46
47
48
49
# File 'lib/money/bank/xe_currency.rb', line 46

def initialize(*)
  super
  @store.extend Money::RatesStore::RateRemovalSupport
end

Class Attribute Details

.rates_expirationTime (readonly)

Returns the time when the rates expire.

Returns:

  • (Time)

    Returns the time when the rates expire.



26
27
28
# File 'lib/money/bank/xe_currency.rb', line 26

def rates_expiration
  @rates_expiration
end

.ttl_in_secondsInteger

Returns the Time To Live (TTL) in seconds.

Returns:

  • (Integer)

    Returns the Time To Live (TTL) in seconds.



23
24
25
# File 'lib/money/bank/xe_currency.rb', line 23

def ttl_in_seconds
  @ttl_in_seconds
end

Instance Attribute Details

#ratesHash (readonly)

Returns Stores the currently known rates.

Returns:

  • (Hash)

    Stores the currently known rates.



18
19
20
# File 'lib/money/bank/xe_currency.rb', line 18

def rates
  @rates
end

Class Method Details

.refresh_rates_expiration!Time

Set the rates expiration TTL seconds from the current time.

Returns:

  • (Time)

    The next expiration.



41
42
43
# File 'lib/money/bank/xe_currency.rb', line 41

def refresh_rates_expiration!
  @rates_expiration = Time.now + ttl_in_seconds
end

Instance Method Details

#expire_ratesBoolean

Flushes all the rates if they are expired.

Returns:

  • (Boolean)


104
105
106
107
108
109
110
111
112
# File 'lib/money/bank/xe_currency.rb', line 104

def expire_rates
  if self.class.ttl_in_seconds && self.class.rates_expiration <= Time.now
    flush_rates
    self.class.refresh_rates_expiration!
    true
  else
    false
  end
end

#flush_rate(from, to) ⇒ Float

Clears the specified rate stored in @rates.

Examples:

@bank = XeCurrency.new    #=> <Money::Bank::XeCurrency...>
@bank.get_rate(:USD, :EUR)    #=> 0.776337241
@bank.flush_rate(:USD, :EUR)  #=> 0.776337241

Parameters:

  • from (String, Symbol, Currency)

    Currency to convert from (used for key into @rates).

  • to (String, Symbol, Currency)

    Currency to convert to (used for key into @rates).

Returns:

  • (Float)

    The flushed rate.



78
79
80
# File 'lib/money/bank/xe_currency.rb', line 78

def flush_rate(from, to)
  store.remove_rate(from, to)
end

#flush_ratesHash

Clears all rates stored in @rates

Examples:

@bank = XeCurrency.new  #=> <Money::Bank::XeCurrency...>
@bank.get_rate(:USD, :EUR)  #=> 0.776337241
@bank.flush_rates           #=> {}

Returns:

  • (Hash)

    The empty @rates Hash.



60
61
62
# File 'lib/money/bank/xe_currency.rb', line 60

def flush_rates
  store.clear_rates
end

#get_rate(from, to) ⇒ Float

Returns the requested rate.

It also flushes all the rates when and if they are expired.

Examples:

@bank = XeCurrency.new  #=> <Money::Bank::XeCurrency...>
@bank.get_rate(:USD, :EUR)  #=> 0.776337241

Parameters:

  • from (String, Symbol, Currency)

    Currency to convert from

  • to (String, Symbol, Currency)

    Currency to convert to

Returns:

  • (Float)

    The requested rate.



95
96
97
98
# File 'lib/money/bank/xe_currency.rb', line 95

def get_rate(from, to)
  expire_rates
  store.get_rate(from, to) || store.add_rate(from, to, fetch_rate(from, to))
end