currency-exchange 0.1.0 → 0.2.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 +4 -4
- data/.rubocop.yml +3 -0
- data/README.md +1 -1
- data/lib/currency_exchange.rb +1 -0
- data/lib/currency_exchange/google.rb +4 -1
- data/lib/currency_exchange/rate.rb +16 -6
- data/lib/currency_exchange/version.rb +1 -1
- data/lib/currency_exchange/xe.rb +40 -0
- data/lib/currency_exchange/yahoo.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cae34a8ff24cbf2c72da3a25d154c0df7f50f4eb
|
4
|
+
data.tar.gz: 70bb79bccf54be8082b548afd9dbe51fa134b5d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd109387b7dcf9f9617236e9ce4bca62d21077111d947e9ec8b76f34c58a9b72ed1235a03f480312296d366900b88bc64289ae9333ce0d66f7d4fd072f1600ca
|
7
|
+
data.tar.gz: de290948bfd0a34dc4b0a483af2f831ee67bf8a6b553b1b854044b81d4e79041a7cf2e11c4c24ea20fa9124a938453097a8e39e07c76ce81ee35f633f2b323af
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
data/lib/currency_exchange.rb
CHANGED
@@ -10,9 +10,11 @@ class CurrencyExchange::Google
|
|
10
10
|
exchange = Nokogiri::HTML(resp).css('#currency_converter_result')
|
11
11
|
currency1 = exchange.children.first.text.split(' ')[1]
|
12
12
|
rate, currency2 = exchange.css('.bld').inner_text.split(' ')
|
13
|
-
CurrencyExchange::Rate.new(
|
13
|
+
CurrencyExchange::Rate.new("#{currency1}/#{currency2}", rate)
|
14
14
|
end
|
15
15
|
|
16
|
+
# Private Methods
|
17
|
+
|
16
18
|
def self.request_rate(query)
|
17
19
|
CurrencyExchange::Network.get "#{BASE_URL}?#{query_builder(query)}"
|
18
20
|
end
|
@@ -20,4 +22,5 @@ class CurrencyExchange::Google
|
|
20
22
|
def self.query_builder(query)
|
21
23
|
QUERY % query
|
22
24
|
end
|
25
|
+
private_class_method :request_rate, :query_builder
|
23
26
|
end
|
@@ -3,12 +3,12 @@ class CurrencyExchange::Rate
|
|
3
3
|
|
4
4
|
DATE_FORMAT = '%m/%d/%Y %H:%M %P'
|
5
5
|
|
6
|
-
def initialize(name
|
6
|
+
def initialize(name, rate, options = {})
|
7
7
|
@name = name
|
8
8
|
@rate = rate.to_f
|
9
|
-
@time = parse_date date, time
|
10
|
-
@ask = ask.to_f
|
11
|
-
@bid = bid.to_f
|
9
|
+
@time = parse_date options[:date], options[:time]
|
10
|
+
@ask = options[:ask].to_f
|
11
|
+
@bid = options[:bid].to_f
|
12
12
|
end
|
13
13
|
|
14
14
|
def convert_value(value)
|
@@ -19,9 +19,19 @@ class CurrencyExchange::Rate
|
|
19
19
|
CurrencyExchange::Yahoo.get_rates [[currency1, currency2]]
|
20
20
|
end
|
21
21
|
|
22
|
+
private
|
23
|
+
|
22
24
|
def parse_date(date, time)
|
25
|
+
parse_date_format(date, time) || parse_date_no_format(date) || Time.now
|
26
|
+
end
|
27
|
+
|
28
|
+
def parse_date_format(date, time)
|
23
29
|
Time.strptime "#{date} #{time}", DATE_FORMAT
|
24
|
-
|
25
|
-
|
30
|
+
rescue ArgumentError
|
31
|
+
end
|
32
|
+
|
33
|
+
def parse_date_no_format(date)
|
34
|
+
Time.parse date
|
35
|
+
rescue ArgumentError, TypeError
|
26
36
|
end
|
27
37
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class CurrencyExchange::Xe
|
2
|
+
BASE_URL = 'http://www.xe.com/currencyconverter/convert/'
|
3
|
+
QUERY = 'Amount=1&From=%s&To=%s'
|
4
|
+
|
5
|
+
def self.get_rate(query)
|
6
|
+
rates_parser request_rate(query)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.rates_parser(resp)
|
10
|
+
doc = Nokogiri::HTML(resp)
|
11
|
+
date = parse_date(doc)
|
12
|
+
currency1, currency2, rate = parse_rate doc
|
13
|
+
|
14
|
+
CurrencyExchange::Rate.new("#{currency1}/#{currency2}", rate, date: date)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Private Methods
|
18
|
+
|
19
|
+
def self.request_rate(query)
|
20
|
+
CurrencyExchange::Network.get "#{BASE_URL}?#{query_builder(query)}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.query_builder(query)
|
24
|
+
QUERY % query
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.parse_date(doc)
|
28
|
+
doc.css('.uccMMR').css('a').children.first.inner_text.
|
29
|
+
split('Mid-market rates: ').last
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.parse_rate(doc)
|
33
|
+
exchange = doc.css('.uccResUnit').css('.leftCol')[0].inner_text
|
34
|
+
currency1, currency2 = exchange.split(' = ')
|
35
|
+
currency1 = currency1.split(' ').last
|
36
|
+
rate, currency2 = currency2.split(' ')
|
37
|
+
[currency1, currency2, rate]
|
38
|
+
end
|
39
|
+
private_class_method :request_rate, :query_builder, :parse_date, :parse_rate
|
40
|
+
end
|
@@ -26,7 +26,7 @@ class CurrencyExchange::Yahoo
|
|
26
26
|
node.each do |attribute|
|
27
27
|
hash[attribute.name.downcase.to_sym] = attribute.inner_text
|
28
28
|
end
|
29
|
-
CurrencyExchange::Rate.new(hash)
|
29
|
+
CurrencyExchange::Rate.new(hash[:name], hash[:rate], hash)
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.query_builder(array)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: currency-exchange
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricardo Leitão
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- lib/currency_exchange/network.rb
|
131
131
|
- lib/currency_exchange/rate.rb
|
132
132
|
- lib/currency_exchange/version.rb
|
133
|
+
- lib/currency_exchange/xe.rb
|
133
134
|
- lib/currency_exchange/yahoo.rb
|
134
135
|
homepage: https://github.com/letz/currency_exchange
|
135
136
|
licenses:
|