money 6.6.0 → 6.6.1
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/.travis.yml +3 -3
- data/CHANGELOG.md +3 -0
- data/README.md +7 -7
- data/lib/money/bank/variable_exchange.rb +1 -1
- data/lib/money/currency.rb +5 -5
- data/lib/money/money.rb +5 -5
- data/lib/money/money/arithmetic.rb +12 -12
- data/lib/money/money/constructors.rb +5 -5
- data/lib/money/version.rb +1 -1
- data/spec/bank/variable_exchange_spec.rb +5 -0
- data/spec/currency_spec.rb +9 -1
- data/spec/money/arithmetic_spec.rb +40 -0
- data/spec/money/constructors_spec.rb +30 -0
- data/spec/money_spec.rb +24 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3285f9f76aec95f56d6f73d260330c3bc0f6984
|
4
|
+
data.tar.gz: 956b5acb84b6b2100d31e49b4a4c79bfbc71e612
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2892ac7ef0eb825da0e0d2d37c1c794703f781d3667bf265f72f032d2de0f132fe061965561dbbbf5d70f6de57a6658c4a11608e83462bee46a263a27c49b320
|
7
|
+
data.tar.gz: ee6ac428822ff9c7783b684d50374fb6bb2e9b41722c4e20d57f57328c972dcb0055d62efb0684c4fc29dace6bc6340b5e36bbcfa2c58a75e19f63179b6ae49a
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# RubyMoney - Money
|
2
2
|
|
3
|
-
[](http://badge.fury.io/rb/money)
|
4
|
+
[](https://travis-ci.org/RubyMoney/money)
|
5
|
+
[](https://codeclimate.com/github/RubyMoney/money)
|
6
|
+
[](https://coveralls.io/r/RubyMoney/money?branch=master)
|
7
|
+
[](http://inch-ci.org/github/RubyMoney/money)
|
8
|
+
[](https://gemnasium.com/RubyMoney/money)
|
9
|
+
[](http://opensource.org/licenses/MIT)
|
10
10
|
|
11
11
|
:warning: Please read the [migration notes](#migration-notes) before upgrading to a new major version.
|
12
12
|
|
data/lib/money/currency.rb
CHANGED
@@ -18,6 +18,7 @@ class Money
|
|
18
18
|
|
19
19
|
# Keeping cached instances in sync between threads
|
20
20
|
@@mutex = Mutex.new
|
21
|
+
@@instances = {}
|
21
22
|
|
22
23
|
# Thrown when a Currency has been registered without all the attributes
|
23
24
|
# which are required for the current action.
|
@@ -34,18 +35,17 @@ class Money
|
|
34
35
|
class UnknownCurrency < ArgumentError; end
|
35
36
|
|
36
37
|
class << self
|
37
|
-
alias_method :original_new, :new
|
38
38
|
def new(id)
|
39
39
|
id = id.to_s.downcase
|
40
40
|
unless stringified_keys.include?(id)
|
41
41
|
raise UnknownCurrency, "Unknown currency '#{id}'"
|
42
42
|
end
|
43
43
|
|
44
|
-
@@mutex.synchronize {
|
44
|
+
_instances[id] || @@mutex.synchronize { _instances[id] ||= super }
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
48
|
-
|
47
|
+
def _instances
|
48
|
+
@@instances
|
49
49
|
end
|
50
50
|
|
51
51
|
# Lookup a currency with given +id+ an returns a +Currency+ instance on
|
@@ -168,7 +168,7 @@ class Money
|
|
168
168
|
# @option delimiter [String] character between each thousands place
|
169
169
|
def register(curr)
|
170
170
|
key = curr.fetch(:iso_code).downcase.to_sym
|
171
|
-
@@mutex.synchronize {
|
171
|
+
@@mutex.synchronize { _instances.delete(key.to_s) }
|
172
172
|
@table[key] = curr
|
173
173
|
@stringified_keys = stringify_keys
|
174
174
|
end
|
data/lib/money/money.rb
CHANGED
@@ -340,7 +340,7 @@ class Money
|
|
340
340
|
#
|
341
341
|
# @return [String]
|
342
342
|
def inspect
|
343
|
-
"
|
343
|
+
"#<#{self.class.name} fractional:#{fractional} currency:#{currency}>"
|
344
344
|
end
|
345
345
|
|
346
346
|
# Returns the amount of money as a string.
|
@@ -497,7 +497,7 @@ class Money
|
|
497
497
|
left_over.to_i.times { |i| amounts[i % amounts.length] += 1 }
|
498
498
|
end
|
499
499
|
|
500
|
-
amounts.collect { |fractional|
|
500
|
+
amounts.collect { |fractional| self.class.new(fractional, currency) }
|
501
501
|
end
|
502
502
|
|
503
503
|
# Split money amongst parties evenly without losing pennies.
|
@@ -535,7 +535,7 @@ class Money
|
|
535
535
|
#
|
536
536
|
def round(rounding_mode = self.class.rounding_mode)
|
537
537
|
if self.class.infinite_precision
|
538
|
-
|
538
|
+
self.class.new(fractional.round(0, rounding_mode), self.currency)
|
539
539
|
else
|
540
540
|
self
|
541
541
|
end
|
@@ -605,8 +605,8 @@ class Money
|
|
605
605
|
end
|
606
606
|
|
607
607
|
def split_flat(num)
|
608
|
-
low =
|
609
|
-
high =
|
608
|
+
low = self.class.new(fractional / num, currency)
|
609
|
+
high = self.class.new(low.fractional + 1, currency)
|
610
610
|
|
611
611
|
remainder = fractional % num
|
612
612
|
|
@@ -8,7 +8,7 @@ class Money
|
|
8
8
|
# @example
|
9
9
|
# - Money.new(100) #=> #<Money @fractional=-100>
|
10
10
|
def -@
|
11
|
-
|
11
|
+
self.class.new(-fractional, currency)
|
12
12
|
end
|
13
13
|
|
14
14
|
# Checks whether two money objects have the same currency and the same
|
@@ -83,7 +83,7 @@ class Money
|
|
83
83
|
def +(other_money)
|
84
84
|
return self if other_money == 0
|
85
85
|
other_money = other_money.exchange_to(currency)
|
86
|
-
|
86
|
+
self.class.new(fractional + other_money.fractional, currency)
|
87
87
|
end
|
88
88
|
|
89
89
|
# Returns a new Money object containing the difference between the two
|
@@ -100,7 +100,7 @@ class Money
|
|
100
100
|
def -(other_money)
|
101
101
|
return self if other_money == 0
|
102
102
|
other_money = other_money.exchange_to(currency)
|
103
|
-
|
103
|
+
self.class.new(fractional - other_money.fractional, currency)
|
104
104
|
end
|
105
105
|
|
106
106
|
# Multiplies the monetary value with the given number and returns a new
|
@@ -119,9 +119,9 @@ class Money
|
|
119
119
|
#
|
120
120
|
def *(value)
|
121
121
|
if value.is_a? Numeric
|
122
|
-
|
122
|
+
self.class.new(fractional * value, currency)
|
123
123
|
else
|
124
|
-
raise ArgumentError, "Can't multiply a
|
124
|
+
raise ArgumentError, "Can't multiply a #{self.class.name} by a #{value.class.name}'s value"
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
@@ -141,10 +141,10 @@ class Money
|
|
141
141
|
# Money.new(100) / Money.new(10) #=> 10.0
|
142
142
|
#
|
143
143
|
def /(value)
|
144
|
-
if value.is_a?(
|
144
|
+
if value.is_a?(self.class)
|
145
145
|
fractional / as_d(value.exchange_to(currency).fractional).to_f
|
146
146
|
else
|
147
|
-
|
147
|
+
self.class.new(fractional / as_d(value), currency)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
@@ -182,16 +182,16 @@ class Money
|
|
182
182
|
def divmod_money(val)
|
183
183
|
cents = val.exchange_to(currency).cents
|
184
184
|
quotient, remainder = fractional.divmod(cents)
|
185
|
-
[quotient,
|
185
|
+
[quotient, self.class.new(remainder, currency)]
|
186
186
|
end
|
187
187
|
private :divmod_money
|
188
188
|
|
189
189
|
def divmod_other(val)
|
190
190
|
if self.class.infinite_precision
|
191
191
|
quotient, remainder = fractional.divmod(as_d(val))
|
192
|
-
[
|
192
|
+
[self.class.new(quotient, currency), self.class.new(remainder, currency)]
|
193
193
|
else
|
194
|
-
[div(val),
|
194
|
+
[div(val), self.class.new(fractional.modulo(val), currency)]
|
195
195
|
end
|
196
196
|
end
|
197
197
|
private :divmod_other
|
@@ -236,7 +236,7 @@ class Money
|
|
236
236
|
if (fractional < 0 && val < 0) || (fractional > 0 && val > 0)
|
237
237
|
self.modulo(val)
|
238
238
|
else
|
239
|
-
self.modulo(val) - (val.is_a?(Money) ? val :
|
239
|
+
self.modulo(val) - (val.is_a?(Money) ? val : self.class.new(val, currency))
|
240
240
|
end
|
241
241
|
end
|
242
242
|
|
@@ -247,7 +247,7 @@ class Money
|
|
247
247
|
# @example
|
248
248
|
# Money.new(-100).abs #=> #<Money @fractional=100>
|
249
249
|
def abs
|
250
|
-
|
250
|
+
self.class.new(fractional.abs, currency)
|
251
251
|
end
|
252
252
|
|
253
253
|
# Test if the money amount is zero.
|
@@ -11,7 +11,7 @@ class Money
|
|
11
11
|
# Money.empty #=> #<Money @fractional=0>
|
12
12
|
def empty(currency = default_currency)
|
13
13
|
@empty ||= {}
|
14
|
-
@empty[currency] ||=
|
14
|
+
@empty[currency] ||= new(0, currency).freeze
|
15
15
|
end
|
16
16
|
alias_method :zero, :empty
|
17
17
|
|
@@ -28,7 +28,7 @@ class Money
|
|
28
28
|
# n.cents #=> 100
|
29
29
|
# n.currency #=> #<Money::Currency id: cad>
|
30
30
|
def ca_dollar(cents)
|
31
|
-
|
31
|
+
new(cents, "CAD")
|
32
32
|
end
|
33
33
|
alias_method :cad, :ca_dollar
|
34
34
|
|
@@ -45,7 +45,7 @@ class Money
|
|
45
45
|
# n.cents #=> 100
|
46
46
|
# n.currency #=> #<Money::Currency id: usd>
|
47
47
|
def us_dollar(cents)
|
48
|
-
|
48
|
+
new(cents, "USD")
|
49
49
|
end
|
50
50
|
alias_method :usd, :us_dollar
|
51
51
|
|
@@ -61,7 +61,7 @@ class Money
|
|
61
61
|
# n.cents #=> 100
|
62
62
|
# n.currency #=> #<Money::Currency id: eur>
|
63
63
|
def euro(cents)
|
64
|
-
|
64
|
+
new(cents, "EUR")
|
65
65
|
end
|
66
66
|
alias_method :eur, :euro
|
67
67
|
|
@@ -77,7 +77,7 @@ class Money
|
|
77
77
|
# n.fractional #=> 100
|
78
78
|
# n.currency #=> #<Money::Currency id: gbp>
|
79
79
|
def pound_sterling(pence)
|
80
|
-
|
80
|
+
new(pence, "GBP")
|
81
81
|
end
|
82
82
|
alias_method :gbp, :pound_sterling
|
83
83
|
|
data/lib/money/version.rb
CHANGED
@@ -71,6 +71,11 @@ class Money
|
|
71
71
|
amount = 10**20
|
72
72
|
expect(bank.exchange_with(Money.usd(amount), :EUR)).to eq Money.eur(1.33 * amount)
|
73
73
|
end
|
74
|
+
|
75
|
+
it "preserves the class in the result when given a subclass of Money" do
|
76
|
+
special_money_class = Class.new(Money)
|
77
|
+
expect(bank.exchange_with(special_money_class.new(100, 'USD'), 'EUR')).to be_a special_money_class
|
78
|
+
end
|
74
79
|
end
|
75
80
|
end
|
76
81
|
|
data/spec/currency_spec.rb
CHANGED
@@ -170,7 +170,8 @@ class Money
|
|
170
170
|
|
171
171
|
|
172
172
|
describe "#initialize" do
|
173
|
-
before { Currency.
|
173
|
+
before { Currency._instances.clear }
|
174
|
+
|
174
175
|
it "lookups data from loaded config" do
|
175
176
|
currency = Currency.new("USD")
|
176
177
|
expect(currency.id).to eq :usd
|
@@ -185,6 +186,13 @@ class Money
|
|
185
186
|
expect(currency.smallest_denomination).to eq 1
|
186
187
|
end
|
187
188
|
|
189
|
+
it 'caches instances' do
|
190
|
+
currency = Currency.new("USD")
|
191
|
+
|
192
|
+
expect(Currency._instances.length).to eq 1
|
193
|
+
expect(Currency._instances["usd"].object_id).to eq currency.object_id
|
194
|
+
end
|
195
|
+
|
188
196
|
it "raises UnknownCurrency with unknown currency" do
|
189
197
|
expect { Currency.new("xxx") }.to raise_error(Currency::UnknownCurrency, /xxx/)
|
190
198
|
end
|
@@ -9,6 +9,11 @@ describe Money do
|
|
9
9
|
expect((- Money.new(1))).to eq Money.new(-1)
|
10
10
|
expect((- Money.new(-1))).to eq Money.new(1)
|
11
11
|
end
|
12
|
+
|
13
|
+
it "preserves the class in the result when using a subclass of Money" do
|
14
|
+
special_money_class = Class.new(Money)
|
15
|
+
expect(- special_money_class.new(10_00)).to be_a special_money_class
|
16
|
+
end
|
12
17
|
end
|
13
18
|
|
14
19
|
describe "#==" do
|
@@ -173,6 +178,11 @@ describe Money do
|
|
173
178
|
it "adds Fixnum 0 to money and returns the same ammount" do
|
174
179
|
expect(Money.new(10_00) + 0).to eq Money.new(10_00)
|
175
180
|
end
|
181
|
+
|
182
|
+
it "preserves the class in the result when using a subclass of Money" do
|
183
|
+
special_money_class = Class.new(Money)
|
184
|
+
expect(special_money_class.new(10_00, "USD") + Money.new(90, "USD")).to be_a special_money_class
|
185
|
+
end
|
176
186
|
end
|
177
187
|
|
178
188
|
describe "#-" do
|
@@ -189,6 +199,11 @@ describe Money do
|
|
189
199
|
it "subtract Fixnum 0 to money and returns the same ammount" do
|
190
200
|
expect(Money.new(10_00) - 0).to eq Money.new(10_00)
|
191
201
|
end
|
202
|
+
|
203
|
+
it "preserves the class in the result when using a subclass of Money" do
|
204
|
+
special_money_class = Class.new(Money)
|
205
|
+
expect(special_money_class.new(10_00, "USD") - Money.new(90, "USD")).to be_a special_money_class
|
206
|
+
end
|
192
207
|
end
|
193
208
|
|
194
209
|
describe "#*" do
|
@@ -215,6 +230,11 @@ describe Money do
|
|
215
230
|
it "does not multiply Money by an object which is NOT a number" do
|
216
231
|
expect { Money.new( 10, :USD) * 'abc' }.to raise_error(ArgumentError)
|
217
232
|
end
|
233
|
+
|
234
|
+
it "preserves the class in the result when using a subclass of Money" do
|
235
|
+
special_money_class = Class.new(Money)
|
236
|
+
expect(special_money_class.new(10_00, "USD") * 2).to be_a special_money_class
|
237
|
+
end
|
218
238
|
end
|
219
239
|
|
220
240
|
describe "#/" do
|
@@ -230,6 +250,11 @@ describe Money do
|
|
230
250
|
end
|
231
251
|
end
|
232
252
|
|
253
|
+
it "preserves the class in the result when using a subclass of Money" do
|
254
|
+
special_money_class = Class.new(Money)
|
255
|
+
expect(special_money_class.new(10_00, "USD") / 2).to be_a special_money_class
|
256
|
+
end
|
257
|
+
|
233
258
|
context 'rounding preference' do
|
234
259
|
before do
|
235
260
|
allow(Money).to receive(:rounding_mode).and_return(rounding_mode)
|
@@ -412,6 +437,16 @@ describe Money do
|
|
412
437
|
end
|
413
438
|
end
|
414
439
|
end
|
440
|
+
|
441
|
+
it "preserves the class in the result when dividing a subclass of Money by a fixnum" do
|
442
|
+
special_money_class = Class.new(Money)
|
443
|
+
expect(special_money_class.new(10_00, "USD").divmod(4).last).to be_a special_money_class
|
444
|
+
end
|
445
|
+
|
446
|
+
it "preserves the class in the result when using a subclass of Money by a subclass of Money" do
|
447
|
+
special_money_class = Class.new(Money)
|
448
|
+
expect(special_money_class.new(10_00, "USD").divmod(special_money_class.new(4_00)).last).to be_a special_money_class
|
449
|
+
end
|
415
450
|
end
|
416
451
|
|
417
452
|
describe "#modulo" do
|
@@ -512,6 +547,11 @@ describe Money do
|
|
512
547
|
expect(n.abs).to eq Money.new( 1, :USD)
|
513
548
|
expect(n).to eq Money.new(-1, :USD)
|
514
549
|
end
|
550
|
+
|
551
|
+
it "preserves the class in the result when using a subclass of Money" do
|
552
|
+
special_money_class = Class.new(Money)
|
553
|
+
expect(special_money_class.new(-1).abs).to be_a special_money_class
|
554
|
+
end
|
515
555
|
end
|
516
556
|
|
517
557
|
describe "#zero?" do
|
@@ -20,12 +20,22 @@ describe Money::Constructors do
|
|
20
20
|
it "doesn't allow money to be modified for a currency" do
|
21
21
|
expect(Money.empty).to be_frozen
|
22
22
|
end
|
23
|
+
|
24
|
+
it "instantiates a subclass when inheritance is used" do
|
25
|
+
special_money_class = Class.new(Money)
|
26
|
+
expect(special_money_class.empty).to be_a special_money_class
|
27
|
+
end
|
23
28
|
end
|
24
29
|
|
25
30
|
|
26
31
|
describe "::zero" do
|
27
32
|
subject { Money.zero }
|
28
33
|
it { is_expected.to eq Money.empty }
|
34
|
+
|
35
|
+
it "instantiates a subclass when inheritance is used" do
|
36
|
+
special_money_class = Class.new(Money)
|
37
|
+
expect(special_money_class.zero).to be_a special_money_class
|
38
|
+
end
|
29
39
|
end
|
30
40
|
|
31
41
|
|
@@ -37,6 +47,11 @@ describe Money::Constructors do
|
|
37
47
|
it "is aliased to ::cad" do
|
38
48
|
expect(Money.cad(50)).to eq Money.ca_dollar(50)
|
39
49
|
end
|
50
|
+
|
51
|
+
it "instantiates a subclass when inheritance is used" do
|
52
|
+
special_money_class = Class.new(Money)
|
53
|
+
expect(special_money_class.ca_dollar(0)).to be_a special_money_class
|
54
|
+
end
|
40
55
|
end
|
41
56
|
|
42
57
|
|
@@ -48,6 +63,11 @@ describe Money::Constructors do
|
|
48
63
|
it "is aliased to ::usd" do
|
49
64
|
expect(Money.usd(50)).to eq Money.us_dollar(50)
|
50
65
|
end
|
66
|
+
|
67
|
+
it "instantiates a subclass when inheritance is used" do
|
68
|
+
special_money_class = Class.new(Money)
|
69
|
+
expect(special_money_class.us_dollar(0)).to be_a special_money_class
|
70
|
+
end
|
51
71
|
end
|
52
72
|
|
53
73
|
|
@@ -59,6 +79,11 @@ describe Money::Constructors do
|
|
59
79
|
it "is aliased to ::eur" do
|
60
80
|
expect(Money.eur(50)).to eq Money.euro(50)
|
61
81
|
end
|
82
|
+
|
83
|
+
it "instantiates a subclass when inheritance is used" do
|
84
|
+
special_money_class = Class.new(Money)
|
85
|
+
expect(special_money_class.euro(0)).to be_a special_money_class
|
86
|
+
end
|
62
87
|
end
|
63
88
|
|
64
89
|
|
@@ -70,6 +95,11 @@ describe Money::Constructors do
|
|
70
95
|
it "is aliased to ::gbp" do
|
71
96
|
expect(Money.gbp(50)).to eq Money.pound_sterling(50)
|
72
97
|
end
|
98
|
+
|
99
|
+
it "instantiates a subclass when inheritance is used" do
|
100
|
+
special_money_class = Class.new(Money)
|
101
|
+
expect(special_money_class.pound_sterling(0)).to be_a special_money_class
|
102
|
+
end
|
73
103
|
end
|
74
104
|
|
75
105
|
end
|
data/spec/money_spec.rb
CHANGED
@@ -590,6 +590,11 @@ YAML
|
|
590
590
|
expect { Money.us_dollar(0.05).allocate([0.5, 0.6]) }.to raise_error(ArgumentError)
|
591
591
|
end
|
592
592
|
|
593
|
+
it "keeps subclasses intact" do
|
594
|
+
special_money_class = Class.new(Money)
|
595
|
+
expect(special_money_class.new(005).allocate([1]).first).to be_a special_money_class
|
596
|
+
end
|
597
|
+
|
593
598
|
context "with infinite_precision", :infinite_precision do
|
594
599
|
it "allows for fractional cents allocation" do
|
595
600
|
one_third = BigDecimal("1") / BigDecimal("3")
|
@@ -627,6 +632,11 @@ YAML
|
|
627
632
|
expect(moneys[2].cents).to eq 33
|
628
633
|
end
|
629
634
|
|
635
|
+
it "preserves the class in the result when using a subclass of Money" do
|
636
|
+
special_money_class = Class.new(Money)
|
637
|
+
expect(special_money_class.new(10_00).split(1).first).to be_a special_money_class
|
638
|
+
end
|
639
|
+
|
630
640
|
context "with infinite_precision", :infinite_precision do
|
631
641
|
it "allows for splitting by fractional cents" do
|
632
642
|
thirty_three_and_one_third = BigDecimal("100") / BigDecimal("3")
|
@@ -669,18 +679,23 @@ YAML
|
|
669
679
|
rounded = money.round(BigDecimal::ROUND_DOWN)
|
670
680
|
expect(rounded.cents).to eq 15
|
671
681
|
end
|
682
|
+
|
683
|
+
context "when using a subclass of Money" do
|
684
|
+
let(:special_money_class) { Class.new(Money) }
|
685
|
+
let(:money) { special_money_class.new(15.75, 'NZD') }
|
686
|
+
|
687
|
+
it "preserves the class in the result" do
|
688
|
+
expect(rounded).to be_a special_money_class
|
689
|
+
end
|
690
|
+
end
|
672
691
|
end
|
673
692
|
end
|
674
693
|
|
675
|
-
describe "
|
676
|
-
it "
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
# ./lib/money/money.rb:63:in `fractional'
|
681
|
-
# ./lib/money/money/arithmetic.rb:115:in `-'
|
682
|
-
MoneyChild = Class.new(Money)
|
683
|
-
expect(MoneyChild.new(1000) - Money.new(500)).to eq Money.new(500)
|
694
|
+
describe "#inspect" do
|
695
|
+
it "reports the class name properly when using inheritance" do
|
696
|
+
expect(Money.new(1).inspect).to start_with '#<Money'
|
697
|
+
Subclass = Class.new(Money)
|
698
|
+
expect(Subclass.new(1).inspect).to start_with '#<Subclass'
|
684
699
|
end
|
685
700
|
end
|
686
701
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.6.
|
4
|
+
version: 6.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Emmons
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|