class UsdaNutrientDatabase::Import::Downloader
Attributes
directory[R]
version[R]
Public Class Methods
new(directory = 'tmp/usda', version = UsdaNutrientDatabase.usda_version)
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 9 def initialize(directory = 'tmp/usda', version = UsdaNutrientDatabase.usda_version) @directory = directory @version = version end
Public Instance Methods
cleanup()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 14 def cleanup UsdaNutrientDatabase.log 'Cleaning up data' FileUtils.rm_rf(directory) end
connection()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 56 def connection @connection ||= Faraday.new(url: 'https://www.ars.usda.gov') end
download()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 35 def download UsdaNutrientDatabase.log "Downloading USDA data version: #{version}" unless File.directory?(directory) FileUtils.mkdir_p("#{directory}/#{version}") end File.open("#{directory}/#{version}.zip", 'w+b') do |file| file.write connection.get(final_path).body end end
download_and_unzip()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 19 def download_and_unzip download and unzip end
final_path()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 60 def final_path look_ahead = connection.head(path) if [302, 404].include?(look_ahead.status) raise 'No location' unless look_ahead.headers['location'] URI.parse(look_ahead.headers['location']).path else path end end
path()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 23 def path [ 'ARSUserFiles', '80400525', 'Data', version == 'sr28' ? 'SR' : nil, version.upcase, 'dnload', "#{version_file}.zip" ].compact.join('/') end
unzip()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 45 def unzip UsdaNutrientDatabase.log 'Unzipping data' Zip::File.open("#{directory}/#{version}.zip") do |zipfile| zipfile.each do |file| unless File.exist?("#{directory}/#{version}/#{file.name}") zipfile.extract(file, "#{directory}/#{version}/#{file.name}") end end end end
version_file()
click to toggle source
# File lib/usda_nutrient_database/import/downloader.rb, line 70 def version_file case @version when 'sr27' 'sr27asc' when 'sr28' 'sr28asc' else @version end end