fxpotato 0.6.0 → 1.0.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/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
|