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.
46 lines
934 B
46 lines
934 B
require "csv"
|
|
|
|
class CredentialsLoader
|
|
def self.load_credentials(file:)
|
|
credentials = []
|
|
CSV.parse(file, headers: true) do |row|
|
|
values = CredentialRowValues.new(row:)
|
|
next unless values.district.present?
|
|
|
|
credentials << values.district
|
|
end
|
|
District.import(credentials, batch_size: 100, on_duplicate_key_update: [:username, :password, :login_required])
|
|
end
|
|
end
|
|
|
|
class CredentialRowValues
|
|
attr_reader :row
|
|
|
|
def initialize(row:)
|
|
@row = row
|
|
end
|
|
|
|
def district
|
|
@district ||= begin
|
|
name = row["Districts"]&.strip
|
|
district = District.find_or_initialize_by(name:)
|
|
district.username = username
|
|
district.password = password
|
|
district.login_required = login_required?
|
|
district
|
|
end
|
|
end
|
|
|
|
def username
|
|
row["Username"]&.strip
|
|
end
|
|
|
|
def password
|
|
row["PW"]&.strip
|
|
end
|
|
|
|
def login_required?
|
|
row["Login Required"]&.strip == "Y"
|
|
end
|
|
end
|