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 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: