Sha256: 6dac224d5dde8bc606f43a1cafeca7bcd522b37389185a1741928e7a901bb170

Contents?: true

Size: 879 Bytes

Versions: 2

Compression:

Stored size: 879 Bytes

Contents

module DeathAndTaxes
  class Country
    
    def initialize code, yml = nil
      @taxes = {}
      @states = {}
      @code = code
      parse yml if yml
    end
    
    def parse yml
      yml['taxes'].each do |tax_name, infos|
        @taxes[tax_name] = TaxInfo.new(tax_name, infos)
      end
      
      yml['states'].each do |state_code, state_yml|
        @states[state_code] = State.new(state_code, state_yml)
      end
    end
    
    def applicable_taxes from, to, date
      if from[:country] == to[:country] && to[:country] == @code
        @states[from[:state]].applicable_taxes to[:state], date
      else
        []
      end
    end
    
    def applies_taxes? from, to, date
      applicable_taxes(from, to, date).any?
    end
    
    def build_tax tax, date
      @taxes[tax].try(:build, date) || @states.map{|t, s| s.build_tax(tax, date)}
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
death_and_taxes-0.0.3 lib/death_and_taxes/country.rb
death_and_taxes-0.0.2 lib/death_and_taxes/country.rb