pdf_cover 0.1.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.
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install:
5
+ - gem install bundler -v 1.11.2
6
+ - sudo apt-get -qq update
7
+ - sudo apt-get install -y ghostscript
8
+ before_script:
9
+ - cd spec/dummy && bundle exec rake db:test:prepare && cd -
10
+ - cd spec && bash generate_jpegs.sh && cd -
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Juan González
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,65 @@
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)
5
+
6
+ With this gem you can easily have attachments for PDF files that have associated
7
+ images generated for their first page.
8
+
9
+ Support is provided both for [Paperclip](https://github.com/thoughtbot/paperclip)
10
+ and [CarrierWave](https://github.com/carrierwaveuploader/carrierwave).
11
+
12
+ ## Paperclip Support
13
+
14
+ To add a PDF cover style to your attachments you can do something like this:
15
+
16
+ ```Ruby
17
+ class WithPaperclip < ActiveRecord::Base
18
+ include PdfCover
19
+
20
+ pdf_cover_attachment :pdf, styles: { pdf_cover: ['', :jpeg]},
21
+ convert_options: { all: '-quality 95' },
22
+
23
+ validates_attachment_content_type :pdf, content_type: %w(application/pdf)
24
+ end
25
+ ```
26
+
27
+ This will define an attachment called `pdf` which has a `pdf_cover` style attached
28
+ to it that is a JPEG of the first page in the PDF. You can pass any option that you
29
+ would normally pass to `has_attached_file` in the options hash and it will be
30
+ passed through to the underlying `has_attached_file` call.
31
+
32
+ ## CarrierWave
33
+
34
+ When using CarrierWave you can implement this gem's functionality
35
+ you can do something like this:
36
+
37
+ ```Ruby
38
+ class WithCarrierwaveUploader < CarrierWave::Uploader::Base
39
+ include PdfCover
40
+
41
+ storage :file
42
+
43
+ version :image do
44
+ pdf_cover_attachment
45
+ end
46
+ end
47
+ ```
48
+
49
+ In this case, when we mix the `PdfCover` module in, it adds the `pdf_cover_attachment`
50
+ method to our uploader. We only need to call it inside one of our versions to get the
51
+ pdf to image feature.
52
+
53
+ # Developing this gem
54
+
55
+ After cloning this gem locally just run the `bin/setup` script to set everything
56
+ up. This will:
57
+
58
+ - Run `bundle` to install the development dependencies
59
+ - Initialize the database used by the `spec/dummy` rails application that
60
+ we use to test the ActiveRecord+(Paperclip|CarrierWave) integration.
61
+
62
+ ## Running the specs
63
+
64
+ Once you have setup the gem locally you can just run `rake` from the root folder
65
+ of the gem to run the specs.
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "rubocop/rake_task"
4
+
5
+ ENV["RAILS_ENV"] ||= "test"
6
+
7
+ RSpec::Core::RakeTask.new(:spec).tap do |rspec_task|
8
+ rspec_task.rspec_opts = "--fail-fast"
9
+ end
10
+
11
+ RuboCop::RakeTask.new(:rubocop)
12
+
13
+ task :run_all_checks do
14
+ Rake::Task["spec"].invoke
15
+ Rake::Task["rubocop"].invoke
16
+ end
17
+
18
+ task default: :run_all_checks
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "pdf_cover"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ cd spec/dummy
9
+ bundle exec rake db:test:prepare
10
+ cd -
11
+
12
+ sh spec/generate_jpegs.sh
@@ -0,0 +1,31 @@
1
+ if Kernel.const_defined?(:Paperclip)
2
+ require "pdf_cover/converter"
3
+
4
+ module Paperclip
5
+ # This is a Paperclip::Processor that can be used to generate an image
6
+ # from a PDF file. The image is only of the first page.
7
+ #
8
+ # We inherit the following instance variables from Paperclip::Processor:
9
+ # @file the file that will be operated on (which is an instance of File)
10
+ # @options a hash of options that were defined in has_attached_file's style hash
11
+ # @attachment the Paperclip::Attachment itself
12
+ class PdfCover < Processor
13
+ QUALITY_CONVERT_OPTION_REGEX = /-quality\s+(?<quality>\d+)/
14
+
15
+ def make
16
+ ::PdfCover::Converter.new(@file, format: format, quality: jpeg_quality).converted_file
17
+ end
18
+
19
+ def format
20
+ @options[:format].to_s
21
+ end
22
+
23
+ def jpeg_quality
24
+ return nil unless %w(jpeg jpg).include?(format)
25
+
26
+ match_data = QUALITY_CONVERT_OPTION_REGEX.match(@options[:convert_options])
27
+ match_data && match_data[:quality]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,86 @@
1
+ module PdfCover
2
+ class Converter
3
+ class CommandNotFoundError < StandardError
4
+ def initialize
5
+ super("Could not run the `gs` command. Make sure that GhostScript is in your PATH.")
6
+ end
7
+ end
8
+
9
+ def initialize(file, options = {})
10
+ @file = file
11
+ @format = options[:format] || "jpeg"
12
+ @quality = options[:quality] || 95
13
+ end
14
+
15
+ # @raises PdfCover::Converter::CommandNotFoundError if GhostScript is not found
16
+ def converted_file
17
+ case convert_file
18
+ when :ok
19
+ destination_file
20
+ when :command_failed
21
+ @file # TODO: Why this? Shouldn't we just crash?
22
+ when :command_not_found
23
+ fail CommandNotFoundError
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def basename
30
+ @basename ||= File.basename(@file.path, File.extname(@file.path))
31
+ end
32
+
33
+ def build_parameters(source, device, destination)
34
+ %W(-sOutputFile='#{destination}' -dNOPAUSE
35
+ -sDEVICE='#{device}' -dJPEGQ=#{@quality}
36
+ -dFirstPage=1 -dLastPage=1
37
+ -r300 -q '#{source}'
38
+ -c quit
39
+ ).join(" ")
40
+ end
41
+
42
+ def convert_file
43
+ parameters = build_parameters(file_path, device, File.expand_path(destination_file.path))
44
+ result = execute_command("gs #{parameters}")
45
+
46
+ if result
47
+ :ok
48
+ else
49
+ failed_result(result)
50
+ end
51
+ end
52
+
53
+ def destination_file
54
+ @destination_file ||= Tempfile.new([basename, ".#{@format}"]).tap do |file|
55
+ file.binmode
56
+ end
57
+ end
58
+
59
+ def device
60
+ @format.to_s == "jpg" ? "jpeg" : @format.to_s
61
+ end
62
+
63
+ def execute_command(command)
64
+ Kernel.system(command)
65
+ end
66
+
67
+ def failed_result(result)
68
+ destination_file.close
69
+
70
+ if result == false
71
+ logger.warn("GhostScript execution failed: #{$CHILD_STATUS}")
72
+ :command_failed
73
+ else
74
+ :command_not_found
75
+ end
76
+ end
77
+
78
+ def file_path
79
+ @file_path ||= File.expand_path(@file.path)
80
+ end
81
+
82
+ def logger
83
+ @logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDERR)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,3 @@
1
+ module PdfCover
2
+ VERSION = "0.1.0".freeze
3
+ end
data/lib/pdf_cover.rb ADDED
@@ -0,0 +1,97 @@
1
+ require "pdf_cover/version"
2
+ require "pdf_cover/converter"
3
+
4
+ # This module provides methods for CarrierWave::Uploader::Base subclasses and
5
+ # for ActiveRecord models that want to include attachments to simplify the
6
+ # generation of JPEG images from the first page of a PDF file that is uploaded
7
+ # by the users.
8
+ # Include this module in your class and check the `ClassMethods` documentation
9
+ # that corresponds to your attachments managing library in this same file.
10
+ module PdfCover
11
+ module ClassMethods
12
+ module CarrierWave
13
+ # When called in the context of a CarrierWave::Uploader::Base subclass,
14
+ # this method will add a processor to the currenct attachment or version
15
+ # that generates a JPEG with 95 quality from the first page of the given
16
+ # PDF.
17
+ #
18
+ # This will not make any validation on the given content type, you must
19
+ # [do it yourself](https://github.com/carrierwaveuploader/carrierwave#securing-uploads)
20
+ # on your uploader.
21
+ #
22
+ # @example Adding a version to your uploader:
23
+ # class WithCarrierwaveUploader < CarrierWave::Uploader::Base
24
+ # include PdfCover
25
+ #
26
+ # storage :file
27
+ #
28
+ # version :image do
29
+ # pdf_cover_attachment
30
+ # end
31
+ # end
32
+ def pdf_cover_attachment
33
+ process :pdf_cover
34
+
35
+ define_method :full_filename do |for_file = model.logo.file|
36
+ for_file.gsub(/pdf$/, "jpeg")
37
+ end
38
+ end
39
+ end
40
+
41
+ module Paperclip
42
+ # Adds a new attached file to the caller that has the pdf cover processors
43
+ # prepended to the list of processors given.
44
+ #
45
+ # @param attachment_name [Symbol] the name of the new attachment. The fields
46
+ # described in the Paperclip documentation for attachments are needed for this one.
47
+ # @param options [Hash] the same options that are accepted by Paperclip, they
48
+ # are passed to the has_attached_file call with just a new processor
49
+ # prepended to the given ones. The PdfCover processor will use the quality
50
+ # provided in the `convert_options` option when generating the jpeg.
51
+ #
52
+ # @example A sample ActiveRecord model with a pdf_cover attachment:
53
+ # class WithPaperclip < ActiveRecord::Base
54
+ # include PdfCover
55
+ #
56
+ # pdf_cover_attachment :pdf, styles: { pdf_cover: ['', :jpeg]},
57
+ # convert_options: { all: '-quality 95' }
58
+ #
59
+ # # Note that you must set content type validation as required by Paperclip
60
+ # validates_attachment_content_type :pdf, content_type: %w(application/pdf)
61
+ # end
62
+ def pdf_cover_attachment(attachment_name, options = {})
63
+ options[:processors] = (options[:processors] || []).unshift(:pdf_cover)
64
+
65
+ has_attached_file attachment_name, options
66
+ end
67
+ end
68
+ end
69
+
70
+ class << self
71
+ def included(base)
72
+ if carrierwave_defined?(base)
73
+ base.extend ClassMethods::CarrierWave
74
+ elsif paperclip_defined?
75
+ base.extend ClassMethods::Paperclip
76
+ else
77
+ fail "#{base} is not a CarrierWave::Uploader and Paperclip is not defined ¯\\_(ツ)_/¯"
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ def carrierwave_defined?(base)
84
+ defined?(CarrierWave::Uploader::Base) && base.ancestors.include?(CarrierWave::Uploader::Base)
85
+ end
86
+
87
+ def paperclip_defined?
88
+ defined?(Paperclip)
89
+ end
90
+ end
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
95
+ FileUtils.cp(converted_file, current_path)
96
+ end
97
+ end
data/pdf_cover.gemspec ADDED
@@ -0,0 +1,43 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "pdf_cover/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pdf_cover"
8
+ spec.version = PdfCover::VERSION
9
+ spec.authors = ["Juan González"]
10
+ spec.email = ["juan.gonzalez@xing.com"]
11
+
12
+ spec.summary = %(Convert first page of a PDF into an image format on Carrierwave and Paperclip )
13
+ spec.description = %(Provides processors for both Carrierwave and Paperclip to allow
14
+ having a version of a PDF attachment that is actually an image
15
+ representing the first page on that PDF. This gem uses GhostScript,
16
+ so it must be installed in order for it to work.)
17
+ spec.homepage = "http://githum.com/xing/pdf_cover"
18
+ spec.license = "MIT"
19
+
20
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.bindir = "exe"
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_development_dependency "awesome_print"
26
+ spec.add_development_dependency "bundler", "~> 1.11"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "simplecov"
29
+ spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency "rubocop", "~> 0.34.1"
31
+ spec.add_development_dependency "sqlite3"
32
+
33
+ spec.add_development_dependency "byebug"
34
+ spec.add_development_dependency "fivemat"
35
+ spec.add_development_dependency "coveralls"
36
+
37
+ spec.add_development_dependency "paperclip", "=4.1.1"
38
+ spec.add_development_dependency "carrierwave", "~> 0.10"
39
+
40
+ spec.add_development_dependency "rmagick", "~> 2.13.2"
41
+
42
+ spec.add_runtime_dependency "rails", "~> 4.2.4"
43
+ end
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pdf_cover
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Juan González
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.11'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.34.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.34.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: sqlite3
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: byebug
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: fivemat
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: coveralls
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: paperclip
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 4.1.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 4.1.1
167
+ - !ruby/object:Gem::Dependency
168
+ name: carrierwave
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.10'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.10'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rmagick
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 2.13.2
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 2.13.2
195
+ - !ruby/object:Gem::Dependency
196
+ name: rails
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 4.2.4
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 4.2.4
209
+ description: |-
210
+ Provides processors for both Carrierwave and Paperclip to allow
211
+ having a version of a PDF attachment that is actually an image
212
+ representing the first page on that PDF. This gem uses GhostScript,
213
+ so it must be installed in order for it to work.
214
+ email:
215
+ - juan.gonzalez@xing.com
216
+ executables: []
217
+ extensions: []
218
+ extra_rdoc_files: []
219
+ files:
220
+ - ".gitignore"
221
+ - ".rspec"
222
+ - ".rubocop.yml"
223
+ - ".travis.yml"
224
+ - Gemfile
225
+ - LICENSE.txt
226
+ - README.md
227
+ - Rakefile
228
+ - bin/console
229
+ - bin/setup
230
+ - lib/paperclip/pdf_cover.rb
231
+ - lib/pdf_cover.rb
232
+ - lib/pdf_cover/converter.rb
233
+ - lib/pdf_cover/version.rb
234
+ - pdf_cover.gemspec
235
+ homepage: http://githum.com/xing/pdf_cover
236
+ licenses:
237
+ - MIT
238
+ metadata: {}
239
+ post_install_message:
240
+ rdoc_options: []
241
+ require_paths:
242
+ - lib
243
+ required_ruby_version: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ required_rubygems_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ">="
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ requirements: []
254
+ rubyforge_project:
255
+ rubygems_version: 2.4.5.1
256
+ signing_key:
257
+ specification_version: 4
258
+ summary: Convert first page of a PDF into an image format on Carrierwave and Paperclip
259
+ test_files: []