adzap-wicked_pdf 2.0.0.beta1 → 2.0.0.beta2
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 +4 -4
- data/.travis.yml +3 -2
- data/Gemfile +2 -0
- data/README.md +5 -5
- data/lib/wicked_pdf/binary.rb +8 -11
- data/lib/wicked_pdf/command.rb +2 -2
- data/lib/wicked_pdf/option_parser.rb +3 -19
- data/lib/wicked_pdf/version.rb +1 -1
- data/test/test_helper.rb +1 -0
- data/test/unit/wicked_pdf_binary_test.rb +64 -8
- data/test/unit/wicked_pdf_option_parser_test.rb +5 -25
- metadata +1 -3
- data/test/unit/wkhtmltopdf_location_test.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4ea1861662d27d078f0687835542b048648b15237258699e266f0ab018fd608
|
4
|
+
data.tar.gz: 47dc57c0ed8a638a3ab3921ad746248c6c2a72f2ab355b2448f2188ac2718388
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a41b903e2d397afcf0f20fc0b72f5a9fbecf97f3e6f75f974fe0a827fa8f961dd09d9d0a29828c3b5cb3fd30f2c9066016eb9f88c3eb64892c4fa5a4a8606d7
|
7
|
+
data.tar.gz: 4730471489cd16958963fabacdf9bb25c4509539491c20ec9706ffecb0a678f8b5e8cf34e9aacfafc04ceb2b17ab670039e4558cc3b2639bcca35e2a4f11bbbe
|
data/.travis.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
language: ruby
|
2
|
+
dist: xenial
|
2
3
|
git:
|
3
4
|
depth: 1
|
4
5
|
quiet: true
|
@@ -10,9 +11,9 @@ before_install:
|
|
10
11
|
bundler_args: --verbose
|
11
12
|
before_script:
|
12
13
|
- bundle list
|
13
|
-
- sudo apt-get install -y wkhtmltopdf
|
14
|
+
- sudo apt-get install -y xvfb wkhtmltopdf
|
14
15
|
- "export DISPLAY=:99.0"
|
15
|
-
- "
|
16
|
+
- "sudo systemctl start xvfb"
|
16
17
|
env: WKHTMLTOPDF_BIN=/usr/bin/wkhtmltopdf
|
17
18
|
script:
|
18
19
|
- bundle exec rake
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# Wicked PDF [](http://badge.fury.io/rb/adzap-wicked_pdf) [](http://travis-ci.org/adzap/wicked_pdf)
|
2
2
|
|
3
|
-
_This is a fork of the [original](https://github.com/milesz/wicked_pdf)
|
3
|
+
_This is a fork of the [original](https://github.com/milesz/wicked_pdf) that modernises all dependencies and redesign the internals for a much lighter footprint on your app and offer greater extensibility._
|
4
4
|
|
5
5
|
## A PDF generation plugin for Ruby on Rails
|
6
6
|
|
7
|
-
Wicked PDF uses the shell utility [wkhtmltopdf](http://wkhtmltopdf.org) to serve a PDF file to a user from HTML.
|
7
|
+
Wicked PDF uses the shell utility [wkhtmltopdf](http://wkhtmltopdf.org) v0.12.x to serve a PDF file to a user from HTML. In other words, rather than dealing with a PDF generation DSL of some sort, you simply write an HTML view as you would normally, then let Wicked PDF take care of the hard stuff.
|
8
8
|
|
9
|
-
_Wicked PDF has been verified to work on Ruby versions 2.3 through 2.6; Rails 4.2 through 5.
|
9
|
+
_Wicked PDF has been verified to work on Ruby versions 2.3 through 2.6; Rails 4.2 through 5.2; Minimum supported version of wkhtmltopdf is 0.12.0._
|
10
10
|
|
11
11
|
### Installation
|
12
12
|
|
@@ -20,7 +20,7 @@ Then create the initializer with
|
|
20
20
|
|
21
21
|
rails generate wicked_pdf
|
22
22
|
|
23
|
-
Because `wicked_pdf` is a wrapper for
|
23
|
+
Because `wicked_pdf` is a wrapper for [wkhtmltopdf](http://wkhtmltopdf.org/), you'll need to install that, too.
|
24
24
|
|
25
25
|
The simplest way to install all of the binaries on most Linux or OSX systems is through the gem [wkhtmltopdf-binary](https://github.com/zakird/wkhtmltopdf_binary_gem). Builds for other systems are available [here](https://wkhtmltopdf.org/downloads.html)
|
26
26
|
To install that gem, add this:
|
@@ -31,7 +31,7 @@ gem 'wkhtmltopdf-binary'
|
|
31
31
|
|
32
32
|
To your Gemfile and run `bundle install`.
|
33
33
|
|
34
|
-
This gem currently installs version 0.12.x of `wkhtmltopdf`.
|
34
|
+
This gem currently installs version 0.12.x of `wkhtmltopdf`. Support for some of the options listed below may vary with release.
|
35
35
|
|
36
36
|
You can see what flags are supported for the current version in [wkhtmltopdf's auto-generated manual](https://wkhtmltopdf.org/usage/wkhtmltopdf.txt)
|
37
37
|
|
data/lib/wicked_pdf/binary.rb
CHANGED
@@ -1,29 +1,26 @@
|
|
1
1
|
module WickedPdf
|
2
2
|
class Binary
|
3
3
|
EXE_NAME = 'wkhtmltopdf'.freeze
|
4
|
-
|
4
|
+
MINIMUM_BINARY_VERSION = Gem::Version.new('0.12.0')
|
5
5
|
|
6
|
-
attr_reader :path, :
|
6
|
+
attr_reader :path, :version
|
7
7
|
|
8
|
-
def initialize(binary_path = nil
|
8
|
+
def initialize(binary_path = nil)
|
9
9
|
@path = binary_path || find_binary_path
|
10
|
-
@
|
10
|
+
@version = retrieve_binary_version
|
11
11
|
|
12
|
+
raise "Minimum version of wkhtmltopdf is #{MINIMUM_BINARY_VERSION}. Version found was #{@version}." if @version < MINIMUM_BINARY_VERSION
|
12
13
|
raise "Location of #{EXE_NAME} unknown" if @path.empty?
|
13
14
|
raise "Bad #{EXE_NAME}'s path: #{@path}" unless File.exist?(@path)
|
14
15
|
raise "#{EXE_NAME} is not executable" unless File.executable?(@path)
|
15
16
|
end
|
16
17
|
|
17
|
-
def version
|
18
|
-
@version ||= retrieve_binary_version
|
19
|
-
end
|
20
|
-
|
21
18
|
def parse_version_string(version_info)
|
22
19
|
match_data = /wkhtmltopdf\s*(\d*\.\d*\.\d*\w*)/.match(version_info)
|
23
20
|
if match_data && (match_data.length == 2)
|
24
21
|
Gem::Version.new(match_data[1])
|
25
22
|
else
|
26
|
-
|
23
|
+
MINIMUM_BINARY_VERSION
|
27
24
|
end
|
28
25
|
end
|
29
26
|
|
@@ -33,7 +30,7 @@ module WickedPdf
|
|
33
30
|
_stdin, stdout, _stderr = Open3.popen3(@path + ' -V')
|
34
31
|
parse_version_string(stdout.gets(nil))
|
35
32
|
rescue StandardError
|
36
|
-
|
33
|
+
MINIMUM_BINARY_VERSION
|
37
34
|
end
|
38
35
|
|
39
36
|
def find_binary_path
|
@@ -49,7 +46,7 @@ module WickedPdf
|
|
49
46
|
possible_locations = (ENV['PATH'].split(':') + %w[/usr/bin /usr/local/bin]).uniq
|
50
47
|
possible_locations += %w[~/bin] if ENV.key?('HOME')
|
51
48
|
|
52
|
-
exe_path
|
49
|
+
exe_path = possible_locations.map { |l| File.expand_path("#{l}/#{EXE_NAME}") }.find { |location| File.exist?(location) }
|
53
50
|
exe_path || ''
|
54
51
|
end
|
55
52
|
end
|
data/lib/wicked_pdf/command.rb
CHANGED
@@ -2,9 +2,9 @@ module WickedPdf
|
|
2
2
|
class Command
|
3
3
|
attr_reader :binary, :option_parser
|
4
4
|
|
5
|
-
def initialize(binary: Binary.new, option_parser:
|
5
|
+
def initialize(binary: Binary.new, option_parser: OptionParser.new)
|
6
6
|
@binary = binary
|
7
|
-
@option_parser = option_parser
|
7
|
+
@option_parser = option_parser
|
8
8
|
end
|
9
9
|
|
10
10
|
def execute(options, *args)
|
@@ -1,13 +1,5 @@
|
|
1
1
|
module WickedPdf
|
2
2
|
class OptionParser
|
3
|
-
BINARY_VERSION_WITHOUT_DASHES = Gem::Version.new('0.12.0')
|
4
|
-
|
5
|
-
attr_reader :binary_version
|
6
|
-
|
7
|
-
def initialize(binary_version = WickedPdf::Binary::DEFAULT_BINARY_VERSION)
|
8
|
-
@binary_version = binary_version
|
9
|
-
end
|
10
|
-
|
11
3
|
def parse(options)
|
12
4
|
[
|
13
5
|
parse_extra(options),
|
@@ -23,14 +15,6 @@ module WickedPdf
|
|
23
15
|
].flatten
|
24
16
|
end
|
25
17
|
|
26
|
-
def format_option(name)
|
27
|
-
if binary_version < BINARY_VERSION_WITHOUT_DASHES
|
28
|
-
"--#{name}"
|
29
|
-
else
|
30
|
-
name
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
18
|
private
|
35
19
|
|
36
20
|
def parse_extra(options)
|
@@ -78,19 +62,19 @@ module WickedPdf
|
|
78
62
|
return [] if arg.blank?
|
79
63
|
# Filesystem path or URL - hand off to wkhtmltopdf
|
80
64
|
if argument.is_a?(Pathname) || (arg[0, 4] == 'http')
|
81
|
-
[
|
65
|
+
['cover', arg]
|
82
66
|
else # HTML content
|
83
67
|
@hf_tempfiles ||= []
|
84
68
|
@hf_tempfiles << tf = WickedPdf::Tempfile.new('wicked_cover_pdf.html')
|
85
69
|
tf.write arg
|
86
70
|
tf.flush
|
87
|
-
[
|
71
|
+
['cover', tf.path]
|
88
72
|
end
|
89
73
|
end
|
90
74
|
|
91
75
|
def parse_toc(options)
|
92
76
|
return [] if options.nil?
|
93
|
-
r = [
|
77
|
+
r = ['toc']
|
94
78
|
unless options.blank?
|
95
79
|
r += make_options(options, [:font_name, :header_text], 'toc')
|
96
80
|
r += make_options(options, [:xsl_style_sheet])
|
data/lib/wicked_pdf/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,23 +1,32 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class WickedPdfBinaryTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
@saved_config = WickedPdf.config
|
6
|
+
WickedPdf.config = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
teardown do
|
10
|
+
WickedPdf.config = @saved_config
|
11
|
+
end
|
12
|
+
|
4
13
|
test 'should extract old wkhtmltopdf version' do
|
5
|
-
version_info_sample = "Name
|
6
|
-
assert_equal
|
14
|
+
version_info_sample = "Name:V\n wkhtmltopdf 0.9.9\n\nLicense:\n Copyright (C) 2008,2009 Wkhtmltopdf Authors.\n\n\n\n License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n This is free software: you are free to change and redistribute it. There is NO\n WARRANTY, to the extent permitted by law.\n\nAuthors:\n Written by Jakob Truelsen. Patches by Mrio Silva, Benoit Garret and Emmanuel\n Bouthenot.\n"
|
15
|
+
assert_equal Gem::Version.new('0.9.9'), binary.parse_version_string(version_info_sample)
|
7
16
|
end
|
8
17
|
|
9
18
|
test 'should extract new wkhtmltopdf version' do
|
10
|
-
version_info_sample = "Name:\n wkhtmltopdf 0.
|
11
|
-
assert_equal Gem::Version.new('0.
|
19
|
+
version_info_sample = "Name:\n wkhtmltopdf 0.12.0 rc2\n\nLicense:\n Copyright (C) 2010 wkhtmltopdf/wkhtmltoimage Authors.\n\n\n\n License LGPLv3+: GNU Lesser General Public License version 3 or later\n <http://gnu.org/licenses/lgpl.html>. This is free software: you are free to\n change and redistribute it. There is NO WARRANTY, to the extent permitted by\n law.\n\nAuthors:\n Written by Jan Habermann, Christian Sciberras and Jakob Truelsen. Patches by\n Mehdi Abbad, Lyes Amazouz, Pascal Bach, Emmanuel Bouthenot, Benoit Garret and\n Mario Silva."
|
20
|
+
assert_equal Gem::Version.new('0.12.0'), binary.parse_version_string(version_info_sample)
|
12
21
|
end
|
13
22
|
|
14
23
|
test 'should extract wkhtmltopdf version with nondigit symbols' do
|
15
|
-
version_info_sample = "Name:\n wkhtmltopdf 0.
|
16
|
-
assert_equal Gem::Version.new('0.
|
24
|
+
version_info_sample = "Name:\n wkhtmltopdf 0.12.4b\n\nLicense:\n Copyright (C) 2008,2009 Wkhtmltopdf Authors.\n\n\n\n License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n This is free software: you are free to change and redistribute it. There is NO\n WARRANTY, to the extent permitted by law.\n\nAuthors:\n Written by Jakob Truelsen. Patches by Mrio Silva, Benoit Garret and Emmanuel\n Bouthenot.\n"
|
25
|
+
assert_equal Gem::Version.new('0.12.4b'), binary.parse_version_string(version_info_sample)
|
17
26
|
end
|
18
27
|
|
19
|
-
test 'should fallback to
|
20
|
-
assert_equal WickedPdf::Binary::
|
28
|
+
test 'should fallback to minimum version on parse error' do
|
29
|
+
assert_equal WickedPdf::Binary::MINIMUM_BINARY_VERSION, binary.parse_version_string('')
|
21
30
|
end
|
22
31
|
|
23
32
|
test 'should raise exception when no path to wkhtmltopdf' do
|
@@ -46,6 +55,53 @@ class WickedPdfBinaryTest < ActiveSupport::TestCase
|
|
46
55
|
end
|
47
56
|
end
|
48
57
|
|
58
|
+
test 'should raise exception if binary version is less than minimum' do
|
59
|
+
version_info_sample = "Name:V\n wkhtmltopdf 0.9.9\n\nLicense:\n Copyright (C) 2008,2009 Wkhtmltopdf Authors.\n\n\n\n License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n This is free software: you are free to change and redistribute it. There is NO\n WARRANTY, to the extent permitted by law.\n\nAuthors:\n Written by Jakob Truelsen. Patches by Mrio Silva, Benoit Garret and Emmanuel\n Bouthenot.\n"
|
60
|
+
Open3.expects(:popen3).returns([nil, mock('stdout', :gets => version_info_sample), nil])
|
61
|
+
|
62
|
+
assert_raise RuntimeError do
|
63
|
+
WickedPdf::Binary.new
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
test 'should correctly locate wkhtmltopdf without bundler' do
|
68
|
+
bundler_module = Bundler
|
69
|
+
Object.send(:remove_const, :Bundler)
|
70
|
+
|
71
|
+
assert_nothing_raised do
|
72
|
+
WickedPdf::Binary.new
|
73
|
+
end
|
74
|
+
|
75
|
+
Object.const_set(:Bundler, bundler_module)
|
76
|
+
end
|
77
|
+
|
78
|
+
test 'should correctly locate wkhtmltopdf with bundler' do
|
79
|
+
assert_nothing_raised do
|
80
|
+
WickedPdf::Binary.new
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class LocationNonWritableTest < ActiveSupport::TestCase
|
85
|
+
setup do
|
86
|
+
@saved_config = WickedPdf.config
|
87
|
+
WickedPdf.config = {}
|
88
|
+
|
89
|
+
@old_home = ENV['HOME']
|
90
|
+
ENV['HOME'] = '/not/a/writable/directory'
|
91
|
+
end
|
92
|
+
|
93
|
+
teardown do
|
94
|
+
WickedPdf.config = @saved_config
|
95
|
+
ENV['HOME'] = @old_home
|
96
|
+
end
|
97
|
+
|
98
|
+
test 'should correctly locate wkhtmltopdf with bundler while HOME is set to a non-writable directory' do
|
99
|
+
assert_nothing_raised do
|
100
|
+
WickedPdf::Binary.new
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
49
105
|
def binary(path = nil)
|
50
106
|
WickedPdf::Binary.new(path)
|
51
107
|
end
|
@@ -21,7 +21,7 @@ class WickedPdfOptionParserTest < ActiveSupport::TestCase
|
|
21
21
|
end
|
22
22
|
|
23
23
|
test 'should parse toc options' do
|
24
|
-
toc_option =
|
24
|
+
toc_option = 'toc'
|
25
25
|
|
26
26
|
[:font_name, :header_text].each do |o|
|
27
27
|
assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} toc",
|
@@ -60,7 +60,7 @@ class WickedPdfOptionParserTest < ActiveSupport::TestCase
|
|
60
60
|
end
|
61
61
|
|
62
62
|
test 'should parse cover' do
|
63
|
-
cover_option =
|
63
|
+
cover_option = 'cover'
|
64
64
|
|
65
65
|
pathname = Rails.root.join('app', 'views', 'pdf', 'file.html')
|
66
66
|
assert_equal "#{cover_option} http://example.org", parse_options(:cover => 'http://example.org').strip, 'URL'
|
@@ -96,33 +96,13 @@ class WickedPdfOptionParserTest < ActiveSupport::TestCase
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
-
test 'should not use double dash options for version without dashes' do
|
100
|
-
op = option_parser(WickedPdf::OptionParser::BINARY_VERSION_WITHOUT_DASHES)
|
101
|
-
|
102
|
-
%w[toc cover].each do |name|
|
103
|
-
assert_equal op.format_option(name), name
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
test 'should use double dash options for version with dashes' do
|
108
|
-
op = option_parser(Gem::Version.new('0.11.0'))
|
109
|
-
|
110
|
-
%w[toc cover].each do |name|
|
111
|
-
assert_equal op.format_option(name), "--#{name}"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
99
|
test '-- options should not be given after object' do
|
116
100
|
options = { :header => { :center => 3 }, :cover => 'http://example.org', :disable_javascript => true }
|
117
|
-
cover_option =
|
101
|
+
cover_option = 'cover'
|
118
102
|
assert_equal parse_options(options), "--disable-javascript --header-center 3 #{cover_option} http://example.org"
|
119
103
|
end
|
120
104
|
|
121
|
-
def parse_options(options
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
def option_parser(version = WickedPdf::Binary::DEFAULT_BINARY_VERSION)
|
126
|
-
WickedPdf::OptionParser.new(version)
|
105
|
+
def parse_options(options)
|
106
|
+
WickedPdf::OptionParser.new.parse(options).join(' ')
|
127
107
|
end
|
128
108
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adzap-wicked_pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miles Z. Sterrett
|
@@ -196,7 +196,6 @@ files:
|
|
196
196
|
- test/unit/wicked_pdf_option_parser_test.rb
|
197
197
|
- test/unit/wicked_pdf_renderer_test.rb
|
198
198
|
- test/unit/wicked_pdf_test.rb
|
199
|
-
- test/unit/wkhtmltopdf_location_test.rb
|
200
199
|
- wicked_pdf.gemspec
|
201
200
|
homepage: https://github.com/adzap/wicked_pdf
|
202
201
|
licenses:
|
@@ -246,4 +245,3 @@ test_files:
|
|
246
245
|
- test/unit/wicked_pdf_option_parser_test.rb
|
247
246
|
- test/unit/wicked_pdf_renderer_test.rb
|
248
247
|
- test/unit/wicked_pdf_test.rb
|
249
|
-
- test/unit/wkhtmltopdf_location_test.rb
|
@@ -1,50 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class WkhtmltopdfLocationTest < ActiveSupport::TestCase
|
4
|
-
setup do
|
5
|
-
@saved_config = WickedPdf.config
|
6
|
-
WickedPdf.config = {}
|
7
|
-
end
|
8
|
-
|
9
|
-
teardown do
|
10
|
-
WickedPdf.config = @saved_config
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'should correctly locate wkhtmltopdf without bundler' do
|
14
|
-
bundler_module = Bundler
|
15
|
-
Object.send(:remove_const, :Bundler)
|
16
|
-
|
17
|
-
assert_nothing_raised do
|
18
|
-
WickedPdf.new
|
19
|
-
end
|
20
|
-
|
21
|
-
Object.const_set(:Bundler, bundler_module)
|
22
|
-
end
|
23
|
-
|
24
|
-
test 'should correctly locate wkhtmltopdf with bundler' do
|
25
|
-
assert_nothing_raised do
|
26
|
-
WickedPdf.new
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class LocationNonWritableTest < ActiveSupport::TestCase
|
31
|
-
setup do
|
32
|
-
@saved_config = WickedPdf.config
|
33
|
-
WickedPdf.config = {}
|
34
|
-
|
35
|
-
@old_home = ENV['HOME']
|
36
|
-
ENV['HOME'] = '/not/a/writable/directory'
|
37
|
-
end
|
38
|
-
|
39
|
-
teardown do
|
40
|
-
WickedPdf.config = @saved_config
|
41
|
-
ENV['HOME'] = @old_home
|
42
|
-
end
|
43
|
-
|
44
|
-
test 'should correctly locate wkhtmltopdf with bundler while HOME is set to a non-writable directory' do
|
45
|
-
assert_nothing_raised do
|
46
|
-
WickedPdf.new
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|