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