money_extensions 1.1.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|