class ChupaText::Decomposers::LibreOfficeGeneral
Public Class Methods
new(options)
click to toggle source
Calls superclass method
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 25 def initialize(options) super @command = find_command debug do if @command "#{log_tag}[command][found] #{@command.path}" else "#{log_tag}[command][not-found]" end end end
Public Instance Methods
decompose(data) { |pdf_data| ... }
click to toggle source
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 43 def decompose(data) pdf_data = convert_to_pdf(data) return if pdf_data.nil? yield(pdf_data) end
target?(data)
click to toggle source
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 37 def target?(data) return false if @command.nil? @extensions.include?(data.extension) or @mime_types.include?(data.mime_type) end
Private Instance Methods
convert_to_pdf(data)
click to toggle source
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 74 def convert_to_pdf(data) Dir.mktmpdir do |temporary_directory| home_directory = File.join(temporary_directory, "home") FileUtils.mkdir_p(home_directory) output_directory = File.join(temporary_directory, "output") FileUtils.mkdir_p(output_directory) stdout_path = File.join(temporary_directory, "stdout.log") stderr_path = File.join(temporary_directory, "stderr.log") succeeded = @command.run("--nologo", "--nolockcheck", "--norestore", "--headless", "--convert-to", "pdf", "--outdir", output_directory, data.path.to_s, { :data => data, :env => { "HOME" => home_directory, }, :spawn_options => { :out => stdout_path, :err => stderr_path, }, }) unless succeeded error do tag = "#{log_tag}[convert][exited][abnormally]" [ tag, "output: <#{File.read(stdout_path)}>", "error: <#{File.read(stderr_path)}>", ].join("\n") end return nil end pdf_path, = Dir.glob("#{output_directory}/*.pdf") if pdf_path.nil? error do tag = "#{log_tag}[convert][failed]" [ "#{tag}: LibreOffice may be running", "output: <#{File.read(stdout_path)}>", "error: <#{File.read(stderr_path)}>", ].join("\n") end return nil end normalized_pdf_uri = data.uri.to_s.gsub(/\.[^.]+\z/, ".pdf") File.open(pdf_path, "rb") do |pdf| VirtualFileData.new(normalized_pdf_uri, pdf, :source_data => data) end end end
expand_candidate(candidate)
click to toggle source
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 69 def expand_candidate(candidate) Dir.glob("/opt/libreoffice*/program/#{candidate}").first or Dir.glob("C:/Program Files*/libreoffice*/program/#{candidate}.exe").first end
find_command()
click to toggle source
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 50 def find_command candidates = [ @options[:libreoffice], ENV["LIBREOFFICE"], "libreoffice", "soffice", ] candidates.each do |candidate| next if candidate.nil? command = ExternalCommand.new(candidate) return command if command.exist? expanded_candidate = expand_candidate(candidate) next if expanded_candidate.nil? command = ExternalCommand.new(expanded_candidate) return command if command.exist? end nil end
log_tag()
click to toggle source
# File lib/chupa-text/decomposers/libreoffice-general.rb, line 131 def log_tag "[decomposer][libreoffice]" end