Files

73 lines
1.9 KiB
Ruby

require "roo"
# Seed supported languages
SUPPORTED_LANGUAGES = [
{ code: "fi", name: "Finnish", native_name: "Suomi", sort_order: 1 },
{ code: "en", name: "English", native_name: "English", sort_order: 2 },
{ code: "sv", name: "Swedish", native_name: "Svenska", sort_order: 3 },
{ code: "no", name: "Norwegian", native_name: "Norsk", sort_order: 4 },
{ code: "de", name: "German", native_name: "Deutsch", sort_order: 5 },
{ code: "ru", name: "Russian", native_name: "Русский", sort_order: 6 }
].freeze
SUPPORTED_LANGUAGES.each do |lang|
SupportedLanguage.find_or_create_by!(code: lang[:code]) do |record|
record.assign_attributes(lang.except(:code))
end
end
puts "Seeded #{SupportedLanguage.count} languages"
# Import entries from Excel
HEADER_TO_LANG = {
"Finnish" => :fi,
"English" => :en,
"Swedish" => :sv,
"Norwegian" => :no,
"German" => :de,
"Russian" => :ru
}.freeze
source_path = Rails.root.join("public", "Kristillisyyden sanasto ver 23.5.2013.xlsx")
unless source_path.exist?
abort "Seed file not found: #{source_path}"
end
sheet = Roo::Excelx.new(source_path.to_s).sheet(0)
headers = sheet.row(1).map { |cell| cell.to_s.strip }
column_map = headers.each_with_index.filter_map do |header, index|
lang = HEADER_TO_LANG[header]
[ lang, index ] if lang
end.to_h
if column_map.empty?
abort "No language columns found in headers: #{headers.inspect}"
end
puts "Found columns: #{column_map.keys.join(', ')}"
puts "Importing entries..."
imported = 0
skipped = 0
sheet.each_row_streaming(offset: 1) do |row|
translations = column_map.transform_values do |index|
row[index]&.value.to_s.strip.presence
end
if translations.values.none?
skipped += 1
next
end
Entry.find_or_create_by!(translations) do |entry|
entry.category = :word
end
imported += 1
end
puts "Imported #{imported} entries, skipped #{skipped} empty rows"