class PoiseArchive::ArchiveProviders::Zip
The `zip` provider class for `poise_archive` to install from ZIP archives.
@see PoiseArchive::Resources::PoiseArchive::Resource
@provides poise_archive
Private Instance Methods
check_rubyzip()
click to toggle source
# File lib/poise_archive/archive_providers/zip.rb, line 37 def check_rubyzip require 'zip' rescue LoadError notifying_block do install_rubyzip end require 'zip' end
chown_entries()
click to toggle source
# File lib/poise_archive/archive_providers/zip.rb, line 83 def chown_entries paths = @zip_entry_paths notifying_block do paths.each do |type, path| send(type, path) do group new_resource.group owner new_resource.user end end end end
ensure_directory(path)
click to toggle source
Make sure all enclosing directories exist before writing a path.
@param oath [String] Path to check.
# File lib/poise_archive/archive_providers/zip.rb, line 74 def ensure_directory(path) base = ::File.dirname(path) unless ::File.exist?(base) ensure_directory(base) Dir.mkdir(base) @zip_entry_paths << [:directory, base] end end
install_rubyzip()
click to toggle source
# File lib/poise_archive/archive_providers/zip.rb, line 46 def install_rubyzip chef_gem 'rubyzip' end
unpack_archive()
click to toggle source
# File lib/poise_archive/archive_providers/zip.rb, line 31 def unpack_archive check_rubyzip unpack_zip chown_entries if new_resource.user || new_resource.group end
unpack_zip()
click to toggle source
# File lib/poise_archive/archive_providers/zip.rb, line 50 def unpack_zip @zip_entry_paths = [] ::Zip::File.open(new_resource.absolute_path) do |zip_file| zip_file.each do |entry| entry_name = entry.name.split(/\//).drop(new_resource.strip_components).join('/') # If strip_components wiped out the name, don't process this entry. next if entry_name.empty? entry_path = ::File.join(new_resource.destination, entry_name) # Ensure parent directories exist because some ZIP files don't # include those for some reason. ensure_directory(entry_path) entry.extract(entry_path) # Make sure we restore file permissions. RubyZip won't do this # unless we also turn on UID/GID restoration, which we don't want. # Mask filters out setuid and setgid bits because no. ::File.chmod(entry.unix_perms & 01777, entry_path) if !node.platform_family?('windows') && entry.unix_perms @zip_entry_paths << [entry.directory? ? :directory : entry.file? ? :file : :link, entry_path] end end end