actionpack 7.1.5.1 → 8.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +308 -523
  3. data/README.rdoc +1 -1
  4. data/lib/abstract_controller/asset_paths.rb +6 -2
  5. data/lib/abstract_controller/base.rb +104 -105
  6. data/lib/abstract_controller/caching/fragments.rb +50 -53
  7. data/lib/abstract_controller/caching.rb +8 -3
  8. data/lib/abstract_controller/callbacks.rb +70 -62
  9. data/lib/abstract_controller/collector.rb +7 -7
  10. data/lib/abstract_controller/deprecator.rb +2 -0
  11. data/lib/abstract_controller/error.rb +2 -0
  12. data/lib/abstract_controller/helpers.rb +71 -84
  13. data/lib/abstract_controller/logger.rb +4 -1
  14. data/lib/abstract_controller/railties/routes_helpers.rb +2 -0
  15. data/lib/abstract_controller/rendering.rb +13 -13
  16. data/lib/abstract_controller/translation.rb +12 -13
  17. data/lib/abstract_controller/url_for.rb +8 -6
  18. data/lib/abstract_controller.rb +2 -0
  19. data/lib/action_controller/api/api_rendering.rb +2 -0
  20. data/lib/action_controller/api.rb +76 -72
  21. data/lib/action_controller/base.rb +199 -126
  22. data/lib/action_controller/caching.rb +16 -14
  23. data/lib/action_controller/deprecator.rb +2 -0
  24. data/lib/action_controller/form_builder.rb +21 -18
  25. data/lib/action_controller/log_subscriber.rb +23 -2
  26. data/lib/action_controller/metal/allow_browser.rb +133 -0
  27. data/lib/action_controller/metal/basic_implicit_render.rb +2 -0
  28. data/lib/action_controller/metal/conditional_get.rb +217 -175
  29. data/lib/action_controller/metal/content_security_policy.rb +25 -24
  30. data/lib/action_controller/metal/cookies.rb +4 -2
  31. data/lib/action_controller/metal/data_streaming.rb +72 -63
  32. data/lib/action_controller/metal/default_headers.rb +5 -3
  33. data/lib/action_controller/metal/etag_with_flash.rb +3 -1
  34. data/lib/action_controller/metal/etag_with_template_digest.rb +17 -15
  35. data/lib/action_controller/metal/exceptions.rb +16 -9
  36. data/lib/action_controller/metal/flash.rb +13 -14
  37. data/lib/action_controller/metal/head.rb +15 -11
  38. data/lib/action_controller/metal/helpers.rb +63 -55
  39. data/lib/action_controller/metal/http_authentication.rb +209 -201
  40. data/lib/action_controller/metal/implicit_render.rb +17 -15
  41. data/lib/action_controller/metal/instrumentation.rb +16 -14
  42. data/lib/action_controller/metal/live.rb +177 -128
  43. data/lib/action_controller/metal/logging.rb +6 -4
  44. data/lib/action_controller/metal/mime_responds.rb +151 -142
  45. data/lib/action_controller/metal/parameter_encoding.rb +34 -32
  46. data/lib/action_controller/metal/params_wrapper.rb +57 -59
  47. data/lib/action_controller/metal/permissions_policy.rb +22 -12
  48. data/lib/action_controller/metal/rate_limiting.rb +92 -0
  49. data/lib/action_controller/metal/redirecting.rb +213 -94
  50. data/lib/action_controller/metal/renderers.rb +78 -57
  51. data/lib/action_controller/metal/rendering.rb +111 -77
  52. data/lib/action_controller/metal/request_forgery_protection.rb +182 -143
  53. data/lib/action_controller/metal/rescue.rb +20 -9
  54. data/lib/action_controller/metal/streaming.rb +118 -195
  55. data/lib/action_controller/metal/strong_parameters.rb +720 -530
  56. data/lib/action_controller/metal/testing.rb +2 -0
  57. data/lib/action_controller/metal/url_for.rb +17 -15
  58. data/lib/action_controller/metal.rb +86 -60
  59. data/lib/action_controller/railtie.rb +36 -15
  60. data/lib/action_controller/railties/helpers.rb +2 -0
  61. data/lib/action_controller/renderer.rb +41 -36
  62. data/lib/action_controller/structured_event_subscriber.rb +116 -0
  63. data/lib/action_controller/template_assertions.rb +4 -2
  64. data/lib/action_controller/test_case.rb +160 -131
  65. data/lib/action_controller.rb +5 -1
  66. data/lib/action_dispatch/constants.rb +8 -0
  67. data/lib/action_dispatch/deprecator.rb +2 -0
  68. data/lib/action_dispatch/http/cache.rb +163 -35
  69. data/lib/action_dispatch/http/content_disposition.rb +2 -0
  70. data/lib/action_dispatch/http/content_security_policy.rb +54 -39
  71. data/lib/action_dispatch/http/filter_parameters.rb +14 -8
  72. data/lib/action_dispatch/http/filter_redirect.rb +22 -1
  73. data/lib/action_dispatch/http/headers.rb +22 -22
  74. data/lib/action_dispatch/http/mime_negotiation.rb +89 -41
  75. data/lib/action_dispatch/http/mime_type.rb +25 -21
  76. data/lib/action_dispatch/http/mime_types.rb +3 -0
  77. data/lib/action_dispatch/http/param_builder.rb +187 -0
  78. data/lib/action_dispatch/http/param_error.rb +26 -0
  79. data/lib/action_dispatch/http/parameters.rb +14 -12
  80. data/lib/action_dispatch/http/permissions_policy.rb +25 -36
  81. data/lib/action_dispatch/http/query_parser.rb +55 -0
  82. data/lib/action_dispatch/http/rack_cache.rb +2 -0
  83. data/lib/action_dispatch/http/request.rb +141 -92
  84. data/lib/action_dispatch/http/response.rb +137 -77
  85. data/lib/action_dispatch/http/upload.rb +18 -16
  86. data/lib/action_dispatch/http/url.rb +187 -89
  87. data/lib/action_dispatch/journey/formatter.rb +21 -9
  88. data/lib/action_dispatch/journey/gtg/builder.rb +4 -3
  89. data/lib/action_dispatch/journey/gtg/simulator.rb +34 -11
  90. data/lib/action_dispatch/journey/gtg/transition_table.rb +47 -53
  91. data/lib/action_dispatch/journey/nfa/dot.rb +2 -0
  92. data/lib/action_dispatch/journey/nodes/node.rb +8 -6
  93. data/lib/action_dispatch/journey/parser.rb +99 -195
  94. data/lib/action_dispatch/journey/path/pattern.rb +4 -1
  95. data/lib/action_dispatch/journey/route.rb +54 -38
  96. data/lib/action_dispatch/journey/router/utils.rb +22 -27
  97. data/lib/action_dispatch/journey/router.rb +63 -83
  98. data/lib/action_dispatch/journey/routes.rb +11 -2
  99. data/lib/action_dispatch/journey/scanner.rb +46 -42
  100. data/lib/action_dispatch/journey/visitors.rb +57 -23
  101. data/lib/action_dispatch/journey/visualizer/fsm.js +4 -6
  102. data/lib/action_dispatch/journey.rb +2 -0
  103. data/lib/action_dispatch/log_subscriber.rb +7 -1
  104. data/lib/action_dispatch/middleware/actionable_exceptions.rb +2 -0
  105. data/lib/action_dispatch/middleware/assume_ssl.rb +8 -5
  106. data/lib/action_dispatch/middleware/callbacks.rb +3 -1
  107. data/lib/action_dispatch/middleware/cookies.rb +125 -106
  108. data/lib/action_dispatch/middleware/debug_exceptions.rb +37 -8
  109. data/lib/action_dispatch/middleware/debug_locks.rb +15 -13
  110. data/lib/action_dispatch/middleware/debug_view.rb +13 -5
  111. data/lib/action_dispatch/middleware/exception_wrapper.rb +18 -23
  112. data/lib/action_dispatch/middleware/executor.rb +19 -4
  113. data/lib/action_dispatch/middleware/flash.rb +63 -51
  114. data/lib/action_dispatch/middleware/host_authorization.rb +17 -15
  115. data/lib/action_dispatch/middleware/public_exceptions.rb +14 -12
  116. data/lib/action_dispatch/middleware/reloader.rb +5 -3
  117. data/lib/action_dispatch/middleware/remote_ip.rb +87 -77
  118. data/lib/action_dispatch/middleware/request_id.rb +16 -10
  119. data/lib/action_dispatch/middleware/server_timing.rb +4 -2
  120. data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -0
  121. data/lib/action_dispatch/middleware/session/cache_store.rb +30 -8
  122. data/lib/action_dispatch/middleware/session/cookie_store.rb +27 -26
  123. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +7 -3
  124. data/lib/action_dispatch/middleware/show_exceptions.rb +16 -16
  125. data/lib/action_dispatch/middleware/ssl.rb +53 -40
  126. data/lib/action_dispatch/middleware/stack.rb +11 -10
  127. data/lib/action_dispatch/middleware/static.rb +33 -31
  128. data/lib/action_dispatch/middleware/templates/rescues/_copy_button.html.erb +1 -0
  129. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +3 -5
  130. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +9 -5
  131. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +1 -0
  132. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +1 -0
  133. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +4 -0
  134. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +3 -0
  135. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +50 -0
  136. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +1 -0
  137. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -0
  138. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -0
  139. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +1 -0
  140. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -0
  141. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +1 -1
  142. data/lib/action_dispatch/railtie.rb +23 -3
  143. data/lib/action_dispatch/request/session.rb +24 -21
  144. data/lib/action_dispatch/request/utils.rb +11 -3
  145. data/lib/action_dispatch/routing/endpoint.rb +2 -0
  146. data/lib/action_dispatch/routing/inspector.rb +85 -60
  147. data/lib/action_dispatch/routing/mapper.rb +1031 -851
  148. data/lib/action_dispatch/routing/polymorphic_routes.rb +69 -62
  149. data/lib/action_dispatch/routing/redirection.rb +47 -39
  150. data/lib/action_dispatch/routing/route_set.rb +79 -56
  151. data/lib/action_dispatch/routing/routes_proxy.rb +7 -4
  152. data/lib/action_dispatch/routing/url_for.rb +130 -125
  153. data/lib/action_dispatch/routing.rb +150 -148
  154. data/lib/action_dispatch/structured_event_subscriber.rb +20 -0
  155. data/lib/action_dispatch/system_test_case.rb +91 -81
  156. data/lib/action_dispatch/system_testing/browser.rb +16 -23
  157. data/lib/action_dispatch/system_testing/driver.rb +2 -0
  158. data/lib/action_dispatch/system_testing/server.rb +2 -0
  159. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +34 -23
  160. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +2 -0
  161. data/lib/action_dispatch/testing/assertion_response.rb +9 -7
  162. data/lib/action_dispatch/testing/assertions/response.rb +52 -25
  163. data/lib/action_dispatch/testing/assertions/routing.rb +168 -87
  164. data/lib/action_dispatch/testing/assertions.rb +2 -0
  165. data/lib/action_dispatch/testing/integration.rb +233 -223
  166. data/lib/action_dispatch/testing/request_encoder.rb +11 -9
  167. data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
  168. data/lib/action_dispatch/testing/test_process.rb +11 -8
  169. data/lib/action_dispatch/testing/test_request.rb +3 -1
  170. data/lib/action_dispatch/testing/test_response.rb +27 -26
  171. data/lib/action_dispatch.rb +36 -32
  172. data/lib/action_pack/gem_version.rb +6 -4
  173. data/lib/action_pack/version.rb +3 -1
  174. data/lib/action_pack.rb +17 -16
  175. metadata +36 -32
  176. data/lib/action_dispatch/journey/parser.y +0 -50
  177. data/lib/action_dispatch/journey/parser_extras.rb +0 -31
@@ -1,59 +1,64 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :markup: markdown
4
+
3
5
  module ActionController
4
- # = Action Controller \Helpers
6
+ # # Action Controller Helpers
5
7
  #
6
- # The \Rails framework provides a large number of helpers for working with assets, dates, forms,
7
- # numbers and model objects, to name a few. These helpers are available to all templates
8
- # by default.
8
+ # The Rails framework provides a large number of helpers for working with
9
+ # assets, dates, forms, numbers and model objects, to name a few. These helpers
10
+ # are available to all templates by default.
9
11
  #
10
- # In addition to using the standard template helpers provided, creating custom helpers to
11
- # extract complicated logic or reusable functionality is strongly encouraged. By default, each controller
12
- # will include all helpers. These helpers are only accessible on the controller through <tt>#helpers</tt>
12
+ # In addition to using the standard template helpers provided, creating custom
13
+ # helpers to extract complicated logic or reusable functionality is strongly
14
+ # encouraged. By default, each controller will include all helpers. These
15
+ # helpers are only accessible on the controller through `#helpers`
13
16
  #
14
- # In previous versions of \Rails the controller will include a helper which
15
- # matches the name of the controller, e.g., <tt>MyController</tt> will automatically
16
- # include <tt>MyHelper</tt>. You can revert to the old behavior with the following:
17
+ # In previous versions of Rails the controller will include a helper which
18
+ # matches the name of the controller, e.g., `MyController` will automatically
19
+ # include `MyHelper`. You can revert to the old behavior with the following:
17
20
  #
18
- # # config/application.rb
19
- # class Application < Rails::Application
20
- # config.action_controller.include_all_helpers = false
21
- # end
21
+ # # config/application.rb
22
+ # class Application < Rails::Application
23
+ # config.action_controller.include_all_helpers = false
24
+ # end
22
25
  #
23
- # Additional helpers can be specified using the +helper+ class method in ActionController::Base or any
24
- # controller which inherits from it.
26
+ # Additional helpers can be specified using the `helper` class method in
27
+ # ActionController::Base or any controller which inherits from it.
25
28
  #
26
- # The +to_s+ method from the \Time class can be wrapped in a helper method to display a custom message if
27
- # a \Time object is blank:
29
+ # The `to_s` method from the Time class can be wrapped in a helper method to
30
+ # display a custom message if a Time object is blank:
28
31
  #
29
- # module FormattedTimeHelper
30
- # def format_time(time, format=:long, blank_message="&nbsp;")
31
- # time.blank? ? blank_message : time.to_fs(format)
32
+ # module FormattedTimeHelper
33
+ # def format_time(time, format=:long, blank_message="&nbsp;")
34
+ # time.blank? ? blank_message : time.to_fs(format)
35
+ # end
32
36
  # end
33
- # end
34
37
  #
35
- # FormattedTimeHelper can now be included in a controller, using the +helper+ class method:
38
+ # FormattedTimeHelper can now be included in a controller, using the `helper`
39
+ # class method:
36
40
  #
37
- # class EventsController < ActionController::Base
38
- # helper FormattedTimeHelper
39
- # def index
40
- # @events = Event.all
41
+ # class EventsController < ActionController::Base
42
+ # helper FormattedTimeHelper
43
+ # def index
44
+ # @events = Event.all
45
+ # end
41
46
  # end
42
- # end
43
47
  #
44
- # Then, in any view rendered by <tt>EventsController</tt>, the <tt>format_time</tt> method can be called:
48
+ # Then, in any view rendered by `EventsController`, the `format_time` method can
49
+ # be called:
45
50
  #
46
- # <% @events.each do |event| -%>
47
- # <p>
48
- # <%= format_time(event.time, :short, "N/A") %> | <%= event.name %>
49
- # </p>
50
- # <% end -%>
51
+ # <% @events.each do |event| -%>
52
+ # <p>
53
+ # <%= format_time(event.time, :short, "N/A") %> | <%= event.name %>
54
+ # </p>
55
+ # <% end -%>
51
56
  #
52
- # Finally, assuming we have two event instances, one which has a time and one which does not,
53
- # the output might look like this:
57
+ # Finally, assuming we have two event instances, one which has a time and one
58
+ # which does not, the output might look like this:
54
59
  #
55
- # 23 Aug 11:30 | Carolina Railhawks Soccer Match
56
- # N/A | Carolina Railhawks Training Workshop
60
+ # 23 Aug 11:30 | Carolina Railhawks Soccer Match
61
+ # N/A | Carolina Railhawks Training Workshop
57
62
  #
58
63
  module Helpers
59
64
  extend ActiveSupport::Concern
@@ -68,23 +73,24 @@ module ActionController
68
73
 
69
74
  module ClassMethods
70
75
  # Declares helper accessors for controller attributes. For example, the
71
- # following adds new +name+ and <tt>name=</tt> instance methods to a
72
- # controller and makes them available to the view:
73
- # attr_accessor :name
74
- # helper_attr :name
76
+ # following adds new `name` and `name=` instance methods to a controller and
77
+ # makes them available to the view:
78
+ # attr_accessor :name
79
+ # helper_attr :name
80
+ #
81
+ # #### Parameters
82
+ # * `attrs` - Names of attributes to be converted into helpers.
75
83
  #
76
- # ==== Parameters
77
- # * <tt>attrs</tt> - Names of attributes to be converted into helpers.
78
84
  def helper_attr(*attrs)
79
85
  attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
80
86
  end
81
87
 
82
88
  # Provides a proxy to access helper methods from outside the view.
83
89
  #
84
- # Note that the proxy is rendered under a different view context.
85
- # This may cause incorrect behavior with capture methods. Consider
86
- # using {helper}[rdoc-ref:AbstractController::Helpers::ClassMethods#helper]
87
- # instead when using +capture+.
90
+ # Note that the proxy is rendered under a different view context. This may cause
91
+ # incorrect behavior with capture methods. Consider using
92
+ # [helper](rdoc-ref:AbstractController::Helpers::ClassMethods#helper) instead
93
+ # when using `capture`.
88
94
  def helpers
89
95
  @helper_proxy ||= begin
90
96
  proxy = ActionView::Base.empty
@@ -93,21 +99,23 @@ module ActionController
93
99
  end
94
100
  end
95
101
 
96
- # Override modules_for_helpers to accept +:all+ as argument, which loads
97
- # all helpers in helpers_path.
102
+ # Override modules_for_helpers to accept `:all` as argument, which loads all
103
+ # helpers in helpers_path.
104
+ #
105
+ # #### Parameters
106
+ # * `args` - A list of helpers
107
+ #
98
108
  #
99
- # ==== Parameters
100
- # * <tt>args</tt> - A list of helpers
109
+ # #### Returns
110
+ # * `array` - A normalized list of modules for the list of helpers provided.
101
111
  #
102
- # ==== Returns
103
- # * <tt>array</tt> - A normalized list of modules for the list of helpers provided.
104
112
  def modules_for_helpers(args)
105
113
  args += all_application_helpers if args.delete(:all)
106
114
  super(args)
107
115
  end
108
116
 
109
117
  private
110
- # Extract helper names from files in <tt>app/helpers/**/*_helper.rb</tt>
118
+ # Extract helper names from files in `app/helpers/***/**_helper.rb`
111
119
  def all_application_helpers
112
120
  all_helpers_from_path(helpers_path)
113
121
  end