Class: UsdaNutrientDatabase::Import::Downloader
- Inherits:
-
Object
- Object
- UsdaNutrientDatabase::Import::Downloader
- Defined in:
- lib/usda_nutrient_database/import/downloader.rb
Instance Attribute Summary collapse
-
#directory ⇒ Object
readonly
Returns the value of attribute directory.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #cleanup ⇒ Object
- #connection ⇒ Object
- #download ⇒ Object
- #download_and_unzip ⇒ Object
- #final_path ⇒ Object
-
#initialize(directory = 'tmp/usda', version = UsdaNutrientDatabase.usda_version) ⇒ Downloader
constructor
A new instance of Downloader.
- #path ⇒ Object
- #unzip ⇒ Object
- #version_file ⇒ Object
Constructor Details
#initialize(directory = 'tmp/usda', version = UsdaNutrientDatabase.usda_version) ⇒ Downloader
Returns a new instance of Downloader.
9 10 11 12 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 9 def initialize(directory = 'tmp/usda', version = UsdaNutrientDatabase.usda_version) @directory = directory @version = version end |
Instance Attribute Details
#directory ⇒ Object (readonly)
Returns the value of attribute directory.
7 8 9 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 7 def directory @directory end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
7 8 9 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 7 def version @version end |
Instance Method Details
#cleanup ⇒ Object
14 15 16 17 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 14 def cleanup UsdaNutrientDatabase.log 'Cleaning up data' FileUtils.rm_rf(directory) end |
#connection ⇒ Object
57 58 59 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 57 def connection @connection ||= Faraday.new(url: 'https://www.ars.usda.gov') end |
#download ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 36 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 ⇒ Object
19 20 21 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 19 def download_and_unzip download and unzip end |
#final_path ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 61 def final_path look_ahead = connection.head(path) if look_ahead.status == 302 raise 'No location' unless look_ahead.headers['location'] URI.parse(look_ahead.headers['location']).path else path end end |
#path ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 23 def path [ 'SP2UserFiles', 'Place', '12354500', 'Data', version == 'sr28' ? 'SR' : nil, version.upcase, 'dnload', "#{version_file}.zip" ].compact.join('/') end |
#unzip ⇒ Object
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 46 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 ⇒ Object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/usda_nutrient_database/import/downloader.rb', line 71 def version_file case @version when 'sr27' 'sr27asc' when 'sr28' 'sr28asc' else @version end end |