class Libis::Format::Tool::Droid
Public Instance Methods
run(file, _options = {})
click to toggle source
# File lib/libis/format/tool/droid.rb, line 31 def run(file, _options = {}) runner(file) end
run_dir(dir, recursive = true, _options = {})
click to toggle source
# File lib/libis/format/tool/droid.rb, line 27 def run_dir(dir, recursive = true, _options = {}) runner(dir, recursive) end
run_list(filelist, _options = {})
click to toggle source
# File lib/libis/format/tool/droid.rb, line 23 def run_list(filelist, _options = {}) runner(filelist) end
Protected Instance Methods
create_profile(file_or_list, profile, recursive = false)
click to toggle source
# File lib/libis/format/tool/droid.rb, line 90 def create_profile(file_or_list, profile, recursive = false) args = [] files = (file_or_list.is_a?(Array)) ? file_or_list.map(&:escape_for_string) : [file_or_list.escape_for_string] files.each {|file| args << '-a' << file} args << '-q' args << '-p' << profile args << '-R' if recursive timeout = Libis::Format::Config[:timeouts][:droid] result = Libis::Tools::Command.run( Libis::Format::Config[:droid_cmd], *args, timeout: timeout, kill_after: timeout * 2 ) result[:err].select! {|x| x =~ /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} ERROR /} raise RuntimeError, "#{self.class} profile took too long (> #{timeout} seconds) to complete" if result[:timeout] raise RuntimeError, "#{self.class} profile errors: #{result[:err].join("\n")}" unless result[:err].empty? end
create_report(profile, report)
click to toggle source
# File lib/libis/format/tool/droid.rb, line 71 def create_report(profile, report) args = [ '-e', report, '-p', profile, '-q' ] timeout = Libis::Format::Config[:timeouts][:droid] result = Libis::Tools::Command.run( Libis::Format::Config[:droid_cmd], *args, timeout: timeout, kill_after: timeout * 2 ) result[:err].select! {|x| x =~ /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} ERROR /} raise RuntimeError, "#{self.class} report took too long (> #{timeout} seconds) to complete" if result[:timeout] raise RuntimeError, "#{self.class} report errors: #{result[:err].join("\n")}" unless result[:err].empty? File.delete profile end
parse_report(report)
click to toggle source
# File lib/libis/format/tool/droid.rb, line 45 def parse_report(report) keys = [ :id, :parent_id, :uri, :filepath, :filename, :matchtype, :status, :filesize, :type, :extension, :mod_time, :ext_mismatch, :hash, :format_count, :puid, :mimetype, :format_name, :format_version] result = CSV.parse(File.readlines(report).join) .map {|a| Hash[keys.zip(a)]} .select {|a| a[:type] == 'File'} # File.delete report result.each do |r| r.delete(:id) r.delete(:parent_id) r.delete(:uri) r.delete(:filename) r.delete(:status) r.delete(:filesize) r.delete(:type) r.delete(:extension) r.delete(:mod_time) r.delete(:hash) r.delete(:format_count) r[:tool] = :droid end File.delete report process_output(result) end
profile_file_name()
click to toggle source
# File lib/libis/format/tool/droid.rb, line 108 def profile_file_name Tools::TempFile.name('droid', '.profile') end
result_file_name()
click to toggle source
# File lib/libis/format/tool/droid.rb, line 112 def result_file_name Tools::TempFile.name('droid', '.csv') end
runner(file_or_list, recursive = false)
click to toggle source
# File lib/libis/format/tool/droid.rb, line 37 def runner(file_or_list, recursive = false) profile = profile_file_name report = result_file_name create_profile(file_or_list, profile, recursive) create_report(profile, report) parse_report(report) end