fixer_currency 3.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a49f8eaca5bb9152f750e6336416b0991c3358ee4a7653555820e531551b71cd
4
+ data.tar.gz: 9c813b15ff729dd8f801d4cb917122a3cb31b857fcfae011133883226f123f7d
5
+ SHA512:
6
+ metadata.gz: 3a6c7877a40ceb7076f4463f30bb2fbbb6d1a403a1f9ce60744448e2f5a7ae3f9620ce367146870840bdbcf827b738ba91315c35caf45953eacf59560fff9240
7
+ data.tar.gz: afe799a1adda9a9c6a438e7abe67c06159ae2389548793b30b732d62de7205f68c9ba34be1d13438090c3de77f73bfffb697ca84f4606cec684986538902a697
data/.gemtest ADDED
File without changes
data/AUTHORS ADDED
@@ -0,0 +1,11 @@
1
+ andersonbrandon
2
+ cover
3
+ Donald Ball
4
+ Daniel Doubrovkine
5
+ James Chen
6
+ Jérémy Lecour
7
+ Lars Pind
8
+ Shane Emmons
9
+ sowenjub
10
+ yinquanteo
11
+ Tarang Patel
data/CHANGELOG.md ADDED
@@ -0,0 +1,133 @@
1
+ 3.4.1
2
+ =====
3
+
4
+ - Fix the deprecated URL
5
+
6
+ 3.4.0
7
+ =====
8
+
9
+ - Add captcha response detection
10
+ - Use finance.google.com for reliability across different regions
11
+
12
+ 3.3.0
13
+ =====
14
+
15
+ - Update Money gem dep
16
+
17
+ 3.2.1
18
+ =====
19
+ - Increase precision of rates by using inverse reciprocals for certain currencyes
20
+
21
+ 3.0.0
22
+ =====
23
+
24
+ - Google closed ig/calculator, so we're now using finance/calculator
25
+ - fix incorrect parsing of complex rates
26
+
27
+ Google Currency 2.2.0
28
+ =====================
29
+
30
+ - Update money dependency to ~> 5.1.0
31
+
32
+ Google Currency 2.1.0
33
+ =====================
34
+
35
+ - Update money dependency to ~> 5.0.0
36
+
37
+ Google Currency 2.0.2
38
+ =====================
39
+
40
+ Bugfixes
41
+ --------
42
+ - Fix encoding issue
43
+
44
+ Google Currency 2.0.1
45
+ =====================
46
+
47
+ Features
48
+ --------
49
+ - Handles funky exchange rates (Arnaud Joubay)
50
+
51
+ Bugfixes
52
+ --------
53
+ - Fix for running under 1.9.2 in TextMate (larspind)
54
+
55
+ Google Currency 2.0.0
56
+ =====================
57
+
58
+ Features
59
+ --------
60
+ - Added multi_json to allow users to select their own JSON parsing engine.
61
+ - Removed deprecated method #get_google_rate.
62
+
63
+ Bugfixes
64
+ --------
65
+ - Updated deprecated rake tasks
66
+
67
+ Google Currency 1.1.1
68
+ =====================
69
+
70
+ Bugfixes
71
+ --------
72
+ - Built gem using Ruby 1.8.7 to bypass a known error with RubyGems 1.5.0 and
73
+ Ruby 1.9.2
74
+
75
+ Google Currency 1.1.0
76
+ =====================
77
+
78
+ Features
79
+ --------
80
+ - Deprecated #get_google_rate, use #get_rate (thanks RMU Alumni)
81
+
82
+ Bugfixes
83
+ ---------
84
+ - Fixed an issue when rates over 1000 did not parse correctly (thanks Brandon
85
+ Anderson)
86
+
87
+ Google Currency 1.0.3
88
+ =====================
89
+
90
+ Features
91
+ --------
92
+ - Update `money` requirement to `~> 3.5`
93
+
94
+ Google Currency 1.0.2
95
+ =====================
96
+
97
+ Features
98
+ --------
99
+ - Replace `eval` with `JSON.parse`
100
+ - Use BigDecimal instead of Float
101
+
102
+ Bugfixes
103
+ --------
104
+ - Quell parenthetical warnings in specs
105
+
106
+ Google Currency 1.0.1
107
+ =====================
108
+
109
+ Features
110
+ --------
111
+ - Update `money` requirement to `~> 3.1.5`
112
+
113
+ Google Currency 1.0.0
114
+ =====================
115
+
116
+ Features
117
+ --------
118
+ - Updated `money` requirement to `~> 3.1.0`
119
+
120
+ Google Currency 0.1.1
121
+ =====================
122
+
123
+ Features
124
+ --------
125
+ - Added #flush_rates
126
+ - Added #flush_rate
127
+
128
+ Google Currency 0.1.0
129
+ =====================
130
+
131
+ Features
132
+ --------
133
+ - Initial release
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Shane Emmons
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ Fixer Currency
2
+ ===============
3
+ This gem extends Money::Bank::VariableExchange with Money::Bank::FixerCurrency
4
+ and gives you access to the current fixer.io exchange rates.
5
+
6
+ This gem was forked from the [Money::Bank::GoogleCurrency](http://rubymoney.github.com/google_currency)
7
+ gem.
8
+
9
+ Usage
10
+ -----
11
+
12
+ ```ruby
13
+
14
+ require 'money'
15
+ require 'money/bank/fixer_currency'
16
+
17
+ # (optional)
18
+ # set the seconds after than the current rates are automatically expired
19
+ # by default, they never expire
20
+ Money::Bank::FixerCurrency.ttl_in_seconds = 86400
21
+
22
+ # set default bank to instance of FixerCurrency with access key parameter
23
+ # being your access_key from fixer.io
24
+ Money.default_bank = Money::Bank::FixerCurrency.new('your_access_key')
25
+
26
+ # create a new money object, and use the standard #exchange_to method
27
+ money = Money.new(1_00, "USD") # amount is in cents
28
+ money.exchange_to(:EUR)
29
+
30
+ # or install and use the 'monetize' gem
31
+ require 'monetize'
32
+ money = 1.to_money(:USD)
33
+ money.exchange_to(:EUR)
34
+
35
+ ```
36
+
37
+ An `UnknownRate` will be thrown if `#exchange_to` is called with a `Currency`
38
+ that `Money` knows, but fixer.io does not.
39
+
40
+ An `UnknownCurrency` will be thrown if `#exchange_to` is called with a
41
+ `Currency` that `Money` does not know.
42
+
43
+ A `FixerCurrencyFetchError` will be thrown if there is an unknown issue with
44
+ parsing the response including rates from fixer.io's API.
45
+
46
+ Caveats
47
+ -------
48
+
49
+ This gem uses [fixer.io](https://fixer.io/) under the hood.
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake/clean'
3
+
4
+ CLOBBER.include('.yardoc', 'doc')
5
+
6
+ def gemspec
7
+ @gemspec ||= begin
8
+ file = File.expand_path("../fixer_currency.gemspec", __FILE__)
9
+ eval(File.read(file), binding, file)
10
+ end
11
+ end
12
+
13
+ begin
14
+ require 'rspec/core/rake_task'
15
+ RSpec::Core::RakeTask.new
16
+ rescue LoadError
17
+ task(:spec){abort "`gem install rspec` to run specs"}
18
+ end
19
+ task :default => :spec
20
+ task :test => :spec
21
+
22
+ begin
23
+ require 'yard'
24
+ YARD::Rake::YardocTask.new do |t|
25
+ t.options << "--files" << "CHANGELOG.md,LICENSE"
26
+ end
27
+ rescue LoadError
28
+ task(:yard){abort "`gem install yard` to generate documentation"}
29
+ end
30
+
31
+ begin
32
+ require 'rubygems/package_task'
33
+ Gem::PackageTask.new(gemspec) do |pkg|
34
+ pkg.gem_spec = gemspec
35
+ end
36
+ task :gem => :gemspec
37
+ rescue LoadError
38
+ task(:gem){abort "`gem install rake` to package gems"}
39
+ end
40
+
41
+ desc "Install the gem locally"
42
+ task :install => :gem do
43
+ sh "gem install pkg/#{gemspec.full_name}.gem"
44
+ end
45
+
46
+ desc "Validate the gemspec"
47
+ task :gemspec do
48
+ gemspec.validate
49
+ end
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'fixer_currency'
3
+ s.version = '3.4.2'
4
+ s.platform = Gem::Platform::RUBY
5
+ s.authors = ['Emily Wilson']
6
+ s.email = ['emilywilson@privy.com']
7
+ s.homepage = 'https://github.com/Privy/fixer_currency'
8
+ s.summary = 'Access the fixer.io exchange rate data.'
9
+ s.description = 'FixerCurrency extends Money::Bank::Base and gives you access
10
+ to the current fixer.io exchange rates.'
11
+ s.license = 'MIT'
12
+
13
+ s.add_development_dependency 'ffi'
14
+ s.add_development_dependency 'rspec', '>= 3.0.0'
15
+ s.add_development_dependency 'yard', '>= 0.5.8'
16
+
17
+ s.add_dependency 'money', '~> 6.7'
18
+
19
+ s.files = Dir.glob('{lib,spec}/**/*')
20
+ s.files += %w(LICENSE README.md CHANGELOG.md AUTHORS)
21
+ s.files += %w(Rakefile .gemtest fixer_currency.gemspec)
22
+
23
+ s.require_path = 'lib'
24
+ end
@@ -0,0 +1,162 @@
1
+ require 'money'
2
+ require 'money/rates_store/rate_removal_support'
3
+ require 'open-uri'
4
+
5
+ class Money
6
+ module Bank
7
+ # # Raised when there is an unexpected error in extracting exchange rates
8
+ # # from fixer.io
9
+ class FixerCurrencyFetchError < Error
10
+ end
11
+
12
+ # VariableExchange bank that handles fetching exchange rates from fixer.io
13
+ # and storing them in the in memory rates store.
14
+ class FixerCurrency < Money::Bank::VariableExchange
15
+ SERVICE_HOST = 'data.fixer.io'.freeze
16
+ SERVICE_PATH = '/api/latest'.freeze
17
+
18
+ # @return [Hash] Stores the currently known rates.
19
+ attr_reader :rates
20
+
21
+ # @return [String] Access key from fixer.io allowing access to API
22
+ attr_accessor :access_key
23
+
24
+ class << self
25
+ # @return [Integer] Returns the Time To Live (TTL) in seconds.
26
+ attr_reader :ttl_in_seconds
27
+
28
+ # @return [Time] Returns the time when the rates expire.
29
+ attr_reader :rates_expiration
30
+
31
+ ##
32
+ # Set the Time To Live (TTL) in seconds.
33
+ #
34
+ # @param [Integer] the seconds between an expiration and another.
35
+ def ttl_in_seconds=(value)
36
+ @ttl_in_seconds = value
37
+ refresh_rates_expiration! if ttl_in_seconds
38
+ end
39
+
40
+ ##
41
+ # Set the rates expiration TTL seconds from the current time.
42
+ #
43
+ # @return [Time] The next expiration.
44
+ def refresh_rates_expiration!
45
+ @rates_expiration = Time.now + ttl_in_seconds
46
+ end
47
+ end
48
+
49
+ def initialize(access_key)
50
+ super()
51
+ @store.extend Money::RatesStore::RateRemovalSupport
52
+ @access_key = access_key
53
+ end
54
+
55
+ ##
56
+ # Clears all rates stored in @rates
57
+ #
58
+ # @return [Hash] The empty @rates Hash.
59
+ #
60
+ # @example
61
+ # @bank = FixerCurrency.new #=> <Money::Bank::FixerCurrency...>
62
+ # @bank.get_rate(:USD, :EUR) #=> 0.776337241
63
+ # @bank.flush_rates #=> {}
64
+ def flush_rates
65
+ store.clear_rates
66
+ end
67
+
68
+ ##
69
+ # Clears the specified rate stored in @rates.
70
+ #
71
+ # @param [String, Symbol, Currency] from Currency to convert from (used
72
+ # for key into @rates).
73
+ # @param [String, Symbol, Currency] to Currency to convert to (used for
74
+ # key into @rates).
75
+ #
76
+ # @return [Float] The flushed rate.
77
+ #
78
+ # @example
79
+ # @bank = FixerCurrency.new #=> <Money::Bank::FixerCurrency...>
80
+ # @bank.get_rate(:USD, :EUR) #=> 0.776337241
81
+ # @bank.flush_rate(:USD, :EUR) #=> 0.776337241
82
+ def flush_rate(from, to)
83
+ store.remove_rate(from, to)
84
+ end
85
+
86
+ ##
87
+ # Returns the requested rate.
88
+ #
89
+ # It also flushes all the rates when and if they are expired.
90
+ #
91
+ # @param [String, Symbol, Currency] from Currency to convert from
92
+ # @param [String, Symbol, Currency] to Currency to convert to
93
+ #
94
+ # @return [Float] The requested rate.
95
+ #
96
+ # @example
97
+ # @bank = FixerCurrency.new #=> <Money::Bank::FixerCurrency...>
98
+ # @bank.get_rate(:USD, :EUR) #=> 0.776337241
99
+ def get_rate(from, to)
100
+ expire_rates
101
+
102
+ fetch_rates if !store.get_rate(from, :EUR) || !store.get_rate(to, :EUR)
103
+
104
+ begin
105
+ return store.get_rate(from, :EUR) / store.get_rate(to, :EUR)
106
+ rescue
107
+ raise UnknownRate
108
+ end
109
+ end
110
+
111
+ ##
112
+ # Flushes all the rates if they are expired.
113
+ #
114
+ # @return [Boolean]
115
+ def expire_rates
116
+ if self.class.ttl_in_seconds && self.class.rates_expiration <= Time.now
117
+ flush_rates
118
+ self.class.refresh_rates_expiration!
119
+ true
120
+ else
121
+ false
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ ##
128
+ # Makes an api call to populate all of the exchange rates in the in
129
+ # memory store.
130
+ def fetch_rates
131
+ data = build_uri.read
132
+ extract_rates(data)
133
+ end
134
+
135
+ ##
136
+ # Build a URI for the given arguments.
137
+ #
138
+ # @return [URI::HTTP]
139
+ def build_uri
140
+ URI::HTTP.build(
141
+ host: SERVICE_HOST,
142
+ path: SERVICE_PATH,
143
+ query: "access_key=#{access_key}"
144
+ )
145
+ end
146
+
147
+ ##
148
+ # Takes the response from fixer.io and extract the rates and adds them to
149
+ # the rates store.
150
+ #
151
+ # @param [String] data The hash of rates from fixer to decode.
152
+ def extract_rates(data)
153
+ rates = JSON.parse(data)['rates']
154
+ rates.each do |currency, rate|
155
+ store.add_rate(currency, :EUR, 1 / BigDecimal(rate.to_s))
156
+ end
157
+ rescue
158
+ raise FixerCurrencyFetchError
159
+ end
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,27 @@
1
+ module Money::RatesStore
2
+ module RateRemovalSupport
3
+ # Remove a conversion rate and returns it. Uses +Mutex+ to synchronize data access.
4
+ #
5
+ # @param [String] currency_iso_from Currency to exchange from.
6
+ # @param [String] currency_iso_to Currency to exchange to.
7
+ #
8
+ # @return [Numeric]
9
+ #
10
+ # @example
11
+ # store = Money::RatesStore::Memory.new
12
+ # store.remove_rate("USD", "CAD")
13
+ # store.remove_rate("CAD", "USD")
14
+ def remove_rate(currency_iso_from, currency_iso_to)
15
+ transaction { index.delete rate_key_for(currency_iso_from, currency_iso_to) }
16
+ end
17
+
18
+ # Clears all conversion rates. Uses +Mutex+ to synchronize data access.
19
+ #
20
+ # @example
21
+ # store = Money::RatesStore::Memory.new
22
+ # store.clear_rates
23
+ def clear_rates
24
+ transaction { @index = {} }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,142 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'money'
4
+ require 'money/bank/fixer_currency'
5
+
6
+ describe Money::Bank::FixerCurrency do
7
+ before :each do
8
+ @bank = Money::Bank::FixerCurrency.new('123')
9
+ end
10
+
11
+ context 'given ttl_in_seconds' do
12
+ before(:each) do
13
+ Money::Bank::FixerCurrency.ttl_in_seconds = 86_400
14
+ end
15
+
16
+ it 'should accept a ttl_in_seconds option' do
17
+ expect(Money::Bank::FixerCurrency.ttl_in_seconds).to eq(86_400)
18
+ end
19
+
20
+ describe '.refresh_rates_expiration!' do
21
+ it 'set the #rates_expiration using the TTL and the current time' do
22
+ new_time = Time.now
23
+ Timecop.freeze(new_time)
24
+ Money::Bank::FixerCurrency.refresh_rates_expiration!
25
+ expect(Money::Bank::FixerCurrency.rates_expiration)
26
+ .to eq(new_time + 86_400)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#get_rate' do
32
+ before(:each) do
33
+ @bank.flush_rates
34
+ @bank.store.add_rate(:EUR, :EUR, 1.0)
35
+ end
36
+
37
+ it 'should try to expire the rates' do
38
+ expect(@bank).to receive(:expire_rates).once
39
+ @bank.get_rate(:EUR, :EUR)
40
+ end
41
+
42
+ it 'should return the correct rate' do
43
+ expect(@bank.get_rate(:EUR, :EUR)).to eq(1.0)
44
+ end
45
+
46
+ context 'when rate is unknown' do
47
+ before(:each) do
48
+ @bank.flush_rates
49
+ allow(@bank).to receive(:fetch_rates) do
50
+ @bank.store.add_rate(:EUR, :EUR, 1.0)
51
+ end
52
+ end
53
+
54
+ it 'should call #fetch_rates' do
55
+ expect(@bank).to receive(:fetch_rates).once
56
+ @bank.get_rate(:EUR, :EUR)
57
+ end
58
+
59
+ it 'should store the rate for faster retreival' do
60
+ @bank.get_rate(:EUR, :EUR)
61
+ expect(@bank.store.instance_variable_get('@index'))
62
+ .to include('EUR_TO_EUR')
63
+ end
64
+
65
+ context 'when exhange rate is not found' do
66
+ it 'should raise UnknownRate error' do
67
+ expect { @bank.get_rate('VND', :USD) }
68
+ .to raise_error(Money::Bank::UnknownRate)
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'when rate is known' do
74
+ it 'should not use #fetch_rates' do
75
+ expect(@bank).to_not receive(:fetch_rates)
76
+ @bank.get_rate(:EUR, :EUR)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe '#flush_rates' do
82
+ before(:each) do
83
+ @bank.store.add_rate(:EUR, :EUR, 1.0)
84
+ end
85
+
86
+ it 'should empty @rates' do
87
+ @bank.get_rate(:EUR, :EUR)
88
+ @bank.flush_rates
89
+ expect(@bank.store.instance_variable_get('@index')).to eq({})
90
+ end
91
+ end
92
+
93
+ describe '#flush_rate' do
94
+ before(:each) do
95
+ allow(@bank).to(receive(:fetch_rates).once) do
96
+ @bank.store.add_rate('JPY', :EUR, 107)
97
+ @bank.store.add_rate(:USD, :EUR, 1.2)
98
+ end
99
+ end
100
+
101
+ it 'should remove a specific rate from @rates' do
102
+ @bank.get_rate(:USD, :JPY)
103
+ @bank.flush_rate(:USD, :EUR)
104
+ expect(@bank.store.instance_variable_get('@index'))
105
+ .to include('JPY_TO_EUR')
106
+ expect(@bank.store.instance_variable_get('@index'))
107
+ .to_not include('USD_TO_EUR')
108
+ end
109
+ end
110
+
111
+ describe '#expire_rates' do
112
+ before do
113
+ Money::Bank::FixerCurrency.ttl_in_seconds = 1000
114
+ end
115
+
116
+ context 'when the ttl has expired' do
117
+ before do
118
+ new_time = Time.now + 1001
119
+ Timecop.freeze(new_time)
120
+ end
121
+
122
+ it 'should flush all rates' do
123
+ expect(@bank).to receive(:flush_rates)
124
+ @bank.expire_rates
125
+ end
126
+
127
+ it 'updates the next expiration time' do
128
+ exp_time = Time.now + 1000
129
+
130
+ @bank.expire_rates
131
+ expect(Money::Bank::FixerCurrency.rates_expiration).to eq(exp_time)
132
+ end
133
+ end
134
+
135
+ context 'when the ttl has not expired' do
136
+ it 'not should flush all rates' do
137
+ expect(@bank).to_not receive(:flush_rates)
138
+ @bank.expire_rates
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,9 @@
1
+ require 'timecop'
2
+
3
+ RSpec.configure do |config|
4
+ end
5
+
6
+ def load_rate_http_response(name)
7
+ f = File.expand_path("../rates/#{name}.html", __FILE__)
8
+ File.read(f, :encoding => 'iso-8859-1')
9
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fixer_currency
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.4.2
5
+ platform: ruby
6
+ authors:
7
+ - Emily Wilson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-07-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.8
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.8
55
+ - !ruby/object:Gem::Dependency
56
+ name: money
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '6.7'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '6.7'
69
+ description: |-
70
+ FixerCurrency extends Money::Bank::Base and gives you access
71
+ to the current fixer.io exchange rates.
72
+ email:
73
+ - emilywilson@privy.com
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".gemtest"
79
+ - AUTHORS
80
+ - CHANGELOG.md
81
+ - LICENSE
82
+ - README.md
83
+ - Rakefile
84
+ - fixer_currency.gemspec
85
+ - lib/money/bank/fixer_currency.rb
86
+ - lib/money/rates_store/rate_removal_support.rb
87
+ - spec/fixer_currency_with_json_spec.rb
88
+ - spec/spec_helper.rb
89
+ homepage: https://github.com/Privy/fixer_currency
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.7.6
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: Access the fixer.io exchange rate data.
113
+ test_files: []