wicked_pdf 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6bb2f6a218b4808fb3f117148379101db09cffb8
4
- data.tar.gz: 3d87582716a2d79e4f7b635f4297e50744d47e0a
3
+ metadata.gz: 47fe2d6d38cc265b92a54aaba23756bd4ecfcf30
4
+ data.tar.gz: 914991dd1656d0fb326ebf2e38a8f013ce8357b4
5
5
  SHA512:
6
- metadata.gz: 0579b69ec2897374a6bac52f44306e6c15da9252f09f3f0d6bbbc89a3161f5c4cf47218593a70d9884b9a043f0ca8c5d8c8fdebf38edb9457510cf6706cf2d2a
7
- data.tar.gz: be80b3dd951f1a12065237cc5db3ab019b5e048c337e8c3666cc21d7a3685bcee3b5415d566a19ca73631adf7c5757c14115769460b96b13b9497ce18ec85e46
6
+ metadata.gz: 166e1621757930e9ac10846569c28cc6e215eb4e81f2a8280789f9b2ffa8ba4d4a7fc53140f898dcb591c0890561e25e5f996af5c1f70a0ff81e4625a565ab7b
7
+ data.tar.gz: 58c3dfe3876a9941da002de9aca24283a217ebbc1da024f1caef83c92a9c1be845186382a2e7955d539c3e1bde73486219dd66eab26bf16d61be3c053365f119
@@ -5,13 +5,6 @@
5
5
  # Note that changes in the inspected code, or installation of new
6
6
  # versions of RuboCop, may require this file to be generated again.
7
7
 
8
- # Offense count: 2
9
- Lint/AmbiguousRegexpLiteral:
10
- Enabled: false
11
-
12
- # Offense count: 2
13
- Lint/HandleExceptions:
14
- Enabled: false
15
8
 
16
9
  # Offense count: 9
17
10
  Metrics/AbcSize:
@@ -44,7 +37,7 @@ Metrics/MethodLength:
44
37
  Metrics/PerceivedComplexity:
45
38
  Max: 12
46
39
 
47
- # Offense count: 5
40
+ # Offense count: 2
48
41
  Style/AccessorMethodName:
49
42
  Enabled: false
50
43
 
@@ -11,6 +11,7 @@ rvm:
11
11
  - 2.0
12
12
  - 2.1
13
13
  - 2.2
14
+ - 2.3.0
14
15
  - ruby-head
15
16
  gemfile:
16
17
  - gemfiles/3.0.gemfile
@@ -33,8 +34,6 @@ matrix:
33
34
  - gem update --system 1.8.25
34
35
  - gem --version
35
36
  gemfile: gemfiles/2.3.gemfile
36
- - rvm: 1.9.3
37
- gemfile: gemfiles/4.0.gemfile
38
37
  - rvm: 1.9.3
39
38
  gemfile: gemfiles/rails_edge.gemfile
40
39
  - rvm: 2.0.0
@@ -47,11 +46,17 @@ matrix:
47
46
  gemfile: gemfiles/4.2.gemfile
48
47
  - rvm: 2.2.0
49
48
  gemfile: gemfiles/rails_edge.gemfile
49
+ - rvm: 2.3.0
50
+ gemfile: gemfiles/rails_edge.gemfile
50
51
  allow_failures:
52
+ - rvm: 1.9.2
53
+ gemfile: gemfiles/3.0.gemfile
51
54
  - rvm: 1.9.2
52
55
  gemfile: gemfiles/3.1.gemfile
53
56
  - rvm: 1.9.2
54
57
  gemfile: gemfiles/3.2.gemfile
58
+ - rvm: 1.9.3
59
+ gemfile: gemfiles/4.0.gemfile
55
60
  - rvm: 1.9.3
56
61
  gemfile: gemfiles/rails_edge.gemfile
57
62
  - rvm: 2.0.0
@@ -2,10 +2,38 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
- ## [master] - Unpublished
5
+ ## [1.0.5] - 2016-03-28
6
+ ### Changed
7
+ - Numerous RuboCop style violation fixes, spelling errors, and test-setup issues from [indyrb.org](http://indyrb.org/) hack night. Thank you all for your contributions!
8
+
9
+ ### Fixed
10
+ - Shellescape options. A stray quote in `header` or `footer` would cause PDF to fail to generate, and this should close down many potential attack vectors if you allow user-supplied values to be passed into `wicked_pdf` render options.
11
+
12
+ ## [1.0.4] - 2016-01-26
13
+ ### Changed
14
+ - Check that logger responds to info before calling it. It was possible to have a `logger` method defined as a controller helper that would override `Rails.logger`.
15
+
16
+ ### Fixed
17
+ - [Issue with Sprockets 3.0](https://github.com/mileszs/wicked_pdf/issues/476) where an asset referenced in a stylesheet not existing would raise an exception `read_asset` on nil.
18
+
19
+ ## [1.0.3] - 2015-12-02
20
+ ### Changed
21
+ - Revert default DPI. Some installs of `wkhtmltopdf` would experience major slowdowns or crashes with it set to 72. It is suggested that a DPI of 75 may be better, but I'm holding off on making it a default without more information.
22
+
23
+ ## [1.0.2] - 2015-11-30
6
24
  ### Changed
7
25
  - The default dpi is now 72. Previously the default would be whatever your `wkhtmltopdf` version specified as the default. This change [speeds up generation of documents that contain `border-radius` dramatically](https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1510)
8
26
 
27
+ ## [1.0.1] - 2015-11-19
28
+ ### Changed
29
+ - Made minor RuboCop style tweaks.
30
+
31
+ ### Added
32
+ - Added default [RuboCop](https://github.com/bbatsov/rubocop) config and run after test suite.
33
+
34
+ ### Fixed
35
+ - Issue with `nil.basename` from asset helpers.
36
+
9
37
  ## [1.0.0] - 2015-11-03
10
38
  ### Changed
11
39
  - Accepted that `WickedPDF` cannot guarantee backwards compatibility with older versions of `wkthmltopdf`, and decided to publish a new version with the MAJOR number incremented, signaling that this may have breaking changes for some people, but providing a path forward for progress. This release number also signals that this is a mature (and relatively stable) project, and should be deemed ready for production (since it has been used in production since ~2009, and downloaded over a *million* times on [RubyGems.org](https://rubygems.org/gems/wicked_pdf)).
@@ -37,10 +65,14 @@ This project adheres to [Semantic Versioning](http://semver.org/).
37
65
  - Asset helpers no longer add a file extension if it already is specified with one
38
66
 
39
67
  # Compare Releases
40
- - [1.0.0...Unreleased](https://github.com/mileszs/wicked_pdf/compare/f0b49fa...HEAD)
41
- - [1.0.0...1.0.1](https://github.com/mileszs/wicked_pdf/compare/24303d0...f0b49fa)
42
- - [0.11.0...1.0.0](https://github.com/mileszs/wicked_pdf/compare/968ae69...24303d0)
43
- - [0.10.2...0.11.0](https://github.com/mileszs/wicked_pdf/compare/076f043...968ae69)
44
- - [0.10.1...0.10.2](https://github.com/mileszs/wicked_pdf/compare/a920bc9...076f043)
45
- - [0.10.0...0.10.1](https://github.com/mileszs/wicked_pdf/compare/df67c30...a920bc9)
46
- - [0.9.10...0.10.0](https://github.com/mileszs/wicked_pdf/compare/9daecee...df67c30)
68
+ - [1.0.5...HEAD](https://github.com/mileszs/wicked_pdf/compare/1.0.5...HEAD)
69
+ - [1.0.4...1.0.5](https://github.com/mileszs/wicked_pdf/compare/1.0.4...1.0.5)
70
+ - [1.0.3...1.0.4](https://github.com/mileszs/wicked_pdf/compare/1.0.3...1.0.4)
71
+ - [1.0.2...1.0.3](https://github.com/mileszs/wicked_pdf/compare/1.0.2...1.0.3)
72
+ - [1.0.1...1.0.2](https://github.com/mileszs/wicked_pdf/compare/1.0.1...1.0.2)
73
+ - [1.0.0...1.0.1](https://github.com/mileszs/wicked_pdf/compare/1.0.0...1.0.1)
74
+ - [0.11.0...1.0.0](https://github.com/mileszs/wicked_pdf/compare/0.11.0...1.0.0)
75
+ - [0.10.2...0.11.0](https://github.com/mileszs/wicked_pdf/compare/0.10.2...0.11.0)
76
+ - [0.10.1...0.10.2](https://github.com/mileszs/wicked_pdf/compare/0.10.1...0.10.2)
77
+ - [0.10.0...0.10.1](https://github.com/mileszs/wicked_pdf/compare/0.10.0...0.10.1)
78
+ - [0.9.10...0.10.0](https://github.com/mileszs/wicked_pdf/compare/0.9.10...0.10.0)
data/Rakefile CHANGED
@@ -36,6 +36,7 @@ task :dummy_generate do
36
36
  puts 'Creating dummy application to run tests'
37
37
  prefix = (Rails::VERSION::MAJOR == 2) ? '' : 'new '
38
38
  system("rails #{prefix}test/dummy")
39
+ system("touch #{prefix}test/dummy/db/schema.rb")
39
40
  FileUtils.rm_r Dir.glob('test/dummy/test/*')
40
41
  end
41
42
 
@@ -4,6 +4,7 @@
4
4
  require 'logger'
5
5
  require 'digest/md5'
6
6
  require 'rbconfig'
7
+ require 'shellwords'
7
8
 
8
9
  if (RbConfig::CONFIG['target_os'] =~ /mswin|mingw/) && (RUBY_VERSION < '1.9')
9
10
  require 'win32/open3'
@@ -31,17 +32,18 @@ require 'wicked_pdf/middleware'
31
32
  class WickedPdf
32
33
  DEFAULT_BINARY_VERSION = Gem::Version.new('0.9.9')
33
34
  BINARY_VERSION_WITHOUT_DASHES = Gem::Version.new('0.12.0')
34
- EXE_NAME = 'wkhtmltopdf'
35
+ EXE_NAME = 'wkhtmltopdf'.freeze
35
36
  @@config = {}
36
37
  cattr_accessor :config
38
+ attr_accessor :binary_version
37
39
 
38
40
  def initialize(wkhtmltopdf_binary_path = nil)
39
41
  @exe_path = wkhtmltopdf_binary_path || find_wkhtmltopdf_binary_path
40
- fail "Location of #{EXE_NAME} unknown" if @exe_path.empty?
41
- fail "Bad #{EXE_NAME}'s path: #{@exe_path}" unless File.exist?(@exe_path)
42
- fail "#{EXE_NAME} is not executable" unless File.executable?(@exe_path)
42
+ raise "Location of #{EXE_NAME} unknown" if @exe_path.empty?
43
+ raise "Bad #{EXE_NAME}'s path: #{@exe_path}" unless File.exist?(@exe_path)
44
+ raise "#{EXE_NAME} is not executable" unless File.executable?(@exe_path)
43
45
 
44
- retreive_binary_version
46
+ retrieve_binary_version
45
47
  end
46
48
 
47
49
  def pdf_from_html_file(filepath, options = {})
@@ -86,7 +88,7 @@ class WickedPdf
86
88
  generated_pdf_file.rewind
87
89
  generated_pdf_file.binmode
88
90
  pdf = generated_pdf_file.read
89
- fail "PDF could not be generated!\n Command Error: #{err}" if pdf && pdf.rstrip.length == 0
91
+ fail "PDF could not be generated!\n Command Error: #{err}" if pdf && pdf.rstrip.empty?
90
92
  pdf
91
93
  rescue => e
92
94
  raise "Failed to execute:\n#{command}\nError: #{e}"
@@ -101,10 +103,6 @@ class WickedPdf
101
103
  RAILS_ENV == 'development' if defined?(RAILS_ENV)
102
104
  end
103
105
 
104
- def get_binary_version
105
- @binary_version
106
- end
107
-
108
106
  def on_windows?
109
107
  RbConfig::CONFIG['target_os'] =~ /mswin|mingw/
110
108
  end
@@ -113,10 +111,11 @@ class WickedPdf
113
111
  p '*' * 15 + cmd + '*' * 15
114
112
  end
115
113
 
116
- def retreive_binary_version
114
+ def retrieve_binary_version
117
115
  _stdin, stdout, _stderr = Open3.popen3(@exe_path + ' -V')
118
116
  @binary_version = parse_version(stdout.gets(nil))
119
117
  rescue StandardError
118
+ DEFAULT_BINARY_VERSION
120
119
  end
121
120
 
122
121
  def parse_version(version_info)
@@ -163,17 +162,17 @@ class WickedPdf
163
162
  return value.collect { |v| make_option(name, v, type) }
164
163
  end
165
164
  if type == :name_value
166
- parts = value.to_s.split(' ')
165
+ parts = value.to_s.split(' ').map { |part| part.shellescape }
167
166
  ["--#{name.tr('_', '-')}", *parts]
168
167
  elsif type == :boolean
169
168
  ["--#{name.tr('_', '-')}"]
170
169
  else
171
- ["--#{name.tr('_', '-')}", value.to_s]
170
+ ["--#{name.tr('_', '-')}", value.to_s.shellescape]
172
171
  end
173
172
  end
174
173
 
175
174
  def valid_option(name)
176
- if get_binary_version < BINARY_VERSION_WITHOUT_DASHES
175
+ if binary_version < BINARY_VERSION_WITHOUT_DASHES
177
176
  "--#{name}"
178
177
  else
179
178
  name
@@ -198,9 +197,9 @@ class WickedPdf
198
197
  [:header, :footer].collect do |hf|
199
198
  next if options[hf].blank?
200
199
  opt_hf = options[hf]
201
- r += make_options(opt_hf, [:center, :font_name, :left, :right], "#{hf}")
202
- r += make_options(opt_hf, [:font_size, :spacing], "#{hf}", :numeric)
203
- r += make_options(opt_hf, [:line], "#{hf}", :boolean)
200
+ r += make_options(opt_hf, [:center, :font_name, :left, :right], hf.to_s)
201
+ r += make_options(opt_hf, [:font_size, :spacing], hf.to_s, :numeric)
202
+ r += make_options(opt_hf, [:line], hf.to_s, :boolean)
204
203
  if options[hf] && options[hf][:content]
205
204
  @hf_tempfiles = [] unless defined?(@hf_tempfiles)
206
205
  @hf_tempfiles.push(tf = WickedPdfTempfile.new("wicked_#{hf}_pdf.html"))
@@ -67,8 +67,8 @@ class WickedPdf
67
67
  rules.map do |pattern|
68
68
  if pattern.is_a?(Regexp)
69
69
  return false if @request.fullpath =~ pattern
70
- else
71
- return false if @request.path[0, pattern.length] == pattern
70
+ elsif @request.path[0, pattern.length] == pattern
71
+ return false
72
72
  end
73
73
  end
74
74
 
@@ -1,5 +1,4 @@
1
1
  module PdfHelper
2
- require 'wicked_pdf'
3
2
  require 'tempfile'
4
3
 
5
4
  def self.included(base)
@@ -59,8 +58,8 @@ module PdfHelper
59
58
  :formats => options[:formats],
60
59
  :handlers => options[:handlers]
61
60
  }
62
- render_opts.merge!(:locals => options[:locals]) if options[:locals]
63
- render_opts.merge!(:file => options[:file]) if options[:file]
61
+ render_opts[:locals] = options[:locals] if options[:locals]
62
+ render_opts[:file] = options[:file] if options[:file]
64
63
  html_string = render_to_string(render_opts)
65
64
  options = prerender_header_and_footer(options)
66
65
  w = WickedPdf.new(options[:wkhtmltopdf])
@@ -80,8 +79,8 @@ module PdfHelper
80
79
  :handlers => options[:handlers],
81
80
  :content_type => 'text/html'
82
81
  }
83
- render_opts.merge!(:locals => options[:locals]) if options[:locals]
84
- render_opts.merge!(:file => options[:file]) if options[:file]
82
+ render_opts[:locals] = options[:locals] if options[:locals]
83
+ render_opts[:file] = options[:file] if options[:file]
85
84
  render(render_opts)
86
85
  else
87
86
  pdf_content = make_pdf(options)
@@ -104,8 +103,8 @@ module PdfHelper
104
103
  :formats => options[hf][:html][:formats],
105
104
  :handlers => options[hf][:html][:handlers]
106
105
  }
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]
106
+ render_opts[:locals] = options[hf][:html][:locals] if options[hf][:html][:locals]
107
+ render_opts[:file] = options[hf][:html][:file] if options[:file]
109
108
  tf.write render_to_string(render_opts)
110
109
  tf.flush
111
110
  options[hf][:html][:url] = "file:///#{tf.path}"
@@ -1,3 +1,3 @@
1
1
  class WickedPdf
2
- VERSION = '1.0.4'
2
+ VERSION = '1.0.5'.freeze
3
3
  end
@@ -58,7 +58,8 @@ module WickedPdfHelper
58
58
  def asset_pathname(source)
59
59
  if precompiled_or_absolute_asset?(source)
60
60
  asset = asset_path(source)
61
- if (pathname = set_protocol(asset)) =~ URI_REGEXP
61
+ pathname = prepend_protocol(asset)
62
+ if pathname =~ URI_REGEXP
62
63
  # asset_path returns an absolute URL using asset_host if asset_host is set
63
64
  pathname
64
65
  else
@@ -72,7 +73,7 @@ module WickedPdfHelper
72
73
 
73
74
  # will prepend a http or default_protocol to a protocol relative URL
74
75
  # or when no protcol is set.
75
- def set_protocol(source)
76
+ def prepend_protocol(source)
76
77
  protocol = WickedPdf.config[:default_protocol] || 'http'
77
78
  if source[0, 2] == '//'
78
79
  source = [protocol, ':', source].join
@@ -90,7 +91,8 @@ module WickedPdfHelper
90
91
 
91
92
  def read_asset(source)
92
93
  if precompiled_or_absolute_asset?(source)
93
- if (pathname = asset_pathname(source)) =~ URI_REGEXP
94
+ pathname = asset_pathname(source)
95
+ if pathname =~ URI_REGEXP
94
96
  read_from_uri(pathname)
95
97
  elsif File.file?(pathname)
96
98
  IO.read(pathname)
@@ -102,7 +104,7 @@ module WickedPdfHelper
102
104
 
103
105
  def read_from_uri(uri)
104
106
  encoding = ':UTF-8' if RUBY_VERSION > '1.8'
105
- asset = open(uri, "r#{encoding}") { |f| f.read }
107
+ asset = open(uri, "r#{encoding}", &:read)
106
108
  asset = gzip(asset) if WickedPdf.config[:expect_gzipped_remote_assets]
107
109
  asset
108
110
  end
@@ -112,6 +114,7 @@ module WickedPdfHelper
112
114
  gzipper = Zlib::GzipReader.new(stringified_asset)
113
115
  gzipper.read
114
116
  rescue Zlib::GzipFile::Error
117
+ nil
115
118
  end
116
119
  end
117
120
  end
@@ -21,7 +21,7 @@ class PdfHelperTest < ActionController::TestCase
21
21
  test 'should prerender header and footer :template options' do
22
22
  options = @ac.send(:prerender_header_and_footer,
23
23
  :header => { :html => { :template => 'hf.html.erb' } })
24
- assert_match /^file:\/\/\/.*wicked_header_pdf.*\.html/, options[:header][:html][:url]
24
+ assert_match %r(^file:\/\/\/.*wicked_header_pdf.*\.html), options[:header][:html][:url]
25
25
  end
26
26
  end
27
27
  end
@@ -6,7 +6,7 @@ class WickedPdfHelperAssetsTest < ActionView::TestCase
6
6
 
7
7
  if Rails::VERSION::MAJOR > 3 || (Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR > 0)
8
8
  test 'wicked_pdf_asset_base64 returns a base64 encoded asset' do
9
- assert_match /data:text\/css;base64,.+/, wicked_pdf_asset_base64('wicked.css')
9
+ assert_match %r(data:text\/css;base64,.+), wicked_pdf_asset_base64('wicked.css')
10
10
  end
11
11
 
12
12
  test 'wicked_pdf_asset_path should return a url when assets are served by an asset server' do
@@ -95,11 +95,11 @@ class WickedPdfHelperAssetsTest < ActionView::TestCase
95
95
  assert_no_match WickedPdfHelper::Assets::ASSET_URL_REGEX, '.url { \'http://assets.domain.com/dummy.png\' }'
96
96
  end
97
97
 
98
- test 'set_protocol should properly set the protocol when the asset is precompiled' do
99
- assert_equal 'http://assets.domain.com/dummy.png', set_protocol('//assets.domain.com/dummy.png')
100
- assert_equal '/assets.domain.com/dummy.png', set_protocol('/assets.domain.com/dummy.png')
101
- assert_equal 'http://assets.domain.com/dummy.png', set_protocol('http://assets.domain.com/dummy.png')
102
- assert_equal 'https://assets.domain.com/dummy.png', set_protocol('https://assets.domain.com/dummy.png')
98
+ test 'prepend_protocol should properly set the protocol when the asset is precompiled' do
99
+ assert_equal 'http://assets.domain.com/dummy.png', prepend_protocol('//assets.domain.com/dummy.png')
100
+ assert_equal '/assets.domain.com/dummy.png', prepend_protocol('/assets.domain.com/dummy.png')
101
+ assert_equal 'http://assets.domain.com/dummy.png', prepend_protocol('http://assets.domain.com/dummy.png')
102
+ assert_equal 'https://assets.domain.com/dummy.png', prepend_protocol('https://assets.domain.com/dummy.png')
103
103
  end
104
104
  end
105
105
  end
@@ -21,4 +21,4 @@ if (assets_dir = Rails.root.join('app/assets')) && File.directory?(assets_dir)
21
21
  destination = assets_dir.join('stylesheets/wicked.css')
22
22
  source = File.read('test/fixtures/wicked.css')
23
23
  File.open(destination, 'w') { |f| f.write(source) }
24
- end
24
+ end
@@ -1,12 +1,13 @@
1
1
  require 'test_helper'
2
2
 
3
3
  WickedPdf.config = { :exe_path => ENV['WKHTMLTOPDF_BIN'] || '/usr/local/bin/wkhtmltopdf' }
4
- HTML_DOCUMENT = '<html><body>Hello World</body></html>'
4
+ HTML_DOCUMENT = '<html><body>Hello World</body></html>'.freeze
5
5
 
6
6
  # Provide a public accessor to the normally-private parse_options function.
7
7
  # Also, smash the returned array of options into a single string for
8
8
  # convenience in testing below.
9
9
  class WickedPdf
10
+ attr_accessor :binary_version
10
11
  def get_parsed_options(opts)
11
12
  parse_options(opts).join(' ')
12
13
  end
@@ -14,10 +15,6 @@ class WickedPdf
14
15
  def get_valid_option(name)
15
16
  valid_option(name)
16
17
  end
17
-
18
- def set_binary_version_to(version)
19
- @binary_version = version
20
- end
21
18
  end
22
19
 
23
20
  class WickedPdfTest < ActiveSupport::TestCase
@@ -26,26 +23,23 @@ class WickedPdfTest < ActiveSupport::TestCase
26
23
  end
27
24
 
28
25
  test 'should generate PDF from html document' do
29
- wp = WickedPdf.new
30
- pdf = wp.pdf_from_string HTML_DOCUMENT
26
+ pdf = @wp.pdf_from_string HTML_DOCUMENT
31
27
  assert pdf.start_with?('%PDF-1.4')
32
28
  assert pdf.rstrip.end_with?('%%EOF')
33
29
  assert pdf.length > 100
34
30
  end
35
31
 
36
32
  test 'should generate PDF from html document with long lines' do
37
- wp = WickedPdf.new
38
33
  document_with_long_line_file = File.new('test/fixtures/document_with_long_line.html', 'r')
39
- pdf = wp.pdf_from_string(document_with_long_line_file.read)
34
+ pdf = @wp.pdf_from_string(document_with_long_line_file.read)
40
35
  assert pdf.start_with?('%PDF-1.4')
41
36
  assert pdf.rstrip.end_with?('%%EOF')
42
37
  assert pdf.length > 100
43
38
  end
44
39
 
45
40
  test 'should generate PDF from html existing HTML file without converting it to string' do
46
- wp = WickedPdf.new
47
41
  filepath = File.join(Dir.pwd, 'test/fixtures/document_with_long_line.html')
48
- pdf = wp.pdf_from_html_file(filepath)
42
+ pdf = @wp.pdf_from_html_file(filepath)
49
43
  assert pdf.start_with?('%PDF-1.4')
50
44
  assert pdf.rstrip.end_with?('%%EOF')
51
45
  assert pdf.length > 100
@@ -91,33 +85,30 @@ class WickedPdfTest < ActiveSupport::TestCase
91
85
  end
92
86
 
93
87
  test 'should parse header and footer options' do
94
- wp = WickedPdf.new
95
-
96
88
  [:header, :footer].each do |hf|
97
89
  [:center, :font_name, :left, :right].each do |o|
98
90
  assert_equal "--#{hf}-#{o.to_s.tr('_', '-')} header_footer",
99
- wp.get_parsed_options(hf => { o => 'header_footer' }).strip
91
+ @wp.get_parsed_options(hf => { o => 'header_footer' }).strip
100
92
  end
101
93
 
102
94
  [:font_size, :spacing].each do |o|
103
95
  assert_equal "--#{hf}-#{o.to_s.tr('_', '-')} 12",
104
- wp.get_parsed_options(hf => { o => '12' }).strip
96
+ @wp.get_parsed_options(hf => { o => '12' }).strip
105
97
  end
106
98
 
107
99
  assert_equal "--#{hf}-line",
108
- wp.get_parsed_options(hf => { :line => true }).strip
100
+ @wp.get_parsed_options(hf => { :line => true }).strip
109
101
  assert_equal "--#{hf}-html http://www.abc.com",
110
- wp.get_parsed_options(hf => { :html => { :url => 'http://www.abc.com' } }).strip
102
+ @wp.get_parsed_options(hf => { :html => { :url => 'http://www.abc.com' } }).strip
111
103
  end
112
104
  end
113
105
 
114
106
  test 'should parse toc options' do
115
- wp = WickedPdf.new
116
- toc_option = wp.get_valid_option('toc')
107
+ toc_option = @wp.get_valid_option('toc')
117
108
 
118
109
  [:font_name, :header_text].each do |o|
119
110
  assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} toc",
120
- wp.get_parsed_options(:toc => { o => 'toc' }).strip
111
+ @wp.get_parsed_options(:toc => { o => 'toc' }).strip
121
112
  end
122
113
 
123
114
  [
@@ -126,59 +117,52 @@ class WickedPdfTest < ActiveSupport::TestCase
126
117
  :l3_indentation, :l4_indentation, :l5_indentation, :l6_indentation, :l7_indentation
127
118
  ].each do |o|
128
119
  assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')} 5",
129
- wp.get_parsed_options(:toc => { o => 5 }).strip
120
+ @wp.get_parsed_options(:toc => { o => 5 }).strip
130
121
  end
131
122
 
132
123
  [:no_dots, :disable_links, :disable_back_links].each do |o|
133
124
  assert_equal "#{toc_option} --toc-#{o.to_s.tr('_', '-')}",
134
- wp.get_parsed_options(:toc => { o => true }).strip
125
+ @wp.get_parsed_options(:toc => { o => true }).strip
135
126
  end
136
127
  end
137
128
 
138
129
  test 'should parse outline options' do
139
- wp = WickedPdf.new
140
-
141
- assert_equal '--outline', wp.get_parsed_options(:outline => { :outline => true }).strip
142
- assert_equal '--outline-depth 5', wp.get_parsed_options(:outline => { :outline_depth => 5 }).strip
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
143
132
  end
144
133
 
145
134
  test 'should parse margins options' do
146
- wp = WickedPdf.new
147
-
148
135
  [:top, :bottom, :left, :right].each do |o|
149
- assert_equal "--margin-#{o} 12", wp.get_parsed_options(:margin => { o => '12' }).strip
136
+ assert_equal "--margin-#{o} 12", @wp.get_parsed_options(:margin => { o => '12' }).strip
150
137
  end
151
138
  end
152
139
 
153
140
  test 'should parse cover' do
154
- wp = WickedPdf.new
155
- cover_option = wp.get_valid_option('cover')
141
+ cover_option = @wp.get_valid_option('cover')
156
142
 
157
143
  pathname = Rails.root.join('app', 'views', 'pdf', 'file.html')
158
- assert_equal "#{cover_option} http://example.org", wp.get_parsed_options(:cover => 'http://example.org').strip, 'URL'
159
- assert_equal "#{cover_option} #{pathname}", wp.get_parsed_options(:cover => pathname).strip, 'Pathname'
160
- assert_match /#{cover_option} .+wicked_cover_pdf.+\.html/, wp.get_parsed_options(:cover => '<html><body>HELLO</body></html>').strip, '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'
161
147
  end
162
148
 
163
149
  test 'should parse other options' do
164
- wp = WickedPdf.new
165
-
166
150
  [
167
151
  :orientation, :page_size, :proxy, :username, :password, :dpi,
168
152
  :encoding, :user_style_sheet
169
153
  ].each do |o|
170
- assert_equal "--#{o.to_s.tr('_', '-')} opts", wp.get_parsed_options(o => 'opts').strip
154
+ assert_equal "--#{o.to_s.tr('_', '-')} opts", @wp.get_parsed_options(o => 'opts').strip
171
155
  end
172
156
 
173
157
  [:cookie, :post].each do |o|
174
- assert_equal "--#{o.to_s.tr('_', '-')} name value", wp.get_parsed_options(o => 'name value').strip
158
+ assert_equal "--#{o.to_s.tr('_', '-')} name value", @wp.get_parsed_options(o => 'name value').strip
175
159
 
176
160
  nv_formatter = proc { |number| "--#{o.to_s.tr('_', '-')} par#{number} val#{number}" }
177
- assert_equal "#{nv_formatter.call(1)} #{nv_formatter.call(2)}", wp.get_parsed_options(o => ['par1 val1', 'par2 val2']).strip
161
+ assert_equal "#{nv_formatter.call(1)} #{nv_formatter.call(2)}", @wp.get_parsed_options(o => ['par1 val1', 'par2 val2']).strip
178
162
  end
179
163
 
180
164
  [:redirect_delay, :zoom, :page_offset].each do |o|
181
- assert_equal "--#{o.to_s.tr('_', '-')} 5", wp.get_parsed_options(o => 5).strip
165
+ assert_equal "--#{o.to_s.tr('_', '-')} 5", @wp.get_parsed_options(o => 5).strip
182
166
  end
183
167
 
184
168
  [
@@ -186,7 +170,7 @@ class WickedPdfTest < ActiveSupport::TestCase
186
170
  :enable_plugins, :disable_internal_links, :disable_external_links,
187
171
  :print_media_type, :disable_smart_shrinking, :use_xserver, :no_background
188
172
  ].each do |o|
189
- assert_equal "--#{o.to_s.tr('_', '-')}", wp.get_parsed_options(o => true).strip
173
+ assert_equal "--#{o.to_s.tr('_', '-')}", @wp.get_parsed_options(o => true).strip
190
174
  end
191
175
  end
192
176
 
@@ -210,11 +194,11 @@ class WickedPdfTest < ActiveSupport::TestCase
210
194
  end
211
195
 
212
196
  test 'should set version on initialize' do
213
- assert_not_equal @wp.send(:get_binary_version), ''
197
+ assert_not_equal @wp.send(:binary_version), ''
214
198
  end
215
199
 
216
200
  test 'should not use double dash options for version without dashes' do
217
- @wp.set_binary_version_to(WickedPdf::BINARY_VERSION_WITHOUT_DASHES)
201
+ @wp.binary_version = WickedPdf::BINARY_VERSION_WITHOUT_DASHES
218
202
 
219
203
  %w(toc cover).each do |name|
220
204
  assert_equal @wp.get_valid_option(name), name
@@ -222,7 +206,7 @@ class WickedPdfTest < ActiveSupport::TestCase
222
206
  end
223
207
 
224
208
  test 'should use double dash options for version with dashes' do
225
- @wp.set_binary_version_to(Gem::Version.new('0.11.0'))
209
+ @wp.binary_version = Gem::Version.new('0.11.0')
226
210
 
227
211
  %w(toc cover).each do |name|
228
212
  assert_equal @wp.get_valid_option(name), "--#{name}"
@@ -234,4 +218,9 @@ class WickedPdfTest < ActiveSupport::TestCase
234
218
  cover_option = @wp.get_valid_option('cover')
235
219
  assert_equal @wp.get_parsed_options(options), "--disable-javascript --header-center 3 #{cover_option} http://example.org"
236
220
  end
221
+
222
+ test 'options are shellescaped' do
223
+ options = { :header => { :left => "That's crazy" } }
224
+ assert_equal "--header-left That\\'s\\ crazy", @wp.get_parsed_options(options)
225
+ end
237
226
  end
@@ -12,8 +12,13 @@ Gem::Specification.new do |spec|
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
20
 
16
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
21
+ spec.files = `git ls-files`.split($/)
17
22
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
23
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
24
  spec.require_paths = ['lib']
@@ -25,10 +30,4 @@ Gem::Specification.new do |spec|
25
30
  spec.add_development_dependency 'sqlite3'
26
31
  spec.add_development_dependency 'mocha'
27
32
  spec.add_development_dependency 'test-unit'
28
-
29
- spec.description = <<desc
30
- Wicked PDF uses the shell utility wkhtmltopdf to serve a PDF file to a user from HTML.
31
- In other words, rather than dealing with a PDF generation DSL of some sort,
32
- you simply write an HTML view as you would normally, and let Wicked take care of the hard stuff.
33
- desc
34
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wicked_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Z. Sterrett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-26 00:00:00.000000000 Z
11
+ date: 2016-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails