fxpotato 0.6.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fxpotato/cli.rb +3 -1
- data/lib/fxpotato/cli_formatter.rb +24 -0
- data/lib/fxpotato/fxrate.rb +23 -0
- data/lib/fxpotato/rate_calculator.rb +5 -0
- data/lib/fxpotato/version.rb +1 -1
- data/lib/fxpotato.rb +12 -11
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1fd9bbd3b50755b6dda523b4588e9bb97ad6814
|
4
|
+
data.tar.gz: d3ffe9890aeeb6f849208538e5c093e5ff8cd83e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c371b803b61128c1a9be2aba59153ed2037bab1fa622a6b64d6bf2447c30e9d3924011b2141d73628be0b611c12e64516e3ad5d98686915a17a85184ab210f3e
|
7
|
+
data.tar.gz: 5c0c5f4a2368724b1d8c7157c5a4355da88378b4ae063f7c4f7e2b66d9826375034ce7ec11ef936992d48ab5905f02b5058307f9a817fce8ad3fcbce9d456907
|
data/lib/fxpotato/cli.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'fxpotato'
|
3
3
|
require 'date'
|
4
|
+
require 'fxpotato/cli_formatter'
|
4
5
|
|
5
6
|
module FxPotato
|
6
7
|
class CLI < Thor
|
@@ -9,7 +10,8 @@ module FxPotato
|
|
9
10
|
def getrate(base, target)
|
10
11
|
date = options[:date] || Date.today
|
11
12
|
begin
|
12
|
-
|
13
|
+
fxrate = FxPotato.at(date, base, target)
|
14
|
+
puts CLIFormatter.result(fxrate)
|
13
15
|
rescue RuntimeError => message
|
14
16
|
puts message
|
15
17
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module FxPotato
|
2
|
+
class CLIFormatter
|
3
|
+
def self.result(fxrate)
|
4
|
+
fxrate && fxrate['rate'] ? pass_message(fxrate) : fail_message(fxrate)
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
def self.pass_message(fxrate)
|
9
|
+
"Exchange rate from #{key_and_rate(fxrate['base'])} to #{key_and_rate(fxrate['target'])} on #{fxrate['date']}: #{fxrate['rate']}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.fail_message(fxrate)
|
13
|
+
"Unable to calculate that exchange rate, here's why:\n#{inspect_rate_block(fxrate['base'], fxrate['date'])}\n#{inspect_rate_block(fxrate['target'], fxrate['date'])}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.key_and_rate(rate_block)
|
17
|
+
"#{rate_block['key']}(#{rate_block['rate']})"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.inspect_rate_block(rate_block, date)
|
21
|
+
rate_block['rate'] ? "" : "\tUnable to find rate for #{rate_block['key']} on #{date}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module FxPotato
|
2
|
+
class FxRate
|
3
|
+
attr_reader :base_key, :base_rate, :target_key, :target_rate, :date, :rate
|
4
|
+
def initialize(base_key, base_rate, target_key, target_rate, date, rate)
|
5
|
+
@base_key, @base_rate, @target_key, @target_rate, @date, @rate = base_key, base_rate, target_key, target_rate, date, rate
|
6
|
+
end
|
7
|
+
|
8
|
+
def serialize
|
9
|
+
{
|
10
|
+
'date' => @date,
|
11
|
+
'base' => {
|
12
|
+
'key' => @base_key,
|
13
|
+
'rate' => @base_rate
|
14
|
+
},
|
15
|
+
'target' => {
|
16
|
+
'key' => @target_key,
|
17
|
+
'rate' => @target_rate
|
18
|
+
},
|
19
|
+
'rate' => @rate
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/fxpotato/version.rb
CHANGED
data/lib/fxpotato.rb
CHANGED
@@ -4,21 +4,22 @@ require 'fxpotato/xml_repo'
|
|
4
4
|
require 'fxpotato/rate_store'
|
5
5
|
require 'fxpotato/rate_fetcher'
|
6
6
|
require 'fxpotato/rate_calculator'
|
7
|
+
require 'fxpotato/fxrate'
|
7
8
|
require "fxpotato/railtie" if defined?(Rails)
|
8
9
|
|
9
10
|
module FxPotato
|
10
|
-
def self.at(date,
|
11
|
-
|
12
|
-
|
13
|
-
raise "Must specify to_currency" if to_currency.nil?
|
11
|
+
def self.at(date, base_key, target_key)
|
12
|
+
base_rate = RateStore.get(self.repo, date, base_key)
|
13
|
+
target_rate = RateStore.get(self.repo, date, target_key)
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
FxRate.new(
|
16
|
+
base_key,
|
17
|
+
base_rate,
|
18
|
+
target_key,
|
19
|
+
target_rate,
|
20
|
+
date,
|
21
|
+
RateCalculator.calculate(base_rate, target_rate)
|
22
|
+
).serialize
|
22
23
|
end
|
23
24
|
|
24
25
|
def self.fetch_new_rates
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fxpotato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liam Stupid Name Humphreys
|
@@ -160,6 +160,8 @@ files:
|
|
160
160
|
- fxpotato.gemspec
|
161
161
|
- lib/fxpotato.rb
|
162
162
|
- lib/fxpotato/cli.rb
|
163
|
+
- lib/fxpotato/cli_formatter.rb
|
164
|
+
- lib/fxpotato/fxrate.rb
|
163
165
|
- lib/fxpotato/paths.rb
|
164
166
|
- lib/fxpotato/railtie.rb
|
165
167
|
- lib/fxpotato/rate_calculator.rb
|