Sha256: d14fc2e0f5a6ba20172cad4cb53f48e4069f1f1ac6b8d7d85f488c67f99b01f0

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

require_relative "download_files/version"

require 'mechanize'

class Mechanize
  def self.start
    yield(new)
  end

  def self.go(page_address, ssl_verify)
    start do |agent|
      agent.verify_mode = OpenSSL::SSL::VERIFY_NONE unless ssl_verify
      agent.get(page_address) do |page|
        yield agent, page
      end
    end
  end
end

module DownloadFiles
  def self.download_files(
    page_address,
    pattern,
    dir,
    ssl_verify,
    is_verbose,
    logger
  )
    logger.debug(
      "DownloadFiles.download_files: " +
      {
        page_address: page_address,
        pattern: pattern,
        dir: dir,
        ssl_verify: ssl_verify,
        is_verbose: is_verbose,
        logger: logger
      }.inspect
    )

    abs_dir = File.absolute_path(dir)

    logger.info(
      "Downloading files from \"#{page_address}\" to \"#{abs_dir}\" that match /#{pattern}/ " +
      (if ssl_verify then 'requiring' else 'without requiring' end + ' SSL verification') +
      '...'
    )

    Mechanize.go(page_address, ssl_verify) do |agent, page|
      logger.debug page.inspect

      if is_verbose
        logger.info "On #{page.uri}"
      end

      agent.pluggable_parser.default = Mechanize::Download

      page.links.each do |link|
        if is_verbose
          logger.info "Checking link #{link.href}"
        end

        next unless link.href && link.href.match(pattern)

        full_file_name = File.expand_path(File.basename(link.href), abs_dir)

        if is_verbose
          logger.info "Downloading #{link.click.uri} to #{full_file_name}"
        end

        agent.get(link.click.uri).save(full_file_name)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
download_files-1.0.1 lib/download_files.rb
download_files-1.0.0 lib/download_files.rb