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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/.rubocop.yml +1416 -0
- data/.travis.yml +10 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +65 -0
- data/Rakefile +18 -0
- data/bin/console +14 -0
- data/bin/setup +12 -0
- data/lib/paperclip/pdf_cover.rb +31 -0
- data/lib/pdf_cover/converter.rb +86 -0
- data/lib/pdf_cover/version.rb +3 -0
- data/lib/pdf_cover.rb +97 -0
- data/pdf_cover.gemspec +43 -0
- metadata +259 -0
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
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
|
+

|
4
|
+
[](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,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
|
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: []
|