Class: Inspec::ZipProvider

Inherits:
FileProvider show all
Defined in:
lib/inspec/file_provider.rb

Overview

class DirProvider

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from FileProvider

#binread, for_path, #relative_provider

Constructor Details

#initialize(path) ⇒ ZipProvider

Returns a new instance of ZipProvider.



105
106
107
108
109
110
111
112
113
114
115
# File 'lib/inspec/file_provider.rb', line 105

def initialize(path)
  @path = path
  @contents = {}
  @files = []
  walk_zip(@path) do |io|
    while (entry = io.get_next_entry)
      name = entry.name.sub(%r{/+$}, "")
      @files.push(name) unless name.empty? || name.squeeze("/") =~ %r{\.{2}(?:/|\z)}
    end
  end
end

Instance Attribute Details

#filesObject (readonly)

Returns the value of attribute files.



103
104
105
# File 'lib/inspec/file_provider.rb', line 103

def files
  @files
end

Instance Method Details

#extract(destination_path = ".") ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/inspec/file_provider.rb', line 117

def extract(destination_path = ".")
  FileUtils.mkdir_p(destination_path)

  Zip::File.open(@path) do |archive|
    archive.each do |file|
      final_path = File.join(destination_path, file.name)

      # This removes the top level directory (and any other files) to ensure
      # extracted files do not conflict.
      FileUtils.remove_entry(final_path) if File.exist?(final_path)

      archive.extract(file, final_path)
    end
  end
end

#read(file) ⇒ Object



133
134
135
136
# File 'lib/inspec/file_provider.rb', line 133

def read(file)
  # TODO: this is inefficient
  @contents[file] ||= read_from_zip(file)
end