class GNOME2Win32BinaryDownloader

Constants

URL_BASE

Public Class Methods

download(options) click to toggle source
# File lib/gnome2-win32-binary-downloader.rb, line 11
def download(options)
  downloader = new(options)
  packages = options[:packages] || [options[:package]]
  packages.compact.each do |package|
    downloader.download_package(package)
  end
  dependencies = options[:dependencies] || [options[:dependency]]
  dependencies.compact.each do |dependency|
    downloader.download_dependency(dependency)
  end
end
new(options={}) click to toggle source
# File lib/gnome2-win32-binary-downloader.rb, line 25
def initialize(options={})
  output_dir = options[:output_dir] || File.join("vendor", "local")
  @output_dir = File.expand_path(output_dir)
end

Public Instance Methods

download_dependency(dependency) click to toggle source
# File lib/gnome2-win32-binary-downloader.rb, line 74
def download_dependency(dependency)
  dependency_version = "any"
  dependency_version_re = %r[\d\.\-]+/
  if dependency.is_a?(Array)
    dependency, dependency_version = dependency
    dependency_version_re = %r#{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 %r\A#{escaped_dependency}_(#{dependency_version_re})_win32\.zip\z/
      version = $1
      [version.split(%r[\.\-]/).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 %r\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-downloader.rb, line 30
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 %r\A(\d+\.\d+)\/\z/ =~ link.href
      $1.split(%r\./).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 %r#{escaped_package}_([\d\.\-]+)_win32\.zip\z/,
         %r#{escaped_package}-([\d\.\-]+)-win32\.zip\z/, # old
         %r#{escaped_package}-([\d\.\-]+)\.zip\z/ # old
      version = $1
      normalized_version = version.split(%r[\.\-]/).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 %r#{escaped_package}(?:-dev)?_#{escaped_latest_version}_win32\.zip\z/,
         %r#{escaped_package}(?:-dev)?-#{escaped_latest_version}-win32\.zip\z/, # old
         %r#{escaped_package}(?:-dev)?-#{escaped_latest_version}\.zip\z/ # old
      click_zip_link(link)
    end
  end
end