daily_exchange_rates_bank 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 909a96239ebb6c891328ac91ded885fb038e200c86c918369885c60d131b53fd
4
- data.tar.gz: 37f5ccc9e31c4b59d693e87b58f979c59a02fc1cc8a2c13d40354f58811035fe
3
+ metadata.gz: a3fbfb1ca303a121bcb22b5a7d1c7302d65ad17ea36fc44660928cee4ddda9ae
4
+ data.tar.gz: 88f957f73a6ab21624a82ec9457b0bb18131f39fbe506158593fac7ec6aee680
5
5
  SHA512:
6
- metadata.gz: 89c564cb715857c6b327a0a8bdcc7e749de45c640f7e4131cfa1cc732af345fdac3adcbf89c6e82c1f9b53654914276e840a6cd6d3cb205741b353cc8b5b3ee6
7
- data.tar.gz: 6d895afe49d209419090d09ff220c54e4343c4cf59f095b772178dfba3723333b681f5c3ebcca95504596938e1ae601fdd7ecd747d83b9f4873e2ffd7096c936
6
+ metadata.gz: f8846f5ce45adf7158b54d02e84af708a0e569085e29c15e80bd4064166f22d62feff17a63005ea3ed13a9469bb64372fa06e2b1dafab00cb6451303210f6d2c
7
+ data.tar.gz: b3163e9a220b8ae7a232e47462238a57cdb3c1fce5af2d5f4b44f3cd878e9fa581bc6c880d44085d2a86ae23dc4cf1e7e1dfa75198265a26f9213885476131bb
@@ -9,14 +9,14 @@ class Money
9
9
  INDEX_DATE_SEPARATOR = '_ON_'
10
10
 
11
11
  def add_rate(currency_iso_from, currency_iso_to, rate, date = nil)
12
- transaction do
13
- index[rate_key_for(currency_iso_from, currency_iso_to, date)] = rate
12
+ guard.synchronize do
13
+ rates[rate_key_for(currency_iso_from, currency_iso_to, date)] = rate
14
14
  end
15
15
  end
16
16
 
17
17
  def get_rate(currency_iso_from, currency_iso_to, date = nil)
18
- transaction do
19
- index[rate_key_for(currency_iso_from, currency_iso_to, date)]
18
+ guard.synchronize do
19
+ rates[rate_key_for(currency_iso_from, currency_iso_to, date)]
20
20
  end
21
21
  end
22
22
 
@@ -32,17 +32,17 @@ class Money
32
32
  # store.each_rate do |iso_from, iso_to, rate, date|
33
33
  # puts [iso_from, iso_to, rate, date].join
34
34
  # end
35
- def each_rate(&block)
36
- enum = Enumerator.new do |yielder|
37
- index.each do |key, rate|
38
- iso_from, iso_to = key.split(Memory::INDEX_KEY_SEPARATOR)
35
+ def each_rate(&_block)
36
+ return to_enum(:each_rate) unless block_given?
37
+
38
+ guard.synchronize do
39
+ rates.each do |key, rate|
40
+ iso_from, iso_to = key.split(INDEX_KEY_SEPARATOR)
39
41
  iso_to, date = iso_to.split(INDEX_DATE_SEPARATOR)
40
42
  date = Date.parse(date) if date
41
- yielder.yield iso_from, iso_to, rate, date
43
+ yield iso_from, iso_to, rate, date
42
44
  end
43
45
  end
44
-
45
- block_given? ? enum.each(&block) : enum
46
46
  end
47
47
 
48
48
  private
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daily_exchange_rates_bank
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Aschenbrenner
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '6.13'
19
+ version: '6.14'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 6.14.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '6.13'
29
+ version: '6.14'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 6.14.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: pry-byebug
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -105,9 +111,7 @@ files:
105
111
  - LICENSE
106
112
  - README.md
107
113
  - lib/daily_exchange_rates_bank.rb
108
- - lib/daily_exchange_rates_bank.rb~
109
114
  - lib/daily_exchange_rates_bank/exchange_rates_api_client.rb
110
- - lib/daily_exchange_rates_bank/exchange_rates_api_client.rb~
111
115
  - lib/money/rates_store/store_with_date_support.rb
112
116
  homepage: https://github.com/gapfish/daily_exchange_rates_bank
113
117
  licenses:
@@ -128,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
132
  - !ruby/object:Gem::Version
129
133
  version: '0'
130
134
  requirements: []
131
- rubygems_version: 3.0.3
135
+ rubygems_version: 3.1.4
132
136
  signing_key:
133
137
  specification_version: 4
134
138
  summary: A bank for the money gem that determines exchange rates for any desired date.
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'money'
4
- require 'money/rates_store/store_with_date_support'
5
- require 'daily_exchange_rates_bank/exchange_rates_api_client'
6
-
7
- # Class for aiding in exchanging money between different currencies.
8
- class DailyExchangeRatesBank < Money::Bank::VariableExchange
9
- SERIALIZER_DATE_SEPARATOR = '_ON_'
10
-
11
- def initialize(store = Money::RatesStore::StoreWithDateSupport.new, &block)
12
- super(store, &block)
13
- end
14
-
15
- def get_rate(from, to, date = nil)
16
- store.get_rate(::Money::Currency.wrap(from).iso_code,
17
- ::Money::Currency.wrap(to).iso_code,
18
- date)
19
- end
20
-
21
- def set_rate(from, to, rate, date = nil)
22
- store.add_rate(::Money::Currency.wrap(from).iso_code,
23
- ::Money::Currency.wrap(to).iso_code,
24
- rate,
25
- date)
26
- end
27
-
28
- def rates
29
- store.each_rate.each_with_object({}) do |(from, to, rate, date), hash|
30
- key = [from, to].join(SERIALIZER_SEPARATOR)
31
- key = [key, date.to_s].join(SERIALIZER_DATE_SEPARATOR) if date
32
- hash[key] = rate
33
- end
34
- end
35
-
36
- def exchange(cents, from_currency, to_currency, date = nil)
37
- exchange_with(Money.new(cents, from_currency), to_currency, date)
38
- end
39
-
40
- def exchange_with(from, to_currency, date = nil)
41
- to_currency = ::Money::Currency.wrap(to_currency)
42
- return from if from.currency == to_currency
43
-
44
- rate = get_rate(from.currency, to_currency, date)
45
-
46
- rate ||= rate_from_exchange_rates_api(from.currency, to_currency, date)
47
-
48
- fractional = calculate_fractional(from, to_currency, rate)
49
- Money.new(fractional, to_currency)
50
- end
51
-
52
- private
53
-
54
- def rate_from_exchange_rates_api(from_currency, to_currency, date)
55
- puts from_currency
56
- puts to_currency
57
- puts date
58
- api_client = DailyExchangeRatesBank::ExchangeRatesApiClient.new
59
- rates = api_client.exchange_rates(from: from_currency.iso_code,
60
- to: [to_currency.iso_code],
61
- date: date)
62
- rate = rates[to_currency.iso_code]
63
-
64
- set_rate(from_currency, to_currency, rate, date)
65
-
66
- rate
67
- end
68
-
69
- def calculate_fractional(from, to_currency, rate)
70
- BigDecimal(rate.to_s) * BigDecimal(from.fractional.to_s) / (
71
- BigDecimal(from.currency.subunit_to_unit.to_s) /
72
- BigDecimal(to_currency.subunit_to_unit.to_s)
73
- )
74
- end
75
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open-uri'
4
-
5
- class DailyExchangeRatesBank < Money::Bank::VariableExchange
6
- # Access exchangeratesapi.io to fetch historic exchange rates
7
- class ExchangeRatesApiClient
8
- def exchange_rates(from: 'EUR', to: %w[USD GBP CHF], date: Date.today)
9
- uri = URI.parse('https://api.exchangeratesapi.io/')
10
- uri.path = "/#{date}/"
11
- uri.query = "base=#{from}&symbols=#{to.join(',')}"
12
- puts uri
13
- json_response = uri.read
14
- JSON.parse(json_response)['rates']
15
- end
16
- end
17
- end