Sha256: cf5f25a88a674dc8803bcfa1f775cad0f4897834ce6774dc959f495a571728b2

Contents?: true

Size: 1.77 KB

Versions: 13

Compression:

Stored size: 1.77 KB

Contents

require 'uri'
require 'zlib'
require 'rubygems/package'

module Nutkins::Download
  def self.download_file url, output
    orig_url = url
    tries = 10
    while (tries -= 1) >= 0
      response = Net::HTTP.get_response(URI(url))
      case response
      when Net::HTTPRedirection
        url = response["location"]
      else
        open(output, "wb") do |file|
          file.write(response.body)
        end
        return
      end
    end

    raise "could not download #{orig_url}"
  end

  def self.download_resources img_dir, resources
    resources.each do |resource|
      source = resource["source"]
      dest = File.join(img_dir, resource["dest"])
      unless File.exists? dest
        extract = resource["extract"]
        if extract
          uri = URI.parse(source)
          Dir.mktmpdir do |tmpdir|
            dl_dest = File.join tmpdir, File.basename(uri.path)
            print "downloading #{source} to #{dl_dest}"
            download_file source, dl_dest
            puts " - done"
            File.open(dl_dest, "rb") do |file|
              Zlib::GzipReader.wrap(file) do |gz|
                Gem::Package::TarReader.new(gz) do |tar|
                  matching = tar.detect { |entry| File.fnmatch(extract, entry.full_name) }
                  raise "could not find file matching #{extract} in #{dl_dest}" unless matching
                  FileUtils.mkdir_p File.dirname(dest)
                  File.write(dest, matching.read)
                end
              end
            end
          end
        else
          FileUtils.mkdir_p File.dirname(dest)
          print "downloading #{source} to #{dest}"
          download_file source, dest
          puts " - done"
        end

        mode = resource["mode"]
        File.chmod(mode, dest) if mode
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
nutkins-0.12.0 lib/nutkins/download.rb
nutkins-0.11.0 lib/nutkins/download.rb
nutkins-0.10.3 lib/nutkins/download.rb
nutkins-0.10.2 lib/nutkins/download.rb
nutkins-0.10.1 lib/nutkins/download.rb
nutkins-0.10.0 lib/nutkins/download.rb
nutkins-0.9.0 lib/nutkins/download.rb
nutkins-0.8.1 lib/nutkins/download.rb
nutkins-0.8.0 lib/nutkins/download.rb
nutkins-0.7.0 lib/nutkins/download.rb
nutkins-0.6.1 lib/nutkins/download.rb
nutkins-0.6.0 lib/nutkins/download.rb
nutkins-0.5.1 lib/nutkins/download.rb