latinum 1.2.0 → 1.3.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/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
|