class Rake::Delphi::ZipTask

Public Class Methods

new(task, zipfile, files, options = nil) click to toggle source
Calls superclass method Rake::Delphi::BasicTask::new
# File lib/rake/common/ziptask.rb, line 38
def initialize(task, zipfile, files, options = nil)
    super(task)
    Logger.trace(Logger::VERBOSE, [zipfile, files])
    raise "zipfile name is not defined!" if zipfile.nil? || zipfile.empty?
    @norubyzip = nil
    @options = options || {}
    begin
        require 'zip/zip'
    rescue LoadError
        @norubyzip = true
    end
    raise "no ZIP library (rubyzip) found!" if @norubyzip
    # work with rubyzip
    Logger.trace(Logger::VERBOSE, '`rubyzip` gem is used')
    File.unlink(zipfile) if File.exists?(zipfile) && ! @options[:add]
    Zip.options[:continue_on_exists_proc] = true
    Zip::ZipFile.open(zipfile, Zip::ZipFile::CREATE) do |z|
        files.each do |f|
            zip_addfile(z, f)
        end
    end
end

Private Instance Methods

zip_addfile(zipfile, file) click to toggle source
# File lib/rake/common/ziptask.rb, line 62
def zip_addfile(zipfile, file)
    filename_set = false
    if file.kind_of?(Hash)
        filename = file.values.first
        file = file.keys.first
        filename_set = true
        # if directory name given append filename to its path
        if /\/$/.match(filename)
          filename += File.basename(file)
        end
    else
        filename = File.basename(file)
    end
    return if ! File.exists?(file)
    if @options[:preserve_paths] && ! filename_set
        dir = File.dirname(file)
        # avoid "./<filename>" entries (instead of "<filename>")
        filename = File.join(dir, filename) if dir != '.'

        # remove leading slash (for absolute paths)
        filename.gsub!(/^\//, '')
    end
    # do not add directory entries
    return if File.directory?(file)
    @task.out "Zipping '#{file}' as '#{filename}'..."
    zipfile.add(filename, file)
end