You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
require "csv" |
|
|
|
module Imports |
|
class VariableDefinitionsService |
|
attr_reader :path, :count |
|
|
|
def initialize(path:) |
|
@path = path |
|
@count = 0 |
|
end |
|
|
|
def call |
|
files = Dir.glob(File.join(@path, "*.csv")) |
|
files.each do |file| |
|
process_file(file) |
|
end |
|
end |
|
|
|
private |
|
|
|
def process_file(file) |
|
file_name = File.basename(file, ".csv") |
|
parsed_file_name = file_name.split("_") |
|
log_type = parsed_file_name[0] |
|
year = "20#{parsed_file_name[2]}".to_i |
|
|
|
records_added = 0 |
|
|
|
CSV.foreach(file) do |row| |
|
next if row.empty? |
|
|
|
variable = row[0].downcase |
|
definition = row[1..].join(",") |
|
next if variable.nil? || definition.nil? |
|
|
|
existing_record = CsvVariableDefinition.find_by(variable: variable.strip, definition: definition.strip, log_type:) |
|
|
|
if existing_record.nil? |
|
CsvVariableDefinition.create!( |
|
variable: variable.strip, |
|
definition: definition.strip, |
|
log_type:, |
|
year:, |
|
) |
|
records_added += 1 |
|
end |
|
end |
|
|
|
Rails.logger.debug "Added #{records_added} variable/definition records for file: #{file_name}. Duplicates excluded." |
|
@count += records_added |
|
end |
|
end |
|
end
|
|
|