actionpack 7.1.3 → 7.2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -501
  3. data/lib/abstract_controller/asset_paths.rb +2 -0
  4. data/lib/abstract_controller/base.rb +102 -98
  5. data/lib/abstract_controller/caching/fragments.rb +50 -53
  6. data/lib/abstract_controller/caching.rb +2 -0
  7. data/lib/abstract_controller/callbacks.rb +66 -64
  8. data/lib/abstract_controller/collector.rb +6 -6
  9. data/lib/abstract_controller/deprecator.rb +2 -0
  10. data/lib/abstract_controller/error.rb +2 -0
  11. data/lib/abstract_controller/helpers.rb +70 -85
  12. data/lib/abstract_controller/logger.rb +2 -0
  13. data/lib/abstract_controller/railties/routes_helpers.rb +2 -0
  14. data/lib/abstract_controller/rendering.rb +13 -12
  15. data/lib/abstract_controller/translation.rb +15 -7
  16. data/lib/abstract_controller/url_for.rb +8 -6
  17. data/lib/abstract_controller.rb +2 -0
  18. data/lib/action_controller/api/api_rendering.rb +2 -0
  19. data/lib/action_controller/api.rb +74 -72
  20. data/lib/action_controller/base.rb +198 -126
  21. data/lib/action_controller/caching.rb +15 -12
  22. data/lib/action_controller/deprecator.rb +2 -0
  23. data/lib/action_controller/form_builder.rb +20 -17
  24. data/lib/action_controller/log_subscriber.rb +3 -1
  25. data/lib/action_controller/metal/allow_browser.rb +123 -0
  26. data/lib/action_controller/metal/basic_implicit_render.rb +2 -0
  27. data/lib/action_controller/metal/conditional_get.rb +188 -174
  28. data/lib/action_controller/metal/content_security_policy.rb +25 -24
  29. data/lib/action_controller/metal/cookies.rb +4 -2
  30. data/lib/action_controller/metal/data_streaming.rb +64 -55
  31. data/lib/action_controller/metal/default_headers.rb +5 -3
  32. data/lib/action_controller/metal/etag_with_flash.rb +3 -1
  33. data/lib/action_controller/metal/etag_with_template_digest.rb +17 -15
  34. data/lib/action_controller/metal/exceptions.rb +11 -9
  35. data/lib/action_controller/metal/flash.rb +12 -10
  36. data/lib/action_controller/metal/head.rb +12 -10
  37. data/lib/action_controller/metal/helpers.rb +63 -55
  38. data/lib/action_controller/metal/http_authentication.rb +210 -205
  39. data/lib/action_controller/metal/implicit_render.rb +17 -15
  40. data/lib/action_controller/metal/instrumentation.rb +15 -12
  41. data/lib/action_controller/metal/live.rb +113 -107
  42. data/lib/action_controller/metal/logging.rb +6 -4
  43. data/lib/action_controller/metal/mime_responds.rb +151 -142
  44. data/lib/action_controller/metal/parameter_encoding.rb +34 -32
  45. data/lib/action_controller/metal/params_wrapper.rb +57 -59
  46. data/lib/action_controller/metal/permissions_policy.rb +13 -12
  47. data/lib/action_controller/metal/rate_limiting.rb +62 -0
  48. data/lib/action_controller/metal/redirecting.rb +108 -82
  49. data/lib/action_controller/metal/renderers.rb +50 -49
  50. data/lib/action_controller/metal/rendering.rb +103 -75
  51. data/lib/action_controller/metal/request_forgery_protection.rb +162 -133
  52. data/lib/action_controller/metal/rescue.rb +11 -9
  53. data/lib/action_controller/metal/streaming.rb +138 -136
  54. data/lib/action_controller/metal/strong_parameters.rb +525 -480
  55. data/lib/action_controller/metal/testing.rb +2 -0
  56. data/lib/action_controller/metal/url_for.rb +17 -15
  57. data/lib/action_controller/metal.rb +86 -60
  58. data/lib/action_controller/railtie.rb +3 -0
  59. data/lib/action_controller/railties/helpers.rb +2 -0
  60. data/lib/action_controller/renderer.rb +42 -36
  61. data/lib/action_controller/template_assertions.rb +4 -2
  62. data/lib/action_controller/test_case.rb +146 -126
  63. data/lib/action_controller.rb +10 -3
  64. data/lib/action_dispatch/constants.rb +2 -0
  65. data/lib/action_dispatch/deprecator.rb +2 -0
  66. data/lib/action_dispatch/http/cache.rb +27 -26
  67. data/lib/action_dispatch/http/content_disposition.rb +2 -0
  68. data/lib/action_dispatch/http/content_security_policy.rb +44 -38
  69. data/lib/action_dispatch/http/filter_parameters.rb +18 -9
  70. data/lib/action_dispatch/http/filter_redirect.rb +22 -1
  71. data/lib/action_dispatch/http/headers.rb +22 -22
  72. data/lib/action_dispatch/http/mime_negotiation.rb +30 -41
  73. data/lib/action_dispatch/http/mime_type.rb +31 -24
  74. data/lib/action_dispatch/http/mime_types.rb +2 -0
  75. data/lib/action_dispatch/http/parameters.rb +11 -9
  76. data/lib/action_dispatch/http/permissions_policy.rb +20 -44
  77. data/lib/action_dispatch/http/rack_cache.rb +2 -0
  78. data/lib/action_dispatch/http/request.rb +94 -75
  79. data/lib/action_dispatch/http/response.rb +73 -61
  80. data/lib/action_dispatch/http/upload.rb +18 -16
  81. data/lib/action_dispatch/http/url.rb +75 -73
  82. data/lib/action_dispatch/journey/formatter.rb +13 -6
  83. data/lib/action_dispatch/journey/gtg/builder.rb +4 -3
  84. data/lib/action_dispatch/journey/gtg/simulator.rb +2 -0
  85. data/lib/action_dispatch/journey/gtg/transition_table.rb +10 -8
  86. data/lib/action_dispatch/journey/nfa/dot.rb +2 -0
  87. data/lib/action_dispatch/journey/nodes/node.rb +6 -5
  88. data/lib/action_dispatch/journey/parser.rb +4 -3
  89. data/lib/action_dispatch/journey/parser_extras.rb +2 -0
  90. data/lib/action_dispatch/journey/path/pattern.rb +4 -1
  91. data/lib/action_dispatch/journey/route.rb +9 -7
  92. data/lib/action_dispatch/journey/router/utils.rb +16 -15
  93. data/lib/action_dispatch/journey/router.rb +4 -2
  94. data/lib/action_dispatch/journey/routes.rb +4 -2
  95. data/lib/action_dispatch/journey/scanner.rb +4 -2
  96. data/lib/action_dispatch/journey/visitors.rb +2 -0
  97. data/lib/action_dispatch/journey.rb +2 -0
  98. data/lib/action_dispatch/log_subscriber.rb +2 -0
  99. data/lib/action_dispatch/middleware/actionable_exceptions.rb +2 -0
  100. data/lib/action_dispatch/middleware/assume_ssl.rb +8 -5
  101. data/lib/action_dispatch/middleware/callbacks.rb +3 -1
  102. data/lib/action_dispatch/middleware/cookies.rb +119 -104
  103. data/lib/action_dispatch/middleware/debug_exceptions.rb +13 -5
  104. data/lib/action_dispatch/middleware/debug_locks.rb +15 -13
  105. data/lib/action_dispatch/middleware/debug_view.rb +2 -0
  106. data/lib/action_dispatch/middleware/exception_wrapper.rb +6 -11
  107. data/lib/action_dispatch/middleware/executor.rb +8 -0
  108. data/lib/action_dispatch/middleware/flash.rb +63 -51
  109. data/lib/action_dispatch/middleware/host_authorization.rb +17 -15
  110. data/lib/action_dispatch/middleware/public_exceptions.rb +8 -6
  111. data/lib/action_dispatch/middleware/reloader.rb +5 -3
  112. data/lib/action_dispatch/middleware/remote_ip.rb +77 -72
  113. data/lib/action_dispatch/middleware/request_id.rb +14 -9
  114. data/lib/action_dispatch/middleware/server_timing.rb +4 -2
  115. data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -0
  116. data/lib/action_dispatch/middleware/session/cache_store.rb +13 -8
  117. data/lib/action_dispatch/middleware/session/cookie_store.rb +27 -26
  118. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +7 -3
  119. data/lib/action_dispatch/middleware/show_exceptions.rb +31 -21
  120. data/lib/action_dispatch/middleware/ssl.rb +43 -40
  121. data/lib/action_dispatch/middleware/stack.rb +11 -10
  122. data/lib/action_dispatch/middleware/static.rb +33 -31
  123. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +1 -1
  124. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +1 -1
  125. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +1 -1
  126. data/lib/action_dispatch/railtie.rb +2 -4
  127. data/lib/action_dispatch/request/session.rb +23 -21
  128. data/lib/action_dispatch/request/utils.rb +2 -0
  129. data/lib/action_dispatch/routing/endpoint.rb +2 -0
  130. data/lib/action_dispatch/routing/inspector.rb +5 -3
  131. data/lib/action_dispatch/routing/mapper.rb +671 -636
  132. data/lib/action_dispatch/routing/polymorphic_routes.rb +69 -62
  133. data/lib/action_dispatch/routing/redirection.rb +37 -32
  134. data/lib/action_dispatch/routing/route_set.rb +59 -45
  135. data/lib/action_dispatch/routing/routes_proxy.rb +6 -4
  136. data/lib/action_dispatch/routing/url_for.rb +130 -125
  137. data/lib/action_dispatch/routing.rb +150 -148
  138. data/lib/action_dispatch/system_test_case.rb +91 -81
  139. data/lib/action_dispatch/system_testing/browser.rb +10 -3
  140. data/lib/action_dispatch/system_testing/driver.rb +3 -1
  141. data/lib/action_dispatch/system_testing/server.rb +2 -0
  142. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +32 -21
  143. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +2 -0
  144. data/lib/action_dispatch/testing/assertion_response.rb +8 -6
  145. data/lib/action_dispatch/testing/assertions/response.rb +26 -23
  146. data/lib/action_dispatch/testing/assertions/routing.rb +153 -84
  147. data/lib/action_dispatch/testing/assertions.rb +2 -0
  148. data/lib/action_dispatch/testing/integration.rb +223 -222
  149. data/lib/action_dispatch/testing/request_encoder.rb +2 -0
  150. data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
  151. data/lib/action_dispatch/testing/test_process.rb +12 -8
  152. data/lib/action_dispatch/testing/test_request.rb +3 -1
  153. data/lib/action_dispatch/testing/test_response.rb +27 -26
  154. data/lib/action_dispatch.rb +22 -28
  155. data/lib/action_pack/gem_version.rb +6 -4
  156. data/lib/action_pack/version.rb +3 -1
  157. data/lib/action_pack.rb +17 -16
  158. metadata +39 -16
@@ -1,208 +1,210 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :markup: markdown
4
+
3
5
  module ActionController # :nodoc:
4
- # = Action Controller \Streaming
6
+ # # Action Controller Streaming
5
7
  #
6
8
  # Allows views to be streamed back to the client as they are rendered.
7
9
  #
8
- # By default, \Rails renders views by first rendering the template
9
- # and then the layout. The response is sent to the client after the whole
10
- # template is rendered, all queries are made, and the layout is processed.
10
+ # By default, Rails renders views by first rendering the template and then the
11
+ # layout. The response is sent to the client after the whole template is
12
+ # rendered, all queries are made, and the layout is processed.
11
13
  #
12
- # \Streaming inverts the rendering flow by rendering the layout first and
14
+ # Streaming inverts the rendering flow by rendering the layout first and
13
15
  # subsequently each part of the layout as they are processed. This allows the
14
- # header of the HTML (which is usually in the layout) to be streamed back
15
- # to client very quickly, enabling JavaScripts and stylesheets to be loaded
16
- # earlier than usual.
17
- #
18
- # Several Rack middlewares may not work and you need to be careful when streaming.
19
- # This is covered in more detail below, see the Streaming@Middlewares section.
20
- #
21
- # \Streaming can be added to a given template easily, all you need to do is
22
- # to pass the +:stream+ option to +render+.
23
- #
24
- # class PostsController
25
- # def index
26
- # @posts = Post.all
27
- # render stream: true
16
+ # header of the HTML (which is usually in the layout) to be streamed back to
17
+ # client very quickly, enabling JavaScripts and stylesheets to be loaded earlier
18
+ # than usual.
19
+ #
20
+ # Several Rack middlewares may not work and you need to be careful when
21
+ # streaming. This is covered in more detail below, see the Streaming@Middlewares
22
+ # section.
23
+ #
24
+ # Streaming can be added to a given template easily, all you need to do is to
25
+ # pass the `:stream` option to `render`.
26
+ #
27
+ # class PostsController
28
+ # def index
29
+ # @posts = Post.all
30
+ # render stream: true
31
+ # end
28
32
  # end
29
- # end
30
33
  #
31
- # == When to use streaming
34
+ # ## When to use streaming
32
35
  #
33
- # \Streaming may be considered to be overkill for lightweight actions like
34
- # +new+ or +edit+. The real benefit of streaming is on expensive actions
35
- # that, for example, do a lot of queries on the database.
36
+ # Streaming may be considered to be overkill for lightweight actions like `new`
37
+ # or `edit`. The real benefit of streaming is on expensive actions that, for
38
+ # example, do a lot of queries on the database.
36
39
  #
37
- # In such actions, you want to delay queries execution as much as you can.
38
- # For example, imagine the following +dashboard+ action:
40
+ # In such actions, you want to delay queries execution as much as you can. For
41
+ # example, imagine the following `dashboard` action:
39
42
  #
40
- # def dashboard
41
- # @posts = Post.all
42
- # @pages = Page.all
43
- # @articles = Article.all
44
- # end
43
+ # def dashboard
44
+ # @posts = Post.all
45
+ # @pages = Page.all
46
+ # @articles = Article.all
47
+ # end
45
48
  #
46
49
  # Most of the queries here are happening in the controller. In order to benefit
47
50
  # from streaming you would want to rewrite it as:
48
51
  #
49
- # def dashboard
50
- # # Allow lazy execution of the queries
51
- # @posts = Post.all
52
- # @pages = Page.all
53
- # @articles = Article.all
54
- # render stream: true
55
- # end
52
+ # def dashboard
53
+ # # Allow lazy execution of the queries
54
+ # @posts = Post.all
55
+ # @pages = Page.all
56
+ # @articles = Article.all
57
+ # render stream: true
58
+ # end
56
59
  #
57
- # Notice that +:stream+ only works with templates. \Rendering +:json+
58
- # or +:xml+ with +:stream+ won't work.
60
+ # Notice that `:stream` only works with templates. Rendering `:json` or `:xml`
61
+ # with `:stream` won't work.
59
62
  #
60
- # == Communication between layout and template
63
+ # ## Communication between layout and template
61
64
  #
62
- # When streaming, rendering happens top-down instead of inside-out.
63
- # \Rails starts with the layout, and the template is rendered later,
64
- # when its +yield+ is reached.
65
+ # When streaming, rendering happens top-down instead of inside-out. Rails starts
66
+ # with the layout, and the template is rendered later, when its `yield` is
67
+ # reached.
65
68
  #
66
- # This means that, if your application currently relies on instance
67
- # variables set in the template to be used in the layout, they won't
68
- # work once you move to streaming. The proper way to communicate
69
- # between layout and template, regardless of whether you use streaming
70
- # or not, is by using +content_for+, +provide+, and +yield+.
69
+ # This means that, if your application currently relies on instance variables
70
+ # set in the template to be used in the layout, they won't work once you move to
71
+ # streaming. The proper way to communicate between layout and template,
72
+ # regardless of whether you use streaming or not, is by using `content_for`,
73
+ # `provide`, and `yield`.
71
74
  #
72
- # Take a simple example where the layout expects the template to tell
73
- # which title to use:
75
+ # Take a simple example where the layout expects the template to tell which
76
+ # title to use:
74
77
  #
75
- # <html>
76
- # <head><title><%= yield :title %></title></head>
77
- # <body><%= yield %></body>
78
- # </html>
78
+ # <html>
79
+ # <head><title><%= yield :title %></title></head>
80
+ # <body><%= yield %></body>
81
+ # </html>
79
82
  #
80
- # You would use +content_for+ in your template to specify the title:
83
+ # You would use `content_for` in your template to specify the title:
81
84
  #
82
- # <%= content_for :title, "Main" %>
83
- # Hello
85
+ # <%= content_for :title, "Main" %>
86
+ # Hello
84
87
  #
85
88
  # And the final result would be:
86
89
  #
87
- # <html>
88
- # <head><title>Main</title></head>
89
- # <body>Hello</body>
90
- # </html>
90
+ # <html>
91
+ # <head><title>Main</title></head>
92
+ # <body>Hello</body>
93
+ # </html>
91
94
  #
92
- # However, if +content_for+ is called several times, the final result
93
- # would have all calls concatenated. For instance, if we have the following
94
- # template:
95
+ # However, if `content_for` is called several times, the final result would have
96
+ # all calls concatenated. For instance, if we have the following template:
95
97
  #
96
- # <%= content_for :title, "Main" %>
97
- # Hello
98
- # <%= content_for :title, " page" %>
98
+ # <%= content_for :title, "Main" %>
99
+ # Hello
100
+ # <%= content_for :title, " page" %>
99
101
  #
100
102
  # The final result would be:
101
103
  #
102
- # <html>
103
- # <head><title>Main page</title></head>
104
- # <body>Hello</body>
105
- # </html>
104
+ # <html>
105
+ # <head><title>Main page</title></head>
106
+ # <body>Hello</body>
107
+ # </html>
106
108
  #
107
- # This means that, if you have <code>yield :title</code> in your layout
108
- # and you want to use streaming, you would have to render the whole template
109
- # (and eventually trigger all queries) before streaming the title and all
110
- # assets, which defeats the purpose of streaming. Alternatively, you can use
111
- # a helper called +provide+ that does the same as +content_for+ but tells the
112
- # layout to stop searching for other entries and continue rendering.
109
+ # This means that, if you have `yield :title` in your layout and you want to use
110
+ # streaming, you would have to render the whole template (and eventually trigger
111
+ # all queries) before streaming the title and all assets, which defeats the
112
+ # purpose of streaming. Alternatively, you can use a helper called `provide`
113
+ # that does the same as `content_for` but tells the layout to stop searching for
114
+ # other entries and continue rendering.
113
115
  #
114
- # For instance, the template above using +provide+ would be:
116
+ # For instance, the template above using `provide` would be:
115
117
  #
116
- # <%= provide :title, "Main" %>
117
- # Hello
118
- # <%= content_for :title, " page" %>
118
+ # <%= provide :title, "Main" %>
119
+ # Hello
120
+ # <%= content_for :title, " page" %>
119
121
  #
120
122
  # Resulting in:
121
123
  #
122
- # <html>
123
- # <head><title>Main</title></head>
124
- # <body>Hello</body>
125
- # </html>
124
+ # <html>
125
+ # <head><title>Main</title></head>
126
+ # <body>Hello</body>
127
+ # </html>
126
128
  #
127
- # That said, when streaming, you need to properly check your templates
128
- # and choose when to use +provide+ and +content_for+.
129
+ # That said, when streaming, you need to properly check your templates and
130
+ # choose when to use `provide` and `content_for`.
129
131
  #
130
132
  # See also ActionView::Helpers::CaptureHelper for more information.
131
133
  #
132
- # == Headers, cookies, session, and flash
134
+ # ## Headers, cookies, session, and flash
133
135
  #
134
- # When streaming, the HTTP headers are sent to the client right before
135
- # it renders the first line. This means that, modifying headers, cookies,
136
- # session or flash after the template starts rendering will not propagate
137
- # to the client.
136
+ # When streaming, the HTTP headers are sent to the client right before it
137
+ # renders the first line. This means that, modifying headers, cookies, session
138
+ # or flash after the template starts rendering will not propagate to the client.
138
139
  #
139
- # == Middlewares
140
+ # ## Middlewares
140
141
  #
141
- # Middlewares that need to manipulate the body won't work with streaming.
142
- # You should disable those middlewares whenever streaming in development
143
- # or production. For instance, +Rack::Bug+ won't work when streaming as it
144
- # needs to inject contents in the HTML body.
142
+ # Middlewares that need to manipulate the body won't work with streaming. You
143
+ # should disable those middlewares whenever streaming in development or
144
+ # production. For instance, `Rack::Bug` won't work when streaming as it needs to
145
+ # inject contents in the HTML body.
145
146
  #
146
- # Also +Rack::Cache+ won't work with streaming as it does not support
147
- # streaming bodies yet. Whenever streaming +Cache-Control+ is automatically
148
- # set to "no-cache".
147
+ # Also `Rack::Cache` won't work with streaming as it does not support streaming
148
+ # bodies yet. Whenever streaming `Cache-Control` is automatically set to
149
+ # "no-cache".
149
150
  #
150
- # == Errors
151
+ # ## Errors
151
152
  #
152
153
  # When it comes to streaming, exceptions get a bit more complicated. This
153
- # happens because part of the template was already rendered and streamed to
154
- # the client, making it impossible to render a whole exception page.
154
+ # happens because part of the template was already rendered and streamed to the
155
+ # client, making it impossible to render a whole exception page.
155
156
  #
156
- # Currently, when an exception happens in development or production, \Rails
157
- # will automatically stream to the client:
157
+ # Currently, when an exception happens in development or production, Rails will
158
+ # automatically stream to the client:
158
159
  #
159
- # "><script>window.location = "/500.html"</script></html>
160
+ # "><script>window.location = "/500.html"</script></html>
160
161
  #
161
- # The first two characters (<tt>"></tt>) are required in case the exception
162
- # happens while rendering attributes for a given tag. You can check the real
163
- # cause for the exception in your logger.
162
+ # The first two characters (`">`) are required in case the exception happens
163
+ # while rendering attributes for a given tag. You can check the real cause for
164
+ # the exception in your logger.
164
165
  #
165
- # == Web server support
166
+ # ## Web server support
166
167
  #
167
- # Not all web servers support streaming out-of-the-box. You need to check
168
- # the instructions for each of them.
168
+ # Not all web servers support streaming out-of-the-box. You need to check the
169
+ # instructions for each of them.
169
170
  #
170
- # ==== Unicorn
171
+ # #### Unicorn
171
172
  #
172
- # Unicorn supports streaming but it needs to be configured. For this, you
173
- # need to create a config file as follow:
173
+ # Unicorn supports streaming but it needs to be configured. For this, you need
174
+ # to create a config file as follow:
174
175
  #
175
- # # unicorn.config.rb
176
- # listen 3000, tcp_nopush: false
176
+ # # unicorn.config.rb
177
+ # listen 3000, tcp_nopush: false
177
178
  #
178
179
  # And use it on initialization:
179
180
  #
180
- # unicorn_rails --config-file unicorn.config.rb
181
+ # unicorn_rails --config-file unicorn.config.rb
181
182
  #
182
- # You may also want to configure other parameters like <tt>:tcp_nodelay</tt>.
183
+ # You may also want to configure other parameters like `:tcp_nodelay`.
183
184
  #
184
185
  # For more information, please check the
185
- # {documentation}[https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-listen].
186
+ # [documentation](https://bogomips.org/unicorn/Unicorn/Configurator.html#method-
187
+ # i-listen).
186
188
  #
187
- # If you are using Unicorn with NGINX, you may need to tweak NGINX.
188
- # \Streaming should work out of the box on Rainbows.
189
+ # If you are using Unicorn with NGINX, you may need to tweak NGINX. Streaming
190
+ # should work out of the box on Rainbows.
189
191
  #
190
- # ==== Passenger
192
+ # #### Passenger
191
193
  #
192
194
  # Phusion Passenger with NGINX, offers two streaming mechanisms out of the box.
193
195
  #
194
- # 1. NGINX response buffering mechanism which is dependent on the value of
195
- # +passenger_buffer_response+ option (default is "off").
196
- # 2. Passenger buffering system which is always 'on' irrespective of the value
197
- # of +passenger_buffer_response+.
196
+ # 1. NGINX response buffering mechanism which is dependent on the value of
197
+ # `passenger_buffer_response` option (default is "off").
198
+ # 2. Passenger buffering system which is always 'on' irrespective of the value
199
+ # of `passenger_buffer_response`.
198
200
  #
199
- # When +passenger_buffer_response+ is turned "on", then streaming would be
200
- # done at the NGINX level which waits until the application is done sending
201
- # the response back to the client.
202
201
  #
203
- # For more information, please check the
204
- # {documentation}[https://www.phusionpassenger.com/docs/references/config_reference/nginx/#passenger_buffer_response].
202
+ # When `passenger_buffer_response` is turned "on", then streaming would be done
203
+ # at the NGINX level which waits until the application is done sending the
204
+ # response back to the client.
205
205
  #
206
+ # For more information, please check the [documentation]
207
+ # (https://www.phusionpassenger.com/docs/references/config_reference/nginx/#passenger_buffer_response).
206
208
  module Streaming
207
209
  class Body # :nodoc:
208
210
  TERM = "\r\n"
@@ -213,8 +215,8 @@ module ActionController # :nodoc:
213
215
  @body = body
214
216
  end
215
217
 
216
- # For each element yielded by the response body, yield
217
- # the element in chunked encoding.
218
+ # For each element yielded by the response body, yield the element in chunked
219
+ # encoding.
218
220
  def each(&block)
219
221
  term = TERM
220
222
  @body.each do |chunk|
@@ -248,7 +250,7 @@ module ActionController # :nodoc:
248
250
  end
249
251
  end
250
252
 
251
- # Call render_body if we are streaming instead of usual +render+.
253
+ # Call render_body if we are streaming instead of usual `render`.
252
254
  def _render_template(options)
253
255
  if options.delete(:stream)
254
256
  Body.new view_renderer.render_body(view_context, options)