omni_exchange 1.5.0 → 1.6.0

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: c591dfb40110a465f93f0c714d6f26369ba9717592a8deb4da4f92e044a4f660
4
- data.tar.gz: 91f086e1912b69998b55d6e76030dfdc8738388071c0405084fc6d8e8fa6174a
3
+ metadata.gz: bf795bf43c3ede8973124f10ff3afa6190a4c6af4705ecc481bf2a1112477f33
4
+ data.tar.gz: 4b8fc48b43b3cbcb9e118d8e1ee5238c71c9ddfceca7aa1cf1034a78fa693691
5
5
  SHA512:
6
- metadata.gz: 813ec7f4ce3f0d18360a39cd864c39fcb62bb1dbacc36a4b089b7d970d32b9bfa6c334fd6d11921f99dcc0d4b48ec7e5a45fd169b11ae6e852969e0f6d768ee3
7
- data.tar.gz: 75904791e0aaff4d160b5d11424c50ddfbd32450a5e0d52da2e4a246e5dde5aba81efe23f1bb9ed0ab656d4399eb3d48106f68c790c660fa50d76258265e3d55
6
+ metadata.gz: a42a179b5435a78d4aacd65c04e4c26223c1115c53b3160963ace5c8175dce8252a1ae7fc2272e758d16c0264c99294ac3a84763f0fa1f4cf5a51d08746327c3
7
+ data.tar.gz: 58186c5c5697ef71566e41ad717b4c76362e2650edc1bd72da11ff0964bc76e7e5936f656969b58e37f69f6f34e640c1f09cba2041eeeb25a73ad27fae037ef3
data/.gitignore CHANGED
@@ -14,11 +14,4 @@
14
14
  .env
15
15
 
16
16
  sandbox.rb
17
- omni_exchange-0.1.0.gem
18
- omni_exchange-0.2.0.gem
19
- omni_exchange-1.1.0.gem
20
- omni_exchange-1.1.1.gem
21
- omni_exchange-1.2.0.gem
22
- omni_exchange-1.3.0.gem
23
- omni_exchange-1.4.0.gem
24
- omni_exchange-1.5.0.gem
17
+ *.gem
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- omni_exchange (1.4.0)
4
+ omni_exchange (1.6.0)
5
5
  faraday (< 2)
6
6
  money (~> 6.13.1)
7
7
 
@@ -13,7 +13,7 @@ GEM
13
13
  concurrent-ruby (1.1.10)
14
14
  diff-lcs (1.5.0)
15
15
  dotenv (2.8.1)
16
- faraday (1.10.1)
16
+ faraday (1.10.2)
17
17
  faraday-em_http (~> 1.0)
18
18
  faraday-em_synchrony (~> 1.0)
19
19
  faraday-excon (~> 1.1)
data/README.md CHANGED
@@ -57,7 +57,8 @@ To convert currency and/or get an exchange rate, all you have to do is call `Omn
57
57
  What you get back is a hash containing:
58
58
  1. converted_amount: (BigDecimal) the amount of money exchanged from the base currency to the target currency
59
59
  2. exchange_rate: (BigDecimal) the rate used to calculate the converted_amount
60
- 3. provider: (Symbol) the provider that supplied the exchange_rate (ie. :open_exchange_rates, :xe)
60
+ 3. non_subunit_fx_rate: (BigDecimal) an exchange rate that can be used to convert a formatted version of the base currency (ie. 100 USD being formatted as 1.00)
61
+ 4. provider: (Symbol) the provider that supplied the exchange_rate (ie. :open_exchange_rates, :xe)
61
62
 
62
63
  [For the sake of precise calculation](https://www.bigbinary.com/blog/handling-money-in-ruby), converted_amount and exchange_rate are BigDecimal. Simply call `.to_f` to the results if you'd like to see a number that is easier to read.
63
64
 
@@ -67,7 +68,7 @@ Here is an example. Lets say I want to convert $1.00 US Dollar to Japanese Yen,
67
68
  ```ruby
68
69
  USD_to_JPY = OmniExchange.get_fx_data(amount: 100, base_currency: 'USD', target_currency: 'JPY', providers: [:open_exchange_rates, :xe])
69
70
 
70
- puts USD_to_JPY # => { :converted_amount=>0.13566633333e3, :exchange_rate=>0.13566633333e1, :provider=>:open_exchange_rates }
71
+ puts USD_to_JPY # => { :converted_amount=>0.13566633333e3, :exchange_rate=>0.13566633333e1, :non_subunit_fx_rate=>0.13566633333e3, :provider=>:open_exchange_rates }
71
72
 
72
73
  puts USD_to_JPY[:converted_amount] # => 0.13566633333e3
73
74
  puts USD_to_JPY[:converted_amount].to_f # => 135.66633333
@@ -75,6 +76,10 @@ puts USD_to_JPY[:converted_amount].to_f # => 135.66633333
75
76
  puts USD_to_JPY[:exchange_rate] # => 0.13566633333e1
76
77
  puts USD_to_JPY[:exchange_rate].to_f # => 1.3566633333
77
78
 
79
+ # :fx_rate can be used when 100 USD is written as 1.00 instead of 100. In other words, you can do 1.00 * USD_to_JPY[:non_subunit_fx_rate] and get 135.66633333
80
+ puts USD_to_JPY[:non_subunit_fx_rate] # => 0.13566633333e3
81
+ puts USD_to_JPY[:non_subunit_fx_rate].to_f # => 135.66633333
82
+
78
83
  ```
79
84
 
80
85
  ## Development
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OmniExchange
4
- VERSION = '1.5.0'
4
+ VERSION = '1.6.0'
5
5
  end
data/lib/omni_exchange.rb CHANGED
@@ -53,6 +53,7 @@ module OmniExchange
53
53
  # * :converted_amount [BigDecimal] the amount of money exchanged from the base currency to the target
54
54
  # currency as a BigDecimal for precice calculation. ie. 1, 10, 100
55
55
  # * :exchange_rate [BigDecimal] the rate used to calculate the converted_amount as a BigDecimal. ie. 0.95211e1
56
+ # * :non_subunit_fx_rate [BigDecimal] a rate that can be used when a currency with subunits is not in cents . ie. 0.95211e3
56
57
  # * :provider [Symbol] the provider that supplied the exchange_rate data. ie. :xe, :open_exchange_rates
57
58
  def get_fx_data(amount:, base_currency:, target_currency:, providers:)
58
59
  # if one of the currencies is not valid (ie. 'fake_crypto'), an exception is raised.
@@ -71,10 +72,11 @@ module OmniExchange
71
72
  # Gracefully hit each provider and fail-over to the next one
72
73
  provider_classes.each do |klass|
73
74
  rate = klass.get_exchange_rate(base_currency: base_currency, target_currency: target_currency)
75
+ plain_format_rate = (rate * Money::Currency.wrap(base_currency).subunit_to_unit).to_d
74
76
 
75
77
  exchanged_amount = rate.to_d * amount.to_d
76
78
 
77
- return { converted_amount: exchanged_amount, exchange_rate: rate, provider: OmniExchange::Provider.all.key(klass) }
79
+ return { converted_amount: exchanged_amount, exchange_rate: rate, non_subunit_fx_rate: plain_format_rate, provider: OmniExchange::Provider.all.key(klass) }
78
80
  rescue *EXCEPTIONS, OmniExchange::XeMonthlyLimit, JSON::ParserError => e
79
81
  error_messages << e.inspect
80
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omni_exchange
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yun Chung
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-17 00:00:00.000000000 Z
11
+ date: 2022-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday