Class: Steuernummer
- Inherits:
-
Object
- Object
- Steuernummer
- Defined in:
- lib/steuernummer.rb,
lib/steuernummer/version.rb
Defined Under Namespace
Classes: TaxTable
Constant Summary collapse
- VERSION =
"1.1.7"
Class Method Summary collapse
Instance Method Summary collapse
-
#country_wide_number ⇒ Object
(German: Vereinheitlichtes Bundesschema).
-
#initialize(tax_string, region = "unknown") ⇒ Steuernummer
constructor
Validate your German Steuernummer.
- #is_valid? ⇒ Boolean
-
#region_wide_number ⇒ Object
(German: Bündesland).
Constructor Details
#initialize(tax_string, region = "unknown") ⇒ Steuernummer
Validate your German Steuernummer
Example:
>> tax_no = Steuernummer.new("93815/08152", 'Baden-Württemberg')
>> tax_no.is_valid?
=> true
>> tax_no.country_wide_number
=> {:number => '2893081508152', :region => Baden-Württemberg')
>> tax_no = Steuernummer.new("2893081508152")
>> tax_no.is_valid?
=> true
>> tax_no.region_wide_number
=> {:number => '93815/08152', :region => Baden-Württemberg')
tax_no = Steuernummer.new('151/815/08156','unknown') tax_no.is_valid? => true
tax_no.region_wide_number => {:number => '151/815/08156', :region => 'unknown'}
tax_no.country_wide_number => RuntimeError: Can't determine country wide number for a region wide number without knowing the region....
Steuernummer.valid_regions => ["Baden-Württemberg", "Bayern", "Berlin", "Brandenburg",....]
Arguments:
steuernummer: (String)
region: (String)
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/steuernummer.rb', line 45 def initialize(tax_string, region = "unknown") if tax_string.class != String raise("Please use a String as argument") end unless (region == "unknown") || (Steuernummer.valid_regions.include? region) raise("unknown region, please use 'unknown' or one of the entries you can get from Steuernummer.valid_regions}") end @tax_string = tax_string @provided_region = region @tax_rules = get_tax_rules(tax_string) end |
Class Method Details
.valid_regions ⇒ Object
107 108 109 |
# File 'lib/steuernummer.rb', line 107 def self.valid_regions Steuernummer::TaxTable.tax_rules.map { |x| x[:region] } end |
Instance Method Details
#country_wide_number ⇒ Object
(German: Vereinheitlichtes Bundesschema)
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/steuernummer.rb', line 68 def country_wide_number return nil if !is_valid? if get_number_type == :country { :number => @tax_string, :region => @tax_rules.first[:region] } elsif (@tax_rules.count > 1) && (@provided_region == "unknown") raise("Can't determine country wide number for a region wide number without knowing the region. Please use only entries you can get from Steuernummer.valid_regions") else tax_rule = get_tax_rule_on_region match_data = @tax_string.match tax_rule[:match_pattern_region] arguments_array = match_data.to_a arguments_array.shift country_wide = tax_rule[:to_country_wide].call(*arguments_array) { :number => country_wide, :region => tax_rule[:region] } end end |
#is_valid? ⇒ Boolean
58 59 60 61 62 63 64 65 |
# File 'lib/steuernummer.rb', line 58 def is_valid? if @provided_region != "unknown" regions = @tax_rules.map { |x| x[:region] } regions.include? @provided_region else !@tax_rules.empty? end end |
#region_wide_number ⇒ Object
(German: Bündesland)
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/steuernummer.rb', line 89 def region_wide_number return nil if !is_valid? if get_number_type == :region { :number => @tax_string, :region => @provided_region } elsif get_number_type == :country # country_wide_numbers only have one rule, so it's always the first tax_rule = @tax_rules.first match_data = @tax_string.match tax_rule[:match_pattern_country] arguments_array = match_data.to_a arguments_array.shift region_wide = tax_rule[:to_region_wide].call(*arguments_array) { :number => region_wide, :region => tax_rule[:region] } end end |