class GNOME2::Rake::SourceDownloadTask

Public Class Methods

new(package) click to toggle source
# File lib/gnome2/rake/source-download-task.rb, line 28
def initialize(package)
  @package = package
end

Public Instance Methods

define() click to toggle source
# File lib/gnome2/rake/source-download-task.rb, line 32
def define
  namespace :source do
    namespace :downloader do
      task :before
      define_download_tasks
      download_tasks = @package.external_packages.collect do |package|
        "source:downloader:download:#{package.name}"
      end
      task :download => download_tasks
      task :after
    end

    desc "Dowanload sources"
    task :download => [
      "source:downloader:before",
      "source:downloader:download",
      "source:downloader:after",
    ]
  end
end

Private Instance Methods

define_download_tasks() click to toggle source
# File lib/gnome2/rake/source-download-task.rb, line 54
def define_download_tasks
  namespace :download do
    @package.external_packages.each do |package|
      download_dir = @package.download_dir
      tar_full_path = download_dir + package.archive_base_name

      task :before
      task :after
      desc "Download #{package.label} into #{download_dir}."
      # task package[:name] => [:before, tar_full_path.to_s, :after]
      task package[:name] => tar_full_path.to_s

      directory_path = tar_full_path.dirname
      directory directory_path.to_s
      file tar_full_path.to_s => directory_path.to_s do
        archive_url = package.archive_url
        rake_output_message "Downloading... #{archive_url}"
        download(archive_url, tar_full_path)
      end
    end
  end
end
download(url, output_path) click to toggle source
# File lib/gnome2/rake/source-download-task.rb, line 77
def download(url, output_path)
  OpenURI.singleton_class.class_eval do
    alias_method :redirectable_original?, :redirectable?
    def redirectable?(uri1, uri2)
      redirectable_original?(uri1, uri2) or
        (uri1.scheme.downcase == "http" and
         uri2.scheme.downcase == "https")
    end
  end
  begin
    open(url) do |input|
      output_path.open("wb") do |output_file|
        output_file.print(input.read)
      end
    end
  ensure
    OpenURI.singleton_class.class_eval do
      alias_method :redirectable?, :redirectable_original?
      remove_method :redirectable_original?
    end
  end
end
redirectable?(uri1, uri2) click to toggle source
# File lib/gnome2/rake/source-download-task.rb, line 80
def redirectable?(uri1, uri2)
  redirectable_original?(uri1, uri2) or
    (uri1.scheme.downcase == "http" and
     uri2.scheme.downcase == "https")
end