Class: Taxing::Rate

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/taxing/rate.rb

Constant Summary collapse

STATES =
["AK", "AL", "AR", "AZ", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", "MD", "ME", "MI", "MN", "MO", "MS", "MT", "NC", "ND", "NE", "NH", "NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY"].freeze

Class Method Summary collapse

Class Method Details

.all(t = Time.now) ⇒ Object



10
11
12
13
14
# File 'lib/taxing/rate.rb', line 10

def self.all(t=Time.now)
  STATES.flat_map do |state_name|
    state(state_name, t)
  end
end

.state(state_name, t = Time.now) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/taxing/rate.rb', line 16

def self.state(state_name, t=Time.now)
  raise "invalid state" unless STATES.include?(state_name)
  raw = get("/TAXRATES_ZIP5_#{state_name}#{t.year}#{t.month}.csv").body
  skipped = false
  rates = []
  CSV.parse(raw).each do |row|
    unless skipped
      skipped = true
      next
    end
    rates << {
      state: row[0],
      zip_code: row[1],
      tax_region_name: row[2],
      tax_region_code: row[3],
      combined_rate: row[4],
      state_rate: row[5],
      county_rate: row[6],
      city_rate: row[7],
      special_rate: row[8]
    }
  end
  rates
end