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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +82 -501
- data/lib/abstract_controller/asset_paths.rb +2 -0
- data/lib/abstract_controller/base.rb +102 -98
- data/lib/abstract_controller/caching/fragments.rb +50 -53
- data/lib/abstract_controller/caching.rb +2 -0
- data/lib/abstract_controller/callbacks.rb +66 -64
- data/lib/abstract_controller/collector.rb +6 -6
- data/lib/abstract_controller/deprecator.rb +2 -0
- data/lib/abstract_controller/error.rb +2 -0
- data/lib/abstract_controller/helpers.rb +70 -85
- data/lib/abstract_controller/logger.rb +2 -0
- data/lib/abstract_controller/railties/routes_helpers.rb +2 -0
- data/lib/abstract_controller/rendering.rb +13 -12
- data/lib/abstract_controller/translation.rb +15 -7
- data/lib/abstract_controller/url_for.rb +8 -6
- data/lib/abstract_controller.rb +2 -0
- data/lib/action_controller/api/api_rendering.rb +2 -0
- data/lib/action_controller/api.rb +74 -72
- data/lib/action_controller/base.rb +198 -126
- data/lib/action_controller/caching.rb +15 -12
- data/lib/action_controller/deprecator.rb +2 -0
- data/lib/action_controller/form_builder.rb +20 -17
- data/lib/action_controller/log_subscriber.rb +3 -1
- data/lib/action_controller/metal/allow_browser.rb +123 -0
- data/lib/action_controller/metal/basic_implicit_render.rb +2 -0
- data/lib/action_controller/metal/conditional_get.rb +188 -174
- data/lib/action_controller/metal/content_security_policy.rb +25 -24
- data/lib/action_controller/metal/cookies.rb +4 -2
- data/lib/action_controller/metal/data_streaming.rb +64 -55
- data/lib/action_controller/metal/default_headers.rb +5 -3
- data/lib/action_controller/metal/etag_with_flash.rb +3 -1
- data/lib/action_controller/metal/etag_with_template_digest.rb +17 -15
- data/lib/action_controller/metal/exceptions.rb +11 -9
- data/lib/action_controller/metal/flash.rb +12 -10
- data/lib/action_controller/metal/head.rb +12 -10
- data/lib/action_controller/metal/helpers.rb +63 -55
- data/lib/action_controller/metal/http_authentication.rb +210 -205
- data/lib/action_controller/metal/implicit_render.rb +17 -15
- data/lib/action_controller/metal/instrumentation.rb +15 -12
- data/lib/action_controller/metal/live.rb +113 -107
- data/lib/action_controller/metal/logging.rb +6 -4
- data/lib/action_controller/metal/mime_responds.rb +151 -142
- data/lib/action_controller/metal/parameter_encoding.rb +34 -32
- data/lib/action_controller/metal/params_wrapper.rb +57 -59
- data/lib/action_controller/metal/permissions_policy.rb +13 -12
- data/lib/action_controller/metal/rate_limiting.rb +62 -0
- data/lib/action_controller/metal/redirecting.rb +108 -82
- data/lib/action_controller/metal/renderers.rb +50 -49
- data/lib/action_controller/metal/rendering.rb +103 -75
- data/lib/action_controller/metal/request_forgery_protection.rb +162 -133
- data/lib/action_controller/metal/rescue.rb +11 -9
- data/lib/action_controller/metal/streaming.rb +138 -136
- data/lib/action_controller/metal/strong_parameters.rb +525 -480
- data/lib/action_controller/metal/testing.rb +2 -0
- data/lib/action_controller/metal/url_for.rb +17 -15
- data/lib/action_controller/metal.rb +86 -60
- data/lib/action_controller/railtie.rb +3 -0
- data/lib/action_controller/railties/helpers.rb +2 -0
- data/lib/action_controller/renderer.rb +42 -36
- data/lib/action_controller/template_assertions.rb +4 -2
- data/lib/action_controller/test_case.rb +146 -126
- data/lib/action_controller.rb +10 -3
- data/lib/action_dispatch/constants.rb +2 -0
- data/lib/action_dispatch/deprecator.rb +2 -0
- data/lib/action_dispatch/http/cache.rb +27 -26
- data/lib/action_dispatch/http/content_disposition.rb +2 -0
- data/lib/action_dispatch/http/content_security_policy.rb +44 -38
- data/lib/action_dispatch/http/filter_parameters.rb +18 -9
- data/lib/action_dispatch/http/filter_redirect.rb +22 -1
- data/lib/action_dispatch/http/headers.rb +22 -22
- data/lib/action_dispatch/http/mime_negotiation.rb +30 -41
- data/lib/action_dispatch/http/mime_type.rb +31 -24
- data/lib/action_dispatch/http/mime_types.rb +2 -0
- data/lib/action_dispatch/http/parameters.rb +11 -9
- data/lib/action_dispatch/http/permissions_policy.rb +20 -44
- data/lib/action_dispatch/http/rack_cache.rb +2 -0
- data/lib/action_dispatch/http/request.rb +94 -75
- data/lib/action_dispatch/http/response.rb +73 -61
- data/lib/action_dispatch/http/upload.rb +18 -16
- data/lib/action_dispatch/http/url.rb +75 -73
- data/lib/action_dispatch/journey/formatter.rb +13 -6
- data/lib/action_dispatch/journey/gtg/builder.rb +4 -3
- data/lib/action_dispatch/journey/gtg/simulator.rb +2 -0
- data/lib/action_dispatch/journey/gtg/transition_table.rb +10 -8
- data/lib/action_dispatch/journey/nfa/dot.rb +2 -0
- data/lib/action_dispatch/journey/nodes/node.rb +6 -5
- data/lib/action_dispatch/journey/parser.rb +4 -3
- data/lib/action_dispatch/journey/parser_extras.rb +2 -0
- data/lib/action_dispatch/journey/path/pattern.rb +4 -1
- data/lib/action_dispatch/journey/route.rb +9 -7
- data/lib/action_dispatch/journey/router/utils.rb +16 -15
- data/lib/action_dispatch/journey/router.rb +4 -2
- data/lib/action_dispatch/journey/routes.rb +4 -2
- data/lib/action_dispatch/journey/scanner.rb +4 -2
- data/lib/action_dispatch/journey/visitors.rb +2 -0
- data/lib/action_dispatch/journey.rb +2 -0
- data/lib/action_dispatch/log_subscriber.rb +2 -0
- data/lib/action_dispatch/middleware/actionable_exceptions.rb +2 -0
- data/lib/action_dispatch/middleware/assume_ssl.rb +8 -5
- data/lib/action_dispatch/middleware/callbacks.rb +3 -1
- data/lib/action_dispatch/middleware/cookies.rb +119 -104
- data/lib/action_dispatch/middleware/debug_exceptions.rb +13 -5
- data/lib/action_dispatch/middleware/debug_locks.rb +15 -13
- data/lib/action_dispatch/middleware/debug_view.rb +2 -0
- data/lib/action_dispatch/middleware/exception_wrapper.rb +6 -11
- data/lib/action_dispatch/middleware/executor.rb +8 -0
- data/lib/action_dispatch/middleware/flash.rb +63 -51
- data/lib/action_dispatch/middleware/host_authorization.rb +17 -15
- data/lib/action_dispatch/middleware/public_exceptions.rb +8 -6
- data/lib/action_dispatch/middleware/reloader.rb +5 -3
- data/lib/action_dispatch/middleware/remote_ip.rb +77 -72
- data/lib/action_dispatch/middleware/request_id.rb +14 -9
- data/lib/action_dispatch/middleware/server_timing.rb +4 -2
- data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -0
- data/lib/action_dispatch/middleware/session/cache_store.rb +13 -8
- data/lib/action_dispatch/middleware/session/cookie_store.rb +27 -26
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +7 -3
- data/lib/action_dispatch/middleware/show_exceptions.rb +31 -21
- data/lib/action_dispatch/middleware/ssl.rb +43 -40
- data/lib/action_dispatch/middleware/stack.rb +11 -10
- data/lib/action_dispatch/middleware/static.rb +33 -31
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +1 -1
- data/lib/action_dispatch/railtie.rb +2 -4
- data/lib/action_dispatch/request/session.rb +23 -21
- data/lib/action_dispatch/request/utils.rb +2 -0
- data/lib/action_dispatch/routing/endpoint.rb +2 -0
- data/lib/action_dispatch/routing/inspector.rb +5 -3
- data/lib/action_dispatch/routing/mapper.rb +671 -636
- data/lib/action_dispatch/routing/polymorphic_routes.rb +69 -62
- data/lib/action_dispatch/routing/redirection.rb +37 -32
- data/lib/action_dispatch/routing/route_set.rb +59 -45
- data/lib/action_dispatch/routing/routes_proxy.rb +6 -4
- data/lib/action_dispatch/routing/url_for.rb +130 -125
- data/lib/action_dispatch/routing.rb +150 -148
- data/lib/action_dispatch/system_test_case.rb +91 -81
- data/lib/action_dispatch/system_testing/browser.rb +10 -3
- data/lib/action_dispatch/system_testing/driver.rb +3 -1
- data/lib/action_dispatch/system_testing/server.rb +2 -0
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +32 -21
- data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +2 -0
- data/lib/action_dispatch/testing/assertion_response.rb +8 -6
- data/lib/action_dispatch/testing/assertions/response.rb +26 -23
- data/lib/action_dispatch/testing/assertions/routing.rb +153 -84
- data/lib/action_dispatch/testing/assertions.rb +2 -0
- data/lib/action_dispatch/testing/integration.rb +223 -222
- data/lib/action_dispatch/testing/request_encoder.rb +2 -0
- data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
- data/lib/action_dispatch/testing/test_process.rb +12 -8
- data/lib/action_dispatch/testing/test_request.rb +3 -1
- data/lib/action_dispatch/testing/test_response.rb +27 -26
- data/lib/action_dispatch.rb +22 -28
- data/lib/action_pack/gem_version.rb +6 -4
- data/lib/action_pack/version.rb +3 -1
- data/lib/action_pack.rb +17 -16
- metadata +39 -16
@@ -1,27 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionController
|
4
|
-
#
|
6
|
+
# # Action Controller UrlFor
|
5
7
|
#
|
6
|
-
# Includes
|
7
|
-
# the
|
8
|
+
# Includes `url_for` into the host class. The class has to provide a `RouteSet`
|
9
|
+
# by implementing the `_routes` method. Otherwise, an exception will be raised.
|
8
10
|
#
|
9
|
-
# In addition to AbstractController::UrlFor, this module accesses the HTTP layer
|
10
|
-
# URL options like the
|
11
|
-
# to implement
|
12
|
-
# returns an ActionDispatch::Request instance.
|
11
|
+
# In addition to AbstractController::UrlFor, this module accesses the HTTP layer
|
12
|
+
# to define URL options like the `host`. In order to do so, this module requires
|
13
|
+
# the host class to implement `env` which needs to be Rack-compatible, and
|
14
|
+
# `request` which returns an ActionDispatch::Request instance.
|
13
15
|
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
16
|
+
# class RootUrl
|
17
|
+
# include ActionController::UrlFor
|
18
|
+
# include Rails.application.routes.url_helpers
|
17
19
|
#
|
18
|
-
#
|
20
|
+
# delegate :env, :request, to: :controller
|
19
21
|
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
22
|
+
# def initialize(controller)
|
23
|
+
# @controller = controller
|
24
|
+
# @url = root_path # named route from the application.
|
25
|
+
# end
|
23
26
|
# end
|
24
|
-
# end
|
25
27
|
module UrlFor
|
26
28
|
extend ActiveSupport::Concern
|
27
29
|
|
@@ -1,17 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "active_support/core_ext/array/extract_options"
|
4
6
|
require "action_dispatch/middleware/stack"
|
5
7
|
|
6
8
|
module ActionController
|
7
|
-
#
|
9
|
+
# # Action Controller MiddlewareStack
|
8
10
|
#
|
9
|
-
# Extend ActionDispatch middleware stack to make it aware of options
|
10
|
-
#
|
11
|
+
# Extend ActionDispatch middleware stack to make it aware of options allowing
|
12
|
+
# the following syntax in controllers:
|
11
13
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
14
|
+
# class PostsController < ApplicationController
|
15
|
+
# use AuthenticationMiddleware, except: [:index, :show]
|
16
|
+
# end
|
15
17
|
#
|
16
18
|
class MiddlewareStack < ActionDispatch::MiddlewareStack # :nodoc:
|
17
19
|
class Middleware < ActionDispatch::MiddlewareStack::Middleware # :nodoc:
|
@@ -60,73 +62,71 @@ module ActionController
|
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
63
|
-
#
|
65
|
+
# # Action Controller Metal
|
64
66
|
#
|
65
|
-
#
|
67
|
+
# `ActionController::Metal` is the simplest possible controller, providing a
|
66
68
|
# valid Rack interface without the additional niceties provided by
|
67
69
|
# ActionController::Base.
|
68
70
|
#
|
69
71
|
# A sample metal controller might look like this:
|
70
72
|
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
73
|
+
# class HelloController < ActionController::Metal
|
74
|
+
# def index
|
75
|
+
# self.response_body = "Hello World!"
|
76
|
+
# end
|
74
77
|
# end
|
75
|
-
# end
|
76
78
|
#
|
77
|
-
# And then to route requests to your metal controller, you would add
|
78
|
-
#
|
79
|
+
# And then to route requests to your metal controller, you would add something
|
80
|
+
# like this to `config/routes.rb`:
|
79
81
|
#
|
80
|
-
#
|
82
|
+
# get 'hello', to: HelloController.action(:index)
|
81
83
|
#
|
82
|
-
# The
|
83
|
-
#
|
84
|
+
# The ::action method returns a valid Rack application for the Rails router to
|
85
|
+
# dispatch to.
|
84
86
|
#
|
85
|
-
#
|
87
|
+
# ## Rendering Helpers
|
86
88
|
#
|
87
|
-
#
|
88
|
-
# views, partials, or other responses aside from
|
89
|
-
#
|
90
|
-
#
|
91
|
-
# can do the following:
|
89
|
+
# By default, `ActionController::Metal` provides no utilities for rendering
|
90
|
+
# views, partials, or other responses aside from some low-level setters such
|
91
|
+
# as #response_body=, #content_type=, and #status=. To add the render helpers
|
92
|
+
# you're used to having in a normal controller, you can do the following:
|
92
93
|
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
94
|
+
# class HelloController < ActionController::Metal
|
95
|
+
# include AbstractController::Rendering
|
96
|
+
# include ActionView::Layouts
|
97
|
+
# append_view_path "#{Rails.root}/app/views"
|
97
98
|
#
|
98
|
-
#
|
99
|
-
#
|
99
|
+
# def index
|
100
|
+
# render "hello/index"
|
101
|
+
# end
|
100
102
|
# end
|
101
|
-
# end
|
102
103
|
#
|
103
|
-
#
|
104
|
+
# ## Redirection Helpers
|
104
105
|
#
|
105
106
|
# To add redirection helpers to your metal controller, do the following:
|
106
107
|
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
108
|
+
# class HelloController < ActionController::Metal
|
109
|
+
# include ActionController::Redirecting
|
110
|
+
# include Rails.application.routes.url_helpers
|
110
111
|
#
|
111
|
-
#
|
112
|
-
#
|
112
|
+
# def index
|
113
|
+
# redirect_to root_url
|
114
|
+
# end
|
113
115
|
# end
|
114
|
-
# end
|
115
116
|
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
# You can refer to the modules included in ActionController::Base to see
|
119
|
-
# other features you can bring into your metal controller.
|
117
|
+
# ## Other Helpers
|
120
118
|
#
|
119
|
+
# You can refer to the modules included in ActionController::Base to see other
|
120
|
+
# features you can bring into your metal controller.
|
121
121
|
class Metal < AbstractController::Base
|
122
122
|
abstract!
|
123
123
|
|
124
|
-
# Returns the last part of the controller's name, underscored, without the
|
125
|
-
#
|
126
|
-
# Namespaces are left out, so
|
124
|
+
# Returns the last part of the controller's name, underscored, without the
|
125
|
+
# ending `Controller`. For instance, `PostsController` returns `posts`.
|
126
|
+
# Namespaces are left out, so `Admin::PostsController` returns `posts` as well.
|
127
127
|
#
|
128
|
-
#
|
129
|
-
# *
|
128
|
+
# #### Returns
|
129
|
+
# * `string`
|
130
130
|
def self.controller_name
|
131
131
|
@controller_name ||= (name.demodulize.delete_suffix("Controller").underscore unless anonymous?)
|
132
132
|
end
|
@@ -172,15 +172,40 @@ module ActionController
|
|
172
172
|
##
|
173
173
|
# The ActionDispatch::Request::Session instance for the current request.
|
174
174
|
# See further details in the
|
175
|
-
#
|
175
|
+
# [Active Controller Session guide](https://guides.rubyonrails.org/action_controller_overview.html#session).
|
176
176
|
delegate :session, to: "@_request"
|
177
177
|
|
178
178
|
##
|
179
179
|
# Delegates to ActionDispatch::Response#headers.
|
180
180
|
delegate :headers, to: "@_response"
|
181
181
|
|
182
|
-
|
183
|
-
|
182
|
+
##
|
183
|
+
# Delegates to ActionDispatch::Response#status=
|
184
|
+
delegate :status=, to: "@_response"
|
185
|
+
|
186
|
+
##
|
187
|
+
# Delegates to ActionDispatch::Response#location=
|
188
|
+
delegate :location=, to: "@_response"
|
189
|
+
|
190
|
+
##
|
191
|
+
# Delegates to ActionDispatch::Response#content_type=
|
192
|
+
delegate :content_type=, to: "@_response"
|
193
|
+
|
194
|
+
##
|
195
|
+
# Delegates to ActionDispatch::Response#status
|
196
|
+
delegate :status, to: "@_response"
|
197
|
+
|
198
|
+
##
|
199
|
+
# Delegates to ActionDispatch::Response#location
|
200
|
+
delegate :location, to: "@_response"
|
201
|
+
|
202
|
+
##
|
203
|
+
# Delegates to ActionDispatch::Response#content_type
|
204
|
+
delegate :content_type, to: "@_response"
|
205
|
+
|
206
|
+
##
|
207
|
+
# Delegates to ActionDispatch::Response#media_type
|
208
|
+
delegate :media_type, to: "@_response"
|
184
209
|
|
185
210
|
def initialize
|
186
211
|
@_request = nil
|
@@ -201,7 +226,7 @@ module ActionController
|
|
201
226
|
|
202
227
|
alias :response_code :status # :nodoc:
|
203
228
|
|
204
|
-
# Basic
|
229
|
+
# Basic `url_for` that can be overridden for more robust functionality.
|
205
230
|
def url_for(string)
|
206
231
|
string
|
207
232
|
end
|
@@ -238,7 +263,8 @@ module ActionController
|
|
238
263
|
@_response = response
|
239
264
|
end
|
240
265
|
|
241
|
-
# Assign the response and mark it as committed. No further processing will
|
266
|
+
# Assign the response and mark it as committed. No further processing will
|
267
|
+
# occur.
|
242
268
|
def response=(response)
|
243
269
|
set_response!(response)
|
244
270
|
|
@@ -271,15 +297,15 @@ module ActionController
|
|
271
297
|
|
272
298
|
# The middleware stack used by this controller.
|
273
299
|
#
|
274
|
-
# By default uses a variation of ActionDispatch::MiddlewareStack which
|
275
|
-
#
|
300
|
+
# By default uses a variation of ActionDispatch::MiddlewareStack which allows
|
301
|
+
# for the following syntax:
|
276
302
|
#
|
277
|
-
#
|
278
|
-
#
|
279
|
-
#
|
303
|
+
# class PostsController < ApplicationController
|
304
|
+
# use AuthenticationMiddleware, except: [:index, :show]
|
305
|
+
# end
|
280
306
|
#
|
281
|
-
# Read more about
|
282
|
-
#
|
307
|
+
# Read more about [Rails middleware stack]
|
308
|
+
# (https://guides.rubyonrails.org/rails_on_rack.html#action-dispatcher-middleware-stack)
|
283
309
|
# in the guides.
|
284
310
|
def self.middleware
|
285
311
|
middleware_stack
|
@@ -300,8 +326,8 @@ module ActionController
|
|
300
326
|
end
|
301
327
|
end
|
302
328
|
|
303
|
-
# Direct dispatch to the controller. Instantiates the controller, then
|
304
|
-
#
|
329
|
+
# Direct dispatch to the controller. Instantiates the controller, then executes
|
330
|
+
# the action named `name`.
|
305
331
|
def self.dispatch(name, req, res)
|
306
332
|
if middleware_stack.any?
|
307
333
|
middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "rails"
|
4
6
|
require "action_controller"
|
5
7
|
require "action_dispatch/railtie"
|
@@ -77,6 +79,7 @@ module ActionController
|
|
77
79
|
|
78
80
|
# Configs used in other initializers
|
79
81
|
filtered_options = options.except(
|
82
|
+
:default_protect_from_forgery,
|
80
83
|
:log_query_tags_around_actions,
|
81
84
|
:permit_all_parameters,
|
82
85
|
:action_on_unpermitted_parameters,
|
@@ -1,25 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionController
|
4
|
-
#
|
6
|
+
# # Action Controller Renderer
|
5
7
|
#
|
6
8
|
# ActionController::Renderer allows you to render arbitrary templates without
|
7
9
|
# being inside a controller action.
|
8
10
|
#
|
9
|
-
# You can get a renderer instance by calling
|
11
|
+
# You can get a renderer instance by calling `renderer` on a controller class:
|
10
12
|
#
|
11
|
-
#
|
12
|
-
#
|
13
|
+
# ApplicationController.renderer
|
14
|
+
# PostsController.renderer
|
13
15
|
#
|
14
16
|
# and render a template by calling the #render method:
|
15
17
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
+
# ApplicationController.renderer.render template: "posts/show", assigns: { post: Post.first }
|
19
|
+
# PostsController.renderer.render :show, assigns: { post: Post.first }
|
18
20
|
#
|
19
|
-
# As a shortcut, you can also call
|
21
|
+
# As a shortcut, you can also call `render` directly on the controller class
|
22
|
+
# itself:
|
20
23
|
#
|
21
|
-
#
|
22
|
-
#
|
24
|
+
# ApplicationController.render template: "posts/show", assigns: { post: Post.first }
|
25
|
+
# PostsController.render :show, assigns: { post: Post.first }
|
23
26
|
#
|
24
27
|
class Renderer
|
25
28
|
attr_reader :controller
|
@@ -64,45 +67,47 @@ module ActionController
|
|
64
67
|
|
65
68
|
# Creates a new renderer using the same controller, but with a new Rack env.
|
66
69
|
#
|
67
|
-
#
|
70
|
+
# ApplicationController.renderer.new(method: "post")
|
68
71
|
#
|
69
72
|
def new(env = nil)
|
70
73
|
self.class.new controller, env, @defaults
|
71
74
|
end
|
72
75
|
|
73
|
-
# Creates a new renderer using the same controller, but with the given
|
74
|
-
#
|
76
|
+
# Creates a new renderer using the same controller, but with the given defaults
|
77
|
+
# merged on top of the previous defaults.
|
75
78
|
def with_defaults(defaults)
|
76
79
|
self.class.new controller, @env, @defaults.merge(defaults)
|
77
80
|
end
|
78
81
|
|
79
82
|
# Initializes a new Renderer.
|
80
83
|
#
|
81
|
-
#
|
84
|
+
# #### Parameters
|
85
|
+
#
|
86
|
+
# * `controller` - The controller class to instantiate for rendering.
|
87
|
+
# * `env` - The Rack env to use for mocking a request when rendering. Entries
|
88
|
+
# can be typical Rack env keys and values, or they can be any of the
|
89
|
+
# following, which will be converted appropriately:
|
90
|
+
# * `:http_host` - The HTTP host for the incoming request. Converts to
|
91
|
+
# Rack's `HTTP_HOST`.
|
92
|
+
# * `:https` - Boolean indicating whether the incoming request uses HTTPS.
|
93
|
+
# Converts to Rack's `HTTPS`.
|
94
|
+
# * `:method` - The HTTP method for the incoming request,
|
95
|
+
# case-insensitive. Converts to Rack's `REQUEST_METHOD`.
|
96
|
+
# * `:script_name` - The portion of the incoming request's URL path that
|
97
|
+
# corresponds to the application. Converts to Rack's `SCRIPT_NAME`.
|
98
|
+
# * `:input` - The input stream. Converts to Rack's `rack.input`.
|
99
|
+
#
|
100
|
+
# * `defaults` - Default values for the Rack env. Entries are specified in the
|
101
|
+
# same format as `env`. `env` will be merged on top of these values.
|
102
|
+
# `defaults` will be retained when calling #new on a renderer instance.
|
82
103
|
#
|
83
|
-
# * +controller+ - The controller class to instantiate for rendering.
|
84
|
-
# * +env+ - The Rack env to use for mocking a request when rendering.
|
85
|
-
# Entries can be typical Rack env keys and values, or they can be any of
|
86
|
-
# the following, which will be converted appropriately:
|
87
|
-
# * +:http_host+ - The HTTP host for the incoming request. Converts to
|
88
|
-
# Rack's +HTTP_HOST+.
|
89
|
-
# * +:https+ - Boolean indicating whether the incoming request uses HTTPS.
|
90
|
-
# Converts to Rack's +HTTPS+.
|
91
|
-
# * +:method+ - The HTTP method for the incoming request, case-insensitive.
|
92
|
-
# Converts to Rack's +REQUEST_METHOD+.
|
93
|
-
# * +:script_name+ - The portion of the incoming request's URL path that
|
94
|
-
# corresponds to the application. Converts to Rack's +SCRIPT_NAME+.
|
95
|
-
# * +:input+ - The input stream. Converts to Rack's +rack.input+.
|
96
|
-
# * +defaults+ - Default values for the Rack env. Entries are specified in
|
97
|
-
# the same format as +env+. +env+ will be merged on top of these values.
|
98
|
-
# +defaults+ will be retained when calling #new on a renderer instance.
|
99
104
|
#
|
100
|
-
# If no
|
101
|
-
# routes'
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
105
|
+
# If no `http_host` is specified, the env HTTP host will be derived from the
|
106
|
+
# routes' `default_url_options`. In this case, the `https` boolean and the
|
107
|
+
# `script_name` will also be derived from `default_url_options` if they were not
|
108
|
+
# specified. Additionally, the `https` boolean will fall back to
|
109
|
+
# `Rails.application.config.force_ssl` if `default_url_options` does not specify
|
110
|
+
# a `protocol`.
|
106
111
|
def initialize(controller, env, defaults)
|
107
112
|
@controller = controller
|
108
113
|
@defaults = defaults
|
@@ -119,7 +124,8 @@ module ActionController
|
|
119
124
|
@defaults
|
120
125
|
end
|
121
126
|
|
122
|
-
# Renders a template to a string, just like
|
127
|
+
# Renders a template to a string, just like
|
128
|
+
# ActionController::Rendering#render_to_string.
|
123
129
|
def render(*args)
|
124
130
|
request = ActionDispatch::Request.new(env_for_request)
|
125
131
|
request.routes = controller._routes
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionController
|
4
6
|
module TemplateAssertions # :nodoc:
|
5
7
|
def assert_template(options = {}, message = nil)
|
6
8
|
raise NoMethodError,
|
7
|
-
|
8
|
-
add `gem
|
9
|
+
'assert_template has been extracted to a gem. To continue using it,
|
10
|
+
add `gem "rails-controller-testing"` to your Gemfile.'
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|