pdf_cover 0.1.4 → 0.2.0

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
  SHA1:
3
- metadata.gz: 25df97778fee656bffdf8fd3bc52cb42e554c43d
4
- data.tar.gz: 75fdc0c927f65e3dbf7d6d9b689af46f12ec4b47
3
+ metadata.gz: 50f84966f940de9a7a2c76e5befb83f5365b3e94
4
+ data.tar.gz: 4813cc9fbec831e8951fb6d11cf74ab172372f17
5
5
  SHA512:
6
- metadata.gz: cefbf74ed928e7b33de7554cd107a9d56aec18caf605488cf23376e00c8ffa54214ee90755560c787746f0924d69738dd5cfefeca00be0128102cddcc25ea39a
7
- data.tar.gz: 70af3e25382ee8b3ee02f3791520d69562859e6d83187c520953607353303a32394fe8db259589cbf7aa7f1d888cef2a1fa320098a59d5a331547f36c6e8e22e
6
+ metadata.gz: a10fe4bba5600588ad392490a034b97c40e375e86d8f9818562c8c89544b4499ac0c48721a6b72a9407dee97090b7c877a4183cdd7f66b97a6dda4eda5022f7b
7
+ data.tar.gz: 2d308c23e2cdc4f5f12892d03fdacac234a84c3103171521d29ebf206019e335466263b670b1c9a92ffc34b724544e731fb0650bb091926ec6d30e0980e65467
@@ -1,3 +1,5 @@
1
+ require "open3"
2
+
1
3
  module PdfCover
2
4
  class Converter
3
5
  # NOTE: Update the generate_jpegs.sh script when changing these values
@@ -5,6 +7,15 @@ module PdfCover
5
7
  DEFAULT_QUALITY = 85
6
8
  DEFAULT_RESOLUTION = 300
7
9
 
10
+ COMMAND_EXECUTION_SUCCESS_CODE = 0
11
+ COMMAND_NOT_FOUND_CODE = 127 # @see http://www.tldp.org/LDP/abs/html/exitcodes.html
12
+
13
+ class CommandFailedError < StandardError
14
+ def initialize(stdout_str, stderr_str)
15
+ super("PDF conversion failed:\nSTDOUT: #{stdout_str}\nSTDERR: #{stderr_str}")
16
+ end
17
+ end
18
+
8
19
  class CommandNotFoundError < StandardError
9
20
  def initialize
10
21
  super("Could not run the `gs` command. Make sure that GhostScript is in your PATH.")
@@ -23,15 +34,19 @@ module PdfCover
23
34
  end
24
35
 
25
36
  # @raises PdfCover::Converter::CommandNotFoundError if GhostScript is not found
37
+ # @raises PdfCover::Converter::CommandFailedError if GhostScript returns a non-zero status
26
38
  def converted_file
27
- case convert_file
28
- when :ok
29
- destination_file
30
- when :command_failed
31
- @file
32
- when :command_not_found
33
- fail CommandNotFoundError
39
+ parameters = build_parameters(file_path, device)
40
+ stdout_str, stderr_str, status = execute_command("gs #{parameters}")
41
+
42
+ case status
43
+ when COMMAND_EXECUTION_SUCCESS_CODE then destination_file
44
+ when COMMAND_NOT_FOUND_CODE then fail CommandNotFoundError
45
+ else fail CommandFailedError.new(stdout_str, stderr_str)
34
46
  end
47
+ rescue => e
48
+ destination_file.close
49
+ raise e
35
50
  end
36
51
 
37
52
  private
@@ -40,8 +55,8 @@ module PdfCover
40
55
  @basename ||= File.basename(@file.path, File.extname(@file.path))
41
56
  end
42
57
 
43
- def build_parameters(source, device, destination)
44
- %W(-sOutputFile='#{destination}' -dNOPAUSE
58
+ def build_parameters(source, device)
59
+ %W(-sOutputFile='#{destination_path}' -dNOPAUSE
45
60
  -sDEVICE='#{device}' -dJPEGQ=#{@quality}
46
61
  -dFirstPage=1 -dLastPage=1
47
62
  -r#{@resolution} -q '#{source}'
@@ -49,29 +64,22 @@ module PdfCover
49
64
  ).join(" ")
50
65
  end
51
66
 
52
- def convert_file
53
- parameters = build_parameters(file_path, device, File.expand_path(destination_file.path))
54
- result = execute_command("gs #{parameters}")
55
-
56
- if result
57
- :ok
58
- else
59
- failed_result(result)
60
- end
61
- end
62
-
63
67
  def destination_file
64
68
  @destination_file ||= Tempfile.new([basename, ".#{@format}"]).tap do |file|
65
69
  file.binmode
66
70
  end
67
71
  end
68
72
 
73
+ def destination_path
74
+ File.expand_path(destination_file.path)
75
+ end
76
+
69
77
  def device
70
78
  @format.to_s == "jpg" ? "jpeg" : @format.to_s
71
79
  end
72
80
 
73
81
  def execute_command(command)
74
- Kernel.system(command)
82
+ Open3.capture3(command)
75
83
  end
76
84
 
77
85
  def extract_options(options)
@@ -84,23 +92,8 @@ module PdfCover
84
92
  fail InvalidOption.new(:resolution, @resolution) unless @resolution > 1
85
93
  end
86
94
 
87
- def failed_result(result)
88
- destination_file.close
89
-
90
- if result == false
91
- logger.warn("GhostScript execution failed: #{$CHILD_STATUS}")
92
- :command_failed
93
- else
94
- :command_not_found
95
- end
96
- end
97
-
98
95
  def file_path
99
96
  @file_path ||= File.expand_path(@file.path)
100
97
  end
101
-
102
- def logger
103
- @logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDERR)
104
- end
105
98
  end
106
99
  end
@@ -1,3 +1,3 @@
1
1
  module PdfCover
2
- VERSION = "0.1.4".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdf_cover
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan González
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-12 00:00:00.000000000 Z
11
+ date: 2016-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print