Class: Media::LibreOfficeTransmogrifier

Inherits:
Transmogrifier show all
Defined in:
lib/media/transmogrifiers/libreoffice.rb

Instance Attribute Summary

Attributes inherited from Transmogrifier

#command_output, #input, #input_file, #input_type, #options, #output, #output_file, #output_type

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Transmogrifier

add, command_available?, converts_from?, converts_to?, find_class, inherited, #initialize, input_map, list, output_map, #run_command, run_command

Constructor Details

This class inherits a constructor from Media::Transmogrifier

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/media/transmogrifiers/libreoffice.rb', line 55

def self.available?
  command_available?(LIBREOFFICE_COMMAND)
end

.input_typesObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/media/transmogrifiers/libreoffice.rb', line 24

def self.input_types
  %w(
  text/plain text/html text/richtext application/rtf
  text/csv text/comma-separated-values
  application/msword application/mswrite application/powerpoint
  application/excel application/access application/vnd.ms-msword
  application/vnd.ms-mswrite application/vnd.ms-powerpoint
  application/vnd.ms-excel application/vnd.ms-access
  application/msword-template application/excel-template
  application/powerpoint-template
  application/vnd.oasis.opendocument.spreadsheet
  application/vnd.oasis.opendocument.formula
  application/vnd.oasis.opendocument.chart
  application/vnd.oasis.opendocument.image
  application/vnd.oasis.opendocument.graphics
  application/vnd.oasis.opendocument.presentation
  application/vnd.oasis.opendocument.text-web
  application/vnd.oasis.opendocument.text
  application/vnd.oasis.opendocument.text-template
  application/vnd.oasis.opendocument.text-master
  application/vnd.oasis.opendocument.presentation-template
  application/vnd.oasis.opendocument.graphics-template
  application/vnd.oasis.opendocument.spreadsheet-template
  application/vnd.openxmlformats-officedocument.wordprocessingml.document
  )
end

.output_typesObject



51
52
53
# File 'lib/media/transmogrifiers/libreoffice.rb', line 51

def self.output_types
  ["application/pdf"] + input_types
end

Instance Method Details

#run(&block) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/media/transmogrifiers/libreoffice.rb', line 59

def run(&block)
  status = nil

  # make a unique temporary directory for output, so that the filename won't collide.
  Dir.mktmpdir do |work_directory|
    # run command
    ext = extension(output_type)
    if ext
      arguments = [
        LIBREOFFICE_COMMAND,
        '--headless',
        "-env:UserInstallation=file://#{work_directory}/home",
        '-convert-to', extension(output_type),
        '-outdir', work_directory,
        input_file
      ]
      status = run_command(*arguments, &block)

      # we cannot specify the name of the output file, so grab what it generated and move it to self.output_file
      libreoffice_output = work_directory + '/' + replace_extension(input_file, extension(output_type))
      if File.exist?(libreoffice_output)
        replace_file from: libreoffice_output, to: output_file
      else
        msg = ["Error: Could not find libreoffice output %s \n" % output_file]
        msg << arguments.join(' ')
        msg += Dir[work_directory + '/*']
        unless command_output.empty?
          msg << 'LibreOffice said:'
          msg << command_output
        end
        msg = msg.join("\n")
        error msg
        yield(msg) if block_given?
        return :failure
      end
    else
      yield('could not find extension for type %s' % output_type) if block_given?
      return :failure
    end
  end
  return status
end