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