Class: IncomeLimits::StdCountyImport

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Job
Defined in:
app/sidekiq/income_limits/std_county_import.rb

Instance Method Summary collapse

Instance Method Details

#date_formatter(date) ⇒ Object (private)



56
57
58
59
60
# File 'app/sidekiq/income_limits/std_county_import.rb', line 56

def date_formatter(date)
  return nil unless date

  DateTime.strptime(date, '%F %H:%M:%S %z').to_s
end

#fetch_csv_dataObject



10
11
12
13
14
15
16
17
18
# File 'app/sidekiq/income_limits/std_county_import.rb', line 10

def fetch_csv_data
  csv_url = 'https://sitewide-public-websites-income-limits-data.s3-us-gov-west-1.amazonaws.com/std_county.csv'
  uri = URI(csv_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true if uri.scheme == 'https'
  request = Net::HTTP::Get.new(uri.request_uri)
  response = http.request(request)
  response.body if response.code == '200'
end

#performObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/sidekiq/income_limits/std_county_import.rb', line 20

def perform
  ActiveRecord::Base.transaction do
    data = fetch_csv_data
    if data
      CSV.parse(data, headers: true) do |row|
        std_county = StdCounty.find_or_initialize_by(id: row['ID'].to_i)
        next unless std_county.new_record?

        std_county.assign_attributes(std_county_attributes(row))
        std_county.save!
      end
    else
      raise 'Failed to fetch CSV data.'
    end
  end
rescue => e
  ActiveRecord::Base.rollback_transaction
  raise "error: #{e}"
end

#std_county_attributes(row) ⇒ Object (private)



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/sidekiq/income_limits/std_county_import.rb', line 42

def std_county_attributes(row)
  {
    name: row['NAME'].to_s,
    county_number: row['COUNTYNUMBER'].to_i,
    description: row['DESCRIPTION'],
    state_id: row['STATE_ID'].to_i,
    version: row['VERSION'].to_i,
    created: date_formatter(row['CREATED']),
    updated: date_formatter(row['UPDATED']),
    created_by: row['CREATEDBY'].to_s,
    updated_by: row['UPDATEDBY'].to_s
  }
end