taxger 0.2.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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE +8 -0
- data/README.md +89 -0
- data/Rakefile +22 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/taxger/einkommensteuer.rb +104 -0
- data/lib/taxger/lohnsteuer/bigdecimal.rb +70 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2006.rb +891 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2007.rb +917 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2008.rb +983 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2009.rb +975 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2010.rb +1026 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2011.rb +1070 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2011dezember.rb +1082 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2012.rb +1118 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2013.rb +1120 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2014.rb +1123 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2015.rb +1144 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2015dezember.rb +1339 -0
- data/lib/taxger/lohnsteuer/lohnsteuer2016.rb +1144 -0
- data/lib/taxger/lohnsteuer.rb +28 -0
- data/lib/taxger/version.rb +3 -0
- data/lib/taxger.rb +9 -0
- data/src/README.md +141 -0
- data/src/code_tree.rb +122 -0
- data/src/converter.rb +61 -0
- data/src/generated/.keep +0 -0
- data/src/node/class_node.rb +30 -0
- data/src/node/comment_node.rb +19 -0
- data/src/node/conditional_node.rb +32 -0
- data/src/node/expr_node.rb +13 -0
- data/src/node/initializer_node.rb +37 -0
- data/src/node/method_call_node.rb +12 -0
- data/src/node/method_node.rb +21 -0
- data/src/node/node.rb +47 -0
- data/src/node/pseudo_code_parser.rb +88 -0
- data/src/node/source_node.rb +43 -0
- data/src/node/var_block_node.rb +39 -0
- data/taxger.gemspec +34 -0
- metadata +146 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
class SourceNode < Node
|
2
|
+
attr_accessor :lines
|
3
|
+
def initialize(elements)
|
4
|
+
@lines = []
|
5
|
+
lc = nil
|
6
|
+
elements.each do |element|
|
7
|
+
if element.name == 'EXECUTE'
|
8
|
+
@lines << MethodCallNode.new(element)
|
9
|
+
lc = nil
|
10
|
+
elsif element.name == 'EVAL'
|
11
|
+
@lines << ExprNode.new(element)
|
12
|
+
lc = nil
|
13
|
+
elsif element.name == 'IF'
|
14
|
+
@lines << ConditionalNode.new(element)
|
15
|
+
lc = @lines.last
|
16
|
+
elsif element.name == 'ELSE'
|
17
|
+
if lc
|
18
|
+
puts 'WARNING: Orphaned ELSE block found, but assigning it to previous IF statement'
|
19
|
+
lc.attach_else(element.xpath('./*'))
|
20
|
+
else
|
21
|
+
raise UnknownTagError.new("Orphaned ELSE block found: #{element.inspect}")
|
22
|
+
end
|
23
|
+
elsif Node.is_comment?(element)
|
24
|
+
@lines << CommentNode.new(element)
|
25
|
+
elsif Node.is_text?(element)
|
26
|
+
if element.inner_text.strip != ''
|
27
|
+
raise UnknownTextError.new(element.inner_text)
|
28
|
+
end
|
29
|
+
else
|
30
|
+
raise UnknownTagError.new("Unknown pseudo code element: #{element.inspect}")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
super()
|
34
|
+
end
|
35
|
+
|
36
|
+
def render
|
37
|
+
@lines.each do |line|
|
38
|
+
output(line)
|
39
|
+
end
|
40
|
+
output_buffer
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class VarBlockNode < Node
|
2
|
+
def initialize(element, options = {})
|
3
|
+
@tag = options[:tag] || (raise 'Specify a :tag name')
|
4
|
+
@options = options
|
5
|
+
@name = element.name
|
6
|
+
@elements = element.children
|
7
|
+
super()
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
comment @name
|
12
|
+
comments = []
|
13
|
+
@elements.each do |line|
|
14
|
+
if Node.is_comment?(line)
|
15
|
+
comments << CommentNode.new(line)
|
16
|
+
elsif Node.is_text?(line)
|
17
|
+
if line.inner_text.strip != ''
|
18
|
+
raise UnknownTextError.new(line)
|
19
|
+
end
|
20
|
+
elsif line.name == @tag.to_s.upcase
|
21
|
+
type = @options[:show_type] ? " # #{line.attr('type')}" : nil
|
22
|
+
if comments.size > 0
|
23
|
+
linefeed
|
24
|
+
output comments
|
25
|
+
end
|
26
|
+
if line.attr('value')
|
27
|
+
value = PseudoCode.parse_constant_value(line.attr('value'))
|
28
|
+
else
|
29
|
+
value = PseudoCode.parse_default(line.attr('default'), line.attr('type'))
|
30
|
+
end
|
31
|
+
output "#{PseudoCode.parse_var(line.attr('name')).ljust(15)} = #{value.ljust(20)}#{type}"
|
32
|
+
comments = []
|
33
|
+
else
|
34
|
+
raise UnknownTagError.new(line)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
linefeed
|
38
|
+
end
|
39
|
+
end
|
data/taxger.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'taxger/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "taxger"
|
8
|
+
spec.version = Taxger::VERSION
|
9
|
+
spec.authors = ["Malte Münchert"]
|
10
|
+
spec.license = 'MIT'
|
11
|
+
spec.email = ["malte.muenchert@gmx.net"]
|
12
|
+
|
13
|
+
spec.summary = %q{Calculate taxes in Germany}
|
14
|
+
spec.description = %q{Calculate income taxes (Lohnsteuer and Einkommensteuer) based on the official guidelines}
|
15
|
+
spec.homepage = "https://github.com/mpm/taxger"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
18
|
+
# delete this section to allow pushing this gem to any host.
|
19
|
+
if spec.respond_to?(:metadata)
|
20
|
+
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
21
|
+
else
|
22
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
23
|
+
end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
31
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
33
|
+
spec.add_development_dependency "nokogiri", "~> 1.6"
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: taxger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Malte Münchert
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nokogiri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.6'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.6'
|
69
|
+
description: Calculate income taxes (Lohnsteuer and Einkommensteuer) based on the
|
70
|
+
official guidelines
|
71
|
+
email:
|
72
|
+
- malte.muenchert@gmx.net
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- ".rspec"
|
79
|
+
- ".travis.yml"
|
80
|
+
- CODE_OF_CONDUCT.md
|
81
|
+
- Gemfile
|
82
|
+
- LICENSE
|
83
|
+
- README.md
|
84
|
+
- Rakefile
|
85
|
+
- bin/console
|
86
|
+
- bin/setup
|
87
|
+
- lib/taxger.rb
|
88
|
+
- lib/taxger/einkommensteuer.rb
|
89
|
+
- lib/taxger/lohnsteuer.rb
|
90
|
+
- lib/taxger/lohnsteuer/bigdecimal.rb
|
91
|
+
- lib/taxger/lohnsteuer/lohnsteuer2006.rb
|
92
|
+
- lib/taxger/lohnsteuer/lohnsteuer2007.rb
|
93
|
+
- lib/taxger/lohnsteuer/lohnsteuer2008.rb
|
94
|
+
- lib/taxger/lohnsteuer/lohnsteuer2009.rb
|
95
|
+
- lib/taxger/lohnsteuer/lohnsteuer2010.rb
|
96
|
+
- lib/taxger/lohnsteuer/lohnsteuer2011.rb
|
97
|
+
- lib/taxger/lohnsteuer/lohnsteuer2011dezember.rb
|
98
|
+
- lib/taxger/lohnsteuer/lohnsteuer2012.rb
|
99
|
+
- lib/taxger/lohnsteuer/lohnsteuer2013.rb
|
100
|
+
- lib/taxger/lohnsteuer/lohnsteuer2014.rb
|
101
|
+
- lib/taxger/lohnsteuer/lohnsteuer2015.rb
|
102
|
+
- lib/taxger/lohnsteuer/lohnsteuer2015dezember.rb
|
103
|
+
- lib/taxger/lohnsteuer/lohnsteuer2016.rb
|
104
|
+
- lib/taxger/version.rb
|
105
|
+
- src/README.md
|
106
|
+
- src/code_tree.rb
|
107
|
+
- src/converter.rb
|
108
|
+
- src/generated/.keep
|
109
|
+
- src/node/class_node.rb
|
110
|
+
- src/node/comment_node.rb
|
111
|
+
- src/node/conditional_node.rb
|
112
|
+
- src/node/expr_node.rb
|
113
|
+
- src/node/initializer_node.rb
|
114
|
+
- src/node/method_call_node.rb
|
115
|
+
- src/node/method_node.rb
|
116
|
+
- src/node/node.rb
|
117
|
+
- src/node/pseudo_code_parser.rb
|
118
|
+
- src/node/source_node.rb
|
119
|
+
- src/node/var_block_node.rb
|
120
|
+
- taxger.gemspec
|
121
|
+
homepage: https://github.com/mpm/taxger
|
122
|
+
licenses:
|
123
|
+
- MIT
|
124
|
+
metadata:
|
125
|
+
allowed_push_host: https://rubygems.org
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.4.6
|
143
|
+
signing_key:
|
144
|
+
specification_version: 4
|
145
|
+
summary: Calculate taxes in Germany
|
146
|
+
test_files: []
|