lib/princely/pdf_helper.rb in princely-1.4.1 vs lib/princely/pdf_helper.rb in princely-2.0.0
- old
+ new
@@ -1,84 +1,65 @@
-module PdfHelper
- require 'princely'
-
- def self.included(base)
- base.class_eval do
- alias_method_chain :render, :princely
+require 'princely'
+require 'princely/asset_support'
+
+module Princely
+ module PdfHelper
+
+ def self.included(base)
+ base.send :alias_method_chain, :render, :princely
end
- end
-
- def render_with_princely(options = nil, *args, &block)
- if options.is_a?(Hash) && options.has_key?(:pdf)
- options[:name] ||= options.delete(:pdf)
- make_and_send_pdf(options.delete(:name), options)
- else
- render_without_princely(options, *args, &block)
+
+ def render_with_princely(options = nil, *args, &block)
+ if options.is_a?(Hash) && options.has_key?(:pdf)
+ options[:name] ||= options.delete(:pdf)
+ make_and_send_pdf(options.delete(:name), options)
+ else
+ render_without_princely(options, *args, &block)
+ end
end
- end
-
- private
-
- def make_pdf(options = {})
- options[:stylesheets] ||= []
- options[:layout] ||= false
- options[:template] ||= File.join(controller_path,action_name)
-
- prince = Princely.new()
- # Sets style sheets on PDF renderer
- prince.add_style_sheets(*options[:stylesheets].collect{|style| asset_file_path(style)})
-
- html_string = render_to_string(:template => options[:template], :layout => options[:layout])
-
- html_string = localize_html_string(html_string)
-
- # Send the generated PDF file from our html string.
- if filename = options[:filename] || options[:file]
- prince.pdf_from_string_to_file(html_string, filename)
- else
- prince.pdf_from_string(html_string)
- end
- end
- def localize_html_string(html_string)
- # Make all paths relative, on disk paths...
- html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
- html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"#{Rails.public_path}/#{$1}\"" } # re-route absolute paths
-
- # Remove asset ids on images with a regex
- html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| "src=\"#{$1.split('?').first}\"" }
- html_string
- end
+ private
- def asset_file_path(asset)
- stylesheet = stylesheet.to_s.gsub(".css","")
- File.join(config.stylesheets_dir, "#{stylesheet}.css")
- end
- alias_method :stylesheet_file_path, :asset_file_path
+ def make_pdf(options = {})
+ options = {
+ :stylesheets => [],
+ :layout => false,
+ :template => File.join(controller_path, action_name),
+ :relative_paths => true,
+ :server_flag => true,
+ :media => nil,
+ :javascript_flag => false
+ }.merge(options)
- def make_and_send_pdf(pdf_name, options = {})
- options[:disposition] ||= 'attachment'
- send_data(
- make_pdf(options),
- :filename => pdf_name + ".pdf",
- :type => 'application/pdf',
- :disposition => options[:disposition]
- )
- end
+ prince = Princely::Pdf.new(options.slice(:server_flag, :javascript_flag, :media))
+ # Sets style sheets on PDF renderer
+ prince.add_style_sheets(*options[:stylesheets].collect{|style| asset_file_path(style)})
- module AssetSupport
- def localize_html_string(html_string)
- # Make all paths relative, on disk paths...
- html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
- html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"#{asset_file_path($1)}\"" } # re-route absolute paths
-
- # Remove asset ids on images with a regex
- html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' }
- html_string
+ html_string = render_to_string(options.slice(:template, :layout, :handlers, :formats))
+
+ html_string = localize_html_string(html_string, Rails.public_path) if options[:relative_paths]
+
+ # Send the generated PDF file from our html string.
+ if filename = options[:filename] || options[:file]
+ prince.pdf_from_string_to_file(html_string, filename)
+ else
+ prince.pdf_from_string(html_string)
+ end
end
def asset_file_path(asset)
- # Remove /assets/ from generated names and try and find a matching asset
- Rails.application.assets.find_asset(asset.gsub(/\/assets\//, "")).try(:pathname) || asset
+ asset = asset.to_s.gsub('.css', '')
+ File.join(config.stylesheets_dir, "#{asset}.css")
+ end
+ alias_method :stylesheet_file_path, :asset_file_path
+
+ def make_and_send_pdf(pdf_name, options = {})
+ options = {:disposition => 'attachment'}.merge(options)
+ send_data(
+ make_pdf(options),
+ :filename => "#{pdf_name}.pdf",
+ :type => 'application/pdf',
+ :disposition => options[:disposition]
+ )
end
end
end