Class: IncomeLimits::StdCountyImport
- Inherits:
-
Object
- Object
- IncomeLimits::StdCountyImport
- Includes:
- Sidekiq::Job
- Defined in:
- app/sidekiq/income_limits/std_county_import.rb
Instance Method Summary collapse
- #date_formatter(date) ⇒ Object private
- #fetch_csv_data ⇒ Object
- #perform ⇒ Object
- #std_county_attributes(row) ⇒ Object private
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_data ⇒ Object
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 |
#perform ⇒ Object
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 |