money-currencylayer-bank 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +8 -3
- data/lib/money/bank/currencylayer_bank.rb +42 -39
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcc2d3fa0693e5f08c0368924439dfad9e36e744
|
4
|
+
data.tar.gz: 8d0d077b6c485208c35f49740e93054b7a5c8102
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85105563870f9b83c96bc6e2e0a47ea8b6c3328d0ac7d7bfc709fe7f598996cd2cbf5eda05f2e96b34dad0520d793c42d862fc71f591f4f76ea2ab96989e52f8
|
7
|
+
data.tar.gz: 60f70f3a63f6c96883e9e34bc274bc96d343f0458eaeeb59e8fb07f441041f424e1734c87ba2d7d86d49ba005d67606021c08fdf8cff08f6845ddf06226e2696
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -40,6 +40,7 @@ See more about Currencylayer product plans on https://currencylayer.com/product.
|
|
40
40
|
* average response time < 20ms
|
41
41
|
* supports caching currency rates
|
42
42
|
* calculates every pair rate calculating inverse rate or using base currency rate
|
43
|
+
* supports multi threading
|
43
44
|
|
44
45
|
## Installation
|
45
46
|
|
@@ -89,7 +90,7 @@ mclb.secure_connection = true
|
|
89
90
|
# Define cache (string or pathname)
|
90
91
|
mclb.cache = 'path/to/file/cache'
|
91
92
|
|
92
|
-
# Set money default bank to
|
93
|
+
# Set money default bank to Currencylayer bank
|
93
94
|
Money.default_bank = mclb
|
94
95
|
~~~
|
95
96
|
|
@@ -104,7 +105,7 @@ mclb.source
|
|
104
105
|
# Expires rates if the expiration time is reached.
|
105
106
|
mclb.expire_rates!
|
106
107
|
|
107
|
-
#
|
108
|
+
# Returns true if the expiration time is reached.
|
108
109
|
mclb.expired?
|
109
110
|
|
110
111
|
# Get the API source url.
|
@@ -112,6 +113,9 @@ mclb.source_url
|
|
112
113
|
|
113
114
|
# Get the rates timestamp of the last API request.
|
114
115
|
mclb.rates_timestamp
|
116
|
+
|
117
|
+
# Get the rates timestamp of loaded rates in memory.
|
118
|
+
moxb.rates_mem_timestamp
|
115
119
|
~~~
|
116
120
|
|
117
121
|
### How to exchange
|
@@ -184,6 +188,7 @@ bundle exec rake
|
|
184
188
|
## Other Implementations
|
185
189
|
|
186
190
|
* Gem [currencylayer](https://github.com/askuratovsky/currencylayer)
|
191
|
+
* Gem [money-openexchangerates-bank](https://github.com/phlegx/money-openexchangerates-bank)
|
187
192
|
* Gem [money-open-exchange-rates](https://github.com/spk/money-open-exchange-rates)
|
188
193
|
* Gem [money-historical-bank](https://github.com/atwam/money-historical-bank)
|
189
194
|
* Gem [eu_central_bank](https://github.com/RubyMoney/eu_central_bank)
|
@@ -207,4 +212,4 @@ bundle exec rake
|
|
207
212
|
|
208
213
|
The MIT License
|
209
214
|
|
210
|
-
Copyright (c)
|
215
|
+
Copyright (c) 2017 Phlegx Systems OG
|
@@ -13,7 +13,6 @@ class Money
|
|
13
13
|
class Memory
|
14
14
|
# Add method to reset the build in memory store
|
15
15
|
# @param [Hash] rt Optional initial exchange rate data.
|
16
|
-
#
|
17
16
|
# @return [Object] store.
|
18
17
|
def reset!(rt = {})
|
19
18
|
transaction { @index = rt }
|
@@ -32,32 +31,29 @@ class Money
|
|
32
31
|
# CurrencylayerBank base class
|
33
32
|
class CurrencylayerBank < Money::Bank::VariableExchange
|
34
33
|
# CurrencylayerBank url
|
35
|
-
CL_URL = 'http://apilayer.net/api/live'
|
34
|
+
CL_URL = 'http://apilayer.net/api/live'.freeze
|
36
35
|
# CurrencylayerBank secure url
|
37
|
-
CL_SECURE_URL = CL_URL.
|
36
|
+
CL_SECURE_URL = CL_URL.sub('http:', 'https:')
|
38
37
|
# Default base currency
|
39
|
-
CL_SOURCE = 'USD'
|
38
|
+
CL_SOURCE = 'USD'.freeze
|
40
39
|
|
41
40
|
# Use https to fetch rates from CurrencylayerBank
|
42
41
|
# CurrencylayerBank only allows http as connection
|
43
42
|
# for the free plan users.
|
44
43
|
#
|
45
44
|
# @param value [Boolean] true for secure connection
|
46
|
-
#
|
47
45
|
# @return [Boolean] chosen secure connection
|
48
46
|
attr_accessor :secure_connection
|
49
47
|
|
50
48
|
# API must have a valid access_key
|
51
49
|
#
|
52
50
|
# @param value [String] API access key
|
53
|
-
#
|
54
51
|
# @return [String] chosen API access key
|
55
52
|
attr_accessor :access_key
|
56
53
|
|
57
54
|
# Cache accessor, can be a String or a Proc
|
58
55
|
#
|
59
56
|
# @param value [String,Pathname,Proc] cache system
|
60
|
-
#
|
61
57
|
# @return [String,Pathname,Proc] chosen cache system
|
62
58
|
attr_accessor :cache
|
63
59
|
|
@@ -75,7 +71,6 @@ class Money
|
|
75
71
|
# ttl_in_seconds = 86400 # will expire the rates in one day
|
76
72
|
#
|
77
73
|
# @param value [Integer] time to live in seconds
|
78
|
-
#
|
79
74
|
# @return [Integer] chosen time to live in seconds
|
80
75
|
attr_writer :ttl_in_seconds
|
81
76
|
|
@@ -87,7 +82,6 @@ class Money
|
|
87
82
|
# source = 'USD'
|
88
83
|
#
|
89
84
|
# @param value [String] Currency code, ISO 3166-1 alpha-3
|
90
|
-
#
|
91
85
|
# @return [String] chosen base currency
|
92
86
|
def source=(value)
|
93
87
|
@source = Money::Currency.find(value.to_s).try(:iso_code) || CL_SOURCE
|
@@ -124,47 +118,23 @@ class Money
|
|
124
118
|
# @param [String] from_currency Currency ISO code. ex. 'USD'
|
125
119
|
# @param [String] to_currency Currency ISO code. ex. 'CAD'
|
126
120
|
# @param [Numeric] rate Rate to use when exchanging currencies.
|
127
|
-
#
|
128
121
|
# @return [Numeric] rate.
|
129
122
|
def add_rate(from_currency, to_currency, rate)
|
130
123
|
super
|
131
124
|
end
|
132
125
|
|
126
|
+
# Alias super method
|
127
|
+
alias super_get_rate get_rate
|
128
|
+
|
133
129
|
# Override Money `get_rate` method for caching
|
134
130
|
# @param [String] from_currency Currency ISO code. ex. 'USD'
|
135
131
|
# @param [String] to_currency Currency ISO code. ex. 'CAD'
|
136
132
|
# @param [Hash] opts Options hash to set special parameters.
|
137
|
-
#
|
138
133
|
# @return [Numeric] rate.
|
139
|
-
def get_rate(from_currency, to_currency, opts = {})
|
134
|
+
def get_rate(from_currency, to_currency, opts = {})
|
140
135
|
expire_rates!
|
141
|
-
rate =
|
142
|
-
|
143
|
-
# Tries to calculate an inverse rate
|
144
|
-
inverse_rate = super(to_currency, from_currency, opts)
|
145
|
-
if inverse_rate
|
146
|
-
rate = 1.0 / inverse_rate
|
147
|
-
add_rate(from_currency, to_currency, rate)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
unless rate
|
151
|
-
# Tries to calculate a pair rate using base currency rate
|
152
|
-
from_base_rate = super(source, from_currency, opts)
|
153
|
-
unless from_base_rate
|
154
|
-
from_inverse_rate = super(from_currency, source, opts)
|
155
|
-
from_base_rate = 1.0 / from_inverse_rate if from_inverse_rate
|
156
|
-
end
|
157
|
-
to_base_rate = super(source, to_currency, opts)
|
158
|
-
unless to_base_rate
|
159
|
-
to_inverse_rate = super(to_currency, source, opts)
|
160
|
-
to_base_rate = 1.0 / to_inverse_rate if to_inverse_rate
|
161
|
-
end
|
162
|
-
if to_base_rate && from_base_rate
|
163
|
-
rate = to_base_rate / from_base_rate
|
164
|
-
add_rate(from_currency, to_currency, rate)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
rate
|
136
|
+
rate = get_rate_or_calc_inverse(from_currency, to_currency, opts)
|
137
|
+
rate || calc_pair_rate_using_base(from_currency, to_currency, opts)
|
168
138
|
end
|
169
139
|
|
170
140
|
# Fetch new rates if cached rates are expired or stale
|
@@ -305,6 +275,7 @@ class Money
|
|
305
275
|
end
|
306
276
|
|
307
277
|
# Get raw exchange rates from cache and then from url
|
278
|
+
# @param rescue_straight [Boolean] true for rescue straight, default true
|
308
279
|
# @return [String] JSON content
|
309
280
|
def raw_rates_careful(rescue_straight = true)
|
310
281
|
JSON.parse(read_from_cache.to_s)
|
@@ -319,6 +290,38 @@ class Money
|
|
319
290
|
rescue JSON::ParserError
|
320
291
|
raw_rates_careful(false)
|
321
292
|
end
|
293
|
+
|
294
|
+
# Get rate or calculate it as inverse rate
|
295
|
+
# @param [String] from_currency Currency ISO code. ex. 'USD'
|
296
|
+
# @param [String] to_currency Currency ISO code. ex. 'CAD'
|
297
|
+
# @return [Numeric] rate or rate calculated as inverse rate.
|
298
|
+
def get_rate_or_calc_inverse(from_currency, to_currency, opts = {})
|
299
|
+
rate = super_get_rate(from_currency, to_currency, opts)
|
300
|
+
unless rate
|
301
|
+
# Tries to calculate an inverse rate
|
302
|
+
inverse_rate = super_get_rate(to_currency, from_currency, opts)
|
303
|
+
if inverse_rate
|
304
|
+
rate = 1.0 / inverse_rate
|
305
|
+
add_rate(from_currency, to_currency, rate)
|
306
|
+
end
|
307
|
+
end
|
308
|
+
rate
|
309
|
+
end
|
310
|
+
|
311
|
+
# Tries to calculate a pair rate using base currency rate
|
312
|
+
# @param [String] from_currency Currency ISO code. ex. 'USD'
|
313
|
+
# @param [String] to_currency Currency ISO code. ex. 'CAD'
|
314
|
+
# @return [Numeric] rate or nil if cannot calculate rate.
|
315
|
+
def calc_pair_rate_using_base(from_currency, to_currency, opts = {})
|
316
|
+
from_base_rate = get_rate_or_calc_inverse(source, from_currency, opts)
|
317
|
+
to_base_rate = get_rate_or_calc_inverse(source, to_currency, opts)
|
318
|
+
if to_base_rate && from_base_rate
|
319
|
+
rate = to_base_rate / from_base_rate
|
320
|
+
add_rate(from_currency, to_currency, rate)
|
321
|
+
return rate
|
322
|
+
end
|
323
|
+
nil
|
324
|
+
end
|
322
325
|
end
|
323
326
|
end
|
324
327
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money-currencylayer-bank
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Egon Zemmer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: money
|