prawn-rails 1.0.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +30 -6
- data/README.md +44 -27
- data/lib/prawn-rails/document.rb +12 -9
- data/lib/prawn-rails/rails_helper.rb +23 -6
- data/lib/prawn-rails/renderer.rb +3 -9
- data/lib/prawn-rails/version.rb +1 -1
- data/test/{dummy → dummy_app}/Rakefile +0 -0
- data/test/dummy_app/app/assets/config/manifest.js +3 -0
- data/test/{dummy/db/test.sqlite3 → dummy_app/app/assets/javascripts/application.js} +0 -0
- data/test/dummy_app/app/assets/stylesheets/application.css +3 -0
- data/test/{dummy → dummy_app}/app/controllers/application_controller.rb +0 -0
- data/test/dummy_app/app/controllers/reports_controller.rb +37 -0
- data/test/dummy_app/app/mailers/reports_mailer.rb +18 -0
- data/test/{dummy → dummy_app}/app/views/layouts/application.html.erb +1 -1
- data/test/dummy_app/app/views/reports/custom.pdf.prawn +3 -0
- data/test/dummy_app/app/views/reports/custom_disposition.pdf.prawn +3 -0
- data/test/dummy_app/app/views/reports/custom_filename.pdf.prawn +3 -0
- data/test/dummy_app/app/views/reports/sample.html.erb +1 -0
- data/test/{dummy/app/views/pdf/render_pdf.pdf.prawn → dummy_app/app/views/reports/sample.pdf.prawn} +13 -9
- data/test/dummy_app/app/views/reports/table.pdf.prawn +7 -0
- data/test/dummy_app/app/views/reports_mailer/send_report.html.erb +1 -0
- data/test/{dummy → dummy_app}/config.ru +0 -0
- data/test/{dummy → dummy_app}/config/application.rb +8 -1
- data/test/{dummy → dummy_app}/config/boot.rb +0 -0
- data/test/{dummy → dummy_app}/config/database.yml +0 -0
- data/test/{dummy → dummy_app}/config/environment.rb +0 -0
- data/test/{dummy → dummy_app}/config/environments/development.rb +0 -0
- data/test/{dummy → dummy_app}/config/environments/production.rb +0 -0
- data/test/{dummy → dummy_app}/config/environments/test.rb +0 -0
- data/test/{dummy → dummy_app}/config/initializers/backtrace_silencers.rb +0 -0
- data/test/{dummy → dummy_app}/config/initializers/inflections.rb +0 -0
- data/test/{dummy → dummy_app}/config/initializers/mime_types.rb +0 -0
- data/test/dummy_app/config/initializers/prawn-rails.rb +5 -0
- data/test/{dummy → dummy_app}/config/initializers/secret_token.rb +5 -1
- data/test/{dummy → dummy_app}/config/initializers/session_store.rb +1 -1
- data/test/{dummy → dummy_app}/config/initializers/wrap_parameters.rb +1 -1
- data/test/{dummy → dummy_app}/config/locales/en.yml +0 -0
- data/test/dummy_app/config/routes.rb +9 -0
- data/test/{dummy → dummy_app}/config/secrets.yml +0 -0
- data/test/{dummy → dummy_app}/db/schema.rb +1 -8
- data/test/{dummy/public/favicon.ico → dummy_app/db/test.sqlite3} +0 -0
- data/test/dummy_app/log/test.log +712 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/0Q/0QR6jgJcsDY23uF8NGHFYajkal8CGG4d3kOZQCD8Oj8.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/1K/1KcQYwe3g9uhY2WePD1_5P38IzP0Veu8rDPI0wXQSP8.cache +1 -0
- data/test/{dummy/tmp/cache/assets/sprockets/v3.0/mQ/mQditvxd7m-nwTpkGVCOalFZesEjSbG8EOKqC3zq108.cache → dummy_app/tmp/cache/assets/sprockets/v3.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache} +1 -1
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/4O/4O6Anm3R8aSIVfMhGtp5tZK3x17fcY1SbWoDN_6hb-o.cache +2 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/4X/4XWDJRe7gZAeojFwJq7j6jJxRr152aQBfyhVtPPSHDY.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/7z/7zB4MNaDZMfwUPQ7LsLGHLt1EAx1oMCEUjywneVyoyY.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/8D/8D13-8wUZxyVgrsD9RHdWUPhLlWcqnHXtOBMOPQRX-Q.cache +1 -0
- data/test/{dummy/tmp/cache/assets/sprockets/v3.0/7k/7knv2O_3Eod2l8h0YSVe5xjnQsDlsXbJffQ1dKiSrEs.cache → dummy_app/tmp/cache/assets/sprockets/v3.0/LR/LRLaw7viwBb9Mi_VFZxGbKIooy8Fqf1aB_iOTETsMyc.cache} +1 -1
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache +3 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/Yr/YrGeNwkHFUXGwgJhi0aqJdEHL--OyRwU5aN5azmIXM4.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/ib/ibSeAobTqAE0a-v_-umXpnbXaIEx_WOtSsQkSRJCwwI.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/mO/mOu9n3QmqPXFbaUP-4RAuwabvsLdudRBvk9LMIOTSoI.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/vt/vtyC4n-7HZNOJV7EprjE7ThndKZkG00OVD8sO8cUFAM.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/wt/wtoVyr5IaVgQI72M_TLZFUNHeStJ5maRaHlfA8Vt6d0.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/-i/-i0h20pCtmvENM-EAyaKkJDFhjn-HuXuoE0e1sLu_rg.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/0r/0r4iTRUbzH4dQwbjPscLVpHM1SJyEKVXeCEzD_U9JYE.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/4O/4O6Anm3R8aSIVfMhGtp5tZK3x17fcY1SbWoDN_6hb-o.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/6y/6yMwFwpdEybDnrikBloKhYP4Zmo9Ry746DScoqO8mbE.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/7z/7zB4MNaDZMfwUPQ7LsLGHLt1EAx1oMCEUjywneVyoyY.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/8D/8D13-8wUZxyVgrsD9RHdWUPhLlWcqnHXtOBMOPQRX-Q.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Ac/Ac0RnYBszO_tvu-01dVJjO6aKZedDO2TVCAwpY5nE4U.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Do/Do83AoOat5W-c1g7piDGy2GMmffsY6JY0Qfuh5PY3GM.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/FD/FDmzMYru4EyGcs7Q7tsCbapZmNV-jXENb6M-UuS8GLs.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/FH/FHiO02EbiWfhKFHA3d6jTB6d50AXJzY9OjwpyzlbR3A.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Jn/JnmWS5ayWWDAiBYz39zc51V2mHFWYAlXjW-vPbehyvk.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Jr/JraYt1MnVVm8nrRu036hPHr_-BxBo2RwGcH_4XFDk9g.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/LQ/LQQTiHeHlmh1Fwvuv1Ss9ne5mXE0TOv2xaanJ40LEXA.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/LR/LRLaw7viwBb9Mi_VFZxGbKIooy8Fqf1aB_iOTETsMyc.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/OH/OHFQxWHvIcKq2nREonlhK8AgUKTRZ-2tDjQIRFoh400.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/QV/QVq7YZh551f-JSU-9f9VWDRJA0Wm_LcbdJfJEO45hpY.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Rx/RxPz7Gq0QcrSvjCMwAGBbCp9-4uiZixta20a-pY50G0.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Sd/SdKiVwcnL47CkgJH6d6rg8bT2jeMfr_KOpH6K-e_Rpw.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/Tq/TqJjVveNs9BoMZZ0bqrtV17QUpcioQePyc75rUF8Q5U.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/WX/WXW-hCt_qs8QZgCDuLbIdi4PEZY5Dr4gkk3TG2bzIlA.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/X0/X0VVDULN8me11G85S0HRqtRtWpg2evTeD-eptzBX0Js.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/bc/bc6phGXVat2w60GIQpknrZ6UeHcwGAJkPSEyx2vzYWA.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/cc/ccsnAmW1sI8J39ktFOU92ag0Cmd98hy1nLoiYxk-ztA.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/cq/cqmOKwCIiucE1noRNr0g5M-9rOz5lOw_KfXGRITzjfM.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/dL/dLpVVClnOjqhfdUOtaPPRDGP73ARy79nba4H4B4TtkQ.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/i5/i5ZEAsQ_Rav4MDMy4ihQldRNRjQ8rSickZnnbPrf8MM.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/iv/ivPda3JMWfbu-IHENKRMM5Y-RPDGx17E-UsDHaRw2l0.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/jX/jXTNqwlV7NH3QgrxukXmrtTRmJdf7JLsLthOWuSajAk.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/oL/oL18MfHhURyZjTEiCN9pzxDO5yolnjepKPIQ3AxRtuw.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/pC/pCWceIteP62iSWMjZn19ap3KwUG6vXoQUzXAe5Pd07s.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/pv/pv6tV3CDkIAmLXdU8EPLlNEkXAKJPufVD4VP30o4fWo.cache +0 -0
- data/test/{dummy/tmp/cache/assets/sprockets/v3.0/w3/w3opA7mSLePTdHCpuCBqduTsSbwUIgiPnFcb4oLM4g4.cache → dummy_app/tmp/cache/assets/sprockets/v4.0.0/qY/qYZa9MjWU2euhPKhmXxsJtfsHa76D0-yIqmqhhqDnWM.cache} +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/ro/roxJL7F-lfG7snTu-4sBGaTfHUu94FPZMfWpTEJq-V8.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/tV/tVR6xDtsNbiDca0JyoaKp4tirI4zYUF0RiWbw-9qyP0.cache +1 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/uO/uOomFpb2HCobA5V40idjrZP3fmfIzbyS21BXqdFnonw.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/vv/vvPcNRT1bVyxTWN8IxKtvuBhxXib3G0tzztnaz6AE9k.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/wX/wX5yL9P13fJNPuZX10N7nQYMaQJl8JdZKPpsRiESJgE.cache +0 -0
- data/test/dummy_app/tmp/cache/assets/sprockets/v4.0.0/yy/yycp8-xBCXFX3VWJYNtJkJvzZD2XEejmUso7wI-7cbo.cache +0 -0
- data/test/integration/prawn_rails_test.rb +105 -0
- data/test/prawn_rails_test.rb +28 -0
- data/test/test_helper.rb +11 -1
- metadata +231 -165
- data/lib/prawn-rails/extension.rb +0 -48
- data/test/dummy/app/assets/javascripts/application.js +0 -7
- data/test/dummy/app/assets/stylesheets/application.css +0 -7
- data/test/dummy/app/assets/stylesheets/scaffold.css +0 -56
- data/test/dummy/app/controllers/pdf_controller.rb +0 -9
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/pdf_helper.rb +0 -2
- data/test/dummy/app/helpers/products_helper.rb +0 -2
- data/test/dummy/app/models/product.rb +0 -2
- data/test/dummy/app/views/pdf/render_pdf.html.erb +0 -2
- data/test/dummy/config/initializers/prawn-rails.rb +0 -4
- data/test/dummy/config/routes.rb +0 -62
- data/test/dummy/log/test.log +0 -390
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -26
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/functional/pdf_controller_test.rb +0 -21
- data/test/dummy/test/unit/helpers/pdf_helper_test.rb +0 -4
- data/test/dummy/test/unit/render_to_string_test.rb +0 -10
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/3H/3HKwxPtsFtIWWB8h3a3IubpM4GcVjstICkerRFO439k.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7M/7Mq76IhtBe2-VV2M2oHVxXAVG_QLm5SrCNxRggF8RPc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7z/7zCgQfsGmkfNRDRJbRNwZOHR1KjCn5eXK6kQ3MD3Q2I.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8k/8k3y_LCz9mDUxOJy9Q2XGrbzfTesQnWYC0cQP1TOvFs.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Dm/DmmfrCpXtt74Hr6NO54lxyOCDv6klnDyBqeDFR7oDU8.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fl/FlyzzCH6xseKijuu-xP3_W0V8-1cWLl95YXDNxYDUNo.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCD43uamHiSFgGxIxwnhpFVOmIxP1BnzNNvNivaWbpk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Lx/LxtjvSVJOouLYZBYfdC_AjDQkYKKKEs3M10Vum5cJEg.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/PK/PKWLCqd6Zhyt0ja1qijEKFaHwfBpCAHEosX412uU-V8.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/PS/PSRh_XH9lrFbchQbAFcC08Qv6_y-Bgv7sjtfpKR-OUM.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qo/QoWFwSTYT96pcyCl7-2W0dwnhAcu5C8LIcoBrcDyStI.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/VD/VDc9sGDOOPm5eVmRJ2f2cRjTaKC11SnKHOpHHbyChl0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ve/VeM604IZ64WdmC055DY5x0e5Hi8rcIAqhYJI5EcopDI.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/X0/X0IS1nkiVmMS3U903Hrwc01kDe2ajHoeo61xuHfbM6c.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bB/bBZWYaOxRNh_QSoJcD-Mkvcz9KgvY-dG9fwXISEG4K8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dY/dYpMqE0kCuH8r1W0qAG7zvVC38Hq4BT-1D--XGbeNXg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jH/jHI2oSw0VjtEfiiHzdvIRzqjkX7EfibPviTfzvDJie0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jl/jlvE-YiBY3zJbTaEnymfM6KKQ0VC4fh-ABin-DfZQH0.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/lW/lWicvOny7LscyeGkw-SjCaJEc6iQO2xyCQzEoCOT9io.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mq/mqcnbDYKKUpY94uXsWbGbcRGZwaZNlC1pynK_1spLG8.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/np/nppFP1_0FGLqnQh_ZUlGiPLii5Lqbpv4cXNPXvimFF4.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/oU/oUvIYed-Tb8hZ7gKa7FPpyhkc6vqXdyiMHNRI89fMO0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sG/sG274Dzr6XE-W7yJehcXagYHbLDgelrH4-7lrdytdI4.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/tA/tAy3LvgiPR3JYEMcVE38njAzFe3XLQuc5fZueLWu5Yo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/uO/uOOMjW4h-byBJFu52K4-uCeQA35aLhrqzzfRswpey-s.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vp/vpF3NlYVMkWc7PivIOC4SAKJ51RzYEXyTRKvfmsMGFg.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vv/vvP0dfbO8asNpteZs8hiM8s9YwP9qcQRAiF0Flm_2cw.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/we/wetuI3DMxRNUJ59_Ht2tI_UznmZ4Qo6YaFQaObX5Yeo.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/wn/wnvJ74QIdj8tSD10cXmY9KyXCpaQIv0FfZJWw-EudW8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xP/xPMfTXGxxCCgIip6XsG-paelKjnDzbpAYugLmUfykPs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zT/zTsAvZfthhhPVIOWyDH3KWWRuZ8HnBYMveoWvD-u9_k.cache +0 -1
- data/test/integration/navigation_test.rb +0 -9
- data/test/prawn-rails_test.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8d84ee700167e6fe6cde67e0abad0c2310a74131e1cd7cb302e7fca00a4d0081
|
4
|
+
data.tar.gz: 3517d341b40d496f2692d545d7573c2b95ea335799d012e9b5455ea1ee2c8ede
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a555d4e0bfc9e416dbe6bce1205a2cc714995b44f9f18e9575dbc788ffe24d0faa8d543c5dc7478871cb405d1d67e393ad81db698e0597d741679e0ed7af2a8b
|
7
|
+
data.tar.gz: b816eaa0601c5192c4ef522393c641a0f4a7843b16456a375feaefad81b42d5406d424a9ae72a9dbb1ff6d267e77b0d240f6c5eb4c54f80efe61489bd23a1fdb
|
data/CHANGELOG.md
CHANGED
@@ -1,15 +1,39 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
* `
|
3
|
+
* `Unreleased`
|
4
|
+
- Nothing yet
|
5
|
+
|
6
|
+
* `v1.4.0`
|
7
|
+
- [PR #41](https://github.com/cortiz/prawn-rails/pull/41) - Depend on `railsties` instead of `rails` gem to avoid pulling in unnecessary dependencies such as action_cable, etc.
|
8
|
+
|
9
|
+
* `v1.3.0`
|
10
|
+
- [PR #40](https://github.com/cortiz/prawn-rails/pull/40) - Add `:filename` and `:disposition` options for `prawn_document
|
11
|
+
- [PR #40](https://github.com/cortiz/prawn-rails/pull/40) - Do not override existing`Content-Disposition` headers
|
12
|
+
|
13
|
+
* `v1.2.1`
|
14
|
+
- [PR #39](https://github.com/cortiz/prawn-rails/pull/39) - Fix Rails 6 deprecation warning for single arity template handlers
|
15
|
+
- Remove unnecessary option logic from `prawn_document` method
|
16
|
+
|
17
|
+
* `v1.2.0`
|
18
|
+
- [PR #31](https://github.com/cortiz/prawn-rails/pull/31) - Use Prawn::Document.extensions in favor of custom plug-in loading. This removes all changes made in PR #29 and should behave much more appropriately now.
|
19
|
+
- [Undo PR #29](https://github.com/cortiz/prawn-rails/pull/31) - Use Prawn::Document.extensions in favor of custom plug-in loading
|
20
|
+
- [PR #30](https://github.com/cortiz/prawn-rails/pull/30) - Allow rendering in ActionMailer
|
21
|
+
|
22
|
+
* `v1.1.0`
|
23
|
+
- [PR #29](https://github.com/cortiz/prawn-rails/pull/29) - Require all installed prawn extensions
|
24
|
+
- Removed unnecessary `html_strip` helper method. If you were using this feature, instead use Rails built in `strip_tags(html_str)` or `ActionView::Base.full_sanitizer.sanitize(html_str)`
|
25
|
+
- Add legitimate tests
|
26
|
+
|
27
|
+
* `v1.0.1`
|
4
28
|
- Fix error when using `ActionController.render_to_string`
|
5
29
|
|
6
|
-
* `v1.0.0`
|
30
|
+
* `v1.0.0`
|
7
31
|
- Support `@filename`
|
8
32
|
- Set PDF Title metadata based on `@filename` if not specified
|
9
33
|
- Fix for Ruby 1.9.3+
|
10
34
|
- Cleanup
|
11
35
|
|
12
|
-
* `v0.1.1`
|
13
|
-
* `v0.1.0`
|
14
|
-
* `v0.0.2`
|
15
|
-
* `v0.0.1`
|
36
|
+
* `v0.1.1`
|
37
|
+
* `v0.1.0`
|
38
|
+
* `v0.0.2`
|
39
|
+
* `v0.0.1`
|
data/README.md
CHANGED
@@ -1,15 +1,18 @@
|
|
1
|
-
# Prawn-Rails
|
2
|
-
<a href=
|
1
|
+
# Prawn-Rails
|
2
|
+
<a href="https://badge.fury.io/rb/prawn-rails" target="_blank"><img height="21" style='border:0px;height:21px;' border='0' src="https://badge.fury.io/rb/prawn-rails.svg" alt="Gem Version"></a>
|
3
|
+
<a href='https://github.com/cortiz/prawn-rails/actions' target='_blank'><img src="https://github.com/cortiz/prawn-rails/workflows/Tests/badge.svg" style="max-width:100%;" height='21' style='border:0px;height:21px;' border='0' alt="CI Status"></a>
|
4
|
+
<a href='https://rubygems.org/gems/prawn-rails' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://ruby-gem-downloads-badge.herokuapp.com/prawn-rails?label=rubygems&type=total&total_label=downloads&color=brightgreen' border='0' alt='RubyGems Downloads' /></a>
|
3
5
|
|
4
|
-
|
6
|
+
|
7
|
+
# Install
|
5
8
|
```ruby
|
6
9
|
gem 'prawn-rails'
|
7
10
|
```
|
8
11
|
|
9
12
|
Note: `prawn` and `prawn-table` are dependencies of `prawn-rails` so there is no need to mention it in the projects Gemfile unless you want to use a specific version of either of those libraries.
|
10
13
|
|
11
|
-
|
12
|
-
Create a view with `pdf` as format and `prawn` as handler so filename should look like `example.pdf.prawn
|
14
|
+
# Usage
|
15
|
+
Create a view with `pdf` as format and `prawn` as handler so filename should look like `example.pdf.prawn`.
|
13
16
|
|
14
17
|
It provides a helper called `prawn_document` which builds a PrawnRails::Document with default options. You can override any options as you please. Example:
|
15
18
|
|
@@ -19,23 +22,41 @@ prawn_document do |pdf|
|
|
19
22
|
end
|
20
23
|
```
|
21
24
|
|
22
|
-
No need to call `pdf.render`, it is called by `prawn_document
|
25
|
+
No need to call `pdf.render`, it is called by `prawn_document`.
|
26
|
+
|
27
|
+
You can customize the name of the generated PDF and the file's delivery format with the `:filename` and `:disposition` keys:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
prawn_document(filename: "my-file.pdf", disposition: "attachment") do |pdf|
|
31
|
+
pdf.text "Direct download incoming!"
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
You can also override the content disposition using the [`Content-Disposition` HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#As_a_response_header_for_the_main_body). If you've already set this, `prawn-rails` will *not* override it. Here's an example of setting the header directly:
|
23
36
|
|
24
|
-
|
37
|
+
```ruby
|
38
|
+
def download
|
39
|
+
respond_to do |format|
|
40
|
+
format.pdf do
|
41
|
+
headers["Content-Disposition"] = "attachment; filename=\"charts-#{Time.now.to_i}.pdf\""
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
You can also override the file's name from the controller via `@filename`:
|
25
48
|
|
26
49
|
```ruby
|
27
50
|
def show
|
28
|
-
@filename =
|
51
|
+
@filename = "my_report.pdf"
|
29
52
|
end
|
30
53
|
```
|
31
54
|
|
32
|
-
|
33
|
-
* *html_strip(html)*:
|
34
|
-
Removes the html tags from a string
|
55
|
+
If no options are given, the file's name will match to your browser's default and the delivery format will default to `inline`.
|
35
56
|
|
36
|
-
|
57
|
+
# Default configuration
|
37
58
|
|
38
|
-
Add a `prawn-rails.rb` config to your Rails app under `config/initializers` like this
|
59
|
+
Add a `prawn-rails.rb` config to your Rails app under `config/initializers` like this:
|
39
60
|
|
40
61
|
```ruby
|
41
62
|
PrawnRails.config do |config|
|
@@ -45,11 +66,11 @@ PrawnRails.config do |config|
|
|
45
66
|
end
|
46
67
|
```
|
47
68
|
|
48
|
-
Please note that these are the defaults.
|
69
|
+
Please note that these are the defaults.
|
49
70
|
|
50
|
-
For a list of all available options: [http://www.rubydoc.info/gems/prawn/Prawn%2FDocument:initialize](http://www.rubydoc.info/gems/prawn/Prawn%2FDocument:initialize).
|
71
|
+
For a list of all available options: [http://www.rubydoc.info/gems/prawn/Prawn%2FDocument:initialize](http://www.rubydoc.info/gems/prawn/Prawn%2FDocument:initialize).
|
51
72
|
|
52
|
-
For a list of all metadata the the `:info` option supports, please see [https://github.com/prawnpdf/prawn/blob/master/manual/document_and_page_options/metadata.rb](https://github.com/prawnpdf/prawn/blob/master/manual/document_and_page_options/metadata.rb)
|
73
|
+
For a list of all metadata the the `:info` option supports, please see [https://github.com/prawnpdf/prawn/blob/master/manual/document_and_page_options/metadata.rb](https://github.com/prawnpdf/prawn/blob/master/manual/document_and_page_options/metadata.rb).
|
53
74
|
|
54
75
|
If `skip_page_creation` is set to true then you have to create the first page yourself. Example:
|
55
76
|
|
@@ -59,11 +80,11 @@ pdf.start_new_page
|
|
59
80
|
pdf.start_new_page size: "A4", page_layout: :portrait
|
60
81
|
```
|
61
82
|
|
62
|
-
|
83
|
+
# Examples
|
63
84
|
|
64
|
-
|
85
|
+
#### Hello World
|
65
86
|
|
66
|
-
```ruby
|
87
|
+
```ruby
|
67
88
|
# hello.pdf.prawn
|
68
89
|
|
69
90
|
prawn_document do |pdf|
|
@@ -71,7 +92,7 @@ prawn_document do |pdf|
|
|
71
92
|
end
|
72
93
|
```
|
73
94
|
|
74
|
-
|
95
|
+
#### Using Active Record
|
75
96
|
|
76
97
|
```ruby
|
77
98
|
# myproducts.pdf.prawn
|
@@ -82,7 +103,7 @@ prawn_document do |pdf|
|
|
82
103
|
pdf.table @products.collect{|p| [p.name,p.price]}
|
83
104
|
end
|
84
105
|
```
|
85
|
-
|
106
|
+
#### Using Custom options
|
86
107
|
|
87
108
|
```ruby
|
88
109
|
# landscape.pdf.prawn
|
@@ -92,12 +113,8 @@ prawn_document(page_layout: :landscape) do |pdf|
|
|
92
113
|
end
|
93
114
|
```
|
94
115
|
|
95
|
-
|
96
|
-
|
97
|
-
Created by Carlos Ortiz - @cortiz
|
98
|
-
|
99
|
-
<a href='http://ko-fi.com/A552JBK' target='_blank'><img height='32' style='border:0px;height:32px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=a' border='0' alt='Buy Me a Coffee' /></a>
|
116
|
+
# Credits
|
100
117
|
|
101
118
|
Maintained by Weston Ganger - @westonganger
|
102
119
|
|
103
|
-
|
120
|
+
Created by Carlos Ortiz - @cortiz
|
data/lib/prawn-rails/document.rb
CHANGED
@@ -1,22 +1,26 @@
|
|
1
1
|
require 'prawn'
|
2
2
|
require 'prawn/table'
|
3
|
-
require "prawn-rails/extension"
|
4
3
|
|
5
4
|
module PrawnRails
|
6
5
|
|
7
|
-
# This derives from Prawn::Document in order to override defaults.
|
6
|
+
# This derives from Prawn::Document in order to override defaults.
|
7
|
+
# Note that the Prawn::Document behaviour itself shouldn't be changed.
|
8
8
|
class Document < Prawn::Document
|
9
|
-
def
|
9
|
+
def self.extensions
|
10
|
+
Prawn::Document.extensions
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(options = {})
|
10
14
|
if PrawnRails.config.respond_to?(:to_h)
|
11
|
-
|
15
|
+
options.reverse_merge!(PrawnRails.config.to_h)
|
12
16
|
else
|
13
|
-
|
17
|
+
options.reverse_merge!(PrawnRails.config.marshal_dump)
|
14
18
|
end
|
15
|
-
|
19
|
+
|
20
|
+
super(options)
|
16
21
|
end
|
17
22
|
|
18
|
-
# Typically text expects a string. But
|
19
|
-
# `to_s` on all the variables before rendering. So, passing an integer to text fails:
|
23
|
+
# Typically text expects a string. But Rails views have this interesting concept that they implicitly call `to_s` on all the variables before rendering. So, passing an integer to text fails:
|
20
24
|
#
|
21
25
|
# pdf.text 10 #=> fails because 10 is not a string
|
22
26
|
# pdf.text 10.to_s #=> works
|
@@ -27,5 +31,4 @@ module PrawnRails
|
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
30
|
-
Document.extensions << Extension
|
31
34
|
end
|
@@ -2,20 +2,37 @@ require 'prawn-rails/document'
|
|
2
2
|
|
3
3
|
module PrawnRails
|
4
4
|
module RailsHelper
|
5
|
+
|
5
6
|
def prawn_document(options={})
|
6
|
-
options
|
7
|
-
page_size: PrawnRails.config.page_size,
|
8
|
-
info: {
|
9
|
-
Title: @filename.sub(/\.(p|P)(d|D)(f|F)$/, '')
|
10
|
-
})
|
7
|
+
@filename ||= options[:filename]
|
11
8
|
|
12
|
-
options.reverse_merge!(
|
9
|
+
options.reverse_merge!(get_metadata)
|
13
10
|
|
14
11
|
pdf = PrawnRails::Document.new(options)
|
15
12
|
|
13
|
+
# Ignore headers when we're not rendering from an ActionController context.
|
14
|
+
if defined?(controller) && controller.respond_to?(:response) && !controller.response.nil?
|
15
|
+
disposition = options[:disposition] || "inline"
|
16
|
+
disposition += "; filename=\"#{@filename}\"" if @filename
|
17
|
+
|
18
|
+
# Don't override 'Content-Disposition' if we've chosen to set it elsewhere.
|
19
|
+
controller.response.headers['Content-Disposition'] ||= disposition
|
20
|
+
end
|
21
|
+
|
16
22
|
yield pdf if block_given?
|
17
23
|
|
18
24
|
pdf.render
|
19
25
|
end
|
26
|
+
|
27
|
+
def get_metadata
|
28
|
+
return {} unless @filename
|
29
|
+
|
30
|
+
{
|
31
|
+
info: {
|
32
|
+
Title: @filename.sub(/\.pdf$/i, '')
|
33
|
+
}
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
20
37
|
end
|
21
38
|
end
|
data/lib/prawn-rails/renderer.rb
CHANGED
@@ -2,16 +2,10 @@ require "prawn-rails/document"
|
|
2
2
|
|
3
3
|
module PrawnRails
|
4
4
|
class Renderer
|
5
|
-
def self.call(template)
|
6
|
-
%{
|
7
|
-
@filename ||= "\#{controller.action_name}.pdf"
|
8
5
|
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
#{template.source.strip}
|
14
|
-
}
|
6
|
+
def self.call(template, source = nil)
|
7
|
+
(source || template.source).strip
|
15
8
|
end
|
9
|
+
|
16
10
|
end
|
17
11
|
end
|
data/lib/prawn-rails/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class ReportsController < ApplicationController
|
2
|
+
|
3
|
+
def sample
|
4
|
+
@items = [
|
5
|
+
{name: "Hello"},
|
6
|
+
{name: "World"},
|
7
|
+
]
|
8
|
+
end
|
9
|
+
|
10
|
+
def table
|
11
|
+
@items = [
|
12
|
+
[1,2,3],
|
13
|
+
[4,5,6],
|
14
|
+
[7,8,9],
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def custom_filename
|
19
|
+
end
|
20
|
+
|
21
|
+
def custom_disposition
|
22
|
+
end
|
23
|
+
|
24
|
+
def custom
|
25
|
+
end
|
26
|
+
|
27
|
+
def ivar_filename
|
28
|
+
@filename = "ivar-filename.pdf"
|
29
|
+
render :custom
|
30
|
+
end
|
31
|
+
|
32
|
+
def custom_headers
|
33
|
+
headers['Content-Disposition'] = "attachment;filename=\"custom-headers.pdf\""
|
34
|
+
render :custom
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class ReportsMailer < ActionMailer::Base
|
2
|
+
def send_report
|
3
|
+
@items = [
|
4
|
+
{name: "Hello"},
|
5
|
+
{name: "World"},
|
6
|
+
]
|
7
|
+
|
8
|
+
attachments["report.pdf"] = {
|
9
|
+
mime_type: "application/pdf",
|
10
|
+
content: render_to_string("reports/sample", formats: [:pdf]),
|
11
|
+
}
|
12
|
+
|
13
|
+
mail({
|
14
|
+
to: "user@example.com",
|
15
|
+
subject: "Reports",
|
16
|
+
})
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Hello World!</h1>
|
data/test/{dummy/app/views/pdf/render_pdf.pdf.prawn → dummy_app/app/views/reports/sample.pdf.prawn}
RENAMED
@@ -1,13 +1,15 @@
|
|
1
1
|
prawn_document(page_layout: :portrait) do |pdf|
|
2
|
-
pdf.text "Hello
|
2
|
+
pdf.text "Hello World!"
|
3
3
|
pdf.text "now it is here: #{pdf.cursor}"
|
4
|
-
pdf.text "Items
|
4
|
+
pdf.text "Number of Items: #{@items.count}"
|
5
|
+
|
5
6
|
pdf.font("Courier") do
|
6
7
|
pdf.text "Written in Courier because we are inside the block."
|
7
8
|
end
|
8
9
|
|
9
10
|
pdf.text "with html<bold></bold>"
|
10
|
-
pdf.text
|
11
|
+
pdf.text strip_tags("without html <bold>LD</bold>")
|
12
|
+
|
11
13
|
pdf.text "Let's see which is the current font_size: #{pdf.font_size.inspect}"
|
12
14
|
pdf.move_down 10
|
13
15
|
pdf.font_size 16
|
@@ -17,20 +19,22 @@ prawn_document(page_layout: :portrait) do |pdf|
|
|
17
19
|
pdf.move_down 10
|
18
20
|
pdf.text "Back to 16 again."
|
19
21
|
pdf.move_down 10
|
20
|
-
pdf.text "Single line on 20 using the :size option.", :
|
22
|
+
pdf.text "Single line on 20 using the :size option.", size: 20
|
21
23
|
pdf.move_down 10
|
22
24
|
pdf.text "Back to 16 once more."
|
23
25
|
pdf.move_down 10
|
24
|
-
|
26
|
+
|
27
|
+
pdf.font("Courier", size: 10) do
|
25
28
|
pdf.text "Yeah, using Courier 10 courtesy of the font method."
|
26
29
|
end
|
27
|
-
|
30
|
+
|
31
|
+
pdf.font("Helvetica", size: 12) # back to normal
|
28
32
|
|
29
33
|
pdf.text "Default color is black"
|
30
34
|
pdf.move_down 25
|
31
|
-
pdf.text "Changed to red", :
|
35
|
+
pdf.text "Changed to red", color: "FF0000"
|
32
36
|
pdf.move_down 25
|
33
|
-
pdf.text "CMYK color", :
|
37
|
+
pdf.text "CMYK color", color: [22, 55, 79, 30]
|
34
38
|
pdf.move_down 25
|
35
|
-
pdf.text "Also works with <color rgb='ff0000'>inline</color> formatting", :
|
39
|
+
pdf.text "Also works with <color rgb='ff0000'>inline</color> formatting", color: "0000FF", inline_format: true
|
36
40
|
end
|