cashify 0.9.1 → 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/CHANGELOG.md +8 -0
- data/Gemfile.lock +16 -14
- data/README.md +0 -9
- data/lib/cashify/arithmetic.rb +6 -2
- data/lib/cashify/version.rb +1 -1
- data/lib/cashify.rb +4 -4
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf06dc249f2461c5e6f7f59cdf2208eae3a423007570b12e5a52eaa8ed5ca44c
|
4
|
+
data.tar.gz: 625e22c82feb306c2564f5f7e79db25d6d658bfddaa347450b909bb7503b2fae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f65af840ef4a53e2bf82bff63197526bbbfa22d936321b57ddabce52762fb02f7f55bfd3436306fd6af99bdd0882dfead0b5a323b613ff4b0c6bbae4d5bc032
|
7
|
+
data.tar.gz: 84c82bca4217c8a116c24a62cde33d9d0f12c6d2139f357ebb64633f7472f2c56bb566b89ae0e0094c0029bfe233655f25261c22a70ea7ee74776ef406efa3ea
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [1.0.0] - 2023-03-30
|
2
|
+
|
3
|
+
- Add coercion so things like `sum` work natively (Johan Halse)
|
4
|
+
|
5
|
+
## [0.9.2] - 2022-11-18
|
6
|
+
|
7
|
+
- Add `to_delimited_s` method (Johan Halse)
|
8
|
+
|
1
9
|
## [0.9.1] - 2021-10-08
|
2
10
|
|
3
11
|
- Add `cashify` method for Active Record users (Johan Halse)
|
data/Gemfile.lock
CHANGED
@@ -1,42 +1,44 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cashify (0.9.
|
4
|
+
cashify (0.9.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
ast (2.4.2)
|
10
10
|
coderay (1.1.3)
|
11
|
+
json (2.6.2)
|
11
12
|
method_source (1.0.0)
|
12
|
-
minitest (5.
|
13
|
-
parallel (1.
|
14
|
-
parser (3.
|
13
|
+
minitest (5.16.3)
|
14
|
+
parallel (1.22.1)
|
15
|
+
parser (3.1.2.1)
|
15
16
|
ast (~> 2.4.1)
|
16
17
|
pry (0.14.1)
|
17
18
|
coderay (~> 1.1)
|
18
19
|
method_source (~> 1.0)
|
19
|
-
rainbow (3.
|
20
|
+
rainbow (3.1.1)
|
20
21
|
rake (13.0.6)
|
21
|
-
regexp_parser (2.
|
22
|
+
regexp_parser (2.6.1)
|
22
23
|
rexml (3.2.5)
|
23
|
-
rubocop (1.
|
24
|
+
rubocop (1.39.0)
|
25
|
+
json (~> 2.3)
|
24
26
|
parallel (~> 1.10)
|
25
|
-
parser (>= 3.
|
27
|
+
parser (>= 3.1.2.1)
|
26
28
|
rainbow (>= 2.2.2, < 4.0)
|
27
29
|
regexp_parser (>= 1.8, < 3.0)
|
28
|
-
rexml
|
29
|
-
rubocop-ast (>= 1.
|
30
|
+
rexml (>= 3.2.5, < 4.0)
|
31
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
30
32
|
ruby-progressbar (~> 1.7)
|
31
33
|
unicode-display_width (>= 1.4.0, < 3.0)
|
32
|
-
rubocop-ast (1.
|
33
|
-
parser (>= 3.
|
34
|
-
rubocop-minitest (0.
|
34
|
+
rubocop-ast (1.23.0)
|
35
|
+
parser (>= 3.1.1.0)
|
36
|
+
rubocop-minitest (0.23.2)
|
35
37
|
rubocop (>= 0.90, < 2.0)
|
36
38
|
rubocop-rake (0.6.0)
|
37
39
|
rubocop (~> 1.0)
|
38
40
|
ruby-progressbar (1.11.0)
|
39
|
-
unicode-display_width (2.
|
41
|
+
unicode-display_width (2.3.0)
|
40
42
|
|
41
43
|
PLATFORMS
|
42
44
|
x86_64-darwin-19
|
data/README.md
CHANGED
@@ -161,15 +161,6 @@ Cash.new(EUR: 100_00, SEK: 100_00, USD: 100_00).to_s
|
|
161
161
|
# "100 EUR, 100 SEK, 100 USD"
|
162
162
|
```
|
163
163
|
|
164
|
-
#### `.sum`
|
165
|
-
|
166
|
-
You'll be working with arrays of Cash objects a lot. You should absolutely be using Ruby's excellent array methods on them, but unfortunately `cash_array.sum` won't work. Ruby's `sum` method injects a `0` as the first value, and even though `Cash.new(USD: 100) + 0` is super valid and nice, `0 + Cash.new(USD: 100)` will try to coerce your Cash object into an integer which just won't work. So if you want to sum an array of Cash, you can instead use:
|
167
|
-
|
168
|
-
```ruby
|
169
|
-
Cash.sum [Cash.new(EUR: 100_00), Cash.new(SEK: 100_00), Cash.new(EUR: 100_00)]
|
170
|
-
# 200 EUR, 100 SEK
|
171
|
-
```
|
172
|
-
|
173
164
|
#### `.empty?`
|
174
165
|
|
175
166
|
Returns true if there are no currencies in the object.
|
data/lib/cashify/arithmetic.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
class Cash
|
2
2
|
module Arithmetic
|
3
|
+
def coerce(other)
|
4
|
+
[self, other]
|
5
|
+
end
|
6
|
+
|
3
7
|
def +(other)
|
4
8
|
raise Cash::Errors::AdditionError unless other.respond_to?(:zero?)
|
5
9
|
return self unless present?(other)
|
@@ -72,12 +76,12 @@ class Cash
|
|
72
76
|
return currencies if other.zero?
|
73
77
|
return other.currencies.transform_values { |v| 0 - v } if zero?
|
74
78
|
|
75
|
-
(@currencies.keys + other.currencies.keys).uniq.
|
79
|
+
(@currencies.keys + other.currencies.keys).uniq.to_h do |k|
|
76
80
|
minuend = @currencies[k] || 0
|
77
81
|
subtrahend = other.currencies[k] || 0
|
78
82
|
|
79
83
|
[k, minuend - subtrahend]
|
80
|
-
end
|
84
|
+
end
|
81
85
|
end
|
82
86
|
end
|
83
87
|
end
|
data/lib/cashify/version.rb
CHANGED
data/lib/cashify.rb
CHANGED
@@ -25,10 +25,6 @@ class Cash
|
|
25
25
|
new(USD: 0)
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.sum(cashes)
|
29
|
-
cashes.inject(Cash.zero, :+)
|
30
|
-
end
|
31
|
-
|
32
28
|
def initialize(**currencies)
|
33
29
|
@currencies = currencies
|
34
30
|
.transform_keys(&:to_sym)
|
@@ -69,6 +65,10 @@ class Cash
|
|
69
65
|
currencies.map { |k, v| "#{(v * 0.01).round} #{k}" }.join(", ")
|
70
66
|
end
|
71
67
|
|
68
|
+
def to_delimited_s
|
69
|
+
currencies.map { |k, v| "#{(v * 0.01).round.to_formatted_s(:delimited, delimiter: " ")} #{k}" }.join(", ")
|
70
|
+
end
|
71
|
+
|
72
72
|
def currency
|
73
73
|
currencies.keys.first
|
74
74
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cashify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johan Halse
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Money trouble no more! Add, subtract, and have fun with money in different
|
14
14
|
currencies.
|
@@ -41,7 +41,8 @@ metadata:
|
|
41
41
|
homepage_uri: https://github.com/johanhalse/cashify
|
42
42
|
source_code_uri: https://github.com/johanhalse/cashify
|
43
43
|
changelog_uri: https://github.com/johanhalse/cashify/CHANGELOG.md
|
44
|
-
|
44
|
+
rubygems_mfa_required: 'true'
|
45
|
+
post_install_message:
|
45
46
|
rdoc_options: []
|
46
47
|
require_paths:
|
47
48
|
- lib
|
@@ -56,8 +57,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
57
|
- !ruby/object:Gem::Version
|
57
58
|
version: '0'
|
58
59
|
requirements: []
|
59
|
-
rubygems_version: 3.
|
60
|
-
signing_key:
|
60
|
+
rubygems_version: 3.4.3
|
61
|
+
signing_key:
|
61
62
|
specification_version: 4
|
62
63
|
summary: A sensible way to handle money
|
63
64
|
test_files: []
|