Module: WickedPdf::WickedPdfHelper::Assets
- Defined in:
- lib/wicked_pdf/wicked_pdf_helper/assets.rb
Defined Under Namespace
Classes: PropshaftAsset
Constant Summary collapse
- ASSET_URL_REGEX =
/url\(['"]?([^'"]+?)['"]?\)/
Instance Method Summary collapse
- #wicked_pdf_asset_base64(path) ⇒ Object
- #wicked_pdf_asset_pack_path(asset) ⇒ Object
- #wicked_pdf_asset_path(asset) ⇒ Object
- #wicked_pdf_image_tag(img, options = {}) ⇒ Object
- #wicked_pdf_javascript_include_tag(*sources) ⇒ Object
- #wicked_pdf_javascript_pack_tag(*sources) ⇒ Object
- #wicked_pdf_javascript_src_tag(jsfile, options = {}) ⇒ Object
- #wicked_pdf_stylesheet_link_tag(*sources) ⇒ Object
- #wicked_pdf_stylesheet_pack_tag(*sources) ⇒ Object
-
#wicked_pdf_url_base64(url) ⇒ Object
Using ‘image_tag` with URLs when generating PDFs (specifically large PDFs with lots of pages) can cause buffer/stack overflows.
Instance Method Details
#wicked_pdf_asset_base64(path) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 24 def wicked_pdf_asset_base64(path) asset = find_asset(path) raise "Could not find asset '#{path}'" if asset.nil? base64 = Base64.encode64(asset.to_s).gsub(/\s+/, '') "data:#{asset.content_type};base64,#{Rack::Utils.escape(base64)}" end |
#wicked_pdf_asset_pack_path(asset) ⇒ Object
112 113 114 115 116 117 118 119 120 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 112 def wicked_pdf_asset_pack_path(asset) return unless defined?(Webpacker) if running_in_development? asset_pack_path(asset) else wicked_pdf_asset_path webpacker_source_url(asset) end end |
#wicked_pdf_asset_path(asset) ⇒ Object
104 105 106 107 108 109 110 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 104 def wicked_pdf_asset_path(asset) if (pathname = asset_pathname(asset).to_s) =~ URI_REGEXP pathname else "file:///#{pathname}" end end |
#wicked_pdf_image_tag(img, options = {}) ⇒ Object
88 89 90 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 88 def wicked_pdf_image_tag(img, = {}) image_tag wicked_pdf_asset_path(img), end |
#wicked_pdf_javascript_include_tag(*sources) ⇒ Object
97 98 99 100 101 102 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 97 def wicked_pdf_javascript_include_tag(*sources) sources.collect do |source| source = WickedPdfHelper.add_extension(source, 'js') "<script type='text/javascript'>#{read_asset(source)}</script>" end.join("\n").html_safe end |
#wicked_pdf_javascript_pack_tag(*sources) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 75 def wicked_pdf_javascript_pack_tag(*sources) return unless defined?(Webpacker) if running_in_development? javascript_pack_tag(*sources) else sources.collect do |source| source = WickedPdfHelper.add_extension(source, 'js') "<script type='text/javascript'>#{read_asset(webpacker_source_url(source))}</script>" end.join("\n").html_safe end end |
#wicked_pdf_javascript_src_tag(jsfile, options = {}) ⇒ Object
92 93 94 95 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 92 def wicked_pdf_javascript_src_tag(jsfile, = {}) jsfile = WickedPdfHelper.add_extension(jsfile, 'js') javascript_include_tag wicked_pdf_asset_path(jsfile), end |
#wicked_pdf_stylesheet_link_tag(*sources) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 46 def wicked_pdf_stylesheet_link_tag(*sources) stylesheet_contents = sources.collect do |source| source = WickedPdfHelper.add_extension(source, 'css') "<style type='text/css'>#{read_asset(source)}</style>" end.join("\n") stylesheet_contents.gsub(ASSET_URL_REGEX) do if Regexp.last_match[1].starts_with?('data:') "url(#{Regexp.last_match[1]})" else "url(#{wicked_pdf_asset_path(Regexp.last_match[1])})" end end.html_safe end |
#wicked_pdf_stylesheet_pack_tag(*sources) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 61 def wicked_pdf_stylesheet_pack_tag(*sources) return unless defined?(Webpacker) if running_in_development? stylesheet_pack_tag(*sources) else css_text = sources.collect do |source| source = WickedPdfHelper.add_extension(source, 'css') wicked_pdf_stylesheet_link_tag(webpacker_source_url(source)) end.join("\n") css_text.respond_to?(:html_safe) ? css_text.html_safe : css_text end end |
#wicked_pdf_url_base64(url) ⇒ Object
Using ‘image_tag` with URLs when generating PDFs (specifically large PDFs with lots of pages) can cause buffer/stack overflows.
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/wicked_pdf/wicked_pdf_helper/assets.rb', line 34 def wicked_pdf_url_base64(url) response = Net::HTTP.get_response(URI(url)) if response.is_a?(Net::HTTPSuccess) base64 = Base64.encode64(response.body).gsub(/\s+/, '') "data:#{response.content_type};base64,#{Rack::Utils.escape(base64)}" else Rails.logger.warn("[wicked_pdf] #{response.code} #{response.}: #{url}") nil end end |