splittable 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/publish_release.yml +22 -0
- data/.github/workflows/ruby.yml +8 -5
- data/.ruby-version +1 -1
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -2
- data/Gemfile.lock +9 -10
- data/README.md +1 -0
- data/lib/splittable.rb +4 -29
- data/lib/splittable/division.rb +28 -0
- data/lib/splittable/normalize.rb +20 -0
- data/lib/splittable/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f9785e87a5381e8601e2c63b84d374222701bbfafeec4ba879a671fca0d9334
|
4
|
+
data.tar.gz: e5c9df2e54ff33850e2efec6dcd766dc611509f5a5db5be1fbe2d40ddefb34d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8b7795e1266f819dd59b10532b0c981f04568a7bac3162a48e5d43384ef083d84322ab2639aa704eb26f7687d472f5d47489de15a2c550a8a5cf2405542184e
|
7
|
+
data.tar.gz: c6f575e57453fcf85d2b2c98accd8a3f4bfc969f73c8f0e19dbbef950e134f658c8904b413f65c37489c6ecdcda8cb234008db5ed24ba822090d385fc2d2a634
|
@@ -0,0 +1,22 @@
|
|
1
|
+
name: Publish Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
tags:
|
8
|
+
- v*
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v1
|
15
|
+
|
16
|
+
- name: Release Gem
|
17
|
+
if: contains(github.ref, 'refs/tags/v')
|
18
|
+
uses: cadwallion/publish-rubygems-action@master
|
19
|
+
env:
|
20
|
+
GITHUB_TOKEN: ${{secrets.BUNDLE_GITHUB__COM}}
|
21
|
+
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_RELEASE}}
|
22
|
+
RELEASE_COMMAND: bundle exec rake release
|
data/.github/workflows/ruby.yml
CHANGED
@@ -10,24 +10,27 @@ on:
|
|
10
10
|
jobs:
|
11
11
|
build:
|
12
12
|
runs-on: ubuntu-latest
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby: [ '2.5', '2.6', '2.7', '3.0' ]
|
13
16
|
|
14
17
|
steps:
|
15
18
|
- uses: actions/checkout@v2
|
16
19
|
|
17
20
|
- name: Set up Ruby version specified in `.ruby-version`
|
18
21
|
with:
|
19
|
-
ruby-version:
|
22
|
+
ruby-version: ${{ matrix.ruby }}
|
20
23
|
uses: eregon/use-ruby-action@master
|
21
24
|
|
22
25
|
- name: Install dependencies
|
23
26
|
run: bundle install --jobs 4 --retry 3
|
24
27
|
|
25
|
-
- name: Run
|
28
|
+
- name: Run tests with RSpec
|
26
29
|
env:
|
27
30
|
RAILS_ENV: test
|
28
|
-
run: bundle exec
|
31
|
+
run: bundle exec rspec
|
29
32
|
|
30
|
-
- name: Run
|
33
|
+
- name: Run Rubocop
|
31
34
|
env:
|
32
35
|
RAILS_ENV: test
|
33
|
-
run: bundle exec
|
36
|
+
run: bundle exec rubocop --config .rubocop.yml
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## splittable 0.0.3 (Jan 29, 2021)
|
2
|
+
|
3
|
+
* Separate Division code
|
4
|
+
* Separate Normalize code
|
5
|
+
* Update actions to use ruby versions 2.5, 2.6 and 3.0
|
6
|
+
* Add badge to README.md
|
7
|
+
* Updated some gems versions
|
8
|
+
|
9
|
+
*Eduardo Fiorezi, Marcelo Toledo*
|
10
|
+
|
1
11
|
## splittable 0.0.2 (Jan 25, 2021)
|
2
12
|
|
3
13
|
* Update description for rubygems.org
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
splittable (0.0.
|
4
|
+
splittable (0.0.3)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
ast (2.4.
|
9
|
+
ast (2.4.2)
|
10
|
+
bigdecimal (3.0.0)
|
10
11
|
byebug (11.1.3)
|
11
12
|
coderay (1.1.3)
|
12
13
|
diff-lcs (1.4.4)
|
@@ -34,11 +35,11 @@ GEM
|
|
34
35
|
rspec-expectations (3.10.1)
|
35
36
|
diff-lcs (>= 1.2.0, < 2.0)
|
36
37
|
rspec-support (~> 3.10.0)
|
37
|
-
rspec-mocks (3.10.
|
38
|
+
rspec-mocks (3.10.2)
|
38
39
|
diff-lcs (>= 1.2.0, < 2.0)
|
39
40
|
rspec-support (~> 3.10.0)
|
40
|
-
rspec-support (3.10.
|
41
|
-
rubocop (1.
|
41
|
+
rspec-support (3.10.2)
|
42
|
+
rubocop (1.9.0)
|
42
43
|
parallel (~> 1.10)
|
43
44
|
parser (>= 3.0.0.0)
|
44
45
|
rainbow (>= 2.2.2, < 4.0)
|
@@ -47,7 +48,7 @@ GEM
|
|
47
48
|
rubocop-ast (>= 1.2.0, < 2.0)
|
48
49
|
ruby-progressbar (~> 1.7)
|
49
50
|
unicode-display_width (>= 1.4.0, < 3.0)
|
50
|
-
rubocop-ast (1.4.
|
51
|
+
rubocop-ast (1.4.1)
|
51
52
|
parser (>= 2.7.1.5)
|
52
53
|
rubocop-performance (1.9.2)
|
53
54
|
rubocop (>= 0.90.0, < 2.0)
|
@@ -70,6 +71,7 @@ PLATFORMS
|
|
70
71
|
ruby
|
71
72
|
|
72
73
|
DEPENDENCIES
|
74
|
+
bigdecimal (~> 3.0)
|
73
75
|
pry-byebug (~> 3.9)
|
74
76
|
rake (~> 13.0.3)
|
75
77
|
rspec (~> 3.10)
|
@@ -80,8 +82,5 @@ DEPENDENCIES
|
|
80
82
|
simplecov
|
81
83
|
splittable!
|
82
84
|
|
83
|
-
RUBY VERSION
|
84
|
-
ruby 2.6.6p146
|
85
|
-
|
86
85
|
BUNDLED WITH
|
87
|
-
2.2.
|
86
|
+
2.2.7
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Splittable
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/splittable.svg)](https://badge.fury.io/rb/splittable)
|
4
|
+
[![Ruby](https://github.com/Pagnet/splittable/workflows/Ruby/badge.svg?branch=master)](https://github.com/Pagnet/splittable/actions?query=workflow%3ARuby)
|
4
5
|
|
5
6
|
## Goal
|
6
7
|
|
data/lib/splittable.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'splittable/version'
|
4
|
+
require 'splittable/division'
|
5
|
+
require 'splittable/normalize'
|
4
6
|
require 'bigdecimal/util'
|
5
7
|
|
6
8
|
module Splittable
|
@@ -8,40 +10,13 @@ module Splittable
|
|
8
10
|
# receive total value and to quantity installments are required to equal division
|
9
11
|
# just the first installment will receive the difference cents
|
10
12
|
def division(value:, quantity:)
|
11
|
-
|
12
|
-
params_validation!(@quantity)
|
13
|
-
partial_value = (@value / @quantity).truncate(2)
|
14
|
-
decimal_difference = @value - (@quantity * partial_value)
|
15
|
-
installments = [partial_value] * @quantity
|
16
|
-
installments[0] += decimal_difference
|
17
|
-
|
18
|
-
installments
|
13
|
+
Splittable::Division.new(value: value, quantity: quantity).call
|
19
14
|
end
|
20
15
|
|
21
16
|
# receive total value and specific value of installments are required to specific division
|
22
17
|
# just the first installment will receive the difference cents
|
23
18
|
def normalize(value:, installments:)
|
24
|
-
|
25
|
-
decimal_difference = @value - @installments.sum
|
26
|
-
@installments[0] += decimal_difference
|
27
|
-
|
28
|
-
@installments
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
attr_accessor :value, :quantity, :installments
|
34
|
-
|
35
|
-
def params_validation!(quantity)
|
36
|
-
return if quantity.positive?
|
37
|
-
|
38
|
-
raise ArgumentError, 'quantity should be positive'
|
39
|
-
end
|
40
|
-
|
41
|
-
def convert_params!(value: nil, quantity: nil, installments: nil)
|
42
|
-
@value = BigDecimal(value.truncate(2), 15) unless value.nil?
|
43
|
-
@quantity = BigDecimal(quantity.to_i, 15) unless quantity.nil?
|
44
|
-
@installments = installments.map { |installment| BigDecimal(installment.round(2), 15) } unless installments.nil?
|
19
|
+
Splittable::Normalize.new(value: value, installments: installments).call
|
45
20
|
end
|
46
21
|
end
|
47
22
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Splittable::Division
|
4
|
+
def initialize(value:, quantity:)
|
5
|
+
@value = BigDecimal(value, 15).truncate(2)
|
6
|
+
@quantity = BigDecimal(quantity.to_i, 15)
|
7
|
+
|
8
|
+
check_quantity_as_positive_value!
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
partial_value = (value / quantity).truncate(2)
|
13
|
+
installments = [partial_value] * quantity
|
14
|
+
installments[0] += value - installments.sum.to_d
|
15
|
+
|
16
|
+
installments
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :value, :quantity
|
22
|
+
|
23
|
+
def check_quantity_as_positive_value!
|
24
|
+
return if quantity.positive?
|
25
|
+
|
26
|
+
raise ArgumentError, 'quantity should be positive'
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Splittable::Normalize
|
4
|
+
def initialize(value:, installments:)
|
5
|
+
@value = BigDecimal(value, 15).truncate(2)
|
6
|
+
@installments = installments.map { |installment| BigDecimal(installment.round(2), 15) }
|
7
|
+
end
|
8
|
+
|
9
|
+
def call
|
10
|
+
decimal_difference = value - installments.sum
|
11
|
+
installments[0] += decimal_difference
|
12
|
+
|
13
|
+
installments
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
attr_reader :value
|
19
|
+
attr_accessor :installments
|
20
|
+
end
|
data/lib/splittable/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splittable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arthur Brandão
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-01-
|
12
|
+
date: 2021-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: |-
|
15
15
|
This gem solves the problem of several decimal places in divisions
|
@@ -27,6 +27,7 @@ files:
|
|
27
27
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
28
28
|
- ".github/ISSUE_TEMPLATE/security_vulnerability.md"
|
29
29
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
30
|
+
- ".github/workflows/publish_release.yml"
|
30
31
|
- ".github/workflows/ruby.yml"
|
31
32
|
- ".gitignore"
|
32
33
|
- ".rspec"
|
@@ -43,6 +44,8 @@ files:
|
|
43
44
|
- bin/console
|
44
45
|
- bin/setup
|
45
46
|
- lib/splittable.rb
|
47
|
+
- lib/splittable/division.rb
|
48
|
+
- lib/splittable/normalize.rb
|
46
49
|
- lib/splittable/version.rb
|
47
50
|
- sonar-project.properties
|
48
51
|
- splittable.gemspec
|
@@ -68,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
71
|
- !ruby/object:Gem::Version
|
69
72
|
version: '0'
|
70
73
|
requirements: []
|
71
|
-
rubygems_version: 3.
|
74
|
+
rubygems_version: 3.2.3
|
72
75
|
signing_key:
|
73
76
|
specification_version: 4
|
74
77
|
summary: Calculate division and normalize parcels to use just cents.
|