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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e61a63193ba97a1d8ea9a0a8249290e9dfabf131311ad85da009c38306bc150d
4
- data.tar.gz: 0c54c7ec6e4e502c7ebe23d5345cea093be0e1f947692098ffe6fc5218b27d6f
3
+ metadata.gz: 06650b1771418b5d1bdc6d6391949813b5068ac49a69c8ab05e8d2c25a00be01
4
+ data.tar.gz: 134f2a5024b53e835adf631ea62d39e7005c0f2823ed3339a651197165fef6a0
5
5
  SHA512:
6
- metadata.gz: 91590442812a5733b601511b7074aa08eddcddb77c389010e882b62b75520720021c19a259dce15245a295df32778a8096f87d3d4eddc7d75fc181aac4e8f120
7
- data.tar.gz: a1510bc019b28af3c4612bff28f922dcabd8d299a80007332166dbb47ad1246525b697a466391ef944aa130772eae81724d2bb757f7b97af10e484a99709bc37
6
+ metadata.gz: e67f7a24cf172adbf7b8c155e47385daddfc86bc15270df25555aa4b1edac30082ea8e79fc12d9f40f0f2f644cee002d817a144a3777a85acda3caf470b15bc4
7
+ data.tar.gz: c971b6a50588c06dc507737fdba9ff27bfd800f4d64438538f4f15e62fb6b3b25eb23d6db45a9b4be9effe2b6e27dbfa03ebe14de38eb063fb06796c55471503
@@ -5,8 +5,8 @@ jobs:
5
5
  strategy:
6
6
  fail-fast: false
7
7
  matrix:
8
- gemfile: [rails60, rails61]
9
- ruby: ["2.6", "2.7", "3.0"]
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.0.0
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
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+ gemspec :path => '../'
3
+
4
+ group :development, :test do
5
+ gem 'activerecord', '~> 7.0'
6
+ gem 'activesupport', '~> 7.0'
7
+ end
@@ -2,9 +2,7 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module Extensions
5
- def self.included(base)
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
- ::ActiveRecord::Base.send(:include, MoneyField)
48
- ::ActiveRecord::Base.send(:include, ActiveRecord::Extensions)
45
+ ActiveSupport.on_load(:active_record) do
46
+ ::ActiveRecord::Base.send(:include, MoneyField)
47
+ ::ActiveRecord::Base.send(:include, ActiveRecord::Extensions)
48
+ end
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MoneyField
4
- def self.included(base)
5
- base.extend(ClassMethods)
6
- end
4
+ extend ActiveSupport::Concern
7
5
 
8
6
  module ClassMethods
9
7
  # Add a money field attribute
@@ -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
- divisor = params
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MoneyExtensions
4
- VERSION = '1.1.0'
4
+ VERSION = '1.4.0'
5
5
  end
@@ -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
 
@@ -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 [-34,-33,-33].map{ |i| Money.new(i)}
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
 
@@ -1,4 +1,3 @@
1
- require 'simplecov-rcov'
2
- require 'coveralls'
3
1
  require 'coverage/kit'
4
- Coverage::Kit.setup(minimum_coverage: 86.6)
2
+
3
+ Coverage::Kit.setup(minimum_coverage: 87.0)
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.1.0
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: 2021-01-06 00:00:00.000000000 Z
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.2.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.