Class: Inspec::TarProvider
- Inherits:
-
FileProvider
- Object
- FileProvider
- Inspec::TarProvider
- Defined in:
- lib/inspec/file_provider.rb
Instance Attribute Summary collapse
-
#files ⇒ Object
readonly
Returns the value of attribute files.
Instance Method Summary collapse
- #extract(destination_path = ".") ⇒ Object
-
#initialize(path) ⇒ TarProvider
constructor
A new instance of TarProvider.
- #read(file) ⇒ Object
Methods inherited from FileProvider
#binread, for_path, #relative_provider
Constructor Details
#initialize(path) ⇒ TarProvider
Returns a new instance of TarProvider.
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/inspec/file_provider.rb', line 154 def initialize(path) @path = path @contents = {} @files = [] walk_tar(@path) do |tar| @files = tar.find_all(&:file?) # delete all entries with no name @files = @files.find_all { |x| !x.full_name.empty? && x.full_name.squeeze("/") !~ %r{\.{2}(?:/|\z)} } # delete all entries that have a PaxHeader @files = @files.delete_if { |x| x.full_name.include?("PaxHeader/") } # replace all items of the array simply with the relative filename of the file @files.map! { |x| Pathname.new(x.full_name).relative_path_from(Pathname.new(".")).to_s } end end |
Instance Attribute Details
#files ⇒ Object (readonly)
Returns the value of attribute files.
152 153 154 |
# File 'lib/inspec/file_provider.rb', line 152 def files @files end |
Instance Method Details
#extract(destination_path = ".") ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/inspec/file_provider.rb', line 172 def extract(destination_path = ".") FileUtils.mkdir_p(destination_path) walk_tar(@path) do |files| files.each do |file| next unless @files.include?(file.full_name) final_path = File.join(destination_path, file.full_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) FileUtils.mkdir_p(File.dirname(final_path)) File.open(final_path, "wb") { |f| f.write(file.read) } end end end |
#read(file) ⇒ Object
191 192 193 |
# File 'lib/inspec/file_provider.rb', line 191 def read(file) @contents[file] ||= read_from_tar(file) end |