Sha256: c5b54068858a5d93264be95a2fb165621d8b0c5a58dbc0d3a1df9c7393664b35

Contents?: true

Size: 1.99 KB

Versions: 26

Compression:

Stored size: 1.99 KB

Contents

require 'zip/zip'
require 'tempfile'
require 'find'

module Selenium
  module WebDriver
    #
    # @api private
    #

    module Zipper

      EXTENSIONS = %w[.zip .xpi]

      class << self

        def unzip(path)
          destination = Dir.mktmpdir("webdriver-unzip")
          FileReaper << destination

          Zip::ZipFile.open(path) do |zip|
            zip.each do |entry|
              to      = File.join(destination, entry.name)
              dirname = File.dirname(to)

              FileUtils.mkdir_p dirname unless File.exist? dirname
              zip.extract(entry, to)
            end
          end

          destination
        end

        def zip(path)
          with_tmp_zip do |zip|
            ::Find.find(path) do |file|
              unless File.directory?(file)
                add_zip_entry zip, file, file.sub("#{path}/", '')
              end
            end

            zip.commit
            File.open(zip.name, "rb") { |io| Base64.strict_encode64 io.read }
          end
        end

        def zip_file(path)
          with_tmp_zip do |zip|
            add_zip_entry zip, path, File.basename(path)

            zip.commit
            File.open(zip.name, "rb") { |io| Base64.strict_encode64 io.read }
          end
        end

        private

        def with_tmp_zip(&blk)
          # can't use Tempfile here since it doesn't support File::BINARY mode on 1.8
          # can't use Dir.mktmpdir(&blk) because of http://jira.codehaus.org/browse/JRUBY-4082
          tmp_dir = Dir.mktmpdir
          zip_path = File.join(tmp_dir, "webdriver-zip")

          begin
            Zip::ZipFile.open(zip_path, Zip::ZipFile::CREATE, &blk)
          ensure
            FileUtils.rm_rf tmp_dir
            FileUtils.rm_rf zip_path
          end
        end

        def add_zip_entry(zip, file, entry_name)
          entry = Zip::ZipEntry.new(zip.name, entry_name)
          entry.follow_symlinks = true

          zip.add entry, file
        end

      end
    end # Zipper
  end # WebDriver
end # Selenium

Version data entries

26 entries across 26 versions & 2 rubygems

Version Path
selenium-webdriver-2.35.1 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.35.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.34.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.33.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.32.1 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.32.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.31.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.30.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.29.0 lib/selenium/webdriver/common/zipper.rb
sunrise-cms-0.5.0.rc1 vendor/bundle/ruby/1.9.1/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.27.2 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.27.1 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.27.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.27.0.rc1 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.26.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.26.0.rc1 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.25.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.25.0.rc1 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.24.0 lib/selenium/webdriver/common/zipper.rb
selenium-webdriver-2.22.2 lib/selenium/webdriver/common/zipper.rb