pdf_cover 0.1.0 → 0.1.1

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: 121dae8a49997f32af545bffb534d921f77ff0cc
4
- data.tar.gz: e583d27e90f8cabe123056530af5fcafdeb835dd
3
+ metadata.gz: 97202642bc05deda3ecf113ac840a054a9d6af36
4
+ data.tar.gz: b4e6417e3be0d9efa7706fd9e704d9115cc69b68
5
5
  SHA512:
6
- metadata.gz: 2d5597d5be8543762580e9cb36c13062256ad5dc950cb31eaf872dceeff77b1a253bd23b6abc62257da67849cf5b709c39b1a7b125597da0a54ab1dc977a90ea
7
- data.tar.gz: 74481ca0bbacd20a37ed7e979f5f71d2afa003b4ed7ae03cd6117c0556671ef506cb970967e513c1d668d4a20516fc0765887b53d057544029f16a371998a768
6
+ metadata.gz: 5181a73f41d036c73277a91df1071494cfd67fd4001e501cf282a77bef379ed48f29c13b413ae06d7d708e00a09f9740cb8fb60e1d41aaac88086a582045e504
7
+ data.tar.gz: ba2c5f6520f4e7dd278cdfde851021cc572ac0a72d8fc10e1e9875c266803c2830fe0d78706721f1c8305709077e45c8879d894e42880a8755d0d5ea260e8b2d
data/.rubocop.yml CHANGED
@@ -18,8 +18,8 @@ AllCops:
18
18
 
19
19
  # By default, the rails cops are not run. Override in project or home
20
20
  # directory .rubocop.yml files, or by giving the -R/--rails option.
21
- Rails:
22
- Enabled: true
21
+ Rails:
22
+ Enabled: true
23
23
 
24
24
  # Indent private/protected/public as deep as method definitions
25
25
  AccessModifierIndentation:
data/README.md CHANGED
@@ -1,7 +1,4 @@
1
- # PdfCover
2
-
3
- ![Build Status](https://api.travis-ci.org/xing/pdf_cover.svg)
4
- [![Coverage Status](https://coveralls.io/repos/github/xing/pdf_cover/badge.svg?branch=master)](https://coveralls.io/github/xing/pdf_cover?branch=master)
1
+ # PdfCover [![Build Status](https://api.travis-ci.org/xing/pdf_cover.svg)](https://travis-ci.org/xing/pdf_cover) [![Code Climate](https://codeclimate.com/github/xing/pdf_cover/badges/gpa.svg)](https://codeclimate.com/github/xing/pdf_cover) [![Coverage Status](https://coveralls.io/repos/github/xing/pdf_cover/badge.svg?branch=master)](https://coveralls.io/github/xing/pdf_cover?branch=master)
5
2
 
6
3
  With this gem you can easily have attachments for PDF files that have associated
7
4
  images generated for their first page.
@@ -9,6 +6,9 @@ images generated for their first page.
9
6
  Support is provided both for [Paperclip](https://github.com/thoughtbot/paperclip)
10
7
  and [CarrierWave](https://github.com/carrierwaveuploader/carrierwave).
11
8
 
9
+ In both cases the JPEG quality and resolution are optional and will be set to 85%
10
+ and 300dpi respectively when not provided.
11
+
12
12
  ## Paperclip Support
13
13
 
14
14
  To add a PDF cover style to your attachments you can do something like this:
@@ -18,7 +18,7 @@ class WithPaperclip < ActiveRecord::Base
18
18
  include PdfCover
19
19
 
20
20
  pdf_cover_attachment :pdf, styles: { pdf_cover: ['', :jpeg]},
21
- convert_options: { all: '-quality 95' },
21
+ convert_options: { all: '-quality 95 -density 300' },
22
22
 
23
23
  validates_attachment_content_type :pdf, content_type: %w(application/pdf)
24
24
  end
@@ -41,7 +41,7 @@ class WithCarrierwaveUploader < CarrierWave::Uploader::Base
41
41
  storage :file
42
42
 
43
43
  version :image do
44
- pdf_cover_attachment
44
+ pdf_cover_attachment quality: 95, resolution: 300
45
45
  end
46
46
  end
47
47
  ```
@@ -11,20 +11,33 @@ if Kernel.const_defined?(:Paperclip)
11
11
  # @attachment the Paperclip::Attachment itself
12
12
  class PdfCover < Processor
13
13
  QUALITY_CONVERT_OPTION_REGEX = /-quality\s+(?<quality>\d+)/
14
+ RESOLUTION_CONVERT_OPTION_REGEX = /-density\s+(?<resolution>\d+)/
14
15
 
15
16
  def make
16
- ::PdfCover::Converter.new(@file, format: format, quality: jpeg_quality).converted_file
17
+ ::PdfCover::Converter.new(@file, converter_options).converted_file
18
+ end
19
+
20
+ def converter_options
21
+ format.merge(jpeg_quality).merge(jpeg_resolution)
17
22
  end
18
23
 
19
24
  def format
20
- @options[:format].to_s
25
+ { format: @options[:format].to_s }
21
26
  end
22
27
 
23
28
  def jpeg_quality
24
- return nil unless %w(jpeg jpg).include?(format)
29
+ extract_convert_option(:quality, QUALITY_CONVERT_OPTION_REGEX)
30
+ end
31
+
32
+ def jpeg_resolution
33
+ extract_convert_option(:resolution, RESOLUTION_CONVERT_OPTION_REGEX)
34
+ end
35
+
36
+ def extract_convert_option(key, regex)
37
+ match_data = regex.match(@options[:convert_options])
38
+ match = match_data && match_data[key]
25
39
 
26
- match_data = QUALITY_CONVERT_OPTION_REGEX.match(@options[:convert_options])
27
- match_data && match_data[:quality]
40
+ match ? { key => match } : {}
28
41
  end
29
42
  end
30
43
  end
@@ -1,15 +1,25 @@
1
1
  module PdfCover
2
2
  class Converter
3
+ # NOTE: Update the generate_jpegs.sh script when changing these values
4
+ DEFAULT_FORMAT = "jpeg"
5
+ DEFAULT_QUALITY = 85
6
+ DEFAULT_RESOLUTION = 300
7
+
3
8
  class CommandNotFoundError < StandardError
4
9
  def initialize
5
10
  super("Could not run the `gs` command. Make sure that GhostScript is in your PATH.")
6
11
  end
7
12
  end
8
13
 
14
+ class InvalidOption < StandardError
15
+ def initialize(option_name, option_value)
16
+ super("Invalid option '#{option_name}' with value: '#{option_value}'")
17
+ end
18
+ end
19
+
9
20
  def initialize(file, options = {})
10
21
  @file = file
11
- @format = options[:format] || "jpeg"
12
- @quality = options[:quality] || 95
22
+ extract_options(options)
13
23
  end
14
24
 
15
25
  # @raises PdfCover::Converter::CommandNotFoundError if GhostScript is not found
@@ -18,7 +28,7 @@ module PdfCover
18
28
  when :ok
19
29
  destination_file
20
30
  when :command_failed
21
- @file # TODO: Why this? Shouldn't we just crash?
31
+ @file
22
32
  when :command_not_found
23
33
  fail CommandNotFoundError
24
34
  end
@@ -34,7 +44,7 @@ module PdfCover
34
44
  %W(-sOutputFile='#{destination}' -dNOPAUSE
35
45
  -sDEVICE='#{device}' -dJPEGQ=#{@quality}
36
46
  -dFirstPage=1 -dLastPage=1
37
- -r300 -q '#{source}'
47
+ -r#{@resolution} -q '#{source}'
38
48
  -c quit
39
49
  ).join(" ")
40
50
  end
@@ -64,6 +74,16 @@ module PdfCover
64
74
  Kernel.system(command)
65
75
  end
66
76
 
77
+ def extract_options(options)
78
+ @format = options.fetch(:format, DEFAULT_FORMAT)
79
+ @quality = options.fetch(:quality, DEFAULT_QUALITY).to_i
80
+ @resolution = options.fetch(:resolution, DEFAULT_RESOLUTION).to_i
81
+
82
+ fail InvalidOption.new(:format, @format) unless %w(jpg jpeg png).include?(@format)
83
+ fail InvalidOption.new(:quality, @quality) unless @quality.between?(1, 100)
84
+ fail InvalidOption.new(:resolution, @resolution) unless @resolution > 1
85
+ end
86
+
67
87
  def failed_result(result)
68
88
  destination_file.close
69
89
 
@@ -1,3 +1,3 @@
1
1
  module PdfCover
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.1.1".freeze
3
3
  end
data/lib/pdf_cover.rb CHANGED
@@ -29,8 +29,8 @@ module PdfCover
29
29
  # pdf_cover_attachment
30
30
  # end
31
31
  # end
32
- def pdf_cover_attachment
33
- process :pdf_cover
32
+ def pdf_cover_attachment(options = {})
33
+ process pdf_cover: [options[:quality], options[:resolution]]
34
34
 
35
35
  define_method :full_filename do |for_file = model.logo.file|
36
36
  for_file.gsub(/pdf$/, "jpeg")
@@ -54,7 +54,7 @@ module PdfCover
54
54
  # include PdfCover
55
55
  #
56
56
  # pdf_cover_attachment :pdf, styles: { pdf_cover: ['', :jpeg]},
57
- # convert_options: { all: '-quality 95' }
57
+ # convert_options: { all: '-quality 95 -density 300' }
58
58
  #
59
59
  # # Note that you must set content type validation as required by Paperclip
60
60
  # validates_attachment_content_type :pdf, content_type: %w(application/pdf)
@@ -89,9 +89,10 @@ module PdfCover
89
89
  end
90
90
  end
91
91
 
92
- # This is the method used by the PaperClip processor mechanism
93
- def pdf_cover
94
- converted_file = PdfCover::Converter.new(file).converted_file
92
+ # This is the method used by the CarrierWave processor mechanism
93
+ def pdf_cover(quality, resolution)
94
+ options = { quality: quality, resolution: resolution }
95
+ converted_file = PdfCover::Converter.new(file, options).converted_file
95
96
  FileUtils.cp(converted_file, current_path)
96
97
  end
97
98
  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.0
4
+ version: 0.1.1
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-02-25 00:00:00.000000000 Z
11
+ date: 2016-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print