actionpack 4.2.10 → 7.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (202) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +86 -600
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +13 -14
  5. data/lib/abstract_controller/asset_paths.rb +5 -1
  6. data/lib/abstract_controller/base.rb +166 -136
  7. data/lib/abstract_controller/caching/fragments.rb +149 -0
  8. data/lib/abstract_controller/caching.rb +68 -0
  9. data/lib/abstract_controller/callbacks.rb +126 -57
  10. data/lib/abstract_controller/collector.rb +13 -15
  11. data/lib/abstract_controller/deprecator.rb +9 -0
  12. data/lib/abstract_controller/error.rb +8 -0
  13. data/lib/abstract_controller/helpers.rb +181 -132
  14. data/lib/abstract_controller/logger.rb +5 -1
  15. data/lib/abstract_controller/railties/routes_helpers.rb +10 -3
  16. data/lib/abstract_controller/rendering.rb +56 -56
  17. data/lib/abstract_controller/translation.rb +29 -15
  18. data/lib/abstract_controller/url_for.rb +15 -11
  19. data/lib/abstract_controller.rb +21 -5
  20. data/lib/action_controller/api/api_rendering.rb +18 -0
  21. data/lib/action_controller/api.rb +154 -0
  22. data/lib/action_controller/base.rb +219 -155
  23. data/lib/action_controller/caching.rb +28 -68
  24. data/lib/action_controller/deprecator.rb +9 -0
  25. data/lib/action_controller/form_builder.rb +55 -0
  26. data/lib/action_controller/log_subscriber.rb +35 -22
  27. data/lib/action_controller/metal/allow_browser.rb +119 -0
  28. data/lib/action_controller/metal/basic_implicit_render.rb +17 -0
  29. data/lib/action_controller/metal/conditional_get.rb +259 -122
  30. data/lib/action_controller/metal/content_security_policy.rb +86 -0
  31. data/lib/action_controller/metal/cookies.rb +9 -5
  32. data/lib/action_controller/metal/data_streaming.rb +87 -104
  33. data/lib/action_controller/metal/default_headers.rb +21 -0
  34. data/lib/action_controller/metal/etag_with_flash.rb +22 -0
  35. data/lib/action_controller/metal/etag_with_template_digest.rb +35 -26
  36. data/lib/action_controller/metal/exceptions.rb +71 -24
  37. data/lib/action_controller/metal/flash.rb +26 -19
  38. data/lib/action_controller/metal/head.rb +45 -36
  39. data/lib/action_controller/metal/helpers.rb +80 -64
  40. data/lib/action_controller/metal/http_authentication.rb +297 -244
  41. data/lib/action_controller/metal/implicit_render.rb +57 -9
  42. data/lib/action_controller/metal/instrumentation.rb +76 -64
  43. data/lib/action_controller/metal/live.rb +238 -176
  44. data/lib/action_controller/metal/logging.rb +22 -0
  45. data/lib/action_controller/metal/mime_responds.rb +177 -166
  46. data/lib/action_controller/metal/parameter_encoding.rb +84 -0
  47. data/lib/action_controller/metal/params_wrapper.rb +145 -118
  48. data/lib/action_controller/metal/permissions_policy.rb +38 -0
  49. data/lib/action_controller/metal/rate_limiting.rb +62 -0
  50. data/lib/action_controller/metal/redirecting.rb +203 -64
  51. data/lib/action_controller/metal/renderers.rb +108 -65
  52. data/lib/action_controller/metal/rendering.rb +216 -56
  53. data/lib/action_controller/metal/request_forgery_protection.rb +496 -163
  54. data/lib/action_controller/metal/rescue.rb +19 -21
  55. data/lib/action_controller/metal/streaming.rb +179 -138
  56. data/lib/action_controller/metal/strong_parameters.rb +1058 -382
  57. data/lib/action_controller/metal/testing.rb +11 -17
  58. data/lib/action_controller/metal/url_for.rb +37 -21
  59. data/lib/action_controller/metal.rb +236 -138
  60. data/lib/action_controller/railtie.rb +89 -11
  61. data/lib/action_controller/railties/helpers.rb +5 -1
  62. data/lib/action_controller/renderer.rb +161 -0
  63. data/lib/action_controller/template_assertions.rb +13 -0
  64. data/lib/action_controller/test_case.rb +425 -497
  65. data/lib/action_controller.rb +44 -22
  66. data/lib/action_dispatch/constants.rb +34 -0
  67. data/lib/action_dispatch/deprecator.rb +9 -0
  68. data/lib/action_dispatch/http/cache.rb +119 -63
  69. data/lib/action_dispatch/http/content_disposition.rb +47 -0
  70. data/lib/action_dispatch/http/content_security_policy.rb +364 -0
  71. data/lib/action_dispatch/http/filter_parameters.rb +36 -34
  72. data/lib/action_dispatch/http/filter_redirect.rb +24 -12
  73. data/lib/action_dispatch/http/headers.rb +66 -31
  74. data/lib/action_dispatch/http/mime_negotiation.rb +106 -75
  75. data/lib/action_dispatch/http/mime_type.rb +196 -136
  76. data/lib/action_dispatch/http/mime_types.rb +25 -7
  77. data/lib/action_dispatch/http/parameters.rb +97 -45
  78. data/lib/action_dispatch/http/permissions_policy.rb +187 -0
  79. data/lib/action_dispatch/http/rack_cache.rb +6 -0
  80. data/lib/action_dispatch/http/request.rb +299 -170
  81. data/lib/action_dispatch/http/response.rb +311 -160
  82. data/lib/action_dispatch/http/upload.rb +52 -23
  83. data/lib/action_dispatch/http/url.rb +201 -125
  84. data/lib/action_dispatch/journey/formatter.rb +110 -50
  85. data/lib/action_dispatch/journey/gtg/builder.rb +37 -50
  86. data/lib/action_dispatch/journey/gtg/simulator.rb +20 -17
  87. data/lib/action_dispatch/journey/gtg/transition_table.rb +96 -36
  88. data/lib/action_dispatch/journey/nfa/dot.rb +5 -14
  89. data/lib/action_dispatch/journey/nodes/node.rb +100 -20
  90. data/lib/action_dispatch/journey/parser.rb +19 -17
  91. data/lib/action_dispatch/journey/parser.y +4 -3
  92. data/lib/action_dispatch/journey/parser_extras.rb +14 -4
  93. data/lib/action_dispatch/journey/path/pattern.rb +79 -63
  94. data/lib/action_dispatch/journey/route.rb +108 -44
  95. data/lib/action_dispatch/journey/router/utils.rb +41 -29
  96. data/lib/action_dispatch/journey/router.rb +64 -57
  97. data/lib/action_dispatch/journey/routes.rb +23 -21
  98. data/lib/action_dispatch/journey/scanner.rb +28 -17
  99. data/lib/action_dispatch/journey/visitors.rb +100 -54
  100. data/lib/action_dispatch/journey/visualizer/fsm.js +49 -24
  101. data/lib/action_dispatch/journey/visualizer/index.html.erb +1 -1
  102. data/lib/action_dispatch/journey.rb +7 -5
  103. data/lib/action_dispatch/log_subscriber.rb +25 -0
  104. data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
  105. data/lib/action_dispatch/middleware/assume_ssl.rb +27 -0
  106. data/lib/action_dispatch/middleware/callbacks.rb +7 -6
  107. data/lib/action_dispatch/middleware/cookies.rb +471 -328
  108. data/lib/action_dispatch/middleware/debug_exceptions.rb +149 -66
  109. data/lib/action_dispatch/middleware/debug_locks.rb +129 -0
  110. data/lib/action_dispatch/middleware/debug_view.rb +73 -0
  111. data/lib/action_dispatch/middleware/exception_wrapper.rb +275 -73
  112. data/lib/action_dispatch/middleware/executor.rb +32 -0
  113. data/lib/action_dispatch/middleware/flash.rb +143 -101
  114. data/lib/action_dispatch/middleware/host_authorization.rb +171 -0
  115. data/lib/action_dispatch/middleware/public_exceptions.rb +36 -27
  116. data/lib/action_dispatch/middleware/reloader.rb +10 -92
  117. data/lib/action_dispatch/middleware/remote_ip.rb +133 -107
  118. data/lib/action_dispatch/middleware/request_id.rb +29 -15
  119. data/lib/action_dispatch/middleware/server_timing.rb +78 -0
  120. data/lib/action_dispatch/middleware/session/abstract_store.rb +49 -27
  121. data/lib/action_dispatch/middleware/session/cache_store.rb +33 -16
  122. data/lib/action_dispatch/middleware/session/cookie_store.rb +86 -80
  123. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +15 -3
  124. data/lib/action_dispatch/middleware/show_exceptions.rb +66 -36
  125. data/lib/action_dispatch/middleware/ssl.rb +134 -36
  126. data/lib/action_dispatch/middleware/stack.rb +109 -44
  127. data/lib/action_dispatch/middleware/static.rb +159 -90
  128. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
  129. data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
  130. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
  131. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +7 -24
  132. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +1 -1
  133. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +36 -0
  134. data/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  135. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +46 -36
  136. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +12 -0
  137. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +9 -0
  138. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +26 -7
  139. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +3 -3
  140. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +24 -0
  141. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +16 -0
  142. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +139 -15
  143. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +23 -0
  144. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.text.erb +3 -0
  145. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +6 -6
  146. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +7 -7
  147. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +9 -9
  148. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +1 -1
  149. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +4 -4
  150. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +1 -1
  151. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +7 -4
  152. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +125 -93
  153. data/lib/action_dispatch/railtie.rb +44 -16
  154. data/lib/action_dispatch/request/session.rb +159 -69
  155. data/lib/action_dispatch/request/utils.rb +97 -23
  156. data/lib/action_dispatch/routing/endpoint.rb +11 -2
  157. data/lib/action_dispatch/routing/inspector.rb +195 -106
  158. data/lib/action_dispatch/routing/mapper.rb +1338 -955
  159. data/lib/action_dispatch/routing/polymorphic_routes.rb +234 -201
  160. data/lib/action_dispatch/routing/redirection.rb +78 -51
  161. data/lib/action_dispatch/routing/route_set.rb +460 -374
  162. data/lib/action_dispatch/routing/routes_proxy.rb +36 -12
  163. data/lib/action_dispatch/routing/url_for.rb +172 -124
  164. data/lib/action_dispatch/routing.rb +159 -158
  165. data/lib/action_dispatch/system_test_case.rb +206 -0
  166. data/lib/action_dispatch/system_testing/browser.rb +84 -0
  167. data/lib/action_dispatch/system_testing/driver.rb +85 -0
  168. data/lib/action_dispatch/system_testing/server.rb +33 -0
  169. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +164 -0
  170. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +23 -0
  171. data/lib/action_dispatch/testing/assertion_response.rb +48 -0
  172. data/lib/action_dispatch/testing/assertions/response.rb +71 -39
  173. data/lib/action_dispatch/testing/assertions/routing.rb +228 -103
  174. data/lib/action_dispatch/testing/assertions.rb +9 -6
  175. data/lib/action_dispatch/testing/integration.rb +486 -306
  176. data/lib/action_dispatch/testing/request_encoder.rb +60 -0
  177. data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
  178. data/lib/action_dispatch/testing/test_process.rb +35 -22
  179. data/lib/action_dispatch/testing/test_request.rb +29 -34
  180. data/lib/action_dispatch/testing/test_response.rb +48 -15
  181. data/lib/action_dispatch.rb +82 -40
  182. data/lib/action_pack/gem_version.rb +8 -4
  183. data/lib/action_pack/version.rb +6 -2
  184. data/lib/action_pack.rb +21 -18
  185. metadata +146 -56
  186. data/lib/action_controller/caching/fragments.rb +0 -103
  187. data/lib/action_controller/metal/force_ssl.rb +0 -97
  188. data/lib/action_controller/metal/hide_actions.rb +0 -40
  189. data/lib/action_controller/metal/rack_delegation.rb +0 -32
  190. data/lib/action_controller/middleware.rb +0 -39
  191. data/lib/action_controller/model_naming.rb +0 -12
  192. data/lib/action_dispatch/http/parameter_filter.rb +0 -72
  193. data/lib/action_dispatch/journey/backwards.rb +0 -5
  194. data/lib/action_dispatch/journey/nfa/builder.rb +0 -76
  195. data/lib/action_dispatch/journey/nfa/simulator.rb +0 -47
  196. data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -163
  197. data/lib/action_dispatch/journey/router/strexp.rb +0 -27
  198. data/lib/action_dispatch/middleware/params_parser.rb +0 -60
  199. data/lib/action_dispatch/middleware/templates/rescues/_source.erb +0 -27
  200. data/lib/action_dispatch/testing/assertions/dom.rb +0 -3
  201. data/lib/action_dispatch/testing/assertions/selector.rb +0 -3
  202. data/lib/action_dispatch/testing/assertions/tag.rb +0 -3
@@ -1,10 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
1
5
  module AbstractController
2
- # Includes +url_for+ into the host class (e.g. an abstract controller or mailer). The class
3
- # has to provide a +RouteSet+ by implementing the <tt>_routes</tt> methods. Otherwise, an
4
- # exception will be raised.
6
+ # # URL For
7
+ #
8
+ # Includes `url_for` into the host class (e.g. an abstract controller or
9
+ # mailer). The class has to provide a `RouteSet` by implementing the `_routes`
10
+ # methods. Otherwise, an exception will be raised.
5
11
  #
6
- # Note that this module is completely decoupled from HTTP - the only requirement is a valid
7
- # <tt>_routes</tt> implementation.
12
+ # Note that this module is completely decoupled from HTTP - the only requirement
13
+ # is a valid `_routes` implementation.
8
14
  module UrlFor
9
15
  extend ActiveSupport::Concern
10
16
  include ActionDispatch::Routing::UrlFor
@@ -20,12 +26,10 @@ module AbstractController
20
26
  end
21
27
 
22
28
  def action_methods
23
- @action_methods ||= begin
24
- if _routes
25
- super - _routes.named_routes.helper_names
26
- else
27
- super
28
- end
29
+ @action_methods ||= if _routes
30
+ super - _routes.named_routes.helper_names
31
+ else
32
+ super
29
33
  end
30
34
  end
31
35
  end
@@ -1,13 +1,19 @@
1
- require 'action_pack'
2
- require 'active_support/rails'
3
- require 'active_support/core_ext/module/attr_internal'
4
- require 'active_support/core_ext/module/anonymous'
5
- require 'active_support/i18n'
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require "action_pack"
6
+ require "active_support"
7
+ require "active_support/rails"
8
+ require "active_support/i18n"
9
+ require "abstract_controller/deprecator"
6
10
 
7
11
  module AbstractController
8
12
  extend ActiveSupport::Autoload
9
13
 
14
+ autoload :ActionNotFound, "abstract_controller/base"
10
15
  autoload :Base
16
+ autoload :Caching
11
17
  autoload :Callbacks
12
18
  autoload :Collector
13
19
  autoload :DoubleRenderError, "abstract_controller/rendering"
@@ -17,4 +23,14 @@ module AbstractController
17
23
  autoload :Translation
18
24
  autoload :AssetPaths
19
25
  autoload :UrlFor
26
+
27
+ def self.eager_load!
28
+ super
29
+ AbstractController::Caching.eager_load!
30
+ AbstractController::Base.descendants.each do |controller|
31
+ unless controller.abstract?
32
+ controller.eager_load!
33
+ end
34
+ end
35
+ end
20
36
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ module ActionController
6
+ module ApiRendering
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ include Rendering
11
+ end
12
+
13
+ def render_to_body(options = {})
14
+ _process_options(options)
15
+ super
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,154 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require "action_view"
6
+ require "action_controller"
7
+ require "action_controller/log_subscriber"
8
+
9
+ module ActionController
10
+ # # Action Controller API
11
+ #
12
+ # API Controller is a lightweight version of ActionController::Base, created for
13
+ # applications that don't require all functionalities that a complete Rails
14
+ # controller provides, allowing you to create controllers with just the features
15
+ # that you need for API only applications.
16
+ #
17
+ # An API Controller is different from a normal controller in the sense that by
18
+ # default it doesn't include a number of features that are usually required by
19
+ # browser access only: layouts and templates rendering, flash, assets, and so
20
+ # on. This makes the entire controller stack thinner, suitable for API
21
+ # applications. It doesn't mean you won't have such features if you need them:
22
+ # they're all available for you to include in your application, they're just not
23
+ # part of the default API controller stack.
24
+ #
25
+ # Normally, `ApplicationController` is the only controller that inherits from
26
+ # `ActionController::API`. All other controllers in turn inherit from
27
+ # `ApplicationController`.
28
+ #
29
+ # A sample controller could look like this:
30
+ #
31
+ # class PostsController < ApplicationController
32
+ # def index
33
+ # posts = Post.all
34
+ # render json: posts
35
+ # end
36
+ # end
37
+ #
38
+ # Request, response, and parameters objects all work the exact same way as
39
+ # ActionController::Base.
40
+ #
41
+ # ## Renders
42
+ #
43
+ # The default API Controller stack includes all renderers, which means you can
44
+ # use `render :json` and siblings freely in your controllers. Keep in mind that
45
+ # templates are not going to be rendered, so you need to ensure your controller
46
+ # is calling either `render` or `redirect_to` in all actions, otherwise it will
47
+ # return `204 No Content`.
48
+ #
49
+ # def show
50
+ # post = Post.find(params[:id])
51
+ # render json: post
52
+ # end
53
+ #
54
+ # ## Redirects
55
+ #
56
+ # Redirects are used to move from one action to another. You can use the
57
+ # `redirect_to` method in your controllers in the same way as in
58
+ # ActionController::Base. For example:
59
+ #
60
+ # def create
61
+ # redirect_to root_url and return if not_authorized?
62
+ # # do stuff here
63
+ # end
64
+ #
65
+ # ## Adding New Behavior
66
+ #
67
+ # In some scenarios you may want to add back some functionality provided by
68
+ # ActionController::Base that is not present by default in
69
+ # `ActionController::API`, for instance `MimeResponds`. This module gives you
70
+ # the `respond_to` method. Adding it is quite simple, you just need to include
71
+ # the module in a specific controller or in `ApplicationController` in case you
72
+ # want it available in your entire application:
73
+ #
74
+ # class ApplicationController < ActionController::API
75
+ # include ActionController::MimeResponds
76
+ # end
77
+ #
78
+ # class PostsController < ApplicationController
79
+ # def index
80
+ # posts = Post.all
81
+ #
82
+ # respond_to do |format|
83
+ # format.json { render json: posts }
84
+ # format.xml { render xml: posts }
85
+ # end
86
+ # end
87
+ # end
88
+ #
89
+ # Make sure to check the modules included in ActionController::Base if you want
90
+ # to use any other functionality that is not provided by `ActionController::API`
91
+ # out of the box.
92
+ class API < Metal
93
+ abstract!
94
+
95
+ # Shortcut helper that returns all the ActionController::API modules except the
96
+ # ones passed as arguments:
97
+ #
98
+ # class MyAPIBaseController < ActionController::Metal
99
+ # ActionController::API.without_modules(:UrlFor).each do |left|
100
+ # include left
101
+ # end
102
+ # end
103
+ #
104
+ # This gives better control over what you want to exclude and makes it easier to
105
+ # create an API controller class, instead of listing the modules required
106
+ # manually.
107
+ def self.without_modules(*modules)
108
+ modules = modules.map do |m|
109
+ m.is_a?(Symbol) ? ActionController.const_get(m) : m
110
+ end
111
+
112
+ MODULES - modules
113
+ end
114
+
115
+ MODULES = [
116
+ AbstractController::Rendering,
117
+
118
+ UrlFor,
119
+ Redirecting,
120
+ ApiRendering,
121
+ Renderers::All,
122
+ ConditionalGet,
123
+ BasicImplicitRender,
124
+ StrongParameters,
125
+ RateLimiting,
126
+
127
+ DataStreaming,
128
+ DefaultHeaders,
129
+ Logging,
130
+
131
+ # Before callbacks should also be executed as early as possible, so also include
132
+ # them at the bottom.
133
+ AbstractController::Callbacks,
134
+
135
+ # Append rescue at the bottom to wrap as much as possible.
136
+ Rescue,
137
+
138
+ # Add instrumentations hooks at the bottom, to ensure they instrument all the
139
+ # methods properly.
140
+ Instrumentation,
141
+
142
+ # Params wrapper should come before instrumentation so they are properly showed
143
+ # in logs
144
+ ParamsWrapper
145
+ ]
146
+
147
+ MODULES.each do |mod|
148
+ include mod
149
+ end
150
+
151
+ ActiveSupport.run_load_hooks(:action_controller_api, self)
152
+ ActiveSupport.run_load_hooks(:action_controller, self)
153
+ end
154
+ end