class GNOME2Win32BinaryDownloadTask

Constants

URL_BASE

Public Class Methods

new(configuration) click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 13
def initialize(configuration)
  @configuration = configuration
  define
end

Private Instance Methods

agent() click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 155
def agent
  @agent ||= Mechanize.new
end
define() click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 19
def define
  namespace :win32 do
    namespace :downloader do
      task :before

      download_tasks = []
      namespace :download do
        directory dist_dir
        task :prepare => [dist_dir]

        packages.each do |package|
          desc "download #{package}"
          task package => [:prepare] do
            download_package(package)
          end
          download_tasks << package
        end

        dependencies.each do |dependency|
          name, version = dependency
          desc "download #{name}"
          task name => [:prepare] do
            download_dependency(dependency)
          end
          download_tasks << name
        end
      end

      download_tasks = download_tasks.collect do |task|
        "win32:downloader:download:#{task}"
      end
      desc "download Windows binaries into #{dist_dir}"
      task :download => download_tasks

      task :after
    end
    desc "download Windows binaries"
    task :download => ["win32:downloader:before",
                       "win32:downloader:download",
                       "win32:downloader:after"]
  end
end
dependencies() click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 70
def dependencies
  @configuration.dependencies
end
dist_dir() click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 62
def dist_dir
  @configuration.absolute_binary_dir
end
download_dependency(dependency) click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 118
def download_dependency(dependency)
  dependency_version = "any"
  dependency_version_re = /[\d\.\-]+/
  if dependency.is_a?(Array)
    dependency, dependency_version = dependency
    dependency_version_re = /#{Regexp.escape(dependency_version)}/
  end
  escaped_dependency = Regexp.escape(dependency)
  dependencies_url = "#{URL_BASE}/dependencies"
  dependencies_page = agent.get(dependencies_url)
  latest_version = dependencies_page.links.collect do |link|
    case link.href
    when /\A#{escaped_dependency}_(#{dependency_version_re})_win32\.zip\z/
      version = $1
      [version.split(/[\.\-]/).collect {|component| component.to_i}, version]
    else
      [[-1], nil]
    end
  end.sort_by do |normalized_version, version|
    normalized_version
  end.last[1]

  if latest_version.nil?
    message = "can't find dependency package: " +
      "<#{dependency}>(#{dependency_version}):<#{dependencies_url}>"
    raise message
  end
  escaped_latest_version = Regexp.escape(latest_version)
  dependencies_page.links.each do |link|
    case link.href
    when /\A#{escaped_dependency}(?:-dev)?_#{escaped_latest_version}_win32\.zip\z/
      click_zip_link(link)
    end
  end
end
download_package(package) click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 74
def download_package(package)
  version_page_url = "#{URL_BASE}/#{package}"
  version_page = agent.get(version_page_url)
  latest_version_link = version_page.links.sort_by do |link|
    if /\A(\d+\.\d+)\/\z/ =~ link.href
      $1.split(/\./).collect {|component| component.to_i}
    else
      [-1]
    end
  end.last

  escaped_package = Regexp.escape(package)
  latest_version_page = latest_version_link.click
  latest_version = latest_version_page.links.collect do |link|
    case link.href
    when /#{escaped_package}_([\d\.\-]+)_win32\.zip\z/,
         /#{escaped_package}-([\d\.\-]+)-win32\.zip\z/, # old
         /#{escaped_package}-([\d\.\-]+)\.zip\z/ # old
      version = $1
      normalized_version = version.split(/[\.\-]/).collect do |component|
        component.to_i
      end
      [normalized_version, version]
    else
      [[-1], nil]
    end
  end.sort_by do |normalized_version, version|
    normalized_version
  end.last[1]

  if latest_version.nil?
    raise "can't find package: <#{package}>:<#{version_page_url}>"
  end
  escaped_latest_version = Regexp.escape(latest_version)
  latest_version_page.links.each do |link|
    case link.href
    when /#{escaped_package}(?:-dev)?_#{escaped_latest_version}_win32\.zip\z/,
         /#{escaped_package}(?:-dev)?-#{escaped_latest_version}-win32\.zip\z/, # old
         /#{escaped_package}(?:-dev)?-#{escaped_latest_version}\.zip\z/ # old
      click_zip_link(link)
    end
  end
end
packages() click to toggle source
# File lib/gnome2-win32-binary-download-task.rb, line 66
def packages
  @configuration.packages
end