Method: PlainTextExtractorDSL#extract_content_from_archive_with

Defined in:
lib/picolena/templates/lib/plain_text_extractor_dsl.rb

#extract_content_from_archive_with(unpack_command) ⇒ Object

Unpack an archive and extract content from every supported file



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/picolena/templates/lib/plain_text_extractor_dsl.rb', line 76

def extract_content_from_archive_with(unpack_command)
  #FIXME: Cleaner code needed!
  @command=lambda {|source|
    begin
      global_temp_dir   = File.join(Dir::tmpdir, 'picolena_archive_temp')
      specific_temp_dir = File.join(global_temp_dir, source.base26_hash)
      FileUtils.mkpath specific_temp_dir
      specific_unpack_command=unpack_command.sub('SOURCE','"'<<source<<'"').sub(/TE?MPDIR/,'"'<<specific_temp_dir<<'"')
      silently_execute(specific_unpack_command)
      Dir["#{specific_temp_dir}/**/*"].select{|f| File.file?(f)}.map{|filename|
        content=PlainTextExtractor.extract_content_from(filename) rescue "---"
        ["##"<<filename.sub(specific_temp_dir,'').gsub('/', '>'),
          content]
      }.join("\n")
    ensure
      FileUtils.remove_entry_secure(specific_temp_dir)
      FileUtils.rmdir(global_temp_dir) rescue "not empty"
    end
  }
  (@dependencies||=[])<<unpack_command.dependencies
end