class Rake::Funnel::Support::Zipper
Public Class Methods
zip(files, target, zip_root = nil)
click to toggle source
# File lib/rake/funnel/support/zipper.rb, line 11 def zip(files, target, zip_root = nil) raise 'Target not defined' unless target target_dir = File.dirname(target) RakeFileUtils.mkdir_p(target_dir) unless File.directory?(target_dir) configure_zip create_zip(files || [], target, zip_root) end
Private Class Methods
configure_zip()
click to toggle source
# File lib/rake/funnel/support/zipper.rb, line 23 def configure_zip ::Zip.unicode_names = true ::Zip.default_compression = Zlib::BEST_COMPRESSION end
create_zip(files, target, zip_root)
click to toggle source
# File lib/rake/funnel/support/zipper.rb, line 28 def create_zip(files, target, zip_root) ::Zip::File.open(target, ::Zip::File::CREATE) do |zip| common_path = files.common_path files.each do |file| zipped_file = get_zipped_path(common_path, file, zip_root) entry = zip.add(zipped_file, file) set_mtime(entry, file) end end end
get_zipped_path(common_path, file, zip_root)
click to toggle source
# File lib/rake/funnel/support/zipper.rb, line 41 def get_zipped_path(common_path, file, zip_root) file = Pathname.new(file).relative_path_from(Pathname.new(common_path)).to_s unless common_path.nil? file = File.join(zip_root, file) unless zip_root.nil? || zip_root.empty? file end
set_mtime(entry, file)
click to toggle source
To work around this bug: github.com/rubyzip/rubyzip/issues/176
# File lib/rake/funnel/support/zipper.rb, line 48 def set_mtime(entry, file) entry.time = ::Zip::DOSTime.at(File.mtime(file)) entry.extra.delete('UniversalTime') end