wicked_pdf 1.0.6 → 2.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. data/.github/issue_template.md +15 -0
  3. data/.github/workflows/ci.yml +56 -0
  4. data/.rubocop.yml +60 -0
  5. data/.rubocop_todo.yml +83 -29
  6. data/CHANGELOG.md +182 -35
  7. data/README.md +188 -30
  8. data/Rakefile +13 -10
  9. data/gemfiles/5.0.gemfile +8 -0
  10. data/gemfiles/5.1.gemfile +8 -0
  11. data/gemfiles/5.2.gemfile +9 -0
  12. data/gemfiles/6.0.gemfile +10 -0
  13. data/gemfiles/6.1.gemfile +12 -0
  14. data/gemfiles/7.0.gemfile +12 -0
  15. data/generators/wicked_pdf/templates/wicked_pdf.rb +9 -0
  16. data/lib/generators/wicked_pdf_generator.rb +5 -9
  17. data/lib/wicked_pdf/binary.rb +65 -0
  18. data/lib/wicked_pdf/middleware.rb +1 -1
  19. data/lib/wicked_pdf/option_parser.rb +229 -0
  20. data/lib/wicked_pdf/pdf_helper.rb +99 -85
  21. data/lib/wicked_pdf/progress.rb +33 -0
  22. data/lib/wicked_pdf/railtie.rb +6 -33
  23. data/lib/wicked_pdf/tempfile.rb +38 -7
  24. data/lib/wicked_pdf/version.rb +1 -1
  25. data/lib/wicked_pdf/wicked_pdf_helper/assets.rb +213 -91
  26. data/lib/wicked_pdf/wicked_pdf_helper.rb +29 -26
  27. data/lib/wicked_pdf.rb +37 -272
  28. data/test/fixtures/database.yml +4 -0
  29. data/test/fixtures/manifest.js +3 -0
  30. data/test/fixtures/wicked.js +1 -0
  31. data/test/functional/pdf_helper_test.rb +74 -5
  32. data/test/functional/wicked_pdf_helper_assets_test.rb +27 -9
  33. data/test/functional/wicked_pdf_helper_test.rb +15 -13
  34. data/test/test_helper.rb +16 -7
  35. data/test/unit/wicked_pdf_binary_test.rb +26 -0
  36. data/test/unit/wicked_pdf_option_parser_test.rb +128 -0
  37. data/test/unit/wicked_pdf_test.rb +11 -149
  38. data/test/unit/wkhtmltopdf_location_test.rb +48 -0
  39. data/wicked_pdf.gemspec +21 -14
  40. metadata +68 -37
  41. data/.travis.yml +0 -66
  42. data/gemfiles/2.3.gemfile +0 -10
  43. data/gemfiles/3.0.gemfile +0 -7
  44. data/gemfiles/3.1.gemfile +0 -8
  45. data/gemfiles/3.2.gemfile +0 -7
  46. data/gemfiles/4.0.gemfile +0 -6
  47. data/gemfiles/4.1.gemfile +0 -6
  48. data/gemfiles/4.2.gemfile +0 -6
  49. data/gemfiles/rails_edge.gemfile +0 -6
@@ -0,0 +1,128 @@
1
+ require 'test_helper'
2
+
3
+ class WickedPdfOptionParserTest < ActiveSupport::TestCase
4
+ test 'should parse header and footer options' do
5
+ %i[header footer].each do |hf|
6
+ %i[center font_name left right].each do |o|
7
+ assert_equal "--#{hf}-#{o.to_s.tr('_', '-')} header_footer",
8
+ parse_options(hf => { o => 'header_footer' }).strip
9
+ end
10
+
11
+ %i[font_size spacing].each do |o|
12
+ assert_equal "--#{hf}-#{o.to_s.tr('_', '-')} 12",
13
+ parse_options(hf => { o => '12' }).strip
14
+ end
15
+
16
+ assert_equal "--#{hf}-line",
17
+ parse_options(hf => { :line => true }).strip
18
+ assert_equal "--#{hf}-html http://www.abc.com",
19
+ parse_options(hf => { :html => { :url => 'http://www.abc.com' } }).strip
20
+ end
21
+ end
22
+
23
+ test 'should parse toc options' do
24
+ toc_option = option_parser.valid_option('toc')
25
+
26
+ %i[font_name header_text].each do |o|
27
+ assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} toc",
28
+ parse_options(:toc => { o => 'toc' }).strip
29
+ end
30
+
31
+ %i[
32
+ depth header_fs l1_font_size l2_font_size l3_font_size l4_font_size
33
+ l5_font_size l6_font_size l7_font_size l1_indentation l2_indentation
34
+ l3_indentation l4_indentation l5_indentation l6_indentation l7_indentation
35
+ ].each do |o|
36
+ assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} 5",
37
+ parse_options(:toc => { o => 5 }).strip
38
+ end
39
+
40
+ %i[no_dots disable_links disable_back_links].each do |o|
41
+ assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')}",
42
+ parse_options(:toc => { o => true }).strip
43
+ end
44
+ end
45
+
46
+ test 'should parse outline options' do
47
+ assert_equal '--outline', parse_options(:outline => { :outline => true }).strip
48
+ assert_equal '--outline-depth 5', parse_options(:outline => { :outline_depth => 5 }).strip
49
+ end
50
+
51
+ test 'should parse no_images option' do
52
+ assert_equal '--no-images', parse_options(:no_images => true).strip
53
+ assert_equal '--images', parse_options(:images => true).strip
54
+ end
55
+
56
+ test 'should parse margins options' do
57
+ %i[top bottom left right].each do |o|
58
+ assert_equal "--margin-#{o} 12", parse_options(:margin => { o => '12' }).strip
59
+ end
60
+ end
61
+
62
+ test 'should parse cover' do
63
+ cover_option = option_parser.valid_option('cover')
64
+
65
+ pathname = Rails.root.join('app', 'views', 'pdf', 'file.html')
66
+ assert_equal "#{cover_option} http://example.org", parse_options(:cover => 'http://example.org').strip, 'URL'
67
+ assert_equal "#{cover_option} #{pathname}", parse_options(:cover => pathname).strip, 'Pathname'
68
+ assert_match(/#{cover_option} .+wicked_cover_pdf.+\.html/, parse_options(:cover => '<html><body>HELLO</body></html>').strip, 'HTML')
69
+ end
70
+
71
+ test 'should parse other options' do
72
+ %i[
73
+ orientation page_size proxy username password dpi
74
+ encoding user_style_sheet
75
+ ].each do |o|
76
+ assert_equal "--#{o.to_s.tr('_', '-')} opts", parse_options(o => 'opts').strip
77
+ end
78
+
79
+ %i[cookie post].each do |o|
80
+ assert_equal "--#{o.to_s.tr('_', '-')} name value", parse_options(o => 'name value').strip
81
+
82
+ nv_formatter = proc { |number| "--#{o.to_s.tr('_', '-')} par#{number} val#{number}" }
83
+ assert_equal "#{nv_formatter.call(1)} #{nv_formatter.call(2)}", parse_options(o => ['par1 val1', 'par2 val2']).strip
84
+ end
85
+
86
+ %i[redirect_delay zoom page_offset].each do |o|
87
+ assert_equal "--#{o.to_s.tr('_', '-')} 5", parse_options(o => 5).strip
88
+ end
89
+
90
+ %i[
91
+ book default_header disable_javascript grayscale lowquality
92
+ enable_plugins disable_internal_links disable_external_links
93
+ print_media_type disable_smart_shrinking use_xserver no_background
94
+ ].each do |o|
95
+ assert_equal "--#{o.to_s.tr('_', '-')}", parse_options(o => true).strip
96
+ end
97
+ end
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.valid_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.valid_option(name), "--#{name}"
112
+ end
113
+ end
114
+
115
+ test '-- options should not be given after object' do
116
+ options = { :header => { :center => 3 }, :cover => 'http://example.org', :disable_javascript => true }
117
+ cover_option = option_parser.valid_option('cover')
118
+ assert_equal parse_options(options), "--disable-javascript --header-center 3 #{cover_option} http://example.org"
119
+ end
120
+
121
+ def parse_options(options, version = WickedPdf::DEFAULT_BINARY_VERSION)
122
+ option_parser(version).parse(options).join(' ')
123
+ end
124
+
125
+ def option_parser(version = WickedPdf::DEFAULT_BINARY_VERSION)
126
+ WickedPdf::OptionParser.new(version)
127
+ end
128
+ end
@@ -1,22 +1,7 @@
1
1
  require 'test_helper'
2
-
3
2
  WickedPdf.config = { :exe_path => ENV['WKHTMLTOPDF_BIN'] || '/usr/local/bin/wkhtmltopdf' }
4
3
  HTML_DOCUMENT = '<html><body>Hello World</body></html>'.freeze
5
4
 
6
- # Provide a public accessor to the normally-private parse_options function.
7
- # Also, smash the returned array of options into a single string for
8
- # convenience in testing below.
9
- class WickedPdf
10
- attr_accessor :binary_version
11
- def get_parsed_options(opts)
12
- parse_options(opts).join(' ')
13
- end
14
-
15
- def get_valid_option(name)
16
- valid_option(name)
17
- end
18
- end
19
-
20
5
  class WickedPdfTest < ActiveSupport::TestCase
21
6
  def setup
22
7
  @wp = WickedPdf.new
@@ -61,7 +46,7 @@ class WickedPdfTest < ActiveSupport::TestCase
61
46
  begin
62
47
  tmp = Tempfile.new('wkhtmltopdf')
63
48
  fp = tmp.path
64
- File.chmod 0000, fp
49
+ File.chmod 0o000, fp
65
50
  assert_raise RuntimeError do
66
51
  WickedPdf.new fp
67
52
  end
@@ -74,7 +59,7 @@ class WickedPdfTest < ActiveSupport::TestCase
74
59
  begin
75
60
  tmp = Tempfile.new('wkhtmltopdf')
76
61
  fp = tmp.path
77
- File.chmod 0777, fp
62
+ File.chmod 0o777, fp
78
63
  wp = WickedPdf.new fp
79
64
  assert_raise RuntimeError do
80
65
  wp.pdf_from_string HTML_DOCUMENT
@@ -84,138 +69,15 @@ class WickedPdfTest < ActiveSupport::TestCase
84
69
  end
85
70
  end
86
71
 
87
- test 'should parse header and footer options' do
88
- [:header, :footer].each do |hf|
89
- [:center, :font_name, :left, :right].each do |o|
90
- assert_equal "--#{hf}-#{o.to_s.tr('_', '-')} header_footer",
91
- @wp.get_parsed_options(hf => { o => 'header_footer' }).strip
92
- end
93
-
94
- [:font_size, :spacing].each do |o|
95
- assert_equal "--#{hf}-#{o.to_s.tr('_', '-')} 12",
96
- @wp.get_parsed_options(hf => { o => '12' }).strip
97
- end
98
-
99
- assert_equal "--#{hf}-line",
100
- @wp.get_parsed_options(hf => { :line => true }).strip
101
- assert_equal "--#{hf}-html http://www.abc.com",
102
- @wp.get_parsed_options(hf => { :html => { :url => 'http://www.abc.com' } }).strip
103
- end
104
- end
105
-
106
- test 'should parse toc options' do
107
- toc_option = @wp.get_valid_option('toc')
108
-
109
- [:font_name, :header_text].each do |o|
110
- assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} toc",
111
- @wp.get_parsed_options(:toc => { o => 'toc' }).strip
112
- end
113
-
114
- [
115
- :depth, :header_fs, :l1_font_size, :l2_font_size, :l3_font_size, :l4_font_size,
116
- :l5_font_size, :l6_font_size, :l7_font_size, :l1_indentation, :l2_indentation,
117
- :l3_indentation, :l4_indentation, :l5_indentation, :l6_indentation, :l7_indentation
118
- ].each do |o|
119
- assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} 5",
120
- @wp.get_parsed_options(:toc => { o => 5 }).strip
121
- end
122
-
123
- [:no_dots, :disable_links, :disable_back_links].each do |o|
124
- assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')}",
125
- @wp.get_parsed_options(:toc => { o => true }).strip
126
- end
127
- end
128
-
129
- test 'should parse outline options' do
130
- assert_equal '--outline', @wp.get_parsed_options(:outline => { :outline => true }).strip
131
- assert_equal '--outline-depth 5', @wp.get_parsed_options(:outline => { :outline_depth => 5 }).strip
132
- end
133
-
134
- test 'should parse margins options' do
135
- [:top, :bottom, :left, :right].each do |o|
136
- assert_equal "--margin-#{o} 12", @wp.get_parsed_options(:margin => { o => '12' }).strip
137
- end
138
- end
139
-
140
- test 'should parse cover' do
141
- cover_option = @wp.get_valid_option('cover')
142
-
143
- pathname = Rails.root.join('app', 'views', 'pdf', 'file.html')
144
- assert_equal "#{cover_option} http://example.org", @wp.get_parsed_options(:cover => 'http://example.org').strip, 'URL'
145
- assert_equal "#{cover_option} #{pathname}", @wp.get_parsed_options(:cover => pathname).strip, 'Pathname'
146
- assert_match %r(#{cover_option} .+wicked_cover_pdf.+\.html), @wp.get_parsed_options(:cover => '<html><body>HELLO</body></html>').strip, 'HTML'
147
- end
148
-
149
- test 'should parse other options' do
150
- [
151
- :orientation, :page_size, :proxy, :username, :password, :dpi,
152
- :encoding, :user_style_sheet
153
- ].each do |o|
154
- assert_equal "--#{o.to_s.tr('_', '-')} opts", @wp.get_parsed_options(o => 'opts').strip
155
- end
156
-
157
- [:cookie, :post].each do |o|
158
- assert_equal "--#{o.to_s.tr('_', '-')} name value", @wp.get_parsed_options(o => 'name value').strip
159
-
160
- nv_formatter = proc { |number| "--#{o.to_s.tr('_', '-')} par#{number} val#{number}" }
161
- assert_equal "#{nv_formatter.call(1)} #{nv_formatter.call(2)}", @wp.get_parsed_options(o => ['par1 val1', 'par2 val2']).strip
162
- end
163
-
164
- [:redirect_delay, :zoom, :page_offset].each do |o|
165
- assert_equal "--#{o.to_s.tr('_', '-')} 5", @wp.get_parsed_options(o => 5).strip
166
- end
167
-
168
- [
169
- :book, :default_header, :disable_javascript, :grayscale, :lowquality,
170
- :enable_plugins, :disable_internal_links, :disable_external_links,
171
- :print_media_type, :disable_smart_shrinking, :use_xserver, :no_background
172
- ].each do |o|
173
- assert_equal "--#{o.to_s.tr('_', '-')}", @wp.get_parsed_options(o => true).strip
174
- end
175
- end
176
-
177
- test 'should extract old wkhtmltopdf version' do
178
- version_info_sample = "Name:\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"
179
- assert_equal WickedPdf::DEFAULT_BINARY_VERSION, @wp.send(:parse_version, version_info_sample)
180
- end
181
-
182
- test 'should extract new wkhtmltopdf version' do
183
- version_info_sample = "Name:\n wkhtmltopdf 0.11.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."
184
- assert_equal Gem::Version.new('0.11.0'), @wp.send(:parse_version, version_info_sample)
185
- end
186
-
187
- test 'should extract wkhtmltopdf version with nondigit symbols' do
188
- version_info_sample = "Name:\n wkhtmltopdf 0.10.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"
189
- assert_equal Gem::Version.new('0.10.4b'), @wp.send(:parse_version, version_info_sample)
190
- end
191
-
192
- test 'should fallback to default version on parse error' do
193
- assert_equal WickedPdf::DEFAULT_BINARY_VERSION, @wp.send(:parse_version, '')
194
- end
195
-
196
- test 'should set version on initialize' do
197
- assert_not_equal @wp.send(:binary_version), ''
198
- end
199
-
200
- test 'should not use double dash options for version without dashes' do
201
- @wp.binary_version = WickedPdf::BINARY_VERSION_WITHOUT_DASHES
202
-
203
- %w(toc cover).each do |name|
204
- assert_equal @wp.get_valid_option(name), name
205
- end
206
- end
207
-
208
- test 'should use double dash options for version with dashes' do
209
- @wp.binary_version = Gem::Version.new('0.11.0')
210
-
211
- %w(toc cover).each do |name|
212
- assert_equal @wp.get_valid_option(name), "--#{name}"
72
+ test 'should output progress when creating pdfs on compatible hosts' do
73
+ wp = WickedPdf.new
74
+ output = []
75
+ options = { :progress => proc { |o| output << o } }
76
+ wp.pdf_from_string HTML_DOCUMENT, options
77
+ if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/
78
+ assert_empty output
79
+ else
80
+ assert(output.collect { |l| !l.match(/Loading/).nil? }.include?(true)) # should output something like "Loading pages (1/5)"
213
81
  end
214
82
  end
215
-
216
- test '-- options should not be given after object' do
217
- options = { :header => { :center => 3 }, :cover => 'http://example.org', :disable_javascript => true }
218
- cover_option = @wp.get_valid_option('cover')
219
- assert_equal @wp.get_parsed_options(options), "--disable-javascript --header-center 3 #{cover_option} http://example.org"
220
- end
221
83
  end
@@ -0,0 +1,48 @@
1
+ class WkhtmltopdfLocationTest < ActiveSupport::TestCase
2
+ setup do
3
+ @saved_config = WickedPdf.config
4
+ WickedPdf.config = {}
5
+ end
6
+
7
+ teardown do
8
+ WickedPdf.config = @saved_config
9
+ end
10
+
11
+ test 'should correctly locate wkhtmltopdf without bundler' do
12
+ bundler_module = Bundler
13
+ Object.send(:remove_const, :Bundler)
14
+
15
+ assert_nothing_raised do
16
+ WickedPdf.new
17
+ end
18
+
19
+ Object.const_set(:Bundler, bundler_module)
20
+ end
21
+
22
+ test 'should correctly locate wkhtmltopdf with bundler' do
23
+ assert_nothing_raised do
24
+ WickedPdf.new
25
+ end
26
+ end
27
+
28
+ class LocationNonWritableTest < ActiveSupport::TestCase
29
+ setup do
30
+ @saved_config = WickedPdf.config
31
+ WickedPdf.config = {}
32
+
33
+ @old_home = ENV['HOME']
34
+ ENV['HOME'] = '/not/a/writable/directory'
35
+ end
36
+
37
+ teardown do
38
+ WickedPdf.config = @saved_config
39
+ ENV['HOME'] = @old_home
40
+ end
41
+
42
+ test 'should correctly locate wkhtmltopdf with bundler while HOME is set to a non-writable directory' do
43
+ assert_nothing_raised do
44
+ WickedPdf.new
45
+ end
46
+ end
47
+ end
48
+ end
data/wicked_pdf.gemspec CHANGED
@@ -1,33 +1,40 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'wicked_pdf/version'
4
+ require 'English'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'wicked_pdf'
8
8
  spec.version = WickedPdf::VERSION
9
- spec.authors = ['Miles Z. Sterrett']
10
- spec.email = 'miles.sterrett@gmail.com'
9
+ spec.authors = ['Miles Z. Sterrett', 'David Jones']
10
+ spec.email = ['miles.sterrett@gmail.com', 'unixmonkey1@gmail.com']
11
11
  spec.summary = 'PDF generator (from HTML) gem for Ruby on Rails'
12
12
  spec.homepage = 'https://github.com/mileszs/wicked_pdf'
13
13
  spec.license = 'MIT'
14
14
  spec.date = Time.now.strftime('%Y-%m-%d')
15
- spec.description = <<desc
16
- Wicked PDF uses the shell utility wkhtmltopdf to serve a PDF file to a user from HTML.
17
- In other words, rather than dealing with a PDF generation DSL of some sort,
18
- you simply write an HTML view as you would normally, and let Wicked take care of the hard stuff.
19
- desc
15
+ spec.description = <<DESC.gsub(/^\s+/, '')
16
+ Wicked PDF uses the shell utility wkhtmltopdf to serve a PDF file to a user from HTML.
17
+ In other words, rather than dealing with a PDF generation DSL of some sort,
18
+ you simply write an HTML view as you would normally, and let Wicked take care of the hard stuff.
19
+ DESC
20
+ spec.metadata = {
21
+ 'changelog_uri' => 'https://github.com/mileszs/wicked_pdf/blob/master/CHANGELOG.md'
22
+ }
20
23
 
21
- spec.files = `git ls-files`.split($/)
22
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.2')
25
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
23
26
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
24
27
  spec.require_paths = ['lib']
25
28
 
29
+ spec.requirements << 'wkhtmltopdf'
30
+
31
+ spec.add_dependency 'activesupport'
32
+
33
+ spec.add_development_dependency 'bundler'
34
+ spec.add_development_dependency 'mocha', '= 1.3'
26
35
  spec.add_development_dependency 'rails'
27
- spec.add_development_dependency 'bundler', '~> 1.3'
28
36
  spec.add_development_dependency 'rake'
29
- spec.add_development_dependency 'rubocop' if RUBY_VERSION > '1.9.2'
30
- spec.add_development_dependency 'sqlite3'
31
- spec.add_development_dependency 'mocha'
37
+ spec.add_development_dependency 'rubocop', '~> 1.24'
38
+ spec.add_development_dependency 'sqlite3', '~> 1.3'
32
39
  spec.add_development_dependency 'test-unit'
33
40
  end
metadata CHANGED
@@ -1,23 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wicked_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 2.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Z. Sterrett
8
- autorequire:
8
+ - David Jones
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-04-04 00:00:00.000000000 Z
12
+ date: 2022-05-19 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: rails
15
+ name: activesupport
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: '0'
20
- type: :development
21
+ type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
@@ -28,18 +29,32 @@ dependencies:
28
29
  name: bundler
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - "~>"
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: mocha
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
32
47
  - !ruby/object:Gem::Version
33
48
  version: '1.3'
34
49
  type: :development
35
50
  prerelease: false
36
51
  version_requirements: !ruby/object:Gem::Requirement
37
52
  requirements:
38
- - - "~>"
53
+ - - '='
39
54
  - !ruby/object:Gem::Version
40
55
  version: '1.3'
41
56
  - !ruby/object:Gem::Dependency
42
- name: rake
57
+ name: rails
43
58
  requirement: !ruby/object:Gem::Requirement
44
59
  requirements:
45
60
  - - ">="
@@ -53,7 +68,7 @@ dependencies:
53
68
  - !ruby/object:Gem::Version
54
69
  version: '0'
55
70
  - !ruby/object:Gem::Dependency
56
- name: rubocop
71
+ name: rake
57
72
  requirement: !ruby/object:Gem::Requirement
58
73
  requirements:
59
74
  - - ">="
@@ -67,33 +82,33 @@ dependencies:
67
82
  - !ruby/object:Gem::Version
68
83
  version: '0'
69
84
  - !ruby/object:Gem::Dependency
70
- name: sqlite3
85
+ name: rubocop
71
86
  requirement: !ruby/object:Gem::Requirement
72
87
  requirements:
73
- - - ">="
88
+ - - "~>"
74
89
  - !ruby/object:Gem::Version
75
- version: '0'
90
+ version: '1.24'
76
91
  type: :development
77
92
  prerelease: false
78
93
  version_requirements: !ruby/object:Gem::Requirement
79
94
  requirements:
80
- - - ">="
95
+ - - "~>"
81
96
  - !ruby/object:Gem::Version
82
- version: '0'
97
+ version: '1.24'
83
98
  - !ruby/object:Gem::Dependency
84
- name: mocha
99
+ name: sqlite3
85
100
  requirement: !ruby/object:Gem::Requirement
86
101
  requirements:
87
- - - ">="
102
+ - - "~>"
88
103
  - !ruby/object:Gem::Version
89
- version: '0'
104
+ version: '1.3'
90
105
  type: :development
91
106
  prerelease: false
92
107
  version_requirements: !ruby/object:Gem::Requirement
93
108
  requirements:
94
- - - ">="
109
+ - - "~>"
95
110
  - !ruby/object:Gem::Version
96
- version: '0'
111
+ version: '1.3'
97
112
  - !ruby/object:Gem::Dependency
98
113
  name: test-unit
99
114
  requirement: !ruby/object:Gem::Requirement
@@ -112,53 +127,64 @@ description: |
112
127
  Wicked PDF uses the shell utility wkhtmltopdf to serve a PDF file to a user from HTML.
113
128
  In other words, rather than dealing with a PDF generation DSL of some sort,
114
129
  you simply write an HTML view as you would normally, and let Wicked take care of the hard stuff.
115
- email: miles.sterrett@gmail.com
130
+ email:
131
+ - miles.sterrett@gmail.com
132
+ - unixmonkey1@gmail.com
116
133
  executables: []
117
134
  extensions: []
118
135
  extra_rdoc_files: []
119
136
  files:
137
+ - ".github/issue_template.md"
138
+ - ".github/workflows/ci.yml"
120
139
  - ".gitignore"
121
140
  - ".rubocop.yml"
122
141
  - ".rubocop_todo.yml"
123
- - ".travis.yml"
124
142
  - CHANGELOG.md
125
143
  - Gemfile
126
144
  - LICENSE.txt
127
145
  - README.md
128
146
  - Rakefile
129
- - gemfiles/2.3.gemfile
130
- - gemfiles/3.0.gemfile
131
- - gemfiles/3.1.gemfile
132
- - gemfiles/3.2.gemfile
133
- - gemfiles/4.0.gemfile
134
- - gemfiles/4.1.gemfile
135
- - gemfiles/4.2.gemfile
136
- - gemfiles/rails_edge.gemfile
147
+ - gemfiles/5.0.gemfile
148
+ - gemfiles/5.1.gemfile
149
+ - gemfiles/5.2.gemfile
150
+ - gemfiles/6.0.gemfile
151
+ - gemfiles/6.1.gemfile
152
+ - gemfiles/7.0.gemfile
137
153
  - generators/wicked_pdf/templates/wicked_pdf.rb
138
154
  - generators/wicked_pdf/wicked_pdf_generator.rb
139
155
  - init.rb
140
156
  - lib/generators/wicked_pdf_generator.rb
141
157
  - lib/wicked_pdf.rb
158
+ - lib/wicked_pdf/binary.rb
142
159
  - lib/wicked_pdf/middleware.rb
160
+ - lib/wicked_pdf/option_parser.rb
143
161
  - lib/wicked_pdf/pdf_helper.rb
162
+ - lib/wicked_pdf/progress.rb
144
163
  - lib/wicked_pdf/railtie.rb
145
164
  - lib/wicked_pdf/tempfile.rb
146
165
  - lib/wicked_pdf/version.rb
147
166
  - lib/wicked_pdf/wicked_pdf_helper.rb
148
167
  - lib/wicked_pdf/wicked_pdf_helper/assets.rb
168
+ - test/fixtures/database.yml
149
169
  - test/fixtures/document_with_long_line.html
170
+ - test/fixtures/manifest.js
150
171
  - test/fixtures/wicked.css
172
+ - test/fixtures/wicked.js
151
173
  - test/functional/pdf_helper_test.rb
152
174
  - test/functional/wicked_pdf_helper_assets_test.rb
153
175
  - test/functional/wicked_pdf_helper_test.rb
154
176
  - test/test_helper.rb
177
+ - test/unit/wicked_pdf_binary_test.rb
178
+ - test/unit/wicked_pdf_option_parser_test.rb
155
179
  - test/unit/wicked_pdf_test.rb
180
+ - test/unit/wkhtmltopdf_location_test.rb
156
181
  - wicked_pdf.gemspec
157
182
  homepage: https://github.com/mileszs/wicked_pdf
158
183
  licenses:
159
184
  - MIT
160
- metadata: {}
161
- post_install_message:
185
+ metadata:
186
+ changelog_uri: https://github.com/mileszs/wicked_pdf/blob/master/CHANGELOG.md
187
+ post_install_message:
162
188
  rdoc_options: []
163
189
  require_paths:
164
190
  - lib
@@ -166,24 +192,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
192
  requirements:
167
193
  - - ">="
168
194
  - !ruby/object:Gem::Version
169
- version: '0'
195
+ version: '2.2'
170
196
  required_rubygems_version: !ruby/object:Gem::Requirement
171
197
  requirements:
172
198
  - - ">="
173
199
  - !ruby/object:Gem::Version
174
200
  version: '0'
175
- requirements: []
176
- rubyforge_project:
177
- rubygems_version: 2.4.5
178
- signing_key:
201
+ requirements:
202
+ - wkhtmltopdf
203
+ rubygems_version: 3.2.3
204
+ signing_key:
179
205
  specification_version: 4
180
206
  summary: PDF generator (from HTML) gem for Ruby on Rails
181
207
  test_files:
208
+ - test/fixtures/database.yml
182
209
  - test/fixtures/document_with_long_line.html
210
+ - test/fixtures/manifest.js
183
211
  - test/fixtures/wicked.css
212
+ - test/fixtures/wicked.js
184
213
  - test/functional/pdf_helper_test.rb
185
214
  - test/functional/wicked_pdf_helper_assets_test.rb
186
215
  - test/functional/wicked_pdf_helper_test.rb
187
216
  - test/test_helper.rb
217
+ - test/unit/wicked_pdf_binary_test.rb
218
+ - test/unit/wicked_pdf_option_parser_test.rb
188
219
  - test/unit/wicked_pdf_test.rb
189
- has_rdoc:
220
+ - test/unit/wkhtmltopdf_location_test.rb