currency-exchange 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 121b7ded7102fe40a445a02f76676947e2ed98b0
4
- data.tar.gz: 1af8a71511b96ba4cdd1faabbe67e3be4e9f8654
3
+ metadata.gz: cae34a8ff24cbf2c72da3a25d154c0df7f50f4eb
4
+ data.tar.gz: 70bb79bccf54be8082b548afd9dbe51fa134b5d7
5
5
  SHA512:
6
- metadata.gz: dfb57b60ceab51c8b007a8cee95ce0667c7e8f7dd906eea941263276aedbff2921b8a581580d6ab78274e9bbc9e7a88bc03b3be9fb913f0a06c7ff4b105b730f
7
- data.tar.gz: bff669b2ae7c0bc07c5e70a58f2d75c133d69c4361611f2fb8a8b8fc7a8eea5aaec0c0b3b3efa7bfaf8a59d2e58f8dc27fc08fd0881ec7bf6a8effcdba983180
6
+ metadata.gz: fd109387b7dcf9f9617236e9ce4bca62d21077111d947e9ec8b76f34c58a9b72ed1235a03f480312296d366900b88bc64289ae9333ce0d66f7d4fd072f1600ca
7
+ data.tar.gz: de290948bfd0a34dc4b0a483af2f831ee67bf8a6b553b1b854044b81d4e79041a7cf2e11c4c24ea20fa9124a938453097a8e39e07c76ce81ee35f633f2b323af
data/.rubocop.yml CHANGED
@@ -265,3 +265,6 @@ UnderscorePrefixedVariableName:
265
265
 
266
266
  Void:
267
267
  Enabled: false
268
+
269
+ Rails/TimeZone:
270
+ Enabled: false
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- https://travis-ci.org/letz/ruby-pushbullet.svg?branch=master
1
+ [![Build Status](https://travis-ci.org/letz/currency_exchange.svg?branch=master)](https://travis-ci.org/letz/currency_exchange)
2
2
 
3
3
  # CurrencyExchange
4
4
 
@@ -7,4 +7,5 @@ require 'currency_exchange/version'
7
7
  require 'currency_exchange/network'
8
8
  require 'currency_exchange/yahoo'
9
9
  require 'currency_exchange/google'
10
+ require 'currency_exchange/xe'
10
11
  require 'currency_exchange/rate'
@@ -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(name: "#{currency1}/#{currency2}", rate: rate)
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:, rate:, date: nil, time: nil, ask: nil, bid: nil)
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
- rescue ArgumentError
25
- Time.zone.now
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
@@ -1,3 +1,3 @@
1
1
  class CurrencyExchange
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  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.1.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: