wego-money-bank 0.1.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 +7 -0
- data/.gitignore +12 -0
- data/.ruby-version +1 -0
- data/Gemfile +8 -0
- data/README.md +49 -0
- data/Rakefile +9 -0
- data/lib/money/bank/wego_money_bank.rb +118 -0
- data/lib/wego_money_bank/version.rb +3 -0
- data/wego-money-bank.gemspec +37 -0
- metadata +219 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1a37d415f2b26e0ca1e5ae645622bb7d0b935185
|
4
|
+
data.tar.gz: b29bcd01bda3f6f0f3e344970f102fdac35459c0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1410e9d8fed305e76df28a3d056faf5f658d1393bd0a7fdb6c6f7c7ec267e9cdbc22a7c57f720ac0e9475c0047454213f845806d8b4173c4f07a6642a30d2808
|
7
|
+
data.tar.gz: c3819acce204775f0d1d91399b3de7490797a4f5313cbf46b05e5983ea95a2df63635721af58b251904c515a857426c1a35f615a743b1cef45bf2aaf839c0ab2
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.1
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Wego Money
|
2
|
+
|
3
|
+
This gem provides functionality for calculating exchange rates using the wego currency exchange rate API.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
~~~ ruby
|
10
|
+
gem 'wego-money-bank'
|
11
|
+
~~~
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
~~~
|
16
|
+
bundle
|
17
|
+
~~~
|
18
|
+
|
19
|
+
Or do the installation by yourself by running this command:
|
20
|
+
|
21
|
+
~~~
|
22
|
+
gem install wego-money-bank
|
23
|
+
~~~
|
24
|
+
|
25
|
+
## How to use it
|
26
|
+
|
27
|
+
~~~ ruby
|
28
|
+
require 'money/bank/wego_money_bank'
|
29
|
+
wmb = Money::Bank::WegoMoneyBank.new
|
30
|
+
wmb.cache = 'path/to/cahe.json'
|
31
|
+
|
32
|
+
# (optional)
|
33
|
+
# set the seconds until the rates will be expired automatically
|
34
|
+
# if not set, then it will never expire
|
35
|
+
wmb.ttl_in_seconds = 3600
|
36
|
+
|
37
|
+
wmp.update_rates
|
38
|
+
~~~
|
39
|
+
|
40
|
+
## Development
|
41
|
+
|
42
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
43
|
+
|
44
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
45
|
+
|
46
|
+
## Contributing
|
47
|
+
|
48
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/wego-money-bank.
|
49
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'money'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
class Money
|
5
|
+
module Bank
|
6
|
+
class WegoMoneyBank < Money::Bank::VariableExchange
|
7
|
+
API_URL = 'https://srv.wego.com/places/v1/currencies/latest'
|
8
|
+
BASE = 'USD'
|
9
|
+
|
10
|
+
attr_accessor :cache
|
11
|
+
attr_reader :ttl_in_seconds
|
12
|
+
attr_reader :expire_time
|
13
|
+
|
14
|
+
alias super_get_rate get_rate
|
15
|
+
|
16
|
+
def ttl_in_seconds=(value)
|
17
|
+
@ttl_in_seconds = value
|
18
|
+
reset_expire_time if ttl_in_seconds
|
19
|
+
@ttl_in_seconds
|
20
|
+
end
|
21
|
+
|
22
|
+
def url
|
23
|
+
API_URL
|
24
|
+
end
|
25
|
+
|
26
|
+
def base
|
27
|
+
BASE
|
28
|
+
end
|
29
|
+
|
30
|
+
def fetch
|
31
|
+
fetch_from_cache || fetch_from_url
|
32
|
+
end
|
33
|
+
|
34
|
+
def update_rates
|
35
|
+
refresh_rates_cache
|
36
|
+
|
37
|
+
exchange_rates.each do |exchange_rate|
|
38
|
+
rate = exchange_rate['rate'].to_f
|
39
|
+
currency = exchange_rate['code']
|
40
|
+
base = exchange_rate['base']
|
41
|
+
|
42
|
+
if Money::Currency.find(currency)
|
43
|
+
set_rate(base, currency, rate)
|
44
|
+
set_rate(currency, base, 1.0 / rate)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def fetch_from_url
|
50
|
+
open(url).read
|
51
|
+
end
|
52
|
+
|
53
|
+
def fetch_from_cache
|
54
|
+
open(cache).read if cache
|
55
|
+
end
|
56
|
+
|
57
|
+
def exchange_rates
|
58
|
+
JSON.parse(fetch)
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_rate(from, to)
|
62
|
+
expire_rates
|
63
|
+
fetch_rate(from, to) || pair_rate_using_base(from, to)
|
64
|
+
end
|
65
|
+
|
66
|
+
def fetch_rate(from, to)
|
67
|
+
super_get_rate(from, to) || inverse_rate(from, to)
|
68
|
+
end
|
69
|
+
|
70
|
+
def inverse_rate(from, to)
|
71
|
+
rate = super_get_rate(to, from)
|
72
|
+
|
73
|
+
if rate
|
74
|
+
rate = 1.0 / rate
|
75
|
+
add_rate(from, to, rate)
|
76
|
+
end
|
77
|
+
|
78
|
+
rate
|
79
|
+
end
|
80
|
+
|
81
|
+
def pair_rate_using_base(from, to)
|
82
|
+
from_rate = fetch_rate(base, from)
|
83
|
+
to_rate = fetch_rate(base, to)
|
84
|
+
|
85
|
+
if from_rate && to_rate
|
86
|
+
rate = to_rate / from_rate
|
87
|
+
add_rate(from, to, rate)
|
88
|
+
return rate
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def expire_rates
|
93
|
+
if ttl_in_seconds && expired?
|
94
|
+
update_rates
|
95
|
+
reset_expire_time
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def expired?
|
100
|
+
Time.now > expire_time
|
101
|
+
end
|
102
|
+
|
103
|
+
def reset_expire_time
|
104
|
+
@expire_time = Time.now + ttl_in_seconds
|
105
|
+
end
|
106
|
+
|
107
|
+
def refresh_rates_cache
|
108
|
+
json_rates = fetch_from_url
|
109
|
+
if cache
|
110
|
+
open(cache, 'w') do |f|
|
111
|
+
f.write(json_rates)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'wego_money_bank/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'wego-money-bank'
|
7
|
+
s.date = Time.now.utc.strftime('%Y-%m-%d')
|
8
|
+
s.version = WegoMoneyBank::VERSION
|
9
|
+
s.homepage = "https://github.com/wego/{s.name}"
|
10
|
+
s.authors = ['Michael Valladolid']
|
11
|
+
s.email = 'geeks@wego.com'
|
12
|
+
s.description = 'This gem provides functionality for calculating '\
|
13
|
+
'exchange rates using the wego currency exchange rate API.'
|
14
|
+
s.summary = 'Wego money bank'
|
15
|
+
|
16
|
+
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
s.bindir = "exe"
|
20
|
+
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.add_dependency "money", "~> 6.9"
|
24
|
+
|
25
|
+
s.add_development_dependency "bundler", "~> 1.15"
|
26
|
+
s.add_development_dependency "rake", "~> 10.0"
|
27
|
+
s.add_development_dependency "monetize", "~> 1.7.0"
|
28
|
+
|
29
|
+
s.add_development_dependency "rspec"
|
30
|
+
s.add_development_dependency "webmock", "~> 3.0.1"
|
31
|
+
s.add_development_dependency "rspec-nc"
|
32
|
+
s.add_development_dependency "guard"
|
33
|
+
s.add_development_dependency "guard-rspec"
|
34
|
+
s.add_development_dependency "pry"
|
35
|
+
s.add_development_dependency "pry-remote"
|
36
|
+
s.add_development_dependency "pry-nav"
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,219 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wego-money-bank
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Valladolid
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-06-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: money
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.9'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.15'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.15'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: monetize
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.7.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.7.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.0.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.0.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec-nc
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry-remote
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: pry-nav
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
description: This gem provides functionality for calculating exchange rates using
|
182
|
+
the wego currency exchange rate API.
|
183
|
+
email: geeks@wego.com
|
184
|
+
executables: []
|
185
|
+
extensions: []
|
186
|
+
extra_rdoc_files: []
|
187
|
+
files:
|
188
|
+
- ".gitignore"
|
189
|
+
- ".ruby-version"
|
190
|
+
- Gemfile
|
191
|
+
- README.md
|
192
|
+
- Rakefile
|
193
|
+
- lib/money/bank/wego_money_bank.rb
|
194
|
+
- lib/wego_money_bank/version.rb
|
195
|
+
- wego-money-bank.gemspec
|
196
|
+
homepage: https://github.com/wego/{s.name}
|
197
|
+
licenses: []
|
198
|
+
metadata: {}
|
199
|
+
post_install_message:
|
200
|
+
rdoc_options: []
|
201
|
+
require_paths:
|
202
|
+
- lib
|
203
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
requirements: []
|
214
|
+
rubyforge_project:
|
215
|
+
rubygems_version: 2.5.1
|
216
|
+
signing_key:
|
217
|
+
specification_version: 4
|
218
|
+
summary: Wego money bank
|
219
|
+
test_files: []
|