module FeduxOrgStdlib::Zipper

Public Class Methods

unzip(source_file, destination_directory = Dir.getwd) click to toggle source
# File lib/fedux_org_stdlib/zipper.rb, line 7
def unzip(source_file, destination_directory = Dir.getwd)
  return unless destination_directory

  Zip::File.open(source_file) do |z|
    z.each do |e|
      new_path = File.join(destination_directory, e.name)

      FileUtils.mkdir_p File.dirname(new_path)
      e.extract(new_path)
    end
  end
end
zip(source_directory, destination_file, prefix: '', executables: []) click to toggle source
# File lib/fedux_org_stdlib/zipper.rb, line 20
def zip(source_directory, destination_file, prefix: '', executables: [])
  Zip::File.open(destination_file, Zip::File::CREATE) do |z|
    Dir.glob(File.join(source_directory, '**', '*')).each do |filename|
      paths = []
      paths << Pathname.new(prefix) unless prefix.blank?
      paths << Pathname.new(filename).relative_path_from(Pathname.new(source_directory))

      z.add(File.join(*paths), filename)
      z.file.chmod(0755, File.join(*paths)) if File.executable? filename
      z.file.chmod(0755, File.join(*paths)) if executables.any? { |f| Regexp.new(f) === filename }
    end
  end
end

Private Instance Methods

unzip(source_file, destination_directory = Dir.getwd) click to toggle source
# File lib/fedux_org_stdlib/zipper.rb, line 7
def unzip(source_file, destination_directory = Dir.getwd)
  return unless destination_directory

  Zip::File.open(source_file) do |z|
    z.each do |e|
      new_path = File.join(destination_directory, e.name)

      FileUtils.mkdir_p File.dirname(new_path)
      e.extract(new_path)
    end
  end
end
zip(source_directory, destination_file, prefix: '', executables: []) click to toggle source
# File lib/fedux_org_stdlib/zipper.rb, line 20
def zip(source_directory, destination_file, prefix: '', executables: [])
  Zip::File.open(destination_file, Zip::File::CREATE) do |z|
    Dir.glob(File.join(source_directory, '**', '*')).each do |filename|
      paths = []
      paths << Pathname.new(prefix) unless prefix.blank?
      paths << Pathname.new(filename).relative_path_from(Pathname.new(source_directory))

      z.add(File.join(*paths), filename)
      z.file.chmod(0755, File.join(*paths)) if File.executable? filename
      z.file.chmod(0755, File.join(*paths)) if executables.any? { |f| Regexp.new(f) === filename }
    end
  end
end