justexchangerates 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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