40 lines
925 B
Ruby
40 lines
925 B
Ruby
namespace :usda do
|
|
FOODS_FILE = Rails.root.join("spec/fixtures/usda/FOOD_DES.txt")
|
|
SURROUNDER = /\A~|~\z/
|
|
BLANK_STRING = ""
|
|
PROGRESS_FAIL = "x"
|
|
PROGRESS_SUCCESS = "."
|
|
|
|
desc "Load USDA data"
|
|
task load: :environment do
|
|
puts "Loading foods:\n"
|
|
|
|
I18n.locale = :en
|
|
|
|
FOODS_FILE.readlines.each do |food|
|
|
begin
|
|
parsed_food = food.encode("UTF-8", invalid: :replace).split("^")
|
|
|
|
created_food = Food.find_or_create_by(ndb_no: strip(parsed_food.first)) do |f|
|
|
f.comname = strip(parsed_food[4])
|
|
f.sciname = strip(parsed_food[9])
|
|
f.long_desc = strip(parsed_food[2])
|
|
f.shrt_desc = strip(parsed_food[3])
|
|
end
|
|
rescue => e
|
|
puts food
|
|
|
|
raise e
|
|
end
|
|
|
|
printf created_food.persisted? ? PROGRESS_SUCCESS : PROGRESS_FAIL
|
|
end
|
|
|
|
puts "\nDone."
|
|
end
|
|
|
|
def strip(str)
|
|
str.gsub(SURROUNDER, BLANK_STRING)
|
|
end
|
|
end
|