prawn-rails 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -3
  3. data/README.md +32 -10
  4. data/lib/prawn-rails/rails_helper.rb +22 -5
  5. data/lib/prawn-rails/renderer.rb +1 -10
  6. data/lib/prawn-rails/version.rb +1 -1
  7. data/test/dummy_app/app/controllers/reports_controller.rb +21 -2
  8. data/test/dummy_app/app/views/reports/custom.pdf.prawn +3 -0
  9. data/test/dummy_app/app/views/reports/custom_disposition.pdf.prawn +3 -0
  10. data/test/dummy_app/app/views/reports/custom_filename.pdf.prawn +3 -0
  11. data/test/dummy_app/config/routes.rb +5 -0
  12. data/test/dummy_app/db/test.sqlite3 +0 -0
  13. data/test/dummy_app/log/test.log +117 -0
  14. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/0Q/0QR6jgJcsDY23uF8NGHFYajkal8CGG4d3kOZQCD8Oj8.cache +1 -0
  15. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/1K/1KcQYwe3g9uhY2WePD1_5P38IzP0Veu8rDPI0wXQSP8.cache +1 -0
  16. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache +2 -0
  17. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/4O/4O6Anm3R8aSIVfMhGtp5tZK3x17fcY1SbWoDN_6hb-o.cache +2 -0
  18. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/4X/4XWDJRe7gZAeojFwJq7j6jJxRr152aQBfyhVtPPSHDY.cache +0 -0
  19. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/7z/7zB4MNaDZMfwUPQ7LsLGHLt1EAx1oMCEUjywneVyoyY.cache +1 -0
  20. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/8D/8D13-8wUZxyVgrsD9RHdWUPhLlWcqnHXtOBMOPQRX-Q.cache +1 -0
  21. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/LR/LRLaw7viwBb9Mi_VFZxGbKIooy8Fqf1aB_iOTETsMyc.cache +3 -0
  22. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache +3 -0
  23. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/Yr/YrGeNwkHFUXGwgJhi0aqJdEHL--OyRwU5aN5azmIXM4.cache +0 -0
  24. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/ib/ibSeAobTqAE0a-v_-umXpnbXaIEx_WOtSsQkSRJCwwI.cache +0 -0
  25. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/mO/mOu9n3QmqPXFbaUP-4RAuwabvsLdudRBvk9LMIOTSoI.cache +1 -0
  26. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/vt/vtyC4n-7HZNOJV7EprjE7ThndKZkG00OVD8sO8cUFAM.cache +0 -0
  27. data/test/dummy_app/tmp/cache/assets/sprockets/v3.0/wt/wtoVyr5IaVgQI72M_TLZFUNHeStJ5maRaHlfA8Vt6d0.cache +1 -0
  28. data/test/integration/prawn_rails_test.rb +52 -25
  29. data/test/prawn_rails_test.rb +7 -2
  30. metadata +64 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cf8e2fcbecb181b9a2a09c14fc393dfe94852e556c662f4e1a90254705bc5e2
4
- data.tar.gz: 27efe009afe9618dcde1f2fd46b82586ab05ce69fadebb105a6c7234b7c00235
3
+ metadata.gz: b7b43fa3d4d79c190d6dc82e6f883c893e0cb148e22894264ffba862cae17c6b
4
+ data.tar.gz: 699da6374e86a0c32e14638752961d23b4daa9bdc4d19c9bb1edfcb42f9b858c
5
5
  SHA512:
6
- metadata.gz: f1f204eff5f570c1ba0bebb6602421051d8a983ab84ade21bf36eb8522eb45e30fb42019d251a73bcb5aefed11933c15c084a68bd18adba44ca61fa754e43e78
7
- data.tar.gz: a4f1f589c9a9f2dcc90925be191371dac28bc4e700ea719cd59b4f66bdfdcbbe549263d04c19ad7e643d88f1ee607059161c13b02548f6290802d1c2b6ec9473
6
+ metadata.gz: '091d86d558e578d37e5d41d65a0b4ff82e996ec9ec00a1fa923efe19fe8c115027f53633dea6307891de8d5834616d1e8aac8436597572ce2f260f19b456d87b'
7
+ data.tar.gz: e0801642f59f9276b03d1cce777b45d5499866a3381acf1d09588011eb986d6808cddbda55f59287e1557e93c62dcad497a3ceae80f5fefacfec830f6b826e43
@@ -2,11 +2,15 @@
2
2
 
3
3
  * `Unreleased`
4
4
  - Nothing yet
5
-
5
+
6
+ * `v1.3.0`
7
+ - [PR #40](https://github.com/cortiz/prawn-rails/pull/40) - Add `:filename` and `:disposition` options for `prawn_document
8
+ - [PR #40](https://github.com/cortiz/prawn-rails/pull/40) - Do not override existing`Content-Disposition` headers
9
+
6
10
  * `v1.2.1`
7
11
  - [PR #39](https://github.com/cortiz/prawn-rails/pull/39) - Fix Rails 6 deprecation warning for single arity template handlers
8
12
  - Remove unnecessary option logic from `prawn_document` method
9
-
13
+
10
14
  * `v1.2.0`
11
15
  - [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.
12
16
  - [Undo PR #29](https://github.com/cortiz/prawn-rails/pull/31) - Use Prawn::Document.extensions in favor of custom plug-in loading
@@ -28,5 +32,5 @@
28
32
 
29
33
  * `v0.1.1`
30
34
  * `v0.1.0`
31
- * `v0.0.2`
35
+ * `v0.0.2`
32
36
  * `v0.0.1`
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Prawn-Rails
2
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
3
  <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>
4
- <a href='https://ko-fi.com/A5071NK' target='_blank'><img height='22' style='border:0px;height:22px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=a' border='0' alt='Buy Me a Coffee' /></a>
4
+ <a href='https://ko-fi.com/A5071NK' target='_blank'><img height='22' style='border:0px;height:22px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=a' border='0' alt='Buy Me a Coffee' /></a>
5
5
 
6
6
 
7
7
  # Install
@@ -12,7 +12,7 @@ gem 'prawn-rails'
12
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.
13
13
 
14
14
  # Usage
15
- Create a view with `pdf` as format and `prawn` as handler so filename should look like `example.pdf.prawn`
15
+ Create a view with `pdf` as format and `prawn` as handler so filename should look like `example.pdf.prawn`.
16
16
 
17
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:
18
18
 
@@ -22,19 +22,41 @@ prawn_document do |pdf|
22
22
  end
23
23
  ```
24
24
 
25
- 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
26
 
27
- If you want to customize the name of the file should a user try to save it, you can specify the filename in your action:
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:
36
+
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`:
28
48
 
29
49
  ```ruby
30
50
  def show
31
- @filename = 'my_report.pdf'
51
+ @filename = "my_report.pdf"
32
52
  end
33
53
  ```
34
54
 
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`.
56
+
35
57
  # Default configuration
36
58
 
37
- 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:
38
60
 
39
61
  ```ruby
40
62
  PrawnRails.config do |config|
@@ -44,11 +66,11 @@ PrawnRails.config do |config|
44
66
  end
45
67
  ```
46
68
 
47
- Please note that these are the defaults.
69
+ Please note that these are the defaults.
48
70
 
49
- 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).
50
72
 
51
- 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).
52
74
 
53
75
  If `skip_page_creation` is set to true then you have to create the first page yourself. Example:
54
76
 
@@ -62,7 +84,7 @@ pdf.start_new_page size: "A4", page_layout: :portrait
62
84
 
63
85
  #### Hello World
64
86
 
65
- ```ruby
87
+ ```ruby
66
88
  # hello.pdf.prawn
67
89
 
68
90
  prawn_document do |pdf|
@@ -4,18 +4,35 @@ module PrawnRails
4
4
  module RailsHelper
5
5
 
6
6
  def prawn_document(options={})
7
- options.reverse_merge!({
8
- info: {
9
- Title: @filename.sub(/\.(p|P)(d|D)(f|F)$/, '')
10
- }
11
- })
7
+ @filename ||= options[:filename]
8
+
9
+ options.reverse_merge!(get_metadata)
12
10
 
13
11
  pdf = PrawnRails::Document.new(options)
14
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
+
15
22
  yield pdf if block_given?
16
23
 
17
24
  pdf.render
18
25
  end
19
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
@@ -3,17 +3,8 @@ require "prawn-rails/document"
3
3
  module PrawnRails
4
4
  class Renderer
5
5
 
6
- ### WARNING: BE VERY CAREFUL IF EDITING THIS METHOD
7
6
  def self.call(template, source = nil)
8
- %{
9
- @filename ||= "\#{controller.action_name}.pdf"
10
-
11
- if controller.respond_to?(:response) && !controller.response.nil?
12
- controller.response.headers['Content-Disposition'] = "inline; filename=\\\"\#{@filename}\\\""
13
- end
14
-
15
- #{(source || template.source).strip}
16
- }
7
+ (source || template.source).strip
17
8
  end
18
9
 
19
10
  end
@@ -1,3 +1,3 @@
1
1
  module PrawnRails
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  class ReportsController < ApplicationController
2
-
2
+
3
3
  def sample
4
4
  @items = [
5
5
  {name: "Hello"},
@@ -14,5 +14,24 @@ class ReportsController < ApplicationController
14
14
  [7,8,9],
15
15
  ]
16
16
  end
17
-
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
+
18
37
  end
@@ -0,0 +1,3 @@
1
+ prawn_document(filename: "from-options.pdf", disposition: "attachment") do |pdf|
2
+ pdf.text "Hello World!"
3
+ end
@@ -0,0 +1,3 @@
1
+ prawn_document(disposition: "attachment") do |pdf|
2
+ pdf.text "Hello World!"
3
+ end
@@ -0,0 +1,3 @@
1
+ prawn_document(filename: "from-options.pdf") do |pdf|
2
+ pdf.text "Hello World!"
3
+ end
@@ -1,4 +1,9 @@
1
1
  Dummy::Application.routes.draw do
2
+ get "reports/custom"
3
+ get "reports/custom_disposition"
4
+ get "reports/custom_filename"
5
+ get "reports/custom_headers"
6
+ get "reports/ivar_filename"
2
7
  get "reports/sample"
3
8
  get "reports/table"
4
9
  end
File without changes
@@ -0,0 +1,117 @@
1
+  (0.1ms) begin transaction
2
+ ------------------------------------------------------------------------------------
3
+ NavigationTest: test_Renders_table_pdf_action_using_auto-required_plugin_Prawn-Table
4
+ ------------------------------------------------------------------------------------
5
+ Started GET "/reports/table?format=pdf" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
6
+ Processing by ReportsController#table as PDF
7
+ Rendering reports/table.pdf.prawn
8
+ Rendered reports/table.pdf.prawn (112.7ms)
9
+ Completed 200 OK in 121ms (Views: 120.1ms | ActiveRecord: 0.0ms)
10
+  (0.1ms) rollback transaction
11
+  (0.1ms) begin transaction
12
+ ------------------------------------------------------
13
+ NavigationTest: test_Registers_:prawn_template_handler
14
+ ------------------------------------------------------
15
+  (0.1ms) rollback transaction
16
+  (0.1ms) begin transaction
17
+ -----------------------------------------------------------------------
18
+ NavigationTest: test_Respects_both_options_on_'prawn-document'_together
19
+ -----------------------------------------------------------------------
20
+ Started GET "/reports/custom.pdf" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
21
+ Processing by ReportsController#custom as PDF
22
+ Rendering reports/custom.pdf.prawn
23
+ Rendered reports/custom.pdf.prawn (2.2ms)
24
+ Completed 200 OK in 4ms (Views: 2.9ms | ActiveRecord: 0.0ms)
25
+  (0.1ms) rollback transaction
26
+  (0.1ms) begin transaction
27
+ -----------------------------------------------------------------
28
+ NavigationTest: test_Sets_file_name_from_'@filename'_when_present
29
+ -----------------------------------------------------------------
30
+ Started GET "/reports/ivar_filename.pdf" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
31
+ Processing by ReportsController#ivar_filename as PDF
32
+ Rendering reports/custom.pdf.prawn
33
+ Rendered reports/custom.pdf.prawn (1.8ms)
34
+ Completed 200 OK in 3ms (Views: 2.4ms | ActiveRecord: 0.0ms)
35
+  (0.1ms) rollback transaction
36
+  (0.1ms) begin transaction
37
+ ----------------------------------------
38
+ NavigationTest: test_Renders_html_action
39
+ ----------------------------------------
40
+ Started GET "/reports/sample" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
41
+ Processing by ReportsController#sample as HTML
42
+ Rendering reports/sample.html.erb within layouts/application
43
+ Rendered reports/sample.html.erb within layouts/application (1.2ms)
44
+ Completed 200 OK in 203ms (Views: 202.2ms | ActiveRecord: 0.0ms)
45
+  (0.1ms) rollback transaction
46
+  (0.1ms) begin transaction
47
+ ------------------------------------------------------------
48
+ NavigationTest: test_Respects_the_'disposition'_option_alone
49
+ ------------------------------------------------------------
50
+ Started GET "/reports/custom_disposition.pdf" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
51
+ Processing by ReportsController#custom_disposition as PDF
52
+ Rendering reports/custom_disposition.pdf.prawn
53
+ Rendered reports/custom_disposition.pdf.prawn (16.4ms)
54
+ Completed 200 OK in 20ms (Views: 19.4ms | ActiveRecord: 0.0ms)
55
+  (0.1ms) rollback transaction
56
+  (0.1ms) begin transaction
57
+ ---------------------------------------------
58
+ NavigationTest: test_Registers_:pdf_mime_type
59
+ ---------------------------------------------
60
+  (0.1ms) rollback transaction
61
+  (0.1ms) begin transaction
62
+ ------------------------------------------
63
+ NavigationTest: test_Renders_pdf_to_string
64
+ ------------------------------------------
65
+ Rendering reports/sample.pdf.prawn
66
+ Rendered reports/sample.pdf.prawn (72.0ms)
67
+  (0.1ms) rollback transaction
68
+  (0.1ms) begin transaction
69
+ ----------------------------------------------
70
+ NavigationTest: test_Renders_sample_pdf_action
71
+ ----------------------------------------------
72
+ Started GET "/reports/sample?format=pdf" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
73
+ Processing by ReportsController#sample as PDF
74
+ Rendering reports/sample.pdf.prawn
75
+ Rendered reports/sample.pdf.prawn (20.5ms)
76
+ Completed 200 OK in 22ms (Views: 21.2ms | ActiveRecord: 0.0ms)
77
+  (0.1ms) rollback transaction
78
+  (0.1ms) begin transaction
79
+ --------------------------------------------------------------------
80
+ NavigationTest: test_Maintains_existing_'Content-Disposition'_header
81
+ --------------------------------------------------------------------
82
+ Started GET "/reports/custom_headers.pdf" for 127.0.0.1 at 2019-08-07 11:33:33 -0700
83
+ Processing by ReportsController#custom_headers as PDF
84
+ Rendering reports/custom.pdf.prawn
85
+ Rendered reports/custom.pdf.prawn (1.9ms)
86
+ Completed 200 OK in 3ms (Views: 2.5ms | ActiveRecord: 0.0ms)
87
+  (0.1ms) rollback transaction
88
+  (0.1ms) begin transaction
89
+ -----------------------------------------------
90
+ NavigationTest: test_render_to_string_in_mailer
91
+ -----------------------------------------------
92
+ Rendering reports/sample.pdf.prawn
93
+ Rendered reports/sample.pdf.prawn (19.5ms)
94
+ Rendering reports_mailer/send_report.html.erb
95
+ Rendered reports_mailer/send_report.html.erb (0.4ms)
96
+ ReportsMailer#send_report: processed outbound mail in 280.1ms
97
+  (0.1ms) rollback transaction
98
+  (0.1ms) begin transaction
99
+ ---------------------------------------------------------
100
+ NavigationTest: test_Respects_the_'filename'_option_alone
101
+ ---------------------------------------------------------
102
+ Started GET "/reports/custom_filename.pdf" for 127.0.0.1 at 2019-08-07 11:33:34 -0700
103
+ Processing by ReportsController#custom_filename as PDF
104
+ Rendering reports/custom_filename.pdf.prawn
105
+ Rendered reports/custom_filename.pdf.prawn (2.1ms)
106
+ Completed 200 OK in 4ms (Views: 2.8ms | ActiveRecord: 0.0ms)
107
+  (0.1ms) rollback transaction
108
+  (0.1ms) begin transaction
109
+ --------------------------------------------------------------
110
+ PrawnRailsTest: test_matches_.PDF_extension_regardless_of_case
111
+ --------------------------------------------------------------
112
+  (0.1ms) rollback transaction
113
+  (0.1ms) begin transaction
114
+ ----------------------------------------------
115
+ PrawnRailsTest: test_text_can_take_non_strings
116
+ ----------------------------------------------
117
+  (0.1ms) rollback transaction
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&id=7b3a99820c71d7042d0378186f81e6ffd61c650a55f27cebcb852601ae05fa83:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=de1f6ddbeed2af709dcf36381627b030f3002cda655cc621dcb78b60b6120a69:ET
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"8file-digest://app/assets/javascripts/application.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"9file-digest://app/assets/stylesheets/application.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTF
@@ -0,0 +1 @@
1
+ "%�汷g�d�Q~�A�fǟ��#�R��&�j�
@@ -0,0 +1 @@
1
+ "%��B�����șo�$'�A�d��L���xR�U
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI"9file-digest://app/assets/stylesheets/application.css;TTF
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"8file-digest://app/assets/javascripts/application.js;TTF
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=1111edca24b3df6c2857a3e3fe10a1fc3030827fb4be5ce1c5072f75d77c88fb:ET
@@ -0,0 +1 @@
1
+ I"}app/assets/stylesheets/application.css?type=text/css&id=1fef9fc1245c63a4668490c81d3c6c1e5b485f76b14c9805b2f4bfbb005aebfe:ET
@@ -6,6 +6,15 @@ require 'pdf/reader'
6
6
  class NavigationTest < ActionDispatch::IntegrationTest
7
7
  fixtures :all
8
8
 
9
+ def confirm_pdf_format(source)
10
+ reader = PDF::Reader.new(StringIO.new(source))
11
+ assert_not_nil(reader)
12
+ assert_equal(1, reader.page_count)
13
+ page_str = reader.pages[0].to_s
14
+ assert page_str.include?('Hello World!')
15
+ assert_not page_str.include?("<h1>Hello World!</h1>")
16
+ end
17
+
9
18
  test "Registers :pdf mime type" do
10
19
  assert Mime::Type.lookup_by_extension(:pdf)
11
20
  end
@@ -17,35 +26,20 @@ class NavigationTest < ActionDispatch::IntegrationTest
17
26
  test "Renders html action" do
18
27
  get '/reports/sample'
19
28
  assert_response :success
20
- #assert @response.body.include?("<h1>Hello World!</h1>")
21
29
  assert_match("<h1>Hello World!</h1>", @response.body)
22
30
  end
23
31
 
24
32
  test "Renders pdf to string" do
25
33
  pdf_str = ApplicationController.new.render_to_string("reports/sample.pdf", locals: {:@items => []})
26
34
 
27
- reader = PDF::Reader.new(StringIO.new(pdf_str))
28
- assert_not_nil(reader)
29
-
30
- page_str = reader.pages[0].to_s
31
- assert page_str.include?('Hello World!')
32
- assert_not page_str.include?("<h1>Hello World!</h1>")
35
+ confirm_pdf_format(pdf_str)
33
36
  end
34
37
 
35
38
  test "Renders sample pdf action" do
36
39
  get '/reports/sample', params: {format: :pdf}
37
40
  assert_response :success
38
- assert_not @response.body.include?("<h1>Hello World!</h1>")
39
-
40
- reader = PDF::Reader.new(StringIO.new(@response.body))
41
- assert_not_nil(reader)
42
-
43
- assert_equal(1, reader.page_count)
44
41
 
45
- page_str = reader.pages[0].to_s
46
-
47
- assert page_str.include?('Hello World!')
48
- assert_not page_str.include?("<h1>Hello World!</h1>")
42
+ confirm_pdf_format(@response.body)
49
43
  end
50
44
 
51
45
  test "Renders table pdf action using auto-required plugin Prawn-Table" do
@@ -62,17 +56,50 @@ class NavigationTest < ActionDispatch::IntegrationTest
62
56
  assert_equal(page_str, "1 2 3\n\n4 5 6\n\n7 8 9")
63
57
  end
64
58
 
59
+ test "Sets file name from '@filename' when present" do
60
+ get '/reports/ivar_filename.pdf'
61
+
62
+ disposition_header = @response.headers["Content-Disposition"]
63
+ assert disposition_header.include?("attachment")
64
+ assert disposition_header.include?("ivar-filename.pdf")
65
+ end
66
+
67
+ test "Maintains existing 'Content-Disposition' header" do
68
+ get '/reports/custom_headers.pdf'
69
+
70
+ disposition_header = @response.headers["Content-Disposition"]
71
+ assert disposition_header.include?("attachment")
72
+ assert disposition_header.include?("custom-headers.pdf")
73
+ end
74
+
75
+ test "Respects the 'filename' option alone" do
76
+ get '/reports/custom_filename.pdf'
77
+
78
+ disposition_header = @response.headers["Content-Disposition"]
79
+ assert disposition_header.include?("inline")
80
+ assert disposition_header.include?("from-options.pdf")
81
+ end
82
+
83
+ test "Respects the 'disposition' option alone" do
84
+ get '/reports/custom_disposition.pdf'
85
+
86
+ disposition_header = @response.headers["Content-Disposition"]
87
+ assert disposition_header.include?("attachment")
88
+ assert_not disposition_header.include?("filename")
89
+ end
90
+
91
+ test "Respects both options on 'prawn-document' together" do
92
+ get '/reports/custom.pdf'
93
+
94
+ disposition_header = @response.headers["Content-Disposition"]
95
+ assert disposition_header.include?("attachment")
96
+ assert disposition_header.include?("from-options.pdf")
97
+ end
98
+
65
99
  test "render_to_string in mailer" do
66
100
  mail = ReportsMailer.send_report
67
101
  assert_equal(1, mail.attachments.size)
68
102
 
69
- reader = PDF::Reader.new(StringIO.new(mail.attachments["report.pdf"].body.raw_source))
70
- assert_not_nil(reader)
71
- assert_equal(1, reader.page_count)
72
-
73
- page_str = reader.pages[0].to_s
74
-
75
- assert page_str.include?('Hello World!')
76
- assert_not page_str.include?("<h1>Hello World!</h1>")
103
+ confirm_pdf_format(mail.attachments["report.pdf"].body.raw_source)
77
104
  end
78
105
  end
@@ -7,8 +7,6 @@ class PrawnRailsTest < ActiveSupport::TestCase
7
7
  include PrawnRails::RailsHelper
8
8
 
9
9
  test "text can take non strings" do
10
- @filename = ""
11
-
12
10
  output = prawn_document do |pdf|
13
11
  pdf.text "Number:"
14
12
  pdf.text 10
@@ -20,4 +18,11 @@ class PrawnRailsTest < ActiveSupport::TestCase
20
18
  page = reader.page(1).to_s
21
19
  assert page.include?("Number:\n10")
22
20
  end
21
+
22
+ test "matches .PDF extension regardless of case" do
23
+ ["pDf", "pdf", "PDF"].each do |ext|
24
+ @filename = "test.#{ext}"
25
+ assert_equal get_metadata[:info][:Title], "test"
26
+ end
27
+ end
23
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Ortiz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-17 00:00:00.000000000 Z
12
+ date: 2019-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: prawn
@@ -147,6 +147,9 @@ files:
147
147
  - test/dummy_app/app/controllers/reports_controller.rb
148
148
  - test/dummy_app/app/mailers/reports_mailer.rb
149
149
  - test/dummy_app/app/views/layouts/application.html.erb
150
+ - test/dummy_app/app/views/reports/custom.pdf.prawn
151
+ - test/dummy_app/app/views/reports/custom_disposition.pdf.prawn
152
+ - test/dummy_app/app/views/reports/custom_filename.pdf.prawn
150
153
  - test/dummy_app/app/views/reports/sample.html.erb
151
154
  - test/dummy_app/app/views/reports/sample.pdf.prawn
152
155
  - test/dummy_app/app/views/reports/table.pdf.prawn
@@ -170,6 +173,22 @@ files:
170
173
  - test/dummy_app/config/routes.rb
171
174
  - test/dummy_app/config/secrets.yml
172
175
  - test/dummy_app/db/schema.rb
176
+ - test/dummy_app/db/test.sqlite3
177
+ - test/dummy_app/log/test.log
178
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/0Q/0QR6jgJcsDY23uF8NGHFYajkal8CGG4d3kOZQCD8Oj8.cache
179
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/1K/1KcQYwe3g9uhY2WePD1_5P38IzP0Veu8rDPI0wXQSP8.cache
180
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache
181
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/4O/4O6Anm3R8aSIVfMhGtp5tZK3x17fcY1SbWoDN_6hb-o.cache
182
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/4X/4XWDJRe7gZAeojFwJq7j6jJxRr152aQBfyhVtPPSHDY.cache
183
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/7z/7zB4MNaDZMfwUPQ7LsLGHLt1EAx1oMCEUjywneVyoyY.cache
184
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/8D/8D13-8wUZxyVgrsD9RHdWUPhLlWcqnHXtOBMOPQRX-Q.cache
185
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/LR/LRLaw7viwBb9Mi_VFZxGbKIooy8Fqf1aB_iOTETsMyc.cache
186
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache
187
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/Yr/YrGeNwkHFUXGwgJhi0aqJdEHL--OyRwU5aN5azmIXM4.cache
188
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/ib/ibSeAobTqAE0a-v_-umXpnbXaIEx_WOtSsQkSRJCwwI.cache
189
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/mO/mOu9n3QmqPXFbaUP-4RAuwabvsLdudRBvk9LMIOTSoI.cache
190
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/vt/vtyC4n-7HZNOJV7EprjE7ThndKZkG00OVD8sO8cUFAM.cache
191
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/wt/wtoVyr5IaVgQI72M_TLZFUNHeStJ5maRaHlfA8Vt6d0.cache
173
192
  - test/integration/prawn_rails_test.rb
174
193
  - test/prawn_rails_test.rb
175
194
  - test/test_helper.rb
@@ -196,36 +215,55 @@ signing_key:
196
215
  specification_version: 4
197
216
  summary: Prawn Handler for Rails
198
217
  test_files:
199
- - test/integration/prawn_rails_test.rb
200
- - test/prawn_rails_test.rb
201
- - test/test_helper.rb
202
- - test/dummy_app/Rakefile
203
- - test/dummy_app/db/schema.rb
204
- - test/dummy_app/app/mailers/reports_mailer.rb
205
- - test/dummy_app/app/controllers/reports_controller.rb
206
- - test/dummy_app/app/controllers/application_controller.rb
207
- - test/dummy_app/app/assets/javascripts/application.js
208
- - test/dummy_app/app/assets/stylesheets/application.css
209
218
  - test/dummy_app/app/views/reports_mailer/send_report.html.erb
210
- - test/dummy_app/app/views/layouts/application.html.erb
211
- - test/dummy_app/app/views/reports/table.pdf.prawn
219
+ - test/dummy_app/app/views/reports/custom_filename.pdf.prawn
212
220
  - test/dummy_app/app/views/reports/sample.pdf.prawn
221
+ - test/dummy_app/app/views/reports/custom.pdf.prawn
213
222
  - test/dummy_app/app/views/reports/sample.html.erb
214
- - test/dummy_app/config.ru
215
- - test/dummy_app/config/application.rb
216
- - test/dummy_app/config/environments/production.rb
217
- - test/dummy_app/config/environments/development.rb
218
- - test/dummy_app/config/environments/test.rb
219
- - test/dummy_app/config/locales/en.yml
220
- - test/dummy_app/config/routes.rb
221
- - test/dummy_app/config/secrets.yml
223
+ - test/dummy_app/app/views/reports/table.pdf.prawn
224
+ - test/dummy_app/app/views/reports/custom_disposition.pdf.prawn
225
+ - test/dummy_app/app/views/layouts/application.html.erb
226
+ - test/dummy_app/app/mailers/reports_mailer.rb
227
+ - test/dummy_app/app/assets/javascripts/application.js
228
+ - test/dummy_app/app/assets/stylesheets/application.css
229
+ - test/dummy_app/app/controllers/reports_controller.rb
230
+ - test/dummy_app/app/controllers/application_controller.rb
222
231
  - test/dummy_app/config/environment.rb
232
+ - test/dummy_app/config/secrets.yml
233
+ - test/dummy_app/config/application.rb
234
+ - test/dummy_app/config/database.yml
223
235
  - test/dummy_app/config/initializers/mime_types.rb
224
- - test/dummy_app/config/initializers/prawn-rails.rb
225
- - test/dummy_app/config/initializers/secret_token.rb
226
236
  - test/dummy_app/config/initializers/backtrace_silencers.rb
227
- - test/dummy_app/config/initializers/inflections.rb
228
237
  - test/dummy_app/config/initializers/session_store.rb
238
+ - test/dummy_app/config/initializers/secret_token.rb
229
239
  - test/dummy_app/config/initializers/wrap_parameters.rb
230
- - test/dummy_app/config/database.yml
240
+ - test/dummy_app/config/initializers/prawn-rails.rb
241
+ - test/dummy_app/config/initializers/inflections.rb
242
+ - test/dummy_app/config/routes.rb
243
+ - test/dummy_app/config/locales/en.yml
244
+ - test/dummy_app/config/environments/production.rb
245
+ - test/dummy_app/config/environments/test.rb
246
+ - test/dummy_app/config/environments/development.rb
231
247
  - test/dummy_app/config/boot.rb
248
+ - test/dummy_app/log/test.log
249
+ - test/dummy_app/config.ru
250
+ - test/dummy_app/Rakefile
251
+ - test/dummy_app/db/test.sqlite3
252
+ - test/dummy_app/db/schema.rb
253
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/1K/1KcQYwe3g9uhY2WePD1_5P38IzP0Veu8rDPI0wXQSP8.cache
254
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/8D/8D13-8wUZxyVgrsD9RHdWUPhLlWcqnHXtOBMOPQRX-Q.cache
255
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/4O/4O6Anm3R8aSIVfMhGtp5tZK3x17fcY1SbWoDN_6hb-o.cache
256
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/4X/4XWDJRe7gZAeojFwJq7j6jJxRr152aQBfyhVtPPSHDY.cache
257
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/LR/LRLaw7viwBb9Mi_VFZxGbKIooy8Fqf1aB_iOTETsMyc.cache
258
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache
259
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/mO/mOu9n3QmqPXFbaUP-4RAuwabvsLdudRBvk9LMIOTSoI.cache
260
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache
261
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/wt/wtoVyr5IaVgQI72M_TLZFUNHeStJ5maRaHlfA8Vt6d0.cache
262
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/Yr/YrGeNwkHFUXGwgJhi0aqJdEHL--OyRwU5aN5azmIXM4.cache
263
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/vt/vtyC4n-7HZNOJV7EprjE7ThndKZkG00OVD8sO8cUFAM.cache
264
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/0Q/0QR6jgJcsDY23uF8NGHFYajkal8CGG4d3kOZQCD8Oj8.cache
265
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/7z/7zB4MNaDZMfwUPQ7LsLGHLt1EAx1oMCEUjywneVyoyY.cache
266
+ - test/dummy_app/tmp/cache/assets/sprockets/v3.0/ib/ibSeAobTqAE0a-v_-umXpnbXaIEx_WOtSsQkSRJCwwI.cache
267
+ - test/prawn_rails_test.rb
268
+ - test/integration/prawn_rails_test.rb
269
+ - test/test_helper.rb