justexchangerates 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: 7f7d728f98dccb8bea8d353c87967fa521103335
4
- data.tar.gz: ee268fa959a4acaedda9cf08215a0b71f9cf7b28
3
+ metadata.gz: ca4ba21b4b5f6e573688a1f5939ed118005fd4fe
4
+ data.tar.gz: aaae4657edd11508f79b4b2df4ea295c10213552
5
5
  SHA512:
6
- metadata.gz: 794ea0e6d9865daebcd74f5f608c74154032f76d2b89617279efbdf6160a0878abb05ff75e64ab3d1b946e844d51c08998e2efc4d50f000ae2a78b0af80636a4
7
- data.tar.gz: 4cebf1d0e70509cd4a9ff69bfb6796518580727b3d91821b71452eeec427c7074194033bc914cfc1d1ac0b310582a38c3197ad2769f55641dcc1292566325a64
6
+ metadata.gz: 1c4f0c2c6c7b6a255f32e7ffb559859fea393129b6829656ceed567af6ddd88b4ed739eb30598b53c9a4225f865751c05184ad6fc1f92e846e61a7f0fce18a4e
7
+ data.tar.gz: 1aec676537c7f6019c1ff0029388e3892e008f7416a66a3a5be826a5ceaa9ddd578d4e18e0fc82c018002020a54fc03c1a46f2726e000f7d9d23eb8e40ce0316
checksums.yaml.gz.sig CHANGED
Binary file
@@ -4,36 +4,79 @@
4
4
 
5
5
  require 'json'
6
6
  require 'open-uri'
7
+ require 'chronic_duration'
7
8
 
8
9
 
9
10
  class JustExchangeRates
10
11
 
11
12
  attr_reader *%i(base date rates)
12
13
 
13
- def initialize(api:'https://api.fixer.io/latest?base=', base: 'USD')
14
+ def initialize(api:'https://api.fixer.io/latest?base=', base: 'USD',
15
+ cache_refresh: '1 week', cache_path: '.', debug: false)
14
16
 
15
- response = open(api + base.upcase)
16
-
17
- if response.status.last == "OK" then
18
-
19
- h = JSON.parse(response.read)
20
- @base, @date, @rates = h['base'], h['date'], h['rates']
17
+ @url, @base, @debug = api, base, debug
18
+
19
+ filename = 'justexchangerates.json'
20
+ @cache_filepath = File.join(cache_path, filename)
21
+
22
+ h = if cache_refresh then
23
+
24
+ if File.exists? @cache_filepath then
25
+
26
+ h2 = JSON.parse(File.read @cache_filepath)
27
+ seconds = ChronicDuration.parse(cache_refresh)
21
28
 
29
+ if (Time.parse(h2['date']) + seconds) < Time.now then
30
+ fetch_rates
31
+ else
32
+ puts 'fetching rates from local cache ...' if @debug
33
+ h2
34
+ end
35
+
36
+ else
37
+ fetch_rates
38
+ end
39
+
22
40
  else
23
- puts "JustExchangeRates API error %s : %s" % response.status
41
+
42
+ fetch_rates
43
+
24
44
  end
45
+
46
+
47
+ @base, @date, @rates = h['base'], h['date'], h['rates']
25
48
 
26
49
  end
27
50
 
28
51
  def rate(currency)
29
52
  @rates[currency.upcase]
30
53
  end
54
+
55
+ private
56
+
57
+ def fetch_rates()
58
+
59
+ response = open(@url + @base.upcase)
60
+
61
+ if response.status.last == "OK" then
62
+
63
+ h = JSON.parse(response.read)
64
+ h['date'] = Time.now
65
+ File.write @cache_filepath, h.to_json
66
+ h
67
+
68
+ else
69
+ puts "JustExchangeRates API error %s : %s" % response.status
70
+ {}
71
+ end
72
+
73
+ end
31
74
 
32
75
  end
33
76
 
34
77
  if __FILE__ == $0 then
35
78
 
36
- jer = JustExchangeRates.new(base: 'USB')
79
+ jer = JustExchangeRates.new(base: 'USD')
37
80
  jer.rate(VARGS.first) # e.g. GBP #=> 0.73792
38
81
 
39
82
  end
data.tar.gz.sig CHANGED
@@ -1 +1,2 @@
1
- 5 =�k[[7��aߺ�����1\���.�4���޳��V.E�=����г$�u�|#O DC7+z��~� �^9�L����I]7Q�F�7��3�s,����-��|��Ce��-��}�6��5_�3}N�a��VZ�<dF#;;bU��1�E~s<��l��h㊣*�AG�;�B�)h el���֪�㨁���^���s�J�oR#�XAiz��Նg[j��'��mΡ��r������]
1
+ Ay�½�Oy}����^�^\-3��<���Q7Ej(���o�@R�O�15/��c�{tj-N&`JF�����,��h��+��΃92�s�����W~����*>(O��R18�һ�I��t
2
+ A9�BD��ͺ�F���P�m+���.�*je� ���5ҽ��sV|�k��>pX��-<�|�W6s�j���#tHk���84X|�����談��g���]H�,9�
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: justexchangerates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,27 @@ cert_chain:
31
31
  BL0=
32
32
  -----END CERTIFICATE-----
33
33
  date: 2018-01-06 00:00:00.000000000 Z
34
- dependencies: []
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: chronic_duration
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.10'
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 0.10.6
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - "~>"
50
+ - !ruby/object:Gem::Version
51
+ version: '0.10'
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.6
35
55
  description:
36
56
  email: james@jamesrobertson.eu
37
57
  executables: []
metadata.gz.sig CHANGED
Binary file