wicked_pdf 0.7.9 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Wicked PDF
1
+ # Wicked PDF [![Build Status](https://secure.travis-ci.org/mileszs/wicked_pdf.png)](http://travis-ci.org/mileszs/wicked_pdf)
2
2
 
3
3
  ## A PDF generation plugin for Ruby on Rails
4
4
 
@@ -9,6 +9,10 @@ _Wicked PDF has been verified to work on Ruby 1.8.7 and 1.9.2; Rails 2 and Rails
9
9
  ### Installation
10
10
 
11
11
  First, be sure to install [wkhtmltopdf](http://code.google.com/p/wkhtmltopdf/).
12
+ If your wkhtmltopdf executable is not on your webserver's path, configure it in an initializer:
13
+ WickedPdf.config = {
14
+ :exe_path => '/usr/local/bin/wkhtmltopdf'
15
+ }
12
16
  Note that versions before 0.9.0 [have problems](http://code.google.com/p/wkhtmltopdf/issues/detail?id=82&q=vodnik) on some machines with reading/writing to streams.
13
17
  This plugin relies on streams to communicate with wkhtmltopdf.
14
18
 
@@ -22,6 +26,10 @@ Next:
22
26
  or add this to your Gemfile:
23
27
 
24
28
  gem 'wicked_pdf'
29
+
30
+ You may also need to add
31
+ Mime::Type.register "application/pdf", :pdf
32
+ to config/initializers/mime_types.rb
25
33
 
26
34
  ### Basic Usage
27
35
 
@@ -69,7 +77,7 @@ or add this to your Gemfile:
69
77
  :book => true,
70
78
  :default_header => true,
71
79
  :disable_javascript => false,
72
- :greyscale => true,
80
+ :grayscale => true,
73
81
  :lowquality => true,
74
82
  :enable_plugins => true,
75
83
  :disable_internal_links => true,
@@ -220,7 +228,7 @@ You can put your default configuration, applied to all pdf's at "wicked_pdf.rb"
220
228
 
221
229
  ### Further Reading
222
230
 
223
- Andreas Happe's post [Generating PDFs from Ruby on Rails](http://starseeders.net/generating-pdfs-from-ruby-on-rails/)
231
+ Andreas Happe's post [Generating PDFs from Ruby on Rails](http://www.snikt.net/blog/2012/04/26/wicked-pdf/)
224
232
 
225
233
  StackOverflow [questions with the tag "wicked-pdf"](http://stackoverflow.com/questions/tagged/wicked-pdf)
226
234
 
data/lib/pdf_helper.rb CHANGED
@@ -3,6 +3,10 @@ module PdfHelper
3
3
  require 'wicked_pdf_tempfile'
4
4
 
5
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
+
6
10
  base.class_eval do
7
11
  alias_method_chain :render, :wicked_pdf
8
12
  alias_method_chain :render_to_string, :wicked_pdf
data/lib/wicked_pdf.rb CHANGED
@@ -6,22 +6,26 @@ require 'digest/md5'
6
6
  require 'rbconfig'
7
7
  require RbConfig::CONFIG['target_os'] == 'mingw32' && !(RUBY_VERSION =~ /1.9/) ? 'win32/open3' : 'open3'
8
8
  require 'active_support/core_ext/class/attribute_accessors'
9
- require 'active_support/core_ext/object/blank'
9
+
10
+ begin
11
+ require 'active_support/core_ext/object/blank'
12
+ rescue LoadError
13
+ require 'active_support/core_ext/blank'
14
+ end
10
15
 
11
16
  require 'wicked_pdf_railtie'
12
17
  require 'wicked_pdf_tempfile'
13
18
 
14
19
  class WickedPdf
20
+ EXE_NAME = "wkhtmltopdf"
15
21
  @@config = {}
16
22
  cattr_accessor :config
17
23
 
18
24
  def initialize(wkhtmltopdf_binary_path = nil)
19
- @exe_path = wkhtmltopdf_binary_path
20
- @exe_path ||= WickedPdf.config[:exe_path] unless WickedPdf.config.empty?
21
- @exe_path ||= (defined?(Bundler) ? `bundle exec which wkhtmltopdf` : `which wkhtmltopdf`).chomp
22
- raise "Location of wkhtmltopdf unknown" if @exe_path.empty?
23
- raise "Bad wkhtmltopdf's path" unless File.exists?(@exe_path)
24
- raise "Wkhtmltopdf is not executable" unless File.executable?(@exe_path)
25
+ @exe_path = wkhtmltopdf_binary_path || find_wkhtmltopdf_binary_path
26
+ raise "Location of #{EXE_NAME} unknown" if @exe_path.empty?
27
+ raise "Bad #{EXE_NAME}'s path" unless File.exists?(@exe_path)
28
+ raise "#{EXE_NAME} is not executable" unless File.executable?(@exe_path)
25
29
  end
26
30
 
27
31
  def pdf_from_string(string, options={})
@@ -44,8 +48,8 @@ class WickedPdf
44
48
  private
45
49
 
46
50
  def in_development_mode?
47
- (defined?(Rails) && Rails.env == 'development') ||
48
- (defined?(RAILS_ENV) && RAILS_ENV == 'development')
51
+ return Rails.env == 'development' if defined?(Rails)
52
+ RAILS_ENV == 'development' if defined?(RAILS_ENV)
49
53
  end
50
54
 
51
55
  def on_windows?
@@ -196,4 +200,15 @@ class WickedPdf
196
200
  end
197
201
  end
198
202
 
203
+ def find_wkhtmltopdf_binary_path
204
+ possible_locations = (ENV['PATH'].split(':')+%w[/usr/bin /usr/local/bin ~/bin]).uniq
205
+ exe_path ||= WickedPdf.config[:exe_path] unless WickedPdf.config.empty?
206
+ exe_path ||= begin
207
+ (defined?(Bundler) ? `bundle exec which wkhtmltopdf` : `which wkhtmltopdf`).chomp
208
+ rescue Exception => e
209
+ nil
210
+ end
211
+ exe_path ||= possible_locations.map{|l| File.expand_path("#{l}/#{EXE_NAME}") }.find{|location| File.exists? location}
212
+ exe_path || ''
213
+ end
199
214
  end
@@ -1,41 +1,76 @@
1
1
  module WickedPdfHelper
2
+ def self.root_path
3
+ String === Rails.root ? Pathname.new(Rails.root) : Rails.root
4
+ end
5
+
2
6
  def wicked_pdf_stylesheet_link_tag(*sources)
3
- css_dir = Rails.root.join('public','stylesheets')
4
- sources.collect { |source|
7
+ css_dir = WickedPdfHelper.root_path.join('public', 'stylesheets')
8
+ css_text = sources.collect { |source|
5
9
  "<style type='text/css'>#{File.read(css_dir.join(source+'.css'))}</style>"
6
- }.join("\n").html_safe
10
+ }.join("\n")
11
+ css_text.respond_to?(:html_safe) ? css_text.html_safe : css_text
7
12
  end
8
13
 
9
14
  def wicked_pdf_image_tag(img, options={})
10
- image_tag "file:///#{Rails.root.join('public', 'images', img)}", options
15
+ image_tag "file://#{WickedPdfHelper.root_path.join('public', 'images', img)}", options
11
16
  end
12
17
 
13
18
  def wicked_pdf_javascript_src_tag(jsfile, options={})
14
- javascript_src_tag "file:///#{Rails.root.join('public','javascripts',jsfile)}", options
19
+ javascript_src_tag "file://#{WickedPdfHelper.root_path.join('public', 'javascripts', jsfile)}", options
15
20
  end
16
21
 
17
22
  def wicked_pdf_javascript_include_tag(*sources)
18
- sources.collect{ |source| wicked_pdf_javascript_src_tag(source, {}) }.join("\n").html_safe
23
+ js_text = sources.collect{ |source| wicked_pdf_javascript_src_tag(source, {}) }.join("\n")
24
+ js_text.respond_to?(:html_safe) ? js_text.html_safe : js_text
19
25
  end
26
+
20
27
  module Assets
21
28
  def wicked_pdf_stylesheet_link_tag(*sources)
22
29
  sources.collect { |source|
23
- "<style type='text/css'>#{Rails.application.assets.find_asset(source+".css")}</style>"
30
+ "<style type='text/css'>#{read_asset(source+".css")}</style>"
24
31
  }.join("\n").html_safe
25
32
  end
26
33
 
27
34
  def wicked_pdf_image_tag(img, options={})
28
- asset = Rails.application.assets.find_asset(img)
29
- image_tag "file:///#{asset.pathname.to_s}", options
35
+ image_tag "file://#{asset_pathname(img).to_s}", options
30
36
  end
31
37
 
32
38
  def wicked_pdf_javascript_src_tag(jsfile, options={})
33
- asset = Rails.application.assets.find_asset(jsfile)
34
- javascript_include_tag "file:///#{asset.pathname.to_s}", options
39
+ javascript_include_tag "file://#{asset_pathname(jsfile).to_s}", options
35
40
  end
36
41
 
37
42
  def wicked_pdf_javascript_include_tag(*sources)
38
- sources.collect{ |source| "<script type='text/javascript'>#{Rails.application.assets.find_asset(source+".js")}</script>" }.join("\n").html_safe
43
+ sources.collect { |source|
44
+ "<script type='text/javascript'>#{read_asset(source+".js")}</script>"
45
+ }.join("\n").html_safe
46
+ end
47
+
48
+ private
49
+
50
+ def asset_pathname(source)
51
+ if Rails.configuration.assets.compile == false
52
+ if ActionController::Base.asset_host
53
+ # asset_path returns an absolute URL using asset_host if asset_host is set
54
+ asset_path(source)
55
+ else
56
+ File.join(Rails.public_path, asset_path(source))
57
+ end
58
+ else
59
+ Rails.application.assets.find_asset(source).pathname
60
+ end
61
+ end
62
+
63
+ def read_asset(source)
64
+ if Rails.configuration.assets.compile == false
65
+ if ActionController::Base.asset_host
66
+ require 'open-uri'
67
+ open(asset_pathname(source)) {|f| f.read }
68
+ else
69
+ IO.read(asset_pathname(source))
70
+ end
71
+ else
72
+ Rails.application.assets.find_asset(source).to_s
73
+ end
39
74
  end
40
75
  end
41
76
  end
@@ -17,10 +17,12 @@ class PdfHelperTest < ActionController::TestCase
17
17
  @ac=nil
18
18
  end
19
19
 
20
- test "should prerender header and footer :template options" do
21
- options = @ac.send( :prerender_header_and_footer,
22
- :header => {:html => { :template => 'hf.html.erb'}});
23
- assert !options[:header][:html].has_key?(:template)
24
- assert_match /^file:\/\/.*wicked_header_pdf.*\.html/, options[:header][:html][:url]
20
+ if Rails::VERSION::MAJOR == 2
21
+ test "should prerender header and footer :template options" do
22
+ options = @ac.send( :prerender_header_and_footer,
23
+ :header => {:html => { :template => 'hf.html.erb'}});
24
+ assert !options[:header][:html].has_key?(:template)
25
+ assert_match /^file:\/\/.*wicked_header_pdf.*\.html/, options[:header][:html][:url]
26
+ end
25
27
  end
26
28
  end
@@ -2,23 +2,25 @@ require 'test_helper'
2
2
  require 'action_view/test_case'
3
3
 
4
4
  class WickedPdfHelperTest < ActionView::TestCase
5
- test 'wicked_pdf_stylesheet_link_tag should inline the stylesheets passed in' do
6
- assert_equal "<style type='text/css'>/* Wicked styles */\n</style>",
7
- wicked_pdf_stylesheet_link_tag('../../vendor/plugins/wicked_pdf/test/fixtures/wicked')
8
- end
5
+ if Rails::VERSION::MAJOR == 2
6
+ test 'wicked_pdf_stylesheet_link_tag should inline the stylesheets passed in' do
7
+ assert_equal "<style type='text/css'>/* Wicked styles */\n</style>",
8
+ wicked_pdf_stylesheet_link_tag('../../vendor/plugins/wicked_pdf/test/fixtures/wicked')
9
+ end
9
10
 
10
- test 'wicked_pdf_image_tag should return the same as image_tag when passed a full path' do
11
- assert_equal image_tag("file://#{Rails.root.join('public','images','pdf')}"),
12
- wicked_pdf_image_tag('pdf')
13
- end
11
+ test 'wicked_pdf_image_tag should return the same as image_tag when passed a full path' do
12
+ assert_equal image_tag("file://#{Rails.root.join('public','images','pdf')}"),
13
+ wicked_pdf_image_tag('pdf')
14
+ end
14
15
 
15
- test 'wicked_pdf_javascript_src_tag should return the same as javascript_src_tag when passed a full path' do
16
- assert_equal javascript_src_tag("file://#{Rails.root.join('public','javascripts','pdf')}", {}),
17
- wicked_pdf_javascript_src_tag('pdf')
18
- end
16
+ test 'wicked_pdf_javascript_src_tag should return the same as javascript_src_tag when passed a full path' do
17
+ assert_equal javascript_src_tag("file://#{Rails.root.join('public','javascripts','pdf')}", {}),
18
+ wicked_pdf_javascript_src_tag('pdf')
19
+ end
19
20
 
20
- test 'wicked_pdf_include_tag should return many wicked_pdf_javascript_src_tags' do
21
- assert_equal [wicked_pdf_javascript_src_tag('foo'), wicked_pdf_javascript_src_tag('bar')].join("\n"),
22
- wicked_pdf_javascript_include_tag('foo', 'bar')
21
+ test 'wicked_pdf_include_tag should return many wicked_pdf_javascript_src_tags' do
22
+ assert_equal [wicked_pdf_javascript_src_tag('foo'), wicked_pdf_javascript_src_tag('bar')].join("\n"),
23
+ wicked_pdf_javascript_include_tag('foo', 'bar')
24
+ end
23
25
  end
24
26
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- WickedPdf.config = { :exe_path => '/usr/local/bin/wkhtmltopdf' }
3
+ WickedPdf.config = { :exe_path => ENV['WKHTMLTOPDF_BIN'] || '/usr/local/bin/wkhtmltopdf' }
4
4
  HTML_DOCUMENT = "<html><body>Hello World</body></html>"
5
5
 
6
6
  # Provide a public accessor to the normally-private parse_options function
@@ -84,7 +84,7 @@ class WickedPdfTest < ActiveSupport::TestCase
84
84
  wp = WickedPdf.new
85
85
 
86
86
  [:font_name, :header_text].each do |o|
87
- assert_equal "--toc-#{o.to_s.gsub('_', '-')} \"toc\"",
87
+ assert_equal "--toc --toc-#{o.to_s.gsub('_', '-')} \"toc\"",
88
88
  wp.get_parsed_options(:toc => {o => "toc"}).strip
89
89
  end
90
90
 
@@ -92,12 +92,12 @@ class WickedPdfTest < ActiveSupport::TestCase
92
92
  :l5_font_size, :l6_font_size, :l7_font_size, :l1_indentation, :l2_indentation,
93
93
  :l3_indentation, :l4_indentation, :l5_indentation, :l6_indentation, :l7_indentation
94
94
  ].each do |o|
95
- assert_equal "--toc-#{o.to_s.gsub('_', '-')} 5",
95
+ assert_equal "--toc --toc-#{o.to_s.gsub('_', '-')} 5",
96
96
  wp.get_parsed_options(:toc => {o => 5}).strip
97
97
  end
98
98
 
99
99
  [:no_dots, :disable_links, :disable_back_links].each do |o|
100
- assert_equal "--toc-#{o.to_s.gsub('_', '-')}",
100
+ assert_equal "--toc --toc-#{o.to_s.gsub('_', '-')}",
101
101
  wp.get_parsed_options(:toc => {o => true}).strip
102
102
  end
103
103
  end
@@ -129,7 +129,7 @@ class WickedPdfTest < ActiveSupport::TestCase
129
129
  [:cookie, :post].each do |o|
130
130
  assert_equal "--#{o.to_s.gsub('_', '-')} name value", wp.get_parsed_options(o => "name value").strip
131
131
 
132
- nv_formatter = ->(number){ "--#{o.to_s.gsub('_', '-')} par#{number} val#{number}" }
132
+ nv_formatter = Proc.new{|number| "--#{o.to_s.gsub('_', '-')} par#{number} val#{number}" }
133
133
  assert_equal "#{nv_formatter.call(1)} #{nv_formatter.call(2)}", wp.get_parsed_options(o => ['par1 val1', 'par2 val2']).strip
134
134
  end
135
135
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wicked_pdf
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 63
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 7
9
- - 9
10
- version: 0.7.9
8
+ - 8
9
+ - 0
10
+ version: 0.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Miles Z. Sterret
@@ -15,9 +15,36 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-30 00:00:00 Z
19
- dependencies: []
20
-
18
+ date: 2012-11-14 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rails
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id002
21
48
  description: |
22
49
  Wicked PDF uses the shell utility wkhtmltopdf to serve a PDF file to a user from HTML.
23
50
  In other words, rather than dealing with a PDF generation DSL of some sort,
@@ -45,7 +72,7 @@ files:
45
72
  - test/test_helper.rb
46
73
  - test/wicked_pdf_helper_test.rb
47
74
  - test/wicked_pdf_test.rb
48
- homepage: http://github.com/mileszs/wicked_pdf
75
+ homepage: https://github.com/mileszs/wicked_pdf
49
76
  licenses: []
50
77
 
51
78
  post_install_message: