wicked_pdf 1.0.3 → 2.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) 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 +84 -37
  6. data/CHANGELOG.md +230 -0
  7. data/README.md +188 -30
  8. data/Rakefile +13 -9
  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 +3 -3
  19. data/lib/wicked_pdf/option_parser.rb +229 -0
  20. data/lib/wicked_pdf/pdf_helper.rb +101 -88
  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 +212 -88
  26. data/lib/wicked_pdf/wicked_pdf_helper.rb +29 -26
  27. data/lib/wicked_pdf.rb +37 -274
  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 +86 -25
  33. data/test/functional/wicked_pdf_helper_test.rb +15 -13
  34. data/test/test_helper.rb +22 -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 +14 -168
  38. data/test/unit/wkhtmltopdf_location_test.rb +48 -0
  39. data/wicked_pdf.gemspec +20 -14
  40. metadata +69 -38
  41. data/.travis.yml +0 -57
  42. data/CHANGLOG.md +0 -48
  43. data/gemfiles/2.3.gemfile +0 -10
  44. data/gemfiles/3.0.gemfile +0 -7
  45. data/gemfiles/3.1.gemfile +0 -8
  46. data/gemfiles/3.2.gemfile +0 -7
  47. data/gemfiles/4.0.gemfile +0 -6
  48. data/gemfiles/4.1.gemfile +0 -6
  49. data/gemfiles/4.2.gemfile +0 -6
  50. data/gemfiles/rails_edge.gemfile +0 -6
@@ -0,0 +1,229 @@
1
+ class WickedPdf
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::DEFAULT_BINARY_VERSION)
8
+ @binary_version = binary_version
9
+ end
10
+
11
+ def parse(options)
12
+ [
13
+ parse_extra(options),
14
+ parse_others(options),
15
+ parse_global(options),
16
+ parse_outline(options.delete(:outline)),
17
+ parse_header_footer(:header => options.delete(:header),
18
+ :footer => options.delete(:footer),
19
+ :layout => options[:layout]),
20
+ parse_cover(options.delete(:cover)),
21
+ parse_toc(options.delete(:toc)),
22
+ parse_basic_auth(options)
23
+ ].flatten
24
+ end
25
+
26
+ def valid_option(name)
27
+ if binary_version < BINARY_VERSION_WITHOUT_DASHES
28
+ "--#{name}"
29
+ else
30
+ name
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def parse_extra(options)
37
+ return [] if options[:extra].nil?
38
+ return options[:extra].split if options[:extra].respond_to?(:split)
39
+
40
+ options[:extra]
41
+ end
42
+
43
+ def parse_basic_auth(options)
44
+ if options[:basic_auth]
45
+ user, passwd = Base64.decode64(options[:basic_auth]).split(':')
46
+ ['--username', user, '--password', passwd]
47
+ else
48
+ []
49
+ end
50
+ end
51
+
52
+ def parse_header_footer(options)
53
+ r = []
54
+ unless options.blank?
55
+ %i[header footer].collect do |hf|
56
+ next if options[hf].blank?
57
+
58
+ opt_hf = options[hf]
59
+ r += make_options(opt_hf, %i[center font_name left right], hf.to_s)
60
+ r += make_options(opt_hf, %i[font_size spacing], hf.to_s, :numeric)
61
+ r += make_options(opt_hf, [:line], hf.to_s, :boolean)
62
+ if options[hf] && options[hf][:content]
63
+ @hf_tempfiles = [] unless defined?(@hf_tempfiles)
64
+ @hf_tempfiles.push(tf = WickedPdf::Tempfile.new("wicked_#{hf}_pdf.html"))
65
+ tf.write options[hf][:content]
66
+ tf.flush
67
+ options[hf][:html] = {}
68
+ options[hf][:html][:url] = "file:///#{tf.path}"
69
+ end
70
+ unless opt_hf[:html].blank?
71
+ r += make_option("#{hf}-html", opt_hf[:html][:url]) unless opt_hf[:html][:url].blank?
72
+ end
73
+ end
74
+ end
75
+ r
76
+ end
77
+
78
+ def parse_cover(argument)
79
+ arg = argument.to_s
80
+ return [] if arg.blank?
81
+
82
+ # Filesystem path or URL - hand off to wkhtmltopdf
83
+ if argument.is_a?(Pathname) || (arg[0, 4] == 'http')
84
+ [valid_option('cover'), arg]
85
+ else # HTML content
86
+ @hf_tempfiles ||= []
87
+ @hf_tempfiles << tf = WickedPdf::Tempfile.new('wicked_cover_pdf.html')
88
+ tf.write arg
89
+ tf.flush
90
+ [valid_option('cover'), tf.path]
91
+ end
92
+ end
93
+
94
+ def parse_toc(options)
95
+ return [] if options.nil?
96
+
97
+ r = [valid_option('toc')]
98
+ unless options.blank?
99
+ r += make_options(options, %i[font_name header_text], 'toc')
100
+ r += make_options(options, [:xsl_style_sheet])
101
+ r += make_options(options, %i[depth
102
+ header_fs
103
+ text_size_shrink
104
+ l1_font_size
105
+ l2_font_size
106
+ l3_font_size
107
+ l4_font_size
108
+ l5_font_size
109
+ l6_font_size
110
+ l7_font_size
111
+ level_indentation
112
+ l1_indentation
113
+ l2_indentation
114
+ l3_indentation
115
+ l4_indentation
116
+ l5_indentation
117
+ l6_indentation
118
+ l7_indentation], 'toc', :numeric)
119
+ r += make_options(options, %i[no_dots
120
+ disable_links
121
+ disable_back_links], 'toc', :boolean)
122
+ r += make_options(options, %i[disable_dotted_lines
123
+ disable_toc_links], nil, :boolean)
124
+ end
125
+ r
126
+ end
127
+
128
+ def parse_outline(options)
129
+ r = []
130
+ unless options.blank?
131
+ r = make_options(options, [:outline], '', :boolean)
132
+ r += make_options(options, [:outline_depth], '', :numeric)
133
+ end
134
+ r
135
+ end
136
+
137
+ def parse_margins(options)
138
+ make_options(options, %i[top bottom left right], 'margin', :numeric)
139
+ end
140
+
141
+ def parse_global(options)
142
+ r = []
143
+ unless options.blank?
144
+ r += make_options(options, %i[orientation
145
+ dpi
146
+ page_size
147
+ page_width
148
+ title
149
+ log_level])
150
+ r += make_options(options, %i[lowquality
151
+ grayscale
152
+ no_pdf_compression
153
+ quiet], '', :boolean)
154
+ r += make_options(options, %i[image_dpi
155
+ image_quality
156
+ page_height], '', :numeric)
157
+ r += parse_margins(options.delete(:margin))
158
+ end
159
+ r
160
+ end
161
+
162
+ def parse_others(options)
163
+ r = []
164
+ unless options.blank?
165
+ r += make_options(options, %i[proxy
166
+ username
167
+ password
168
+ encoding
169
+ user_style_sheet
170
+ viewport_size
171
+ window_status])
172
+ r += make_options(options, %i[cookie
173
+ post], '', :name_value)
174
+ r += make_options(options, %i[redirect_delay
175
+ zoom
176
+ page_offset
177
+ javascript_delay], '', :numeric)
178
+ r += make_options(options, %i[book
179
+ default_header
180
+ disable_javascript
181
+ enable_plugins
182
+ disable_internal_links
183
+ disable_external_links
184
+ keep_relative_links
185
+ print_media_type
186
+ disable_local_file_access
187
+ enable_local_file_access
188
+ disable_smart_shrinking
189
+ use_xserver
190
+ no_background
191
+ images
192
+ no_images
193
+ no_stop_slow_scripts], '', :boolean)
194
+ end
195
+ r
196
+ end
197
+
198
+ def make_options(options, names, prefix = '', type = :string)
199
+ return [] if options.nil?
200
+
201
+ names.collect do |o|
202
+ if options[o].blank?
203
+ []
204
+ else
205
+ make_option("#{prefix.blank? ? '' : prefix + '-'}#{o}",
206
+ options[o],
207
+ type)
208
+ end
209
+ end
210
+ end
211
+
212
+ def make_option(name, value, type = :string)
213
+ return value.collect { |v| make_option(name, v, type) } if value.is_a?(Array)
214
+
215
+ if type == :name_value
216
+ parts = value.to_s.split(' ')
217
+ ["--#{name.tr('_', '-')}", *parts]
218
+ elsif type == :boolean
219
+ if value
220
+ ["--#{name.tr('_', '-')}"]
221
+ else
222
+ []
223
+ end
224
+ else
225
+ ["--#{name.tr('_', '-')}", value.to_s]
226
+ end
227
+ end
228
+ end
229
+ end
@@ -1,115 +1,128 @@
1
- module PdfHelper
2
- require 'wicked_pdf'
3
- require 'tempfile'
4
-
5
- def self.included(base)
6
- # Protect from trying to augment modules that appear
7
- # as the result of adding other gems.
8
- return if base != ActionController::Base
9
-
10
- base.class_eval do
11
- alias_method_chain :render, :wicked_pdf
12
- alias_method_chain :render_to_string, :wicked_pdf
13
- after_filter :clean_temp_files
1
+ class WickedPdf
2
+ module PdfHelper
3
+ def self.prepended(base)
4
+ # Protect from trying to augment modules that appear
5
+ # as the result of adding other gems.
6
+ return if base != ActionController::Base
7
+
8
+ base.class_eval do
9
+ after_action :clean_temp_files
10
+ end
11
+ end
12
+
13
+ def render(*args)
14
+ options = args.first
15
+ if options.is_a?(Hash) && options.key?(:pdf)
16
+ render_with_wicked_pdf(options)
17
+ else
18
+ super
19
+ end
20
+ end
21
+
22
+ def render_to_string(*args)
23
+ options = args.first
24
+ if options.is_a?(Hash) && options.key?(:pdf)
25
+ render_to_string_with_wicked_pdf(options)
26
+ else
27
+ super
28
+ end
14
29
  end
15
- end
16
30
 
17
- def render_with_wicked_pdf(options = nil, *args, &block)
18
- if options.is_a?(Hash) && options.key?(:pdf)
19
- log_pdf_creation
31
+ def render_with_wicked_pdf(options)
32
+ raise ArgumentError, 'missing keyword: pdf' unless options.is_a?(Hash) && options.key?(:pdf)
33
+
20
34
  options[:basic_auth] = set_basic_auth(options)
21
35
  make_and_send_pdf(options.delete(:pdf), (WickedPdf.config || {}).merge(options))
22
- else
23
- render_without_wicked_pdf(options, *args, &block)
24
36
  end
25
- end
26
37
 
27
- def render_to_string_with_wicked_pdf(options = nil, *args, &block)
28
- if options.is_a?(Hash) && options.key?(:pdf)
29
- log_pdf_creation
38
+ def render_to_string_with_wicked_pdf(options)
39
+ raise ArgumentError, 'missing keyword: pdf' unless options.is_a?(Hash) && options.key?(:pdf)
40
+
30
41
  options[:basic_auth] = set_basic_auth(options)
31
42
  options.delete :pdf
32
43
  make_pdf((WickedPdf.config || {}).merge(options))
33
- else
34
- render_to_string_without_wicked_pdf(options, *args, &block)
35
44
  end
36
- end
37
45
 
38
- private
46
+ private
39
47
 
40
- def log_pdf_creation
41
- logger.info '*' * 15 + 'WICKED' + '*' * 15 unless logger.nil?
42
- end
48
+ def set_basic_auth(options = {})
49
+ options[:basic_auth] ||= WickedPdf.config.fetch(:basic_auth) { false }
50
+ return unless options[:basic_auth] && request.env['HTTP_AUTHORIZATION']
43
51
 
44
- def set_basic_auth(options = {})
45
- options[:basic_auth] ||= WickedPdf.config.fetch(:basic_auth) { false }
46
- return unless options[:basic_auth] && request.env['HTTP_AUTHORIZATION']
47
- request.env['HTTP_AUTHORIZATION'].split(' ').last
48
- end
52
+ request.env['HTTP_AUTHORIZATION'].split(' ').last
53
+ end
49
54
 
50
- def clean_temp_files
51
- return unless defined?(@hf_tempfiles)
52
- @hf_tempfiles.each(&:close!)
53
- end
55
+ def clean_temp_files
56
+ return unless defined?(@hf_tempfiles)
54
57
 
55
- def make_pdf(options = {})
56
- render_opts = {
57
- :template => options[:template],
58
- :layout => options[:layout],
59
- :formats => options[:formats],
60
- :handlers => options[:handlers]
61
- }
62
- render_opts.merge!(:locals => options[:locals]) if options[:locals]
63
- render_opts.merge!(:file => options[:file]) if options[:file]
64
- html_string = render_to_string(render_opts)
65
- options = prerender_header_and_footer(options)
66
- w = WickedPdf.new(options[:wkhtmltopdf])
67
- w.pdf_from_string(html_string, options)
68
- end
58
+ @hf_tempfiles.each(&:close)
59
+ end
69
60
 
70
- def make_and_send_pdf(pdf_name, options = {})
71
- options[:wkhtmltopdf] ||= nil
72
- options[:layout] ||= false
73
- options[:template] ||= File.join(controller_path, action_name)
74
- options[:disposition] ||= 'inline'
75
- if options[:show_as_html]
61
+ def make_pdf(options = {})
76
62
  render_opts = {
77
63
  :template => options[:template],
78
64
  :layout => options[:layout],
79
65
  :formats => options[:formats],
80
66
  :handlers => options[:handlers],
81
- :content_type => 'text/html'
67
+ :assigns => options[:assigns]
82
68
  }
83
- render_opts.merge!(:locals => options[:locals]) if options[:locals]
84
- render_opts.merge!(:file => options[:file]) if options[:file]
85
- render(render_opts)
86
- else
87
- pdf_content = make_pdf(options)
88
- File.open(options[:save_to_file], 'wb') { |file| file << pdf_content } if options[:save_to_file]
89
- send_data(pdf_content, :filename => pdf_name + '.pdf', :type => 'application/pdf', :disposition => options[:disposition]) unless options[:save_only]
69
+ render_opts[:inline] = options[:inline] if options[:inline]
70
+ render_opts[:locals] = options[:locals] if options[:locals]
71
+ render_opts[:file] = options[:file] if options[:file]
72
+ html_string = render_to_string(render_opts)
73
+ options = prerender_header_and_footer(options)
74
+ w = WickedPdf.new(options[:wkhtmltopdf])
75
+ w.pdf_from_string(html_string, options)
90
76
  end
91
- end
92
77
 
93
- # Given an options hash, prerenders content for the header and footer sections
94
- # to temp files and return a new options hash including the URLs to these files.
95
- def prerender_header_and_footer(options)
96
- [:header, :footer].each do |hf|
97
- next unless options[hf] && options[hf][:html] && options[hf][:html][:template]
98
- @hf_tempfiles = [] unless defined?(@hf_tempfiles)
99
- @hf_tempfiles.push(tf = WickedPdfTempfile.new("wicked_#{hf}_pdf.html"))
100
- options[hf][:html][:layout] ||= options[:layout]
101
- render_opts = {
102
- :template => options[hf][:html][:template],
103
- :layout => options[hf][:html][:layout],
104
- :formats => options[hf][:html][:formats],
105
- :handlers => options[hf][:html][:handlers]
106
- }
107
- render_opts.merge!(:locals => options[hf][:html][:locals]) if options[hf][:html][:locals]
108
- render_opts.merge!(:file => options[hf][:html][:file]) if options[:file]
109
- tf.write render_to_string(render_opts)
110
- tf.flush
111
- options[hf][:html][:url] = "file:///#{tf.path}"
78
+ def make_and_send_pdf(pdf_name, options = {})
79
+ options[:wkhtmltopdf] ||= nil
80
+ options[:layout] ||= false
81
+ options[:template] ||= File.join(controller_path, action_name)
82
+ options[:disposition] ||= 'inline'
83
+ if options[:show_as_html]
84
+ render_opts = {
85
+ :template => options[:template],
86
+ :layout => options[:layout],
87
+ :formats => options[:formats],
88
+ :handlers => options[:handlers],
89
+ :assigns => options[:assigns],
90
+ :content_type => 'text/html'
91
+ }
92
+ render_opts[:inline] = options[:inline] if options[:inline]
93
+ render_opts[:locals] = options[:locals] if options[:locals]
94
+ render_opts[:file] = options[:file] if options[:file]
95
+ render(render_opts)
96
+ else
97
+ pdf_content = make_pdf(options)
98
+ File.open(options[:save_to_file], 'wb') { |file| file << pdf_content } if options[:save_to_file]
99
+ send_data(pdf_content, :filename => pdf_name + '.pdf', :type => 'application/pdf', :disposition => options[:disposition]) unless options[:save_only]
100
+ end
101
+ end
102
+
103
+ # Given an options hash, prerenders content for the header and footer sections
104
+ # to temp files and return a new options hash including the URLs to these files.
105
+ def prerender_header_and_footer(options)
106
+ %i[header footer].each do |hf|
107
+ next unless options[hf] && options[hf][:html] && options[hf][:html][:template]
108
+
109
+ @hf_tempfiles = [] unless defined?(@hf_tempfiles)
110
+ @hf_tempfiles.push(tf = WickedPdf::Tempfile.new("wicked_#{hf}_pdf.html"))
111
+ options[hf][:html][:layout] ||= options[:layout]
112
+ render_opts = {
113
+ :template => options[hf][:html][:template],
114
+ :layout => options[hf][:html][:layout],
115
+ :formats => options[hf][:html][:formats],
116
+ :handlers => options[hf][:html][:handlers],
117
+ :assigns => options[hf][:html][:assigns]
118
+ }
119
+ render_opts[:locals] = options[hf][:html][:locals] if options[hf][:html][:locals]
120
+ render_opts[:file] = options[hf][:html][:file] if options[:file]
121
+ tf.write render_to_string(render_opts)
122
+ tf.flush
123
+ options[hf][:html][:url] = "file:///#{tf.path}"
124
+ end
125
+ options
112
126
  end
113
- options
114
127
  end
115
128
  end
@@ -0,0 +1,33 @@
1
+ class WickedPdf
2
+ module Progress
3
+ require 'pty' if RbConfig::CONFIG['target_os'] !~ /mswin|mingw/ # no support for windows
4
+ require 'English'
5
+
6
+ def track_progress?(options)
7
+ options[:progress] && !on_windows?
8
+ end
9
+
10
+ def invoke_with_progress(command, options)
11
+ output = []
12
+ begin
13
+ PTY.spawn(command.join(' ')) do |stdout, _stdin, pid|
14
+ begin
15
+ stdout.sync
16
+ stdout.each_line("\r") do |line|
17
+ output << line.chomp
18
+ options[:progress].call(line) if options[:progress]
19
+ end
20
+ rescue Errno::EIO # rubocop:disable Lint/HandleExceptions
21
+ # child process is terminated, this is expected behaviour
22
+ ensure
23
+ ::Process.wait pid
24
+ end
25
+ end
26
+ rescue PTY::ChildExited
27
+ puts 'The child process exited!'
28
+ end
29
+ err = output.join('\n')
30
+ raise "#{command} failed (exitstatus 0). Output was: #{err}" unless $CHILD_STATUS && $CHILD_STATUS.exitstatus.zero?
31
+ end
32
+ end
33
+ end
@@ -2,43 +2,16 @@ require 'wicked_pdf/pdf_helper'
2
2
  require 'wicked_pdf/wicked_pdf_helper'
3
3
  require 'wicked_pdf/wicked_pdf_helper/assets'
4
4
 
5
- if defined?(Rails)
6
-
7
- if Rails::VERSION::MAJOR == 3
8
-
5
+ class WickedPdf
6
+ if defined?(Rails.env)
9
7
  class WickedRailtie < Rails::Railtie
10
- initializer 'wicked_pdf.register' do |_app|
11
- ActionController::Base.send :include, PdfHelper
12
- if Rails::VERSION::MINOR > 0 && Rails.configuration.assets.enabled
13
- ActionView::Base.send :include, WickedPdfHelper::Assets
14
- else
15
- ActionView::Base.send :include, WickedPdfHelper
16
- end
8
+ initializer 'wicked_pdf.register', :after => 'remotipart.controller_helper' do |_app|
9
+ ActiveSupport.on_load(:action_controller) { ActionController::Base.send :prepend, PdfHelper }
10
+ ActiveSupport.on_load(:action_view) { include WickedPdfHelper::Assets }
17
11
  end
18
12
  end
19
13
 
20
- elsif Rails::VERSION::MAJOR == 2
21
-
22
- unless ActionController::Base.instance_methods.include? 'render_with_wicked_pdf'
23
- ActionController::Base.send :include, PdfHelper
24
- end
25
- unless ActionView::Base.instance_methods.include? 'wicked_pdf_stylesheet_link_tag'
26
- ActionView::Base.send :include, WickedPdfHelper
27
- end
28
-
29
- else
30
-
31
- class WickedRailtie < Rails::Railtie
32
- initializer 'wicked_pdf.register' do |_app|
33
- ActionController::Base.send :include, PdfHelper
34
- ActionView::Base.send :include, WickedPdfHelper::Assets
35
- end
36
- end
14
+ Mime::Type.register('application/pdf', :pdf) if Mime::Type.lookup_by_extension(:pdf).nil?
37
15
 
38
16
  end
39
-
40
- if Mime::Type.lookup_by_extension(:pdf).nil?
41
- Mime::Type.register('application/pdf', :pdf)
42
- end
43
-
44
17
  end
@@ -1,11 +1,42 @@
1
1
  require 'tempfile'
2
2
 
3
- class WickedPdfTempfile < Tempfile
4
- # ensures the Tempfile's filename always keeps its extension
5
- def initialize(filename, temp_dir = nil)
6
- temp_dir ||= Dir.tmpdir
7
- extension = File.extname(filename)
8
- basename = File.basename(filename, extension)
9
- super([basename, extension], temp_dir)
3
+ class WickedPdf
4
+ class Tempfile < ::Tempfile
5
+ def initialize(filename, temp_dir = nil)
6
+ temp_dir ||= Dir.tmpdir
7
+ extension = File.extname(filename)
8
+ basename = File.basename(filename, extension)
9
+ super([basename, extension], temp_dir)
10
+ end
11
+
12
+ def write_in_chunks(input_string)
13
+ binmode
14
+ string_io = StringIO.new(input_string)
15
+ write(string_io.read(chunk_size)) until string_io.eof?
16
+ close
17
+ self
18
+ rescue Errno::EINVAL => e
19
+ raise e, file_too_large_message
20
+ end
21
+
22
+ def read_in_chunks
23
+ rewind
24
+ binmode
25
+ output_string = ''
26
+ output_string << read(chunk_size) until eof?
27
+ output_string
28
+ rescue Errno::EINVAL => e
29
+ raise e, file_too_large_message
30
+ end
31
+
32
+ private
33
+
34
+ def chunk_size
35
+ 1024 * 1024
36
+ end
37
+
38
+ def file_too_large_message
39
+ 'The HTML file is too large! Try reducing the size or using the return_file option instead.'
40
+ end
10
41
  end
11
42
  end
@@ -1,3 +1,3 @@
1
1
  class WickedPdf
2
- VERSION = '1.0.3'
2
+ VERSION = '2.6.3'.freeze
3
3
  end