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 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.