libreconv 0.9.4 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b7109677cd71c5dd97fdc49de55639d0e48aadd30f3d8f110aca98bac953023
4
- data.tar.gz: 3c125782142e2064eb7b0ad6cf9616fddd0c5a2f1d59492bd0da24bb26f84a92
3
+ metadata.gz: 5ae94a53817b7bd0f69b71501286d2ecef0f6e4fa698d6a73175fdd0b9c9c1db
4
+ data.tar.gz: 0af95f4eaafc34508dafa929de52f678fc4d227fe3de1ad6b53195c385ca9b47
5
5
  SHA512:
6
- metadata.gz: 2bb657e3ae1f331a3adac2b6b1048b4dce58540431513e0302dd416d416412de4ded91cde2cce07340416fde5e2a74b5a2bf708bea4f4e0b09e719faae6fcffb
7
- data.tar.gz: f7315df7d4ab60f008083dacb2e07f455f572c8bdddb80dc33c9f070bcfadd9f4ae1c37da62fe9b9f27920084f14c2e78b5b6ab7d6ce4b618a7307b48bb04a57
6
+ metadata.gz: 53a3ac9d20908d5aecba062984c31461ccafc2defe9fb55432a77b540a24d6274e001b7107885b45eb77890ac7c2da5d0cfa0a2f075b820a36f2d3862e41f009
7
+ data.tar.gz: f3880d9db0000edbd39479b128b40a9f4357274ef05f75093bdd90bdda6220202d9e2313595c28059027f4b60e186aa277d32a3c6149031211dadd7d78ace707
@@ -0,0 +1,15 @@
1
+ # Editor configuration, see https://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ indent_style = space
7
+ indent_size = 2
8
+ end_of_line = lf
9
+ insert_final_newline = true
10
+ max_line_length = 100
11
+ trim_trailing_whitespace = true
12
+
13
+ [*.md]
14
+ max_line_length = off
15
+ trim_trailing_whitespace = false
data/.gitignore CHANGED
@@ -1,23 +1,20 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- InstalledFiles
7
- _yardoc
8
- coverage
9
- doc/
10
- lib/bundler/man
11
- pkg
12
- rdoc
13
- spec/reports
14
- test/tmp
15
- test/version_tmp
16
- tmp
17
- .idea/
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
18
9
 
19
- TODO.md
10
+ # rspec failure tracking
11
+ .rspec_status
20
12
 
21
- spec/.DS_Store
13
+ /Gemfile.lock
14
+ /.ruby-version
15
+ *.gem
16
+ /vendor/bundle
22
17
 
18
+ # Misc.
23
19
  .DS_Store
20
+ /.idea/
data/.rspec CHANGED
@@ -1,2 +1,4 @@
1
1
  --color
2
- --format progress
2
+ --format documentation
3
+ --require spec_helper
4
+ --order rand
@@ -1,25 +1,23 @@
1
1
  require: rubocop-rspec
2
2
 
3
- Metrics/AbcSize:
4
- # Max: 25
5
- Enabled: false
3
+ AllCops:
4
+ TargetRubyVersion: 2.3
6
5
 
7
- Metrics/MethodLength:
8
- # Max: 20
6
+ Style/Documentation:
9
7
  Enabled: false
10
8
 
11
- Metrics/CyclomaticComplexity:
12
- # Max: 10
13
- Enabled: false
9
+ Metrics/LineLength:
10
+ Max: 100
14
11
 
15
- Metrics/BlockLength:
16
- Enabled: false
12
+ Style/PercentLiteralDelimiters:
13
+ PreferredDelimiters:
14
+ '%w': '[]'
17
15
 
18
- Metrics/PerceivedComplexity:
16
+ Style/ExpandPathArguments:
19
17
  Enabled: false
20
18
 
21
- RSpec/ExampleLength:
19
+ Style/Encoding:
22
20
  Enabled: false
23
21
 
24
- Style/Documentation:
22
+ Layout/EndOfLine:
25
23
  Enabled: false
@@ -1,7 +1,14 @@
1
+ sudo: false
1
2
  language: ruby
3
+ cache: bundler
2
4
  rvm:
3
- - 2.2.0
4
- - 2.5.3
5
+ - 1.9.3
6
+ - 2.2
7
+ - 2.3
8
+ - 2.5
9
+ - jruby
5
10
  before_install:
6
11
  - sudo apt-get update -qq
7
- - sudo apt-get install libreoffice
12
+ - sudo apt-get install libreoffice-core libreoffice-writer libreoffice-calc libreoffice-impress -y --no-install-recommends
13
+ before_script: bundle exec rubocop
14
+ script: bundle exec rake
data/Gemfile CHANGED
@@ -4,10 +4,3 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in libreconv.gemspec
6
6
  gemspec
7
-
8
- group :development, :test do
9
- gem 'pry-byebug'
10
- gem 'rubocop', require: false
11
- gem 'rubocop-rspec', require: false
12
- gem 'webmock'
13
- end
data/README.md CHANGED
@@ -9,7 +9,9 @@ Convert office documents using LibreOffice / OpenOffice to one of their supporte
9
9
 
10
10
  Add this line to your application's Gemfile:
11
11
 
12
- gem 'libreconv'
12
+ ```ruby
13
+ gem 'libreconv'
14
+ ```
13
15
 
14
16
  And then execute:
15
17
 
@@ -21,7 +23,7 @@ Or install it yourself as:
21
23
 
22
24
  ## Usage
23
25
 
24
- You need to install Libreoffice or Openoffice on your system to use this gem. The code has been tested with Libreoffice 6.1.3.
26
+ You need to install LibreOffice or OpenOffice on your system to use this gem. The code has been tested with LibreOffice 6.1.3.
25
27
 
26
28
  ```ruby
27
29
  require 'libreconv'
@@ -41,7 +43,7 @@ Libreconv.convert('http://myserver.com/123/document.docx', '/Users/ricn/pdf_docu
41
43
  Libreconv.convert('https://mybucket.s3.amazonaws.com/myserver/123/document.docx?X-Amz-Expires=456&X-Amz-Signature=abc', '/Users/ricn/pdf_documents/doc.pdf')
42
44
 
43
45
  # Converts document.docx to document.pdf
44
- # If you for some reason can't have soffice in your PATH you can specifiy the file path to the soffice binary
46
+ # If you for some reason can't have soffice in your PATH you can specify the file path to the soffice binary
45
47
  Libreconv.convert('document.docx', '/Users/ricn/pdf_documents', '/Applications/LibreOffice.app/Contents/MacOS/soffice')
46
48
 
47
49
  # Converts document.docx to my_document_as.html
@@ -49,9 +51,15 @@ Libreconv.convert('document.docx', '/Users/ricn/pdf_documents/my_document_as.htm
49
51
 
50
52
  # Converts document.docx to my_document_as.pdf using writer_pdf_Export filter
51
53
  Libreconv.convert('document.docx', '/Users/ricn/pdf_documents/my_document_as.pdf', nil, 'pdf:writer_pdf_Export')
52
-
53
54
  ```
54
55
 
56
+ ## Development
57
+
58
+ After checking out the repo, run `bundle install` to install dependencies. Then, run `bundle exec rake` to run the tests.
59
+ You can also run `irb -r bundler/setup -r libreconv` for an interactive prompt that will allow you to experiment.
60
+
61
+ To install this gem onto your local machine, run `bundle exec rake install`.
62
+
55
63
  ## Credits
56
64
 
57
65
  The following people have contributed ideas, documentation, or code to Libreconv:
@@ -69,3 +77,7 @@ The following people have contributed ideas, documentation, or code to Libreconv
69
77
  3. Commit your changes (`git commit -am 'Add some feature'`)
70
78
  4. Push to the branch (`git push origin my-new-feature`)
71
79
  5. Create new Pull Request
80
+
81
+ ## License
82
+
83
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -7,117 +7,130 @@ require 'tmpdir'
7
7
  require 'securerandom'
8
8
  require 'open3'
9
9
 
10
+ # Convert office documents using LibreOffice / OpenOffice to one of their supported formats.
10
11
  module Libreconv
11
12
  class ConversionFailedError < StandardError; end
12
13
 
13
- SOURCE_TYPES = {
14
- file: 1,
15
- url: 2
16
- }.freeze
17
-
14
+ # @param [String] source Path or URL of the source file.
15
+ # @param [String] target Target file path.
16
+ # @param [String] soffice_command Path to the soffice binary.
17
+ # @param [String] convert_to Format to convert to (default: 'pdf').
18
+ # @raise [IOError] If invalid source file/URL or soffice command not found.
19
+ # @raise [URI::Error] When URI parsing error.
20
+ # @raise [Net::ProtocolError] If source URL checking failed.
21
+ # @raise [ConversionFailedError] When soffice command execution error.
18
22
  def self.convert(source, target, soffice_command = nil, convert_to = nil)
19
23
  Converter.new(source, target, soffice_command, convert_to).convert
20
24
  end
21
25
 
22
26
  class Converter
27
+ # @return [String]
23
28
  attr_accessor :soffice_command
24
29
 
30
+ # @param [String] source Path or URL of the source file.
31
+ # @param [String] target Target file path.
32
+ # @param [String] soffice_command Path to the soffice binary.
33
+ # @param [String] convert_to Format to convert to (default: 'pdf').
34
+ # @raise [IOError] If invalid source file/URL or soffice command not found.
35
+ # @raise [URI::Error] When URI parsing error.
36
+ # @raise [Net::ProtocolError] If source URL checking failed.
25
37
  def initialize(source, target, soffice_command = nil, convert_to = nil)
26
- @source = source
38
+ @source = check_source_type(source)
27
39
  @target = target
28
- @soffice_command =
29
- soffice_command ||
30
- which('soffice') ||
31
- which('soffice.bin')
40
+ @soffice_command = soffice_command || which('soffice') || which('soffice.bin')
32
41
  @convert_to = convert_to || 'pdf'
33
- @source_type = check_source_type
34
-
35
- # If the URL contains GET params, the '&' could break when
36
- # being used as an argument to soffice. Wrap it in single
37
- # quotes to escape it. Then strip them from the target
38
- # temp file name.
39
- @escaped_source =
40
- if @source_type == 1
41
- @source
42
- else
43
- "'#{@source}'"
44
- end
45
- @escaped_source_path =
46
- if @source_type == 1
47
- @source
48
- else
49
- URI.parse(@source).path
50
- end
51
42
 
52
43
  ensure_soffice_exists
53
44
  end
54
45
 
46
+ # @raise [ConversionFailedError] When soffice command execution error.
55
47
  def convert
56
- pipe_name = 'soffice-pipe-' + SecureRandom.uuid.to_s
57
- pipe_path = File.join Dir.tmpdir, pipe_name
48
+ tmp_pipe_path = File.join(Dir.tmpdir, "soffice-pipe-#{SecureRandom.uuid}")
58
49
 
59
50
  Dir.mktmpdir do |target_path|
60
- accept_args = [
61
- 'pipe,name=' + pipe_name,
62
- 'url',
63
- 'StarOffice.ServiceManager'
64
- ].join(';')
65
-
66
- command = [
67
- soffice_command,
68
- "--accept=\"#{accept_args}\"",
69
- '-env:UserInstallation=file:///' +
70
- pipe_path.gsub('\\', '/').gsub(%r{^/}, ''),
71
- '--headless',
72
- '--convert-to',
73
- @convert_to,
74
- @escaped_source,
75
- '--outdir',
76
- target_path
77
- ]
78
-
79
- output, error, status = Open3.capture3(
80
- {
81
- 'HOME' => ENV['HOME'],
82
- 'PATH' => ENV['PATH'],
83
- 'LANG' => ENV['LANG'],
84
- 'LD_LIBRARY_PATH' => ENV['LD_LIBRARY_PATH'],
85
- 'SYSTEMROOT' => ENV['SYSTEMROOT'],
86
- 'TEMP' => ENV['TEMP']
87
- },
88
- *command,
89
- unsetenv_others: true
90
- )
91
-
92
- FileUtils.rm_rf pipe_path if File.exist?(pipe_path)
93
- unless status.success?
94
- raise ConversionFailedError,
95
- 'Conversion failed! Output: ' + output.strip.inspect +
96
- ', Error: ' + error.strip.inspect
97
- end
51
+ command = build_command(tmp_pipe_path, target_path)
52
+ target_tmp_file = execute_command(command, target_path)
98
53
 
99
- target_tmp_file = File.join(
100
- target_path,
101
- File.basename(@escaped_source_path, '.*') + '.' +
102
- File.basename(@convert_to, ':*')
103
- )
104
54
  FileUtils.cp target_tmp_file, @target
105
55
  end
56
+ ensure
57
+ FileUtils.rm_rf tmp_pipe_path if File.exist?(tmp_pipe_path)
106
58
  end
107
59
 
108
60
  private
109
61
 
62
+ # @param [Array<String>] command
63
+ # @param [String] target_path
64
+ # @return [String]
65
+ # @raise [ConversionFailedError] When soffice command execution error.
66
+ def execute_command(command, target_path)
67
+ output, error, status =
68
+ if RUBY_PLATFORM =~ /java/
69
+ Open3.capture3(*command)
70
+ else
71
+ Open3.capture3(command_env, *command, unsetenv_others: true)
72
+ end
73
+
74
+ target_tmp_file = File.join(target_path, target_filename)
75
+ return target_tmp_file if status.success? && File.exist?(target_tmp_file)
76
+
77
+ raise ConversionFailedError,
78
+ "Conversion failed! Output: #{output.strip.inspect}, Error: #{error.strip.inspect}"
79
+ end
80
+
81
+ # @return [Hash]
82
+ def command_env
83
+ Hash[%w[HOME PATH LANG LD_LIBRARY_PATH SYSTEMROOT TEMP].map { |k| [k, ENV[k]] }]
84
+ end
85
+
86
+ # @param [String] tmp_pipe_path
87
+ # @param [String] target_path
88
+ # @return [Array<String>]
89
+ def build_command(tmp_pipe_path, target_path)
90
+ [
91
+ soffice_command,
92
+ "--accept=\"pipe,name=#{File.basename(tmp_pipe_path)};url;StarOffice.ServiceManager\"",
93
+ "-env:UserInstallation=#{build_file_uri(tmp_pipe_path)}",
94
+ '--headless',
95
+ '--convert-to', @convert_to,
96
+ escaped_source,
97
+ '--outdir', target_path
98
+ ]
99
+ end
100
+
101
+ # If the URL contains GET params, the '&' could break when being used as an argument to soffice.
102
+ # Wrap it in single quotes to escape it. Then strip them from the target temp file name.
103
+ # @return [String]
104
+ def escaped_source
105
+ # TODO: @source.is_a?(URI::Generic) ? "'#{@source}'" : @source
106
+ @source.to_s
107
+ end
108
+
109
+ # @return [String]
110
+ def escaped_source_path
111
+ @source.is_a?(URI::Generic) ? @source.path : @source
112
+ end
113
+
114
+ # @return [String]
115
+ def target_filename
116
+ File.basename(escaped_source_path, '.*') + '.' + File.basename(@convert_to, ':*')
117
+ end
118
+
119
+ # @raise [IOError] If soffice headless command line tool not found.
110
120
  def ensure_soffice_exists
111
121
  return if soffice_command && File.exist?(soffice_command)
112
122
 
113
123
  raise IOError, 'Can\'t find LibreOffice or OpenOffice executable.'
114
124
  end
115
125
 
126
+ # @param [String] cmd
127
+ # @return [String, nil]
116
128
  def which(cmd)
117
129
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
130
+
118
131
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
119
132
  exts.each do |ext|
120
- exe = File.join(path, cmd + ext)
133
+ exe = File.expand_path("#{cmd}#{ext}", path)
121
134
  return exe if File.executable? exe
122
135
  end
123
136
  end
@@ -125,20 +138,44 @@ module Libreconv
125
138
  nil
126
139
  end
127
140
 
128
- def check_source_type
129
- if File.exist?(@source) && !File.directory?(@source)
130
- return SOURCE_TYPES[:file]
131
- end
132
- if URI(@source).scheme == 'http' &&
133
- Net::HTTP.get_response(URI(@source)).is_a?(Net::HTTPSuccess)
134
- return SOURCE_TYPES[:url]
141
+ # @param [String] source
142
+ # @return [String, URI::HTTP]
143
+ # @raise [IOError] If invalid source file/URL.
144
+ # @raise [URI::Error] When URI parsing error.
145
+ # @raise [Net::ProtocolError] If source URL checking failed.
146
+ def check_source_type(source)
147
+ if File.exist?(source)
148
+ return source unless File.directory?(source)
149
+ elsif (uri = check_valid_url(source))
150
+ return uri
135
151
  end
136
- if URI(@source).scheme == 'https' &&
137
- Net::HTTP.get_response(URI(@source)).is_a?(Net::HTTPSuccess)
138
- return SOURCE_TYPES[:url]
152
+
153
+ raise IOError, "Source (#{source}) is neither a file nor a URL."
154
+ end
155
+
156
+ # @param [String] url
157
+ # @return [URI::HTTP, false, nil]
158
+ # @raise [URI::Error] When URI parsing error.
159
+ # @raise [Net::ProtocolError] If source URL checking failed.
160
+ def check_valid_url(url)
161
+ uri = URI(url)
162
+ return false unless uri.is_a?(URI::HTTP)
163
+
164
+ Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
165
+ response = http.head(uri.request_uri)
166
+ return check_valid_url(response['location']) if response.is_a?(Net::HTTPRedirection)
167
+
168
+ return response.is_a?(Net::HTTPSuccess) ? uri : nil
139
169
  end
170
+ end
171
+
172
+ # @param [String] path
173
+ # @return [String]
174
+ def build_file_uri(path)
175
+ separators = /[#{Regexp.quote "#{File::SEPARATOR}#{File::ALT_SEPARATOR}"}]/
176
+ unsafe = Regexp.new("[^#{URI::PATTERN::UNRESERVED}/?:]")
140
177
 
141
- raise IOError, "Source (#{@source}) is neither a file nor a URL."
178
+ 'file:///' + URI::DEFAULT_PARSER.escape(path.gsub(separators, '/').sub(%r{^/+}, ''), unsafe)
142
179
  end
143
180
  end
144
181
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Libreconv
4
- VERSION = '0.9.4'
4
+ VERSION = '0.9.5'
5
5
  end
@@ -1,6 +1,7 @@
1
+ # encoding: UTF-8
1
2
  # frozen_string_literal: true
2
3
 
3
- lib = File.expand_path('lib', __dir__)
4
+ lib = File.expand_path('../lib', __FILE__)
4
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
6
  require 'libreconv/version'
6
7
 
@@ -9,16 +10,22 @@ Gem::Specification.new do |spec|
9
10
  spec.version = Libreconv::VERSION
10
11
  spec.authors = ['Richard Nyström', 'Nathan Broadbent']
11
12
  spec.email = ['nathan@formapi.io']
13
+
12
14
  spec.description = 'Convert office documents to PDF using LibreOffice.'
13
15
  spec.summary = 'Convert office documents to PDF.'
14
16
  spec.homepage = 'https://github.com/FormAPI/libreconv'
15
17
  spec.license = 'MIT'
16
18
 
17
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
+ spec.files = Dir.chdir(File.expand_path('../', __FILE__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
18
22
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
23
  spec.require_paths = ['lib']
24
+
21
25
  spec.add_development_dependency 'bundler', '>= 0'
22
26
  spec.add_development_dependency 'rake'
23
- spec.add_development_dependency 'rspec', '~> 3.8.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.8'
28
+ spec.add_development_dependency 'rubocop'
29
+ spec.add_development_dependency 'rubocop-rspec'
30
+ spec.add_development_dependency 'webmock'
24
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libreconv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Nyström
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-10-04 00:00:00.000000000 Z
12
+ date: 2019-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -45,14 +45,56 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 3.8.0
48
+ version: '3.8'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 3.8.0
55
+ version: '3.8'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rubocop
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubocop-rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: webmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
56
98
  description: Convert office documents to PDF using LibreOffice.
57
99
  email:
58
100
  - nathan@formapi.io
@@ -60,10 +102,10 @@ executables: []
60
102
  extensions: []
61
103
  extra_rdoc_files: []
62
104
  files:
105
+ - ".editorconfig"
63
106
  - ".gitignore"
64
107
  - ".rspec"
65
108
  - ".rubocop.yml"
66
- - ".ruby-version"
67
109
  - ".travis.yml"
68
110
  - Gemfile
69
111
  - LICENSE.txt
@@ -72,13 +114,6 @@ files:
72
114
  - lib/libreconv.rb
73
115
  - lib/libreconv/version.rb
74
116
  - libreconv.gemspec
75
- - spec/fixtures/doc.doc
76
- - spec/fixtures/docx.docx
77
- - spec/fixtures/ppt.ppt
78
- - spec/fixtures/pptx.pptx
79
- - spec/fixtures/soffice
80
- - spec/libreconv_spec.rb
81
- - spec/spec_helper.rb
82
117
  homepage: https://github.com/FormAPI/libreconv
83
118
  licenses:
84
119
  - MIT
@@ -103,11 +138,4 @@ rubygems_version: 2.7.8
103
138
  signing_key:
104
139
  specification_version: 4
105
140
  summary: Convert office documents to PDF.
106
- test_files:
107
- - spec/fixtures/doc.doc
108
- - spec/fixtures/docx.docx
109
- - spec/fixtures/ppt.ppt
110
- - spec/fixtures/pptx.pptx
111
- - spec/fixtures/soffice
112
- - spec/libreconv_spec.rb
113
- - spec/spec_helper.rb
141
+ test_files: []
@@ -1 +0,0 @@
1
- 2.5.3
Binary file
Binary file
Binary file
Binary file
File without changes
@@ -1,111 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Libreconv do
6
- let(:docx_file) { fixture_path('docx.docx') }
7
- let(:doc_file) { fixture_path('doc.doc') }
8
- let(:pptx_file) { fixture_path('pptx.pptx') }
9
- let(:ppt_file) { fixture_path('ppt.ppt') }
10
- let(:target_path) { '/tmp/libreconv' }
11
- let(:url) { 'http://s3.amazonaws.com/libreconv-test/docx.docx' }
12
-
13
- before do
14
- FileUtils.mkdir_p target_path
15
- end
16
-
17
- after do
18
- FileUtils.rm_rf target_path
19
- end
20
-
21
- describe Libreconv::Converter do
22
- describe '#new' do
23
- it 'raises error if soffice command does not exists' do
24
- expect do
25
- described_class.new(
26
- doc_file, '/target', '/Whatever/soffice'
27
- )
28
- end.to raise_error(IOError)
29
- end
30
-
31
- it 'raises error if source does not exists' do
32
- expect do
33
- described_class.new(
34
- fixture_path('nonsense.txt'), '/target'
35
- )
36
- end.to raise_error(IOError)
37
- end
38
- end
39
-
40
- describe '#convert' do
41
- it 'converts a docx do pdf specifying target_file' do
42
- target_file = "#{target_path}/#{File.basename(doc_file, '.doc')}.pdf"
43
- converter = described_class.new(doc_file, target_file)
44
- converter.convert
45
- expect(File.file?(target_file)).to eq true
46
- end
47
-
48
- it 'converts a doc to pdf' do
49
- target_file = "#{target_path}/#{File.basename(doc_file, '.doc')}.pdf"
50
- converter = described_class.new(doc_file, target_path)
51
- converter.convert
52
- expect(File.file?(target_file)).to eq true
53
- end
54
-
55
- it 'converts a docx to pdf' do
56
- target_file = "#{target_path}/#{File.basename(docx_file, '.docx')}.pdf"
57
- converter = described_class.new(docx_file, target_path)
58
- converter.convert
59
- expect(File.file?(target_file)).to eq true
60
- end
61
-
62
- it 'converts a pptx to pdf' do
63
- target_file = "#{target_path}/#{File.basename(pptx_file, '.pptx')}.pdf"
64
- converter = described_class.new(pptx_file, target_path)
65
- converter.convert
66
- expect(File.file?(target_file)).to eq true
67
- end
68
-
69
- it 'converts a ppt to pdf' do
70
- target_file = "#{target_path}/#{File.basename(ppt_file, '.ppt')}.pdf"
71
- converter = described_class.new(ppt_file, target_path)
72
- converter.convert
73
- expect(File.file?(target_file)).to eq true
74
- end
75
-
76
- # it 'raises ConversionFailedError when URL cannot be loaded' do
77
- # stub_request(:get, url)
78
- # expect do
79
- # converter = described_class.new(url, target_path)
80
- # converter.convert
81
- # end.to raise_error(
82
- # Libreconv::ConversionFailedError,
83
- # /Conversion failed/
84
- # )
85
- # end
86
- end
87
-
88
- describe '#soffice_command' do
89
- it 'returns the user specified command path' do
90
- # Just faking that the command is present here
91
- cmd = fixture_path('soffice')
92
- converter = described_class.new(doc_file, '/target', cmd)
93
- expect(converter.soffice_command).to eq cmd
94
- end
95
-
96
- it 'returns the command found in path' do
97
- cmd = `which soffice`.strip
98
- converter = described_class.new(doc_file, '/target')
99
- expect(converter.soffice_command).to eq cmd
100
- end
101
- end
102
- end
103
-
104
- describe '#convert' do
105
- it 'converts a file to pdf' do
106
- target_file = "#{target_path}/#{File.basename(doc_file, '.doc')}.pdf"
107
- described_class.convert(doc_file, target_path)
108
- expect(File.file?(target_file)).to eq true
109
- end
110
- end
111
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'libreconv'
4
- require 'pry-byebug'
5
- require 'webmock/rspec'
6
-
7
- def fixture_path(*paths)
8
- File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', *paths))
9
- end
10
-
11
- RSpec.configure do |config|
12
- config.run_all_when_everything_filtered = true
13
- config.filter_run :focus
14
-
15
- config.order = 'random'
16
- end