money_extensions 1.1.0 → 1.4.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/.github/workflows/ruby.yml +7 -2
- data/.ruby-version +1 -1
- data/CHANGELOG.md +12 -0
- data/gemfiles/rails70.gemfile +7 -0
- data/lib/money_extensions/active_record/extensions.rb +5 -5
- data/lib/money_extensions/{money_field.rb → active_record/money_field.rb} +1 -3
- data/lib/money_extensions/split_between.rb +20 -9
- data/lib/money_extensions/version.rb +1 -1
- data/lib/money_extensions.rb +1 -1
- data/money_extensions.gemspec +0 -2
- data/spec/money_spec.rb +21 -1
- data/spec/support/coverage_loader.rb +2 -3
- metadata +5 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06650b1771418b5d1bdc6d6391949813b5068ac49a69c8ab05e8d2c25a00be01
|
4
|
+
data.tar.gz: 134f2a5024b53e835adf631ea62d39e7005c0f2823ed3339a651197165fef6a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e67f7a24cf172adbf7b8c155e47385daddfc86bc15270df25555aa4b1edac30082ea8e79fc12d9f40f0f2f644cee002d817a144a3777a85acda3caf470b15bc4
|
7
|
+
data.tar.gz: c971b6a50588c06dc507737fdba9ff27bfd800f4d64438538f4f15e62fb6b3b25eb23d6db45a9b4be9effe2b6e27dbfa03ebe14de38eb063fb06796c55471503
|
data/.github/workflows/ruby.yml
CHANGED
@@ -5,8 +5,8 @@ jobs:
|
|
5
5
|
strategy:
|
6
6
|
fail-fast: false
|
7
7
|
matrix:
|
8
|
-
gemfile: [rails60, rails61]
|
9
|
-
ruby: ["2.
|
8
|
+
gemfile: [rails60, rails61, rails70]
|
9
|
+
ruby: ["2.7", "3.0", "3.1"]
|
10
10
|
runs-on: ubuntu-latest
|
11
11
|
env:
|
12
12
|
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
|
@@ -17,3 +17,8 @@ jobs:
|
|
17
17
|
ruby-version: ${{ matrix.ruby }}
|
18
18
|
bundler-cache: true
|
19
19
|
- run: bundle exec rake
|
20
|
+
- name: Coveralls
|
21
|
+
uses: coverallsapp/github-action@master
|
22
|
+
with:
|
23
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
24
|
+
path-to-lcov: coverage/lcov.info
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.1.0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.4.0
|
4
|
+
|
5
|
+
- [PLAT-401] Optimise split_between when we are doing so with numbers
|
6
|
+
|
7
|
+
## 1.3.0
|
8
|
+
|
9
|
+
- [PLAT-377] Improve bundler require time for the Gem
|
10
|
+
|
11
|
+
## 1.2.0
|
12
|
+
|
13
|
+
- [PLAT-183] Build with Ruby 3.1 / Rails 7 and publish coverage with github action
|
14
|
+
|
3
15
|
## 1.1.0
|
4
16
|
|
5
17
|
- [TT-8625] Update to build with github actions / ruby 3.0 / rails 6.1
|
@@ -2,9 +2,7 @@
|
|
2
2
|
|
3
3
|
module ActiveRecord
|
4
4
|
module Extensions
|
5
|
-
|
6
|
-
base.extend(ClassMethods)
|
7
|
-
end
|
5
|
+
extend ActiveSupport::Concern
|
8
6
|
|
9
7
|
module ClassMethods
|
10
8
|
# Assign a :currency (Money::Currency object) reader/writer for the given
|
@@ -44,5 +42,7 @@ module ActiveRecord
|
|
44
42
|
end
|
45
43
|
end
|
46
44
|
|
47
|
-
|
48
|
-
::ActiveRecord::Base.send(:include,
|
45
|
+
ActiveSupport.on_load(:active_record) do
|
46
|
+
::ActiveRecord::Base.send(:include, MoneyField)
|
47
|
+
::ActiveRecord::Base.send(:include, ActiveRecord::Extensions)
|
48
|
+
end
|
@@ -1,11 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module SplitBetween
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
4
6
|
# Override division -- should not do it, but use split_between
|
5
7
|
def /(*_params)
|
6
8
|
raise "Division of money NOT allowed - use 'split_between' to avoid rounding errors"
|
7
9
|
end
|
8
10
|
|
11
|
+
module ClassMethods
|
12
|
+
def split_evenly_between(cents, number)
|
13
|
+
Money::Allocation.generate(cents, number).map { |num| Money.from_cents(num) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def split_evenly_between(number)
|
18
|
+
Money.split_evenly_between(cents, number)
|
19
|
+
end
|
20
|
+
|
9
21
|
# Split the money between the specified number - and return an array of money
|
10
22
|
# Remainder in splits are given to the highest value e.g.
|
11
23
|
# $2.00 splits [40, 81, 40] into [49, 102, 49]
|
@@ -13,11 +25,7 @@ module SplitBetween
|
|
13
25
|
def split_between(params)
|
14
26
|
# if just a number is passed in, then money is split equally
|
15
27
|
if params.is_a?(Integer)
|
16
|
-
|
17
|
-
raise ArgumentError, 'Can only split up over a positive number' if divisor < 1
|
18
|
-
|
19
|
-
rounded_split = lossy_divide(divisor)
|
20
|
-
results = Array.new(divisor, rounded_split) # Create with 'divisor' num elements
|
28
|
+
results = split_evenly_between(params)
|
21
29
|
|
22
30
|
# if an array of monies is passed in, then split in proportions
|
23
31
|
elsif params.is_a?(Array)
|
@@ -36,14 +44,17 @@ module SplitBetween
|
|
36
44
|
results.map! do |ratio|
|
37
45
|
::Money.new((cents * (ratio.to_f / total)).round)
|
38
46
|
end
|
47
|
+
|
48
|
+
# Distribute rounding to max absolute to avoid a $0 amount getting the rounding
|
49
|
+
remainder = self - results.total_money
|
50
|
+
if !remainder.zero?
|
51
|
+
biggest_value_index = results.index(results.max_by(&:abs))
|
52
|
+
results[biggest_value_index] += remainder
|
53
|
+
end
|
39
54
|
else
|
40
55
|
raise 'Either a Integer or array has to be passed in for splitting money'
|
41
56
|
end
|
42
57
|
|
43
|
-
# Distribute rounding to max absolute to avoid a $0 amount getting the rounding
|
44
|
-
biggest_value_index = results.index(results.max_by(&:abs))
|
45
|
-
results[biggest_value_index] += self - results.total_money
|
46
|
-
|
47
58
|
results
|
48
59
|
end
|
49
60
|
end
|
data/lib/money_extensions.rb
CHANGED
@@ -4,12 +4,12 @@ module MoneyExtensions
|
|
4
4
|
require 'money_extensions/integer'
|
5
5
|
require 'money_extensions/split_between'
|
6
6
|
require 'money_extensions/html_format'
|
7
|
-
require 'money_extensions/money_field'
|
8
7
|
require 'money_extensions/numeric'
|
9
8
|
require 'money_extensions/string'
|
10
9
|
|
11
10
|
# TODO: Defer requiring the active record extension to who needs it
|
12
11
|
if Module.const_defined?('ActiveRecord')
|
12
|
+
require 'money_extensions/active_record/money_field'
|
13
13
|
require 'money_extensions/active_record/extensions'
|
14
14
|
end
|
15
15
|
|
data/money_extensions.gemspec
CHANGED
@@ -26,8 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency 'rubocop'
|
27
27
|
spec.add_development_dependency 'rspec'
|
28
28
|
spec.add_development_dependency 'coverage-kit'
|
29
|
-
spec.add_development_dependency 'simplecov-rcov'
|
30
|
-
spec.add_development_dependency 'coveralls'
|
31
29
|
spec.add_development_dependency 'sqlite3'
|
32
30
|
spec.add_development_dependency 'activerecord'
|
33
31
|
spec.add_development_dependency 'pry-byebug'
|
data/spec/money_spec.rb
CHANGED
@@ -5,6 +5,26 @@ describe Money do
|
|
5
5
|
expect { Money.new(50)/10 }.to raise_error(RuntimeError)
|
6
6
|
end
|
7
7
|
|
8
|
+
it 'should split evenly between' do
|
9
|
+
money = Money.new(100)
|
10
|
+
|
11
|
+
expect(money.split_evenly_between(3)).to eq [34,33,33].map{ |i| Money.new(i) }
|
12
|
+
expect(money.split_evenly_between(3).sum(Money.zero)).to eq money
|
13
|
+
|
14
|
+
expect(money.split_evenly_between(6)).to eq [17,17,17,17,16,16].map{ |i| Money.new(i) }
|
15
|
+
expect(money.split_evenly_between(6).sum(Money.zero)).to eq money
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should split evenly between negative numbers' do
|
19
|
+
money = Money.new(-100)
|
20
|
+
|
21
|
+
expect(money.split_evenly_between(3)).to eq [-33,-33,-34].map{ |i| Money.new(i) }
|
22
|
+
expect(money.split_evenly_between(3).sum(Money.zero)).to eq money
|
23
|
+
|
24
|
+
expect(money.split_evenly_between(6)).to eq [-16,-16,-17,-17,-17,-17].map{ |i| Money.new(i) }
|
25
|
+
expect(money.split_evenly_between(6).sum(Money.zero)).to eq money
|
26
|
+
end
|
27
|
+
|
8
28
|
it "should split money correctly" do
|
9
29
|
money = Money.new(100)
|
10
30
|
|
@@ -21,7 +41,7 @@ describe Money do
|
|
21
41
|
expect(money.split_between([1,2])).to eq [33,67].map{ |i| Money.new(i)}
|
22
42
|
|
23
43
|
money_negative = Money.new(-100)
|
24
|
-
expect(money_negative.split_between(3)).to eq [-
|
44
|
+
expect(money_negative.split_between(3)).to eq [-33,-33,-34].map{ |i| Money.new(i)}
|
25
45
|
expect(money_negative.split_between([1,2,2,5])).to eq [-10,-20,-20,-50].map{ |i| Money.new(i)}
|
26
46
|
expect(money_negative.split_between([1,2])).to eq [-33,-67].map{ |i| Money.new(i)}
|
27
47
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Noack
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-07-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: money
|
@@ -95,34 +95,6 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: simplecov-rcov
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: coveralls
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
98
|
- !ruby/object:Gem::Dependency
|
127
99
|
name: sqlite3
|
128
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,12 +156,13 @@ files:
|
|
184
156
|
- Rakefile
|
185
157
|
- gemfiles/rails60.gemfile
|
186
158
|
- gemfiles/rails61.gemfile
|
159
|
+
- gemfiles/rails70.gemfile
|
187
160
|
- lib/money_extensions.rb
|
188
161
|
- lib/money_extensions/active_record/extensions.rb
|
162
|
+
- lib/money_extensions/active_record/money_field.rb
|
189
163
|
- lib/money_extensions/array.rb
|
190
164
|
- lib/money_extensions/html_format.rb
|
191
165
|
- lib/money_extensions/integer.rb
|
192
|
-
- lib/money_extensions/money_field.rb
|
193
166
|
- lib/money_extensions/numeric.rb
|
194
167
|
- lib/money_extensions/split_between.rb
|
195
168
|
- lib/money_extensions/string.rb
|
@@ -222,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
195
|
- !ruby/object:Gem::Version
|
223
196
|
version: '0'
|
224
197
|
requirements: []
|
225
|
-
rubygems_version: 3.
|
198
|
+
rubygems_version: 3.3.3
|
226
199
|
signing_key:
|
227
200
|
specification_version: 4
|
228
201
|
summary: Set of extensions to the money gem used by TravelLink Technology.
|