class Miteru::Downloader
Attributes
base_dir[R]
memo[R]
Public Class Methods
new(base_dir = "/tmp")
click to toggle source
# File lib/miteru/downloader.rb, line 11 def initialize(base_dir = "/tmp") @base_dir = base_dir @memo = {} raise ArgumentError, "#{base_dir} doesn't exist." unless Dir.exist?(base_dir) end
Public Instance Methods
download_kits(kits)
click to toggle source
# File lib/miteru/downloader.rb, line 17 def download_kits(kits) kits.each { |kit| download_kit kit } end
Private Instance Methods
download_kit(kit)
click to toggle source
# File lib/miteru/downloader.rb, line 23 def download_kit(kit) destination = kit.filepath_to_download begin downloaded_as = HTTPClient.download(kit.url, destination) rescue Down::Error => e puts "Failed to download: #{kit.url} (#{e})" return end hash = sha256(downloaded_as) ActiveRecord::Base.connection_pool.with_connection do # Remove a downloaded file if it is not unique unless Record.unique_hash?(hash) puts "Don't download #{kit.url}. The same hash is already recorded. (SHA256: #{hash})." FileUtils.rm downloaded_as return end # Record a kit in DB Record.create_by_kit_and_hash(kit, hash) puts "Download #{kit.url} as #{downloaded_as}" end end
sha256(path)
click to toggle source
# File lib/miteru/downloader.rb, line 49 def sha256(path) return memo[path] if memo.key?(path) digest = Digest::SHA256.file(path) hash = digest.hexdigest memo[path] = hash hash end