latinum 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -3
- data/lib/latinum/collection.rb +19 -0
- data/lib/latinum/formatters.rb +1 -1
- data/lib/latinum/version.rb +1 -1
- data/spec/latinum/bank_spec.rb +51 -53
- data/spec/latinum/collection_spec.rb +73 -67
- data/spec/latinum/comparison_spec.rb +15 -17
- data/spec/latinum/formatters_spec.rb +61 -55
- data/spec/latinum/integrals_spec.rb +18 -20
- data/spec/latinum/resource_spec.rb +92 -94
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d603254177726ef91a442d285c4ba917dd6cc003
|
4
|
+
data.tar.gz: bb81b377411b4ab43c8246c01c478740a0e4e8d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ae00f87d9c4a9b0a711b0736f2be1ec2e797fa4cdeb4ffc0dcedafe550b60e736e2d1ff665100f4a8665dea9bb34015458b7b55094aa8e2014033b1f3cc1705
|
7
|
+
data.tar.gz: 407e0b27c15a640b4893f70d413eb0eae70b5bcab2112c6e9af99590af9a2cda4de915740222bc332bc0653d73c1079b664a693f628fd4838643a9f9a11e0d15
|
data/README.md
CHANGED
@@ -65,10 +65,9 @@ But, you can't add resources of different names together:
|
|
65
65
|
|
66
66
|
To add multiple currencies together, use a collection:
|
67
67
|
|
68
|
-
>
|
69
|
-
> collection = Latinum::Collection.new(currencies)
|
68
|
+
> collection = Latinum::Collection.new
|
70
69
|
> collection << [ten, twenty]
|
71
|
-
>
|
70
|
+
> collection.collect(&:to_s)
|
72
71
|
=> [10.0 NZD, 20.0 AUD]
|
73
72
|
|
74
73
|
#### Calculating Totals
|
data/lib/latinum/collection.rb
CHANGED
@@ -57,6 +57,25 @@ module Latinum
|
|
57
57
|
return self
|
58
58
|
end
|
59
59
|
|
60
|
+
# Add something to this collection.
|
61
|
+
alias + <<
|
62
|
+
|
63
|
+
# Subtract something from this collection.
|
64
|
+
def - other
|
65
|
+
self << -other
|
66
|
+
end
|
67
|
+
|
68
|
+
# Allow negation of all values within the collection:
|
69
|
+
def -@
|
70
|
+
collection = self.class.new
|
71
|
+
|
72
|
+
@resources.each do |key, value|
|
73
|
+
collection.resources[key] = -value
|
74
|
+
end
|
75
|
+
|
76
|
+
return collection
|
77
|
+
end
|
78
|
+
|
60
79
|
# Get a `Resource` for the given name:
|
61
80
|
def [] key
|
62
81
|
Resource.new(@resources[key], key)
|
data/lib/latinum/formatters.rb
CHANGED
@@ -64,7 +64,7 @@ module Latinum
|
|
64
64
|
fix, frac = amount.abs.to_s('F').split(/\./, 2)
|
65
65
|
|
66
66
|
# The sign of the number
|
67
|
-
sign =
|
67
|
+
sign = '-' if amount.negative?
|
68
68
|
|
69
69
|
# Decimal places, e.g. the '.00' in '$10.00'
|
70
70
|
frac = frac[0...@places].ljust(@places, @zero)
|
data/lib/latinum/version.rb
CHANGED
data/spec/latinum/bank_spec.rb
CHANGED
@@ -21,65 +21,63 @@
|
|
21
21
|
require 'latinum'
|
22
22
|
require 'latinum/currencies/global'
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
@bank = Latinum::Bank.new(Latinum::Currencies::Global)
|
28
|
-
|
29
|
-
@bank << Latinum::ExchangeRate.new("NZD", "AUD", "0.5")
|
30
|
-
end
|
24
|
+
RSpec.describe Latinum::Bank do
|
25
|
+
before(:all) do
|
26
|
+
@bank = Latinum::Bank.new(Latinum::Currencies::Global)
|
31
27
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
resource = Latinum::Resource.new("1.12345678", "BTC")
|
45
|
-
expect(@bank.format(resource)).to be == "B⃦1.12345678 BTC"
|
46
|
-
end
|
28
|
+
@bank << Latinum::ExchangeRate.new("NZD", "AUD", "0.5")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should format the amounts correctly" do
|
32
|
+
resource = Latinum::Resource.new("10", "NZD")
|
33
|
+
|
34
|
+
expect(@bank.format(resource)).to be == "$10.00 NZD"
|
35
|
+
expect(@bank.format(resource, name: nil)).to be == "$10.00"
|
36
|
+
|
37
|
+
resource = Latinum::Resource.new("391", "AUD")
|
38
|
+
expect(@bank.format(resource)).to be == "$391.00 AUD"
|
47
39
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
40
|
+
resource = Latinum::Resource.new("-100", "NZD")
|
41
|
+
expect(@bank.format(resource)).to be == "-$100.00 NZD"
|
42
|
+
|
43
|
+
resource = Latinum::Resource.new("1.12345678", "BTC")
|
44
|
+
expect(@bank.format(resource)).to be == "B⃦1.12345678 BTC"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should round up using correct precision" do
|
48
|
+
resource = Latinum::Resource.new("19.9989", "NZD")
|
53
49
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
50
|
+
expect(@bank.round(resource)).to be == Latinum::Resource.new(20, "NZD")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should round down using correct precision" do
|
54
|
+
resource = Latinum::Resource.new("19.991", "NZD")
|
59
55
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
56
|
+
expect(@bank.round(resource)).to be == Latinum::Resource.new("19.99", "NZD")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should round values when formatting" do
|
60
|
+
resource = Latinum::Resource.new("19.9989", "NZD")
|
65
61
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
62
|
+
expect(@bank.format(resource)).to be == "$20.00 NZD"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should exchange currencies from NZD to AUD" do
|
66
|
+
nzd = Latinum::Resource.new("10", "NZD")
|
72
67
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
68
|
+
aud = @bank.exchange nzd, "AUD"
|
69
|
+
expect(aud).to be == Latinum::Resource.new("5", "AUD")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should parser strings into resources" do
|
73
|
+
expect(@bank.parse("$5")).to be == Latinum::Resource.new("5", "USD")
|
74
|
+
expect(@bank.parse("$5 NZD")).to be == Latinum::Resource.new("5", "NZD")
|
75
|
+
expect(@bank.parse("€5")).to be == Latinum::Resource.new("5", "EUR")
|
80
76
|
|
81
|
-
|
82
|
-
|
83
|
-
|
77
|
+
expect(@bank.parse("5 NZD")).to be == Latinum::Resource.new("5", "NZD")
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should fail to parse unknown resource" do
|
81
|
+
expect{@bank.parse("B5")}.to raise_error(ArgumentError)
|
84
82
|
end
|
85
83
|
end
|
@@ -23,76 +23,82 @@ require 'latinum/currencies/global'
|
|
23
23
|
|
24
24
|
require 'set'
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
subject["NZD"] = BigDecimal.new("20")
|
30
|
-
|
31
|
-
expect(subject["NZD"]).to be == Latinum::Resource.load("20 NZD")
|
32
|
-
end
|
26
|
+
RSpec.describe Latinum::Collection do
|
27
|
+
it "can set an initial value" do
|
28
|
+
subject["NZD"] = BigDecimal.new("20")
|
33
29
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
30
|
+
expect(subject["NZD"]).to be == Latinum::Resource.load("20 NZD")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "can be negated" do
|
34
|
+
subject["NZD"] = BigDecimal.new("20")
|
35
|
+
|
36
|
+
negated = -subject
|
37
|
+
|
38
|
+
expect(negated["NZD"]).to be == BigDecimal.new("-20")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should sum up currencies correctly" do
|
42
|
+
resource = Latinum::Resource.new("10", "NZD")
|
43
|
+
|
44
|
+
subject << resource
|
45
|
+
expect(subject["NZD"]).to be == resource
|
46
|
+
|
47
|
+
subject << resource
|
48
|
+
expect(subject["NZD"]).to be == (resource * 2)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should sum up multiple currencies correctly" do
|
52
|
+
resources = [
|
53
|
+
Latinum::Resource.new("10", "NZD"),
|
54
|
+
Latinum::Resource.new("10", "AUD"),
|
55
|
+
Latinum::Resource.new("10", "USD"),
|
56
|
+
Latinum::Resource.new("10", "NZD"),
|
57
|
+
Latinum::Resource.new("10", "AUD"),
|
58
|
+
Latinum::Resource.new("10", "USD"),
|
59
|
+
]
|
43
60
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
61
|
+
subject = Latinum::Collection.new
|
62
|
+
subject << resources
|
63
|
+
|
64
|
+
expect(subject["NZD"]).to be == (resources[0] * 2)
|
65
|
+
expect(subject.names).to be == Set.new(["NZD", "AUD", "USD"])
|
66
|
+
end
|
67
|
+
|
68
|
+
it "can add two collections together" do
|
69
|
+
other_resources = [
|
70
|
+
Latinum::Resource.new("10", "NZD"),
|
71
|
+
Latinum::Resource.new("10", "AUD"),
|
72
|
+
Latinum::Resource.new("10", "USD"),
|
73
|
+
]
|
74
|
+
|
75
|
+
other_collection = Latinum::Collection.new
|
76
|
+
other_collection << other_resources
|
77
|
+
|
78
|
+
resources = [
|
79
|
+
Latinum::Resource.new("10", "NZD"),
|
80
|
+
Latinum::Resource.new("10", "AUD"),
|
81
|
+
Latinum::Resource.new("10", "USD"),
|
82
|
+
]
|
83
|
+
|
84
|
+
subject << resources
|
85
|
+
subject << other_collection
|
86
|
+
|
87
|
+
expect(subject["NZD"]).to be == Latinum::Resource.load("20 NZD")
|
88
|
+
expect(subject["AUD"]).to be == Latinum::Resource.load("20 AUD")
|
89
|
+
expect(subject["USD"]).to be == Latinum::Resource.load("20 USD")
|
90
|
+
end
|
91
|
+
|
92
|
+
it "can enumerate resources" do
|
93
|
+
resources = [
|
94
|
+
Latinum::Resource.new("10", "NZD"),
|
95
|
+
Latinum::Resource.new("10", "AUD"),
|
96
|
+
Latinum::Resource.new("10", "USD"),
|
97
|
+
]
|
60
98
|
|
61
|
-
|
62
|
-
|
63
|
-
Latinum::Resource.new("10", "NZD"),
|
64
|
-
Latinum::Resource.new("10", "AUD"),
|
65
|
-
Latinum::Resource.new("10", "USD"),
|
66
|
-
]
|
67
|
-
|
68
|
-
other_collection = Latinum::Collection.new
|
69
|
-
other_collection << other_resources
|
70
|
-
|
71
|
-
resources = [
|
72
|
-
Latinum::Resource.new("10", "NZD"),
|
73
|
-
Latinum::Resource.new("10", "AUD"),
|
74
|
-
Latinum::Resource.new("10", "USD"),
|
75
|
-
]
|
76
|
-
|
77
|
-
subject << resources
|
78
|
-
subject << other_collection
|
79
|
-
|
80
|
-
expect(subject["NZD"]).to be == Latinum::Resource.load("20 NZD")
|
81
|
-
expect(subject["AUD"]).to be == Latinum::Resource.load("20 AUD")
|
82
|
-
expect(subject["USD"]).to be == Latinum::Resource.load("20 USD")
|
83
|
-
end
|
99
|
+
collection = Latinum::Collection.new
|
100
|
+
collection << resources
|
84
101
|
|
85
|
-
|
86
|
-
resources = [
|
87
|
-
Latinum::Resource.new("10", "NZD"),
|
88
|
-
Latinum::Resource.new("10", "AUD"),
|
89
|
-
Latinum::Resource.new("10", "USD"),
|
90
|
-
]
|
91
|
-
|
92
|
-
collection = Latinum::Collection.new
|
93
|
-
collection << resources
|
94
|
-
|
95
|
-
expect(collection.each.to_a).to be == resources
|
96
|
-
end
|
102
|
+
expect(collection.each.to_a).to be == resources
|
97
103
|
end
|
98
104
|
end
|
@@ -20,23 +20,21 @@
|
|
20
20
|
|
21
21
|
require 'latinum/resource'
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
resource = Latinum::Resource.load("10 NZD")
|
27
|
-
|
28
|
-
expect(resource).to be < 20
|
29
|
-
expect(resource).to be > 5
|
30
|
-
expect(resource).to be == 10
|
31
|
-
end
|
23
|
+
RSpec.describe Latinum::Resource do
|
24
|
+
it "should be comparable to numeric values" do
|
25
|
+
resource = Latinum::Resource.load("10 NZD")
|
32
26
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
27
|
+
expect(resource).to be < 20
|
28
|
+
expect(resource).to be > 5
|
29
|
+
expect(resource).to be == 10
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should compare with nil" do
|
33
|
+
a = Latinum::Resource.load("10 NZD")
|
34
|
+
|
35
|
+
expect{a <=> nil}.to_not raise_exception
|
36
|
+
expect{a == nil}.to_not raise_exception
|
37
|
+
expect(a <=> nil).to be == nil
|
38
|
+
expect(a == nil).to be == false
|
41
39
|
end
|
42
40
|
end
|
@@ -22,66 +22,72 @@ require 'latinum/bank'
|
|
22
22
|
require 'latinum/currencies/global'
|
23
23
|
require 'latinum/formatters'
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
expect(subject.to_integral(amount)).to be == 10
|
31
|
-
end
|
32
|
-
|
33
|
-
it "can convert from integral" do
|
34
|
-
expect(subject.from_integral(10)).to be == amount
|
35
|
-
end
|
36
|
-
|
37
|
-
it "can do basic formatting" do
|
38
|
-
expect(subject.format(amount)).to be == "10.0 NZD"
|
39
|
-
end
|
25
|
+
RSpec.describe Latinum::Formatters::PlainFormatter.new(name: "NZD") do
|
26
|
+
let(:amount) {BigDecimal.new(10)}
|
27
|
+
|
28
|
+
it "can convert to integral" do
|
29
|
+
expect(subject.to_integral(amount)).to be == 10
|
40
30
|
end
|
41
31
|
|
42
|
-
|
43
|
-
|
44
|
-
@bank = Latinum::Bank.new
|
45
|
-
@bank.import(Latinum::Currencies::Global)
|
46
|
-
end
|
47
|
-
|
48
|
-
let(:resource) {Latinum::Resource.load("10 NZD")}
|
49
|
-
|
50
|
-
it "should format output" do
|
51
|
-
expect(@bank.format(resource)).to be == "$10.00 NZD"
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should format output without name" do
|
55
|
-
expect(@bank.format(resource, name: nil)).to be == "$10.00"
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should format output with alternative name" do
|
59
|
-
expect(@bank.format(resource, name: "Foo")).to be == "$10.00 Foo"
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should format output" do
|
63
|
-
expect(@bank.format(resource)).to be == "$10.00 NZD"
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should format output without symbol" do
|
67
|
-
expect(@bank.format(resource, symbol: nil)).to be == "10.00 NZD"
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should format output with alternative symbol" do
|
71
|
-
expect(@bank.format(resource, symbol: "!!")).to be == "!!10.00 NZD"
|
72
|
-
end
|
32
|
+
it "can convert from integral" do
|
33
|
+
expect(subject.from_integral(10)).to be == amount
|
73
34
|
end
|
74
35
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
36
|
+
it "can do basic formatting" do
|
37
|
+
expect(subject.format(amount)).to be == "10.0 NZD"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
RSpec.describe Latinum::Formatters::DecimalCurrencyFormatter do
|
42
|
+
before(:all) do
|
43
|
+
@bank = Latinum::Bank.new
|
44
|
+
@bank.import(Latinum::Currencies::Global)
|
45
|
+
end
|
46
|
+
|
47
|
+
let(:resource) {Latinum::Resource.load("10 NZD")}
|
48
|
+
|
49
|
+
it "should format output" do
|
50
|
+
expect(@bank.format(resource)).to be == "$10.00 NZD"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should format output without name" do
|
54
|
+
expect(@bank.format(resource, name: nil)).to be == "$10.00"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should format output with alternative name" do
|
58
|
+
expect(@bank.format(resource, name: "Foo")).to be == "$10.00 Foo"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should format output" do
|
62
|
+
expect(@bank.format(resource)).to be == "$10.00 NZD"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should format output without symbol" do
|
66
|
+
expect(@bank.format(resource, symbol: nil)).to be == "10.00 NZD"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should format output with alternative symbol" do
|
70
|
+
expect(@bank.format(resource, symbol: "!!")).to be == "!!10.00 NZD"
|
71
|
+
end
|
72
|
+
|
73
|
+
context "negative zero" do
|
74
|
+
let(:resource) {Latinum::Resource.new(BigDecimal.new("-0"), "NZD")}
|
82
75
|
|
83
|
-
it "should format
|
84
|
-
expect(@bank.format(resource)).to be == "
|
76
|
+
it "should format as (positve) zero" do
|
77
|
+
expect(@bank.format(resource)).to be == "$0.00 NZD"
|
85
78
|
end
|
86
79
|
end
|
87
80
|
end
|
81
|
+
|
82
|
+
RSpec.describe Latinum::Formatters::DecimalCurrencyFormatter do
|
83
|
+
before(:all) do
|
84
|
+
@bank = Latinum::Bank.new
|
85
|
+
@bank.import(Latinum::Currencies::Global)
|
86
|
+
end
|
87
|
+
|
88
|
+
let(:resource) {Latinum::Resource.load("10 JPY")}
|
89
|
+
|
90
|
+
it "should format without separator or fractional part" do
|
91
|
+
expect(@bank.format(resource)).to be == "¥10 JPY"
|
92
|
+
end
|
93
|
+
end
|
@@ -21,27 +21,25 @@
|
|
21
21
|
require 'latinum'
|
22
22
|
require 'latinum/currencies/global'
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
RSpec.describe Latinum::Bank do
|
25
|
+
before(:all) do
|
26
|
+
@bank = Latinum::Bank.new
|
27
|
+
@bank.import(Latinum::Currencies::Global)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should convert to NZD integral value" do
|
31
|
+
resource = Latinum::Resource.new("10", "NZD")
|
32
|
+
|
33
|
+
expect(@bank.to_integral(resource)).to be == 1000
|
34
|
+
|
35
|
+
expect(@bank.from_integral(1000, "NZD")).to be == resource
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should convert to BTC integral value" do
|
39
|
+
resource = Latinum::Resource.new("1.12345678", "BTC")
|
30
40
|
|
31
|
-
|
32
|
-
resource = Latinum::Resource.new("10", "NZD")
|
33
|
-
|
34
|
-
expect(@bank.to_integral(resource)).to be == 1000
|
35
|
-
|
36
|
-
expect(@bank.from_integral(1000, "NZD")).to be == resource
|
37
|
-
end
|
41
|
+
expect(@bank.to_integral(resource)).to be == 112345678
|
38
42
|
|
39
|
-
|
40
|
-
resource = Latinum::Resource.new("1.12345678", "BTC")
|
41
|
-
|
42
|
-
expect(@bank.to_integral(resource)).to be == 112345678
|
43
|
-
|
44
|
-
expect(@bank.from_integral(112345678, "BTC")).to be == resource
|
45
|
-
end
|
43
|
+
expect(@bank.from_integral(112345678, "BTC")).to be == resource
|
46
44
|
end
|
47
45
|
end
|
@@ -20,113 +20,111 @@
|
|
20
20
|
|
21
21
|
require 'latinum/resource'
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
string_representation = Latinum::Resource.dump(resource)
|
28
|
-
|
29
|
-
loaded_resource = Latinum::Resource.load(string_representation)
|
30
|
-
|
31
|
-
expect(loaded_resource).to be == loaded_resource
|
32
|
-
end
|
23
|
+
RSpec.describe Latinum::Resource do
|
24
|
+
it "should load and dump resources" do
|
25
|
+
resource = Latinum::Resource.load("10 NZD")
|
26
|
+
string_representation = Latinum::Resource.dump(resource)
|
33
27
|
|
34
|
-
|
35
|
-
expect(Latinum::Resource.load(nil)).to be nil
|
36
|
-
expect(Latinum::Resource.dump(nil)).to be nil
|
37
|
-
end
|
28
|
+
loaded_resource = Latinum::Resource.load(string_representation)
|
38
29
|
|
39
|
-
|
40
|
-
|
41
|
-
|
30
|
+
expect(loaded_resource).to be == loaded_resource
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should load and dump nil correctly" do
|
34
|
+
expect(Latinum::Resource.load(nil)).to be nil
|
35
|
+
expect(Latinum::Resource.dump(nil)).to be nil
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should handle empty strings correctly" do
|
39
|
+
expect(Latinum::Resource.load("")).to be nil
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should handle whitespace strings correctly" do
|
43
|
+
expect(Latinum::Resource.load(" ")).to be nil
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should load and dump resources correctly" do
|
47
|
+
resource = Latinum::Resource.new(10, 'NZD')
|
42
48
|
|
43
|
-
|
44
|
-
|
45
|
-
|
49
|
+
expect(Latinum::Resource.load("10.0 NZD")).to be == resource
|
50
|
+
expect(Latinum::Resource.dump(resource)).to be == "10.0 NZD"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should inspect nicely" do
|
54
|
+
resource = Latinum::Resource.load("10 NZD")
|
46
55
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
56
|
+
expect(resource.inspect).to be == '#<Latinum::Resource "10.0 NZD">'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should compute percentage difference" do
|
60
|
+
original_price = Latinum::Resource.load("10 NZD")
|
61
|
+
discount_price = Latinum::Resource.load("5 NZD")
|
53
62
|
|
54
|
-
|
55
|
-
resource = Latinum::Resource.load("10 NZD")
|
56
|
-
|
57
|
-
expect(resource.inspect).to be == '#<Latinum::Resource "10.0 NZD">'
|
58
|
-
end
|
63
|
+
discount = (original_price - discount_price) / original_price
|
59
64
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
expect(discount).to be == 0.5
|
67
|
-
end
|
65
|
+
expect(discount).to be == 0.5
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should not divide" do
|
69
|
+
original_price = Latinum::Resource.load("10 NZD")
|
70
|
+
discount_price = Latinum::Resource.load("5 USD")
|
68
71
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
72
|
+
expect{original_price / discount_price}.to raise_exception(Latinum::DifferentResourceNameError)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should compute quotient" do
|
76
|
+
original_price = Latinum::Resource.load("10 NZD")
|
75
77
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
78
|
+
expect(original_price / 2.0).to be == Latinum::Resource.load("5 NZD")
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should add two resources of the same symbol" do
|
82
|
+
a = Latinum::Resource.load("10 NZD")
|
83
|
+
b = Latinum::Resource.load("5 NZD")
|
84
|
+
c = Latinum::Resource.load("15 NZD")
|
81
85
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
end
|
86
|
+
expect(a+b).to be == c
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should fail two resources of different symbol" do
|
90
|
+
a = Latinum::Resource.load("10 NZD")
|
91
|
+
b = Latinum::Resource.load("5 USD")
|
89
92
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
expect{a+b}.to raise_error(Latinum::DifferentResourceNameError)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should be able to negate a value" do
|
97
|
+
a = Latinum::Resource.load("10 NZD")
|
98
|
+
b = Latinum::Resource.load("-10 NZD")
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
100
|
+
expect(-a).to be == b
|
101
|
+
end
|
102
|
+
|
103
|
+
it "can be used as a hash key" do
|
104
|
+
a = Latinum::Resource.load("10 NZD")
|
105
|
+
b = Latinum::Resource.load("0 NZD")
|
103
106
|
|
104
|
-
|
105
|
-
a = Latinum::Resource.load("10 NZD")
|
106
|
-
b = Latinum::Resource.load("0 NZD")
|
107
|
-
|
108
|
-
hash = {a => true}
|
109
|
-
|
110
|
-
expect(hash).to be_include a
|
111
|
-
expect(hash).to_not be_include b
|
112
|
-
end
|
107
|
+
hash = {a => true}
|
113
108
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
109
|
+
expect(hash).to be_include a
|
110
|
+
expect(hash).to_not be_include b
|
111
|
+
end
|
112
|
+
|
113
|
+
it "can be zero" do
|
114
|
+
a = Latinum::Resource.load("10 NZD")
|
115
|
+
b = Latinum::Resource.load("0 NZD")
|
116
|
+
|
117
|
+
expect(a).to_not be_zero
|
118
|
+
expect(b).to be_zero
|
119
|
+
end
|
120
|
+
|
121
|
+
it "can be eql?" do
|
122
|
+
a = Latinum::Resource.load("10 NZD")
|
123
|
+
b = Latinum::Resource.load("0 NZD")
|
124
|
+
c = Latinum::Resource.load("0 NZD")
|
121
125
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
c = Latinum::Resource.load("0 NZD")
|
126
|
-
|
127
|
-
expect(a).to be_eql a
|
128
|
-
expect(a).to_not be_eql b
|
129
|
-
expect(b).to be_eql c
|
130
|
-
end
|
126
|
+
expect(a).to be_eql a
|
127
|
+
expect(a).to_not be_eql b
|
128
|
+
expect(b).to be_eql c
|
131
129
|
end
|
132
130
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: latinum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: '0'
|
100
100
|
requirements: []
|
101
101
|
rubyforge_project:
|
102
|
-
rubygems_version: 2.6.
|
102
|
+
rubygems_version: 2.6.12
|
103
103
|
signing_key:
|
104
104
|
specification_version: 4
|
105
105
|
summary: Latinum is a simple gem for managing resource computations, including money
|