# 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
# 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
# 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
# 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