open_exchange_rates 0.4.0 → 0.6.0

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: b408da323d340240c7e8f2e3ef5492450c191374a2dcec160312f5a00e82d8b6
4
+ data.tar.gz: 3ca452d8c8d987e4381639af769684a85a7fcf2c484e3c757eda586bea5e08e5
5
+ SHA512:
6
+ metadata.gz: 8a19772242da9aa04bf74716d682a72487bf3fa10ebfd4fa7d473c711a4b49c07efe713d15b9a99af48f962fe4bf17d221a02f5507c5ddcf10860e1fc07785f1
7
+ data.tar.gz: 67477660c6bcf803e3359af89bab4f85c125e9dc9b8621c93bca666b941f351531122ec8ed25949b2ada918ae50d0d221b0d248c787a7c62cdf938e73edcea20
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  .bundle
5
5
  .config
6
6
  .yardoc
7
+ .ruby-version
7
8
  Gemfile.lock
8
9
  InstalledFiles
9
10
  _yardoc
data/.hound.yml ADDED
@@ -0,0 +1,2 @@
1
+ ruby:
2
+ config_file: .rubocop.yml
data/.rubocop.yml ADDED
@@ -0,0 +1,247 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "vendor/**/*"
4
+ - "db/schema.rb"
5
+ UseCache: false
6
+ Style/CollectionMethods:
7
+ Description: Preferred collection methods.
8
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#map-find-select-reduce-size
9
+ Enabled: true
10
+ PreferredMethods:
11
+ collect: map
12
+ collect!: map!
13
+ find: detect
14
+ find_all: select
15
+ reduce: inject
16
+ Style/DotPosition:
17
+ Description: Checks the position of the dot in multi-line method calls.
18
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains
19
+ Enabled: true
20
+ EnforcedStyle: trailing
21
+ SupportedStyles:
22
+ - leading
23
+ - trailing
24
+ Style/FileName:
25
+ Description: Use snake_case for source file names.
26
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-files
27
+ Enabled: false
28
+ Exclude: []
29
+ Style/GuardClause:
30
+ Description: Check for conditionals that can be replaced with guard clauses
31
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals
32
+ Enabled: false
33
+ MinBodyLength: 1
34
+ Style/IfUnlessModifier:
35
+ Description: Favor modifier if/unless usage when you have a single-line body.
36
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier
37
+ Enabled: false
38
+ MaxLineLength: 80
39
+ Style/OptionHash:
40
+ Description: Don't use option hashes when you can use keyword arguments.
41
+ Enabled: false
42
+ Style/PercentLiteralDelimiters:
43
+ Description: Use `%`-literal delimiters consistently
44
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-literal-braces
45
+ Enabled: false
46
+ PreferredDelimiters:
47
+ "%": "()"
48
+ "%i": "()"
49
+ "%q": "()"
50
+ "%Q": "()"
51
+ "%r": "{}"
52
+ "%s": "()"
53
+ "%w": "()"
54
+ "%W": "()"
55
+ "%x": "()"
56
+ Style/PredicateName:
57
+ Description: Check the names of predicate methods.
58
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark
59
+ Enabled: true
60
+ NamePrefix:
61
+ - is_
62
+ - has_
63
+ - have_
64
+ NamePrefixBlacklist:
65
+ - is_
66
+ Exclude:
67
+ - spec/**/*
68
+ Style/RaiseArgs:
69
+ Description: Checks the arguments passed to raise/fail.
70
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#exception-class-messages
71
+ Enabled: false
72
+ EnforcedStyle: exploded
73
+ SupportedStyles:
74
+ - compact
75
+ - exploded
76
+ Style/SignalException:
77
+ Description: Checks for proper usage of fail and raise.
78
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#fail-method
79
+ Enabled: false
80
+ EnforcedStyle: semantic
81
+ SupportedStyles:
82
+ - only_raise
83
+ - only_fail
84
+ - semantic
85
+ Style/SingleLineBlockParams:
86
+ Description: Enforces the names of some block params.
87
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#reduce-blocks
88
+ Enabled: false
89
+ Methods:
90
+ - reduce:
91
+ - a
92
+ - e
93
+ - inject:
94
+ - a
95
+ - e
96
+ Style/SingleLineMethods:
97
+ Description: Avoid single-line methods.
98
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-single-line-methods
99
+ Enabled: false
100
+ AllowIfMethodIsEmpty: true
101
+ Style/StringLiterals:
102
+ Description: Checks if uses of quotes match the configured preference.
103
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-string-literals
104
+ Enabled: true
105
+ EnforcedStyle: double_quotes
106
+ SupportedStyles:
107
+ - single_quotes
108
+ - double_quotes
109
+ Style/StringLiteralsInInterpolation:
110
+ Description: Checks if uses of quotes inside expressions in interpolated strings
111
+ match the configured preference.
112
+ Enabled: true
113
+ EnforcedStyle: single_quotes
114
+ SupportedStyles:
115
+ - single_quotes
116
+ - double_quotes
117
+ Style/TrailingCommaInArguments:
118
+ Description: 'Checks for trailing comma in argument lists.'
119
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
120
+ Enabled: false
121
+ EnforcedStyleForMultiline: no_comma
122
+ SupportedStyles:
123
+ - comma
124
+ - consistent_comma
125
+ - no_comma
126
+ Style/TrailingCommaInLiteral:
127
+ Description: 'Checks for trailing comma in array and hash literals.'
128
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
129
+ Enabled: false
130
+ EnforcedStyleForMultiline: no_comma
131
+ SupportedStyles:
132
+ - comma
133
+ - consistent_comma
134
+ - no_comma
135
+ Metrics/AbcSize:
136
+ Description: A calculated magnitude based on number of assignments, branches, and
137
+ conditions.
138
+ Enabled: false
139
+ Max: 15
140
+ Metrics/ClassLength:
141
+ Description: Avoid classes longer than 100 lines of code.
142
+ Enabled: false
143
+ CountComments: false
144
+ Max: 100
145
+ Metrics/ModuleLength:
146
+ CountComments: false
147
+ Max: 100
148
+ Description: Avoid modules longer than 100 lines of code.
149
+ Enabled: false
150
+ Metrics/CyclomaticComplexity:
151
+ Description: A complexity metric that is strongly correlated to the number of test
152
+ cases needed to validate a method.
153
+ Enabled: false
154
+ Max: 6
155
+ Metrics/MethodLength:
156
+ Description: Avoid methods longer than 10 lines of code.
157
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#short-methods
158
+ Enabled: false
159
+ CountComments: false
160
+ Max: 10
161
+ Metrics/ParameterLists:
162
+ Description: Avoid parameter lists longer than three or four parameters.
163
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#too-many-params
164
+ Enabled: false
165
+ Max: 5
166
+ CountKeywordArgs: true
167
+ Metrics/PerceivedComplexity:
168
+ Description: A complexity metric geared towards measuring complexity for a human
169
+ reader.
170
+ Enabled: false
171
+ Max: 7
172
+ Lint/AssignmentInCondition:
173
+ Description: Don't use assignment in conditions.
174
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition
175
+ Enabled: false
176
+ AllowSafeAssignment: true
177
+ Style/InlineComment:
178
+ Description: Avoid inline comments.
179
+ Enabled: false
180
+ Style/AccessorMethodName:
181
+ Description: Check the naming of accessor methods for get_/set_.
182
+ Enabled: false
183
+ Style/Alias:
184
+ Description: Use alias_method instead of alias.
185
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#alias-method
186
+ Enabled: false
187
+ Style/Documentation:
188
+ Description: Document classes and non-namespace modules.
189
+ Enabled: false
190
+ Style/DoubleNegation:
191
+ Description: Checks for uses of double negation (!!).
192
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-bang-bang
193
+ Enabled: false
194
+ Style/EachWithObject:
195
+ Description: Prefer `each_with_object` over `inject` or `reduce`.
196
+ Enabled: false
197
+ Style/EmptyLiteral:
198
+ Description: Prefer literals to Array.new/Hash.new/String.new.
199
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#literal-array-hash
200
+ Enabled: false
201
+ Style/ModuleFunction:
202
+ Description: Checks for usage of `extend self` in modules.
203
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#module-function
204
+ Enabled: false
205
+ Style/OneLineConditional:
206
+ Description: Favor the ternary operator(?:) over if/then/else/end constructs.
207
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#ternary-operator
208
+ Enabled: false
209
+ Style/PerlBackrefs:
210
+ Description: Avoid Perl-style regex back references.
211
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers
212
+ Enabled: false
213
+ Style/Send:
214
+ Description: Prefer `Object#__send__` or `Object#public_send` to `send`, as `send`
215
+ may overlap with existing methods.
216
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#prefer-public-send
217
+ Enabled: false
218
+ Style/SpecialGlobalVars:
219
+ Description: Avoid Perl-style global variables.
220
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms
221
+ Enabled: false
222
+ Style/VariableInterpolation:
223
+ Description: Don't interpolate global, instance and class variables directly in
224
+ strings.
225
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#curlies-interpolate
226
+ Enabled: false
227
+ Style/WhenThen:
228
+ Description: Use when x then ... for one-line cases.
229
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#one-line-cases
230
+ Enabled: false
231
+ Lint/EachWithObjectArgument:
232
+ Description: Check for immutable argument given to each_with_object.
233
+ Enabled: true
234
+ Lint/HandleExceptions:
235
+ Description: Don't suppress exception.
236
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions
237
+ Enabled: false
238
+ Lint/LiteralInCondition:
239
+ Description: Checks of literals used in conditions.
240
+ Enabled: false
241
+ Lint/LiteralInInterpolation:
242
+ Description: Checks for literals used in interpolation.
243
+ Enabled: false
244
+
245
+ # Custom configuration
246
+ Style/HashSyntax:
247
+ EnforcedStyle: hash_rockets
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # OpenExchangeRates
2
2
 
3
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/vlado/open_exchange_rates)
3
+ [![Code Climate](https://codeclimate.com/github/vlado/open_exchange_rates.png)](https://codeclimate.com/github/vlado/open_exchange_rates)
4
4
  [![Gem Version](https://badge.fury.io/rb/open_exchange_rates.png)](http://badge.fury.io/rb/open_exchange_rates)
5
5
 
6
6
  Ruby gem for currency conversion based on [Open Exchange Rates API](http://openexchangerates.org) - free / open source hourly-updated currency data for everybody
7
7
 
8
8
  ## Accuracy
9
9
 
10
- Please see [https://github.com/currencybot/open-exchange-rates/#accuracy](https://github.com/currencybot/open-exchange-rates/#accuracy) and/or [http://openexchangerates.org/documentation/#specification](http://openexchangerates.org/documentation/#specification)
10
+ Please see [https://github.com/josscrowcroft/open-exchange-rates#accuracy](https://github.com/josscrowcroft/open-exchange-rates#accuracy)
11
11
 
12
12
  ## Installation
13
13
 
@@ -25,7 +25,7 @@ Or install it yourself as:
25
25
 
26
26
  ## Configuration
27
27
 
28
- You will need App ID to use OpenExchangeRates, you can get one for free [here](https://openexchangerates.org/signup/). Wanna know [why App ID is needed](http://www.josscrowcroft.com/2012/projects/open-exchange-rates-update-the-partys-not-over-it-just-got-a-little-too-noisy/).
28
+ You will need App ID to use OpenExchangeRates, you can get one [here](https://openexchangerates.org/signup/) for [free](https://openexchangerates.org/signup/free).
29
29
 
30
30
  **Option 1**
31
31
 
@@ -96,7 +96,15 @@ If you omit **:from** or **:to** option conversion will be related to base curre
96
96
  4. Push to the branch (`git push origin my-new-feature`)
97
97
  5. Create new Pull Request
98
98
 
99
+ ## Running tests
100
+
101
+ 1. Copy env.example to .env `cp env.example .env`
102
+ 2. Open `.env` and enter your API ID
103
+ 3. Run `rake`
104
+
105
+
99
106
  ## Licence and Terms
100
107
 
101
- Licence - [http://openexchangerates.org/license](http://openexchangerates.org/license)
102
- Terms - [http://openexchangerates.org/terms](http://openexchangerates.org/terms)
108
+ This project rocks and uses MIT-LICENSE.
109
+
110
+ Please check Open Exchange Rates API [license](http://openexchangerates.org/license) and [terms](http://openexchangerates.org/terms) also.
@@ -10,6 +10,13 @@ module OpenExchangeRates
10
10
  end
11
11
  end
12
12
 
13
+ class RateNotFoundError < StandardError
14
+ def initialize(from_curr, to_curr)
15
+ msg = "Rate not found for #{from_curr} => #{to_curr}"
16
+ super(msg)
17
+ end
18
+ end
19
+
13
20
  attr_reader :app_id
14
21
 
15
22
  def initialize(options = {})
@@ -32,14 +39,18 @@ module OpenExchangeRates
32
39
  from_curr = response.base_currency if from_curr.empty?
33
40
  to_curr = response.base_currency if to_curr.empty?
34
41
 
42
+ unless rates[from_curr] && rates[to_curr]
43
+ raise RateNotFoundError.new(from_curr, to_curr)
44
+ end
45
+
35
46
  if from_curr == to_curr
36
- rate = 1
47
+ rate = 1.0
37
48
  elsif from_curr == response.base_currency
38
49
  rate = rates[to_curr]
39
50
  elsif to_curr == response.base_currency
40
- rate = 1 / rates[from_curr]
51
+ rate = 1.0 / rates[from_curr]
41
52
  else
42
- rate = rates[to_curr] * (1 / rates[from_curr])
53
+ rate = rates[to_curr] * (1.0 / rates[from_curr])
43
54
  end
44
55
  round(rate, 6)
45
56
  end
@@ -80,12 +91,12 @@ module OpenExchangeRates
80
91
 
81
92
  def parse_latest
82
93
  @latest_parser ||= OpenExchangeRates::Parser.new
83
- @latest_parser.parse(open("#{OpenExchangeRates::LATEST_URL}?app_id=#{@app_id}"))
94
+ @latest_parser.parse(URI.open("#{OpenExchangeRates::LATEST_URL}?app_id=#{@app_id}"))
84
95
  end
85
96
 
86
97
  def parse_on(date_string)
87
98
  @on_parser = OpenExchangeRates::Parser.new
88
- @on_parser.parse(open("#{OpenExchangeRates::BASE_URL}/historical/#{date_string}.json?app_id=#{@app_id}"))
99
+ @on_parser.parse(URI.open("#{OpenExchangeRates::BASE_URL}/historical/#{date_string}.json?app_id=#{@app_id}"))
89
100
  end
90
101
 
91
102
  end
@@ -1,3 +1,3 @@
1
1
  module OpenExchangeRates
2
- VERSION = "0.4.0"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -6,7 +6,7 @@ require "open_exchange_rates/response"
6
6
  require "open_exchange_rates/rates"
7
7
 
8
8
  module OpenExchangeRates
9
- BASE_URL = "http://openexchangerates.org"
9
+ BASE_URL = "https://openexchangerates.org/api".freeze
10
10
  LATEST_URL = "#{BASE_URL}/latest.json"
11
11
 
12
12
  class << self
@@ -14,9 +14,11 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "open_exchange_rates"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = OpenExchangeRates::VERSION
17
+ gem.license = "MIT"
17
18
 
18
19
  gem.add_dependency('yajl-ruby')
19
20
 
20
21
  gem.add_development_dependency('rr')
21
22
  gem.add_development_dependency('rake')
23
+ gem.add_development_dependency('dotenv')
22
24
  end
data/test/rates_test.rb CHANGED
@@ -57,6 +57,9 @@ class TestOpenExchangeRates < Test::Unit::TestCase
57
57
 
58
58
  assert_equal 5.944602, fx.exchange_rate(:from => "AUD", :to => "HRK")
59
59
  assert_equal 0.168220, fx.exchange_rate(:from => "HRK", :to => "AUD")
60
+
61
+ assert_equal 0.00023, fx.exchange_rate(:from => 'SLL', to: 'USD')
62
+ assert_equal 4350, fx.exchange_rate(:from => 'USD', to: 'SLL')
60
63
  end
61
64
 
62
65
  def test_exchange_rate_on_specific_date
@@ -181,8 +184,8 @@ class TestOpenExchangeRates < Test::Unit::TestCase
181
184
  assert_equal "USD", on_rates.base
182
185
 
183
186
  assert_equal 1, on_rates.rates["USD"]
184
- assert_equal 0.991118, on_rates.rates["AUD"]
185
- assert_equal 5.795542, on_rates.rates["HRK"]
187
+ assert_equal 0.989596, on_rates.rates["AUD"]
188
+ assert_equal 5.793188, on_rates.rates["HRK"]
186
189
  end
187
190
 
188
191
  def test_round
@@ -209,6 +212,18 @@ class TestOpenExchangeRates < Test::Unit::TestCase
209
212
  end
210
213
  end
211
214
 
215
+ def test_invalid_currency_code_fails_with_rate_not_found_error
216
+ fx = OpenExchangeRates::Rates.new
217
+
218
+ assert_raise(OpenExchangeRates::Rates::RateNotFoundError) do
219
+ fx.exchange_rate(:from => "???", :to => "AUD", :on => "2012-05-10")
220
+ end
221
+
222
+ assert_raise(OpenExchangeRates::Rates::RateNotFoundError) do
223
+ fx.exchange_rate(:from => "USD", :to => "???", :on => "2012-05-10")
224
+ end
225
+ end
226
+
212
227
  private
213
228
 
214
229
  def assets_root
data/test/test_helper.rb CHANGED
@@ -1,19 +1,13 @@
1
1
  require "rubygems"
2
2
  require "test/unit"
3
3
  require "rr"
4
+ require 'dotenv'
4
5
  require "open_exchange_rates"
5
6
 
6
7
  # Pick up ENV variables from .env file if exists
7
- dot_env_file_path = File.expand_path("../../.env", __FILE__)
8
- if File.exist?(dot_env_file_path)
9
- File.open(dot_env_file_path).each_line do |line|
10
- key, value = line.strip.split("=")
11
- ENV[key] = value unless key.nil? || value.nil?
12
- end
13
- end
8
+ Dotenv.load
14
9
 
15
10
  OpenExchangeRates.configuration.app_id = ENV['OPEN_EXCHANGE_RATES_APP_ID']
16
11
 
17
12
  class Test::Unit::TestCase
18
- include RR::Adapters::TestUnit
19
- end
13
+ end
metadata CHANGED
@@ -1,75 +1,82 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: open_exchange_rates
3
- version: !ruby/object:Gem::Version
4
- hash: 15
5
- prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 0
10
- version: 0.4.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Vlado Cingel
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-01-14 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2021-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: yajl-ruby
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rr
36
21
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
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: rr
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
40
31
  - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
46
34
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
49
42
  name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
50
49
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: dotenv
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
54
59
  - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
60
62
  type: :development
61
- version_requirements: *id003
62
- description: Ruby library for Open Exchange Rates API - free / open source hourly-updated currency data for everybody
63
- email:
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Ruby library for Open Exchange Rates API - free / open source hourly-updated
70
+ currency data for everybody
71
+ email:
64
72
  - vladocingel@gmail.com
65
73
  executables: []
66
-
67
74
  extensions: []
68
-
69
75
  extra_rdoc_files: []
70
-
71
- files:
72
- - .gitignore
76
+ files:
77
+ - ".gitignore"
78
+ - ".hound.yml"
79
+ - ".rubocop.yml"
73
80
  - Gemfile
74
81
  - LICENSE
75
82
  - README.md
@@ -87,41 +94,30 @@ files:
87
94
  - test/rates_test.rb
88
95
  - test/test_helper.rb
89
96
  homepage: https://github.com/vlado/open_exchange_rates
90
- licenses: []
91
-
97
+ licenses:
98
+ - MIT
99
+ metadata: {}
92
100
  post_install_message:
93
101
  rdoc_options: []
94
-
95
- require_paths:
102
+ require_paths:
96
103
  - lib
97
- required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
- requirements:
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
100
106
  - - ">="
101
- - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
- version: "0"
106
- required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
- requirements:
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
109
111
  - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 3
112
- segments:
113
- - 0
114
- version: "0"
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
115
114
  requirements: []
116
-
117
- rubyforge_project:
118
- rubygems_version: 1.8.12
115
+ rubygems_version: 3.0.3
119
116
  signing_key:
120
- specification_version: 3
117
+ specification_version: 4
121
118
  summary: Ruby library for Open Exchange Rates API
122
- test_files:
119
+ test_files:
123
120
  - test/assets/2012-05-10.json
124
121
  - test/assets/latest.json
125
122
  - test/rates_test.rb
126
123
  - test/test_helper.rb
127
- has_rdoc: