currency_converter 1.1.1 → 1.1.2
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 +4 -4
- data/.coveralls.yml +2 -0
- data/.travis.yml +1 -0
- data/Gemfile +4 -0
- data/README.md +6 -4
- data/currency_converter.gemspec +6 -7
- data/lib/currency_converter/google.rb +3 -5
- data/lib/currency_converter/version.rb +1 -1
- data/lib/currency_converter/yahoo.rb +11 -15
- data/spec/currency_converter/google_spec.rb +10 -10
- data/spec/currency_converter/yahoo_spec.rb +10 -10
- data/spec/spec_helper.rb +9 -1
- metadata +25 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5d941b72d7db2416895b8934b4acac8fd2739f3e
|
|
4
|
+
data.tar.gz: 03e7bd53d1984e7d0e17200f18af2f111e37e407
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e9011f2aef8d40a5a1bf471e4f9a85ebeecf693b2c2fa6ccf0927ed4dceb929687deb56f4d04f1f1dacb75aed8e9eaa18c3f91d3dbf3338e072d096ff56d68a1
|
|
7
|
+
data.tar.gz: 3e358814142b2d4b06780f0ac742ee6e430af20c04eff51fb99e4d0b80f993e3e7f5d3d57437079fd18f7e5b854af80fba6dc96b5c93ccda88195886b2c6fdad
|
data/.coveralls.yml
ADDED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# CurrencyConverter
|
|
2
2
|
|
|
3
|
+
[](http://badge.fury.io/rb/currency_converter) [](https://travis-ci.org/dark-prince/currency_converter) [](https://codeclimate.com/github/dark-prince/currency_converter) [](https://gemnasium.com/dark-prince/currency_converter) [](http://opensource.org/licenses/MIT) [](https://coveralls.io/r/dark-prince/currency_converter?branch=master)
|
|
4
|
+
|
|
3
5
|
Simple Ruby API to get exchange rates from currencies using Google finance currency converter and Yahoo finance currency converter. You can convert currencies directly through this library.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
@@ -21,19 +23,19 @@ Or install it yourself as:
|
|
|
21
23
|
To convert between two currencies using Google finance currency converter:
|
|
22
24
|
|
|
23
25
|
currency_converter = CurrencyConverter::Google.new
|
|
24
|
-
currency_converter.exchange(
|
|
26
|
+
currency_converter.exchange('EUR', 'USD', 100)
|
|
25
27
|
=> 132.89
|
|
26
28
|
|
|
27
|
-
currency_converter.exchange(
|
|
29
|
+
currency_converter.exchange('USD', 'EUR', 100)
|
|
28
30
|
=> 75.15
|
|
29
31
|
|
|
30
32
|
To convert between two currencies using Yahoo finance currency converter:
|
|
31
33
|
|
|
32
34
|
currency_converter = CurrencyConverter::Yahoo.new
|
|
33
|
-
currency_converter.exchange(
|
|
35
|
+
currency_converter.exchange('EUR', 'USD', 1)
|
|
34
36
|
=> 1.33
|
|
35
37
|
|
|
36
|
-
currency_converter.exchange(
|
|
38
|
+
currency_converter.exchange('USD', 'EUR', 1)
|
|
37
39
|
=> 0.75
|
|
38
40
|
|
|
39
41
|
## Contributing
|
data/currency_converter.gemspec
CHANGED
|
@@ -20,13 +20,12 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
21
21
|
spec.require_paths = ['lib']
|
|
22
22
|
|
|
23
|
-
spec.required_ruby_version = '>=
|
|
23
|
+
spec.required_ruby_version = '>= 2.0.0'
|
|
24
24
|
spec.add_dependency 'nokogiri'
|
|
25
25
|
|
|
26
|
-
spec.add_development_dependency 'bundler'
|
|
27
|
-
spec.add_development_dependency 'rake'
|
|
28
|
-
|
|
29
|
-
spec.add_development_dependency '
|
|
30
|
-
spec.add_development_dependency '
|
|
31
|
-
spec.add_development_dependency 'kramdown', '~> 1.1'
|
|
26
|
+
spec.add_development_dependency 'bundler'
|
|
27
|
+
spec.add_development_dependency 'rake'
|
|
28
|
+
spec.add_development_dependency 'rspec'
|
|
29
|
+
spec.add_development_dependency 'yard'
|
|
30
|
+
spec.add_development_dependency 'kramdown'
|
|
32
31
|
end
|
|
@@ -19,8 +19,8 @@ module CurrencyConverter
|
|
|
19
19
|
#
|
|
20
20
|
# @example
|
|
21
21
|
# currency_converter = CurrencyConverter::Google.new
|
|
22
|
-
# currency_converter.exchange(
|
|
23
|
-
# currency_converter.exchange(
|
|
22
|
+
# currency_converter.exchange('USD', 'EUR', 100)
|
|
23
|
+
# currency_converter.exchange('USD', 'INR', 100)
|
|
24
24
|
def exchange(from, to, fixnum)
|
|
25
25
|
@from_currency = from.upcase.to_sym
|
|
26
26
|
@to_currency = to.upcase.to_sym
|
|
@@ -52,16 +52,14 @@ module CurrencyConverter
|
|
|
52
52
|
|
|
53
53
|
return $1
|
|
54
54
|
rescue Timeout::Error
|
|
55
|
-
raise StandardError,
|
|
55
|
+
raise StandardError, 'Please check your internet connection'
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
# Raise errors for invalid currencies.
|
|
59
58
|
def validate_currency
|
|
60
59
|
raise CurrencyConverter::UnknownCurrency.new(from_currency) unless CurrencyConverter::CURRENCIES.has_key?(from_currency)
|
|
61
60
|
raise CurrencyConverter::UnknownCurrency.new(to_currency) unless CurrencyConverter::CURRENCIES.has_key?(to_currency)
|
|
62
61
|
end
|
|
63
62
|
|
|
64
|
-
# Raise errors for missing data.
|
|
65
63
|
def validate_rate(rate)
|
|
66
64
|
raise CurrencyConverter::MissingExchangeRate.new(from_currency, to_currency) if rate.to_f.zero?
|
|
67
65
|
end
|
|
@@ -14,10 +14,12 @@ module CurrencyConverter
|
|
|
14
14
|
# Returns the array of currencies rates
|
|
15
15
|
attr_reader :rates
|
|
16
16
|
|
|
17
|
+
API_URL = 'https://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote;currency=true?view=basic'
|
|
18
|
+
|
|
17
19
|
def initialize
|
|
18
20
|
response = fetch_data
|
|
19
21
|
|
|
20
|
-
parse_rates(response
|
|
22
|
+
parse_rates(response)
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
# Receive the amount of you desire currency.
|
|
@@ -28,16 +30,16 @@ module CurrencyConverter
|
|
|
28
30
|
#
|
|
29
31
|
# @example
|
|
30
32
|
# currency_converter = CurrencyConverter::Yahoo.new
|
|
31
|
-
# currency_converter.exchange(
|
|
32
|
-
# currency_converter.exchange(
|
|
33
|
+
# currency_converter.exchange('USD', 'EUR', 100)
|
|
34
|
+
# currency_converter.exchange('USD', 'INR', 100)
|
|
33
35
|
def exchange(base, quot, amount)
|
|
34
36
|
@from_currency = base.upcase.to_sym
|
|
35
37
|
@to_currency = quot.upcase.to_sym
|
|
36
38
|
|
|
37
39
|
validate_currency
|
|
38
40
|
|
|
39
|
-
base_rate = rates[
|
|
40
|
-
quot_rate = rates[
|
|
41
|
+
base_rate = rates[from_currency].to_f
|
|
42
|
+
quot_rate = rates[to_currency].to_f
|
|
41
43
|
|
|
42
44
|
rate = base_rate.zero? ? 0 : (quot_rate / base_rate)
|
|
43
45
|
validate_rate(rate)
|
|
@@ -48,33 +50,27 @@ module CurrencyConverter
|
|
|
48
50
|
private
|
|
49
51
|
|
|
50
52
|
def fetch_data
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
uri = URI.parse(api)
|
|
54
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
|
55
|
-
http.read_timeout = http.open_timeout = 20
|
|
56
|
-
http.start { http.request(Net::HTTP::Get.new(uri.to_s)) }
|
|
53
|
+
Net::HTTP.get(URI(API_URL))
|
|
57
54
|
end
|
|
58
55
|
|
|
59
56
|
def parse_rates(html)
|
|
60
|
-
@rates = { :
|
|
57
|
+
@rates = { USD: 1.0 }
|
|
61
58
|
|
|
62
59
|
result = Nokogiri::HTML(html)
|
|
60
|
+
|
|
63
61
|
result.css('resource').each do |resource|
|
|
64
62
|
symbol = resource.xpath(".//field[@name='symbol']").text[0,3]
|
|
65
63
|
price = resource.xpath(".//field[@name='price']").text
|
|
66
64
|
|
|
67
|
-
|
|
65
|
+
rates[symbol.upcase.to_sym] = price.to_f unless symbol.nil? && price.nil?
|
|
68
66
|
end
|
|
69
67
|
end
|
|
70
68
|
|
|
71
|
-
# Raise errors for invalid currencies.
|
|
72
69
|
def validate_currency
|
|
73
70
|
raise UnknownCurrency.new(from_currency) unless CURRENCIES.has_key?(from_currency)
|
|
74
71
|
raise UnknownCurrency.new(to_currency) unless CURRENCIES.has_key?(to_currency)
|
|
75
72
|
end
|
|
76
73
|
|
|
77
|
-
# Raise errors for missing data.
|
|
78
74
|
def validate_rate(rate)
|
|
79
75
|
raise MissingExchangeRate.new(from_currency, to_currency) if rate.zero?
|
|
80
76
|
end
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe CurrencyConverter::Google do
|
|
4
|
-
let(:currency_converter) {
|
|
4
|
+
let(:currency_converter) { described_class.new }
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
it
|
|
8
|
-
expect(currency_converter.exchange(
|
|
6
|
+
context '#exchange' do
|
|
7
|
+
it 'returns the correct rate' do
|
|
8
|
+
expect(currency_converter.exchange('USD', 'USD', 1)).to eq 1
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
context '#validate_currency' do
|
|
13
|
+
context 'CurrencyConverter::UnknownCurrency' do
|
|
14
14
|
it 'raise an error on an unsupported currency code' do
|
|
15
|
-
expect { currency_converter.exchange(
|
|
16
|
-
expect { currency_converter.exchange(
|
|
15
|
+
expect { currency_converter.exchange('EUR', 'UNKNOWN', 100) }.to raise_error(CurrencyConverter::UnknownCurrency)
|
|
16
|
+
expect { currency_converter.exchange('UNKNOWN', 'EUR', 100) }.to raise_error(CurrencyConverter::UnknownCurrency)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it 'doesn\'t raise an error for supported currency codes' do
|
|
20
|
-
expect { currency_converter.exchange(
|
|
20
|
+
expect { currency_converter.exchange('EUR', 'USD', 100) }.to_not raise_error
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe CurrencyConverter::Yahoo do
|
|
4
|
-
let(:currency_converter) {
|
|
4
|
+
let(:currency_converter) { described_class.new }
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
it
|
|
8
|
-
expect(currency_converter.exchange(
|
|
6
|
+
context '#exchange' do
|
|
7
|
+
it 'returns the correct rate' do
|
|
8
|
+
expect(currency_converter.exchange('USD', 'USD', 1)).to eq 1
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
context '#validate_currency' do
|
|
13
|
+
context 'CurrencyConverter::UnknownCurrency' do
|
|
14
14
|
it 'raise an error on an unsupported currency code' do
|
|
15
|
-
expect { currency_converter.exchange(
|
|
16
|
-
expect { currency_converter.exchange(
|
|
15
|
+
expect { currency_converter.exchange('EUR', 'UNKNOWN', 100) }.to raise_error(CurrencyConverter::UnknownCurrency)
|
|
16
|
+
expect { currency_converter.exchange('UNKNOWN', 'EUR', 100) }.to raise_error(CurrencyConverter::UnknownCurrency)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it 'doesn\'t raise an error for supported currency codes' do
|
|
20
|
-
expect { currency_converter.exchange(
|
|
20
|
+
expect { currency_converter.exchange('EUR', 'USD', 100) }.to_not raise_error
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: currency_converter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Diganta Mandal
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-12-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|
|
@@ -28,72 +28,72 @@ dependencies:
|
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rspec
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: yard
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0
|
|
75
|
+
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0
|
|
82
|
+
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: kramdown
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - "
|
|
87
|
+
- - ">="
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
89
|
+
version: '0'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - "
|
|
94
|
+
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
96
|
+
version: '0'
|
|
97
97
|
description: Google provides a web site to converts currencies using exchange rates
|
|
98
98
|
but they have not provided any API for ruby. This is a small library that converts
|
|
99
99
|
currencies exchange rate. You can convert currencies directly through this library.
|
|
@@ -103,6 +103,7 @@ executables: []
|
|
|
103
103
|
extensions: []
|
|
104
104
|
extra_rdoc_files: []
|
|
105
105
|
files:
|
|
106
|
+
- ".coveralls.yml"
|
|
106
107
|
- ".gitignore"
|
|
107
108
|
- ".rspec"
|
|
108
109
|
- ".travis.yml"
|
|
@@ -132,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
132
133
|
requirements:
|
|
133
134
|
- - ">="
|
|
134
135
|
- !ruby/object:Gem::Version
|
|
135
|
-
version:
|
|
136
|
+
version: 2.0.0
|
|
136
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
138
|
requirements:
|
|
138
139
|
- - ">="
|
|
@@ -140,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
140
141
|
version: '0'
|
|
141
142
|
requirements: []
|
|
142
143
|
rubyforge_project:
|
|
143
|
-
rubygems_version: 2.6.
|
|
144
|
+
rubygems_version: 2.6.14
|
|
144
145
|
signing_key:
|
|
145
146
|
specification_version: 4
|
|
146
147
|
summary: Google provides a web site to converts currencies using exchange rates but
|