tax-util 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tax_util.rb +35 -2
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fce6d7d6e79d116dec3602d4d8947da70da4a1ce
|
4
|
+
data.tar.gz: c861ce2a3ba1976b0f1ece4e41ae0af01ca907ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e08d7c3a8f6afcc03b13b571e1e6ec97fdc1731aebe35ccfafa1605b23ec25e3c28a36f5ab5e8fbacd053ffc044b6e856cfe41ad55933c74b8ec6107a3fe574b
|
7
|
+
data.tar.gz: ee6b61214ec86bffe7738655452225a07287eff8c6f04cd786b1ca3ae1eadf6e8ae72810eec642a4363ce74d3fe9f842131159f27c6d158f007484542fc17532
|
data/lib/tax_util.rb
CHANGED
@@ -1,5 +1,38 @@
|
|
1
|
+
Dir.glob('./lib/calc_method/*').each{|i| require i }
|
2
|
+
|
1
3
|
class TaxUtil
|
2
|
-
def self.
|
3
|
-
|
4
|
+
def self.calculate(gross_amount, calc_method=:gross_to_nett)
|
5
|
+
self.const_get(classify(calc_method[:method])).new(gross_amount).calculate
|
4
6
|
end
|
7
|
+
|
8
|
+
def self.tax_for(amount, tax_scale, taxes=0)
|
9
|
+
range = TAX_SCALE.keys[tax_scale]
|
10
|
+
tax = TAX_SCALE.fetch(range)
|
11
|
+
max_of_scale = (range.last - range.first) + 1
|
12
|
+
|
13
|
+
if((current_amount = amount - max_of_scale) >= 0)
|
14
|
+
taxes += max_of_scale * tax
|
15
|
+
tax_for(current_amount, tax_scale+1, taxes.floor)
|
16
|
+
else
|
17
|
+
(taxes += (amount * tax)).floor
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.tax_correction?(amount)
|
22
|
+
TAX_SCALE.select{|a| a === amount}.values.first == 0
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
TAX_SCALE = {
|
27
|
+
(0..19822) => 0.365,
|
28
|
+
(19823..33589) => 0.42,
|
29
|
+
(33590..57585) => 0.42,
|
30
|
+
(57586..Float::INFINITY) => 0.52
|
31
|
+
}
|
32
|
+
|
33
|
+
SCALE_ONE = 0
|
34
|
+
|
35
|
+
def self.classify(symbol_name)
|
36
|
+
"CalcMethod::#{symbol_name.to_s.split('_').map{|name_part| (name_part[0] = name_part[0].upcase!) ; name_part }.join('')}"
|
37
|
+
end
|
5
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tax-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Oemar
|
@@ -14,16 +14,30 @@ dependencies:
|
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Holder tax util gem
|
28
42
|
email: bryan.oemar@holder.nl
|
29
43
|
executables: []
|