actionpack 3.2.19 → 4.2.11.3
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +412 -503
- data/MIT-LICENSE +1 -1
- data/README.rdoc +11 -294
- data/lib/abstract_controller/asset_paths.rb +2 -2
- data/lib/abstract_controller/base.rb +52 -18
- data/lib/abstract_controller/callbacks.rb +87 -89
- data/lib/abstract_controller/collector.rb +17 -3
- data/lib/abstract_controller/helpers.rb +41 -14
- data/lib/abstract_controller/logger.rb +1 -2
- data/lib/abstract_controller/railties/routes_helpers.rb +3 -3
- data/lib/abstract_controller/rendering.rb +65 -118
- data/lib/abstract_controller/translation.rb +16 -1
- data/lib/abstract_controller/url_for.rb +7 -7
- data/lib/abstract_controller.rb +2 -10
- data/lib/action_controller/base.rb +61 -28
- data/lib/action_controller/caching/fragments.rb +30 -54
- data/lib/action_controller/caching.rb +38 -35
- data/lib/action_controller/log_subscriber.rb +35 -18
- data/lib/action_controller/metal/conditional_get.rb +103 -34
- data/lib/action_controller/metal/data_streaming.rb +20 -26
- data/lib/action_controller/metal/etag_with_template_digest.rb +50 -0
- data/lib/action_controller/metal/exceptions.rb +19 -6
- data/lib/action_controller/metal/flash.rb +41 -9
- data/lib/action_controller/metal/force_ssl.rb +70 -12
- data/lib/action_controller/metal/head.rb +30 -7
- data/lib/action_controller/metal/helpers.rb +11 -11
- data/lib/action_controller/metal/hide_actions.rb +0 -1
- data/lib/action_controller/metal/http_authentication.rb +140 -94
- data/lib/action_controller/metal/implicit_render.rb +1 -1
- data/lib/action_controller/metal/instrumentation.rb +11 -7
- data/lib/action_controller/metal/live.rb +328 -0
- data/lib/action_controller/metal/mime_responds.rb +161 -152
- data/lib/action_controller/metal/params_wrapper.rb +126 -81
- data/lib/action_controller/metal/rack_delegation.rb +10 -4
- data/lib/action_controller/metal/redirecting.rb +44 -41
- data/lib/action_controller/metal/renderers.rb +48 -19
- data/lib/action_controller/metal/rendering.rb +46 -11
- data/lib/action_controller/metal/request_forgery_protection.rb +250 -29
- data/lib/action_controller/metal/streaming.rb +30 -38
- data/lib/action_controller/metal/strong_parameters.rb +669 -0
- data/lib/action_controller/metal/testing.rb +12 -18
- data/lib/action_controller/metal/url_for.rb +31 -29
- data/lib/action_controller/metal.rb +31 -40
- data/lib/action_controller/model_naming.rb +12 -0
- data/lib/action_controller/railtie.rb +38 -18
- data/lib/action_controller/railties/helpers.rb +22 -0
- data/lib/action_controller/test_case.rb +359 -173
- data/lib/action_controller.rb +9 -16
- data/lib/action_dispatch/http/cache.rb +64 -11
- data/lib/action_dispatch/http/filter_parameters.rb +20 -10
- data/lib/action_dispatch/http/filter_redirect.rb +38 -0
- data/lib/action_dispatch/http/headers.rb +85 -17
- data/lib/action_dispatch/http/mime_negotiation.rb +55 -5
- data/lib/action_dispatch/http/mime_type.rb +167 -114
- data/lib/action_dispatch/http/mime_types.rb +2 -1
- data/lib/action_dispatch/http/parameter_filter.rb +44 -46
- data/lib/action_dispatch/http/parameters.rb +30 -46
- data/lib/action_dispatch/http/rack_cache.rb +2 -3
- data/lib/action_dispatch/http/request.rb +108 -45
- data/lib/action_dispatch/http/response.rb +247 -48
- data/lib/action_dispatch/http/upload.rb +60 -29
- data/lib/action_dispatch/http/url.rb +135 -45
- data/lib/action_dispatch/journey/backwards.rb +5 -0
- data/lib/action_dispatch/journey/formatter.rb +166 -0
- data/lib/action_dispatch/journey/gtg/builder.rb +162 -0
- data/lib/action_dispatch/journey/gtg/simulator.rb +47 -0
- data/lib/action_dispatch/journey/gtg/transition_table.rb +157 -0
- data/lib/action_dispatch/journey/nfa/builder.rb +76 -0
- data/lib/action_dispatch/journey/nfa/dot.rb +36 -0
- data/lib/action_dispatch/journey/nfa/simulator.rb +47 -0
- data/lib/action_dispatch/journey/nfa/transition_table.rb +163 -0
- data/lib/action_dispatch/journey/nodes/node.rb +128 -0
- data/lib/action_dispatch/journey/parser.rb +198 -0
- data/lib/action_dispatch/journey/parser.y +49 -0
- data/lib/action_dispatch/journey/parser_extras.rb +23 -0
- data/lib/action_dispatch/journey/path/pattern.rb +193 -0
- data/lib/action_dispatch/journey/route.rb +125 -0
- data/lib/action_dispatch/journey/router/strexp.rb +27 -0
- data/lib/action_dispatch/journey/router/utils.rb +93 -0
- data/lib/action_dispatch/journey/router.rb +144 -0
- data/lib/action_dispatch/journey/routes.rb +80 -0
- data/lib/action_dispatch/journey/scanner.rb +61 -0
- data/lib/action_dispatch/journey/visitors.rb +221 -0
- data/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
- data/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
- data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
- data/lib/action_dispatch/journey.rb +5 -0
- data/lib/action_dispatch/middleware/callbacks.rb +16 -11
- data/lib/action_dispatch/middleware/cookies.rb +346 -125
- data/lib/action_dispatch/middleware/debug_exceptions.rb +52 -24
- data/lib/action_dispatch/middleware/exception_wrapper.rb +75 -9
- data/lib/action_dispatch/middleware/flash.rb +85 -72
- data/lib/action_dispatch/middleware/params_parser.rb +16 -31
- data/lib/action_dispatch/middleware/public_exceptions.rb +39 -14
- data/lib/action_dispatch/middleware/reloader.rb +16 -7
- data/lib/action_dispatch/middleware/remote_ip.rb +132 -40
- data/lib/action_dispatch/middleware/request_id.rb +3 -7
- data/lib/action_dispatch/middleware/session/abstract_store.rb +22 -20
- data/lib/action_dispatch/middleware/session/cache_store.rb +3 -3
- data/lib/action_dispatch/middleware/session/cookie_store.rb +84 -29
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +8 -3
- data/lib/action_dispatch/middleware/show_exceptions.rb +15 -44
- data/lib/action_dispatch/middleware/ssl.rb +72 -0
- data/lib/action_dispatch/middleware/stack.rb +6 -1
- data/lib/action_dispatch/middleware/static.rb +80 -23
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +34 -0
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
- data/lib/action_dispatch/middleware/templates/rescues/_source.erb +27 -0
- data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
- data/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +133 -5
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
- data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
- data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
- data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
- data/lib/action_dispatch/railtie.rb +19 -6
- data/lib/action_dispatch/request/session.rb +193 -0
- data/lib/action_dispatch/request/utils.rb +35 -0
- data/lib/action_dispatch/routing/endpoint.rb +10 -0
- data/lib/action_dispatch/routing/inspector.rb +234 -0
- data/lib/action_dispatch/routing/mapper.rb +897 -436
- data/lib/action_dispatch/routing/polymorphic_routes.rb +213 -92
- data/lib/action_dispatch/routing/redirection.rb +97 -37
- data/lib/action_dispatch/routing/route_set.rb +432 -239
- data/lib/action_dispatch/routing/routes_proxy.rb +7 -4
- data/lib/action_dispatch/routing/url_for.rb +63 -34
- data/lib/action_dispatch/routing.rb +57 -89
- data/lib/action_dispatch/testing/assertions/dom.rb +2 -36
- data/lib/action_dispatch/testing/assertions/response.rb +24 -38
- data/lib/action_dispatch/testing/assertions/routing.rb +55 -54
- data/lib/action_dispatch/testing/assertions/selector.rb +2 -434
- data/lib/action_dispatch/testing/assertions/tag.rb +2 -137
- data/lib/action_dispatch/testing/assertions.rb +11 -7
- data/lib/action_dispatch/testing/integration.rb +88 -72
- data/lib/action_dispatch/testing/test_process.rb +9 -6
- data/lib/action_dispatch/testing/test_request.rb +13 -9
- data/lib/action_dispatch/testing/test_response.rb +1 -5
- data/lib/action_dispatch.rb +24 -21
- data/lib/action_pack/gem_version.rb +15 -0
- data/lib/action_pack/version.rb +5 -7
- data/lib/action_pack.rb +1 -1
- metadata +181 -292
- data/lib/abstract_controller/layouts.rb +0 -423
- data/lib/abstract_controller/view_paths.rb +0 -96
- data/lib/action_controller/caching/actions.rb +0 -185
- data/lib/action_controller/caching/pages.rb +0 -187
- data/lib/action_controller/caching/sweeping.rb +0 -97
- data/lib/action_controller/deprecated/integration_test.rb +0 -2
- data/lib/action_controller/deprecated/performance_test.rb +0 -1
- data/lib/action_controller/deprecated.rb +0 -3
- data/lib/action_controller/metal/compatibility.rb +0 -65
- data/lib/action_controller/metal/responder.rb +0 -286
- data/lib/action_controller/metal/session_management.rb +0 -14
- data/lib/action_controller/railties/paths.rb +0 -25
- data/lib/action_controller/record_identifier.rb +0 -85
- data/lib/action_controller/vendor/html-scanner/html/document.rb +0 -68
- data/lib/action_controller/vendor/html-scanner/html/node.rb +0 -532
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +0 -177
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +0 -830
- data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +0 -107
- data/lib/action_controller/vendor/html-scanner/html/version.rb +0 -11
- data/lib/action_controller/vendor/html-scanner.rb +0 -20
- data/lib/action_dispatch/middleware/best_standards_support.rb +0 -30
- data/lib/action_dispatch/middleware/body_proxy.rb +0 -30
- data/lib/action_dispatch/middleware/head.rb +0 -18
- data/lib/action_dispatch/middleware/rescue.rb +0 -26
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +0 -31
- data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +0 -26
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +0 -10
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +0 -2
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +0 -15
- data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +0 -17
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +0 -2
- data/lib/action_dispatch/testing/performance_test.rb +0 -10
- data/lib/action_view/asset_paths.rb +0 -142
- data/lib/action_view/base.rb +0 -220
- data/lib/action_view/buffers.rb +0 -43
- data/lib/action_view/context.rb +0 -36
- data/lib/action_view/flows.rb +0 -79
- data/lib/action_view/helpers/active_model_helper.rb +0 -50
- data/lib/action_view/helpers/asset_paths.rb +0 -7
- data/lib/action_view/helpers/asset_tag_helper.rb +0 -457
- data/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +0 -146
- data/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb +0 -93
- data/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb +0 -193
- data/lib/action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers.rb +0 -148
- data/lib/action_view/helpers/atom_feed_helper.rb +0 -200
- data/lib/action_view/helpers/cache_helper.rb +0 -64
- data/lib/action_view/helpers/capture_helper.rb +0 -203
- data/lib/action_view/helpers/controller_helper.rb +0 -25
- data/lib/action_view/helpers/csrf_helper.rb +0 -32
- data/lib/action_view/helpers/date_helper.rb +0 -1062
- data/lib/action_view/helpers/debug_helper.rb +0 -40
- data/lib/action_view/helpers/form_helper.rb +0 -1486
- data/lib/action_view/helpers/form_options_helper.rb +0 -658
- data/lib/action_view/helpers/form_tag_helper.rb +0 -685
- data/lib/action_view/helpers/javascript_helper.rb +0 -110
- data/lib/action_view/helpers/number_helper.rb +0 -622
- data/lib/action_view/helpers/output_safety_helper.rb +0 -38
- data/lib/action_view/helpers/record_tag_helper.rb +0 -111
- data/lib/action_view/helpers/rendering_helper.rb +0 -90
- data/lib/action_view/helpers/sanitize_helper.rb +0 -259
- data/lib/action_view/helpers/tag_helper.rb +0 -160
- data/lib/action_view/helpers/text_helper.rb +0 -426
- data/lib/action_view/helpers/translation_helper.rb +0 -91
- data/lib/action_view/helpers/url_helper.rb +0 -693
- data/lib/action_view/helpers.rb +0 -60
- data/lib/action_view/locale/en.yml +0 -160
- data/lib/action_view/log_subscriber.rb +0 -28
- data/lib/action_view/lookup_context.rb +0 -254
- data/lib/action_view/path_set.rb +0 -89
- data/lib/action_view/railtie.rb +0 -55
- data/lib/action_view/renderer/abstract_renderer.rb +0 -41
- data/lib/action_view/renderer/partial_renderer.rb +0 -415
- data/lib/action_view/renderer/renderer.rb +0 -54
- data/lib/action_view/renderer/streaming_template_renderer.rb +0 -106
- data/lib/action_view/renderer/template_renderer.rb +0 -94
- data/lib/action_view/template/error.rb +0 -128
- data/lib/action_view/template/handlers/builder.rb +0 -26
- data/lib/action_view/template/handlers/erb.rb +0 -125
- data/lib/action_view/template/handlers.rb +0 -50
- data/lib/action_view/template/resolver.rb +0 -272
- data/lib/action_view/template/text.rb +0 -30
- data/lib/action_view/template.rb +0 -337
- data/lib/action_view/test_case.rb +0 -245
- data/lib/action_view/testing/resolvers.rb +0 -50
- data/lib/action_view.rb +0 -84
- data/lib/sprockets/assets.rake +0 -99
- data/lib/sprockets/bootstrap.rb +0 -37
- data/lib/sprockets/compressors.rb +0 -83
- data/lib/sprockets/helpers/isolated_helper.rb +0 -13
- data/lib/sprockets/helpers/rails_helper.rb +0 -182
- data/lib/sprockets/helpers.rb +0 -6
- data/lib/sprockets/railtie.rb +0 -62
- data/lib/sprockets/static_compiler.rb +0 -56
@@ -1,12 +1,16 @@
|
|
1
|
-
require 'tempfile'
|
2
1
|
require 'stringio'
|
3
|
-
require 'strscan'
|
4
2
|
|
5
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
6
|
-
require 'active_support/core_ext/string/access'
|
7
3
|
require 'active_support/inflector'
|
8
4
|
require 'action_dispatch/http/headers'
|
9
5
|
require 'action_controller/metal/exceptions'
|
6
|
+
require 'rack/request'
|
7
|
+
require 'action_dispatch/http/cache'
|
8
|
+
require 'action_dispatch/http/mime_negotiation'
|
9
|
+
require 'action_dispatch/http/parameters'
|
10
|
+
require 'action_dispatch/http/filter_parameters'
|
11
|
+
require 'action_dispatch/http/upload'
|
12
|
+
require 'action_dispatch/http/url'
|
13
|
+
require 'active_support/core_ext/array/conversions'
|
10
14
|
|
11
15
|
module ActionDispatch
|
12
16
|
class Request < Rack::Request
|
@@ -14,10 +18,13 @@ module ActionDispatch
|
|
14
18
|
include ActionDispatch::Http::MimeNegotiation
|
15
19
|
include ActionDispatch::Http::Parameters
|
16
20
|
include ActionDispatch::Http::FilterParameters
|
17
|
-
include ActionDispatch::Http::Upload
|
18
21
|
include ActionDispatch::Http::URL
|
19
22
|
|
20
|
-
|
23
|
+
autoload :Session, 'action_dispatch/request/session'
|
24
|
+
autoload :Utils, 'action_dispatch/request/utils'
|
25
|
+
|
26
|
+
LOCALHOST = Regexp.union [/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, /^::1$/, /^0:0:0:0:0:0:0:1(%.*)?$/]
|
27
|
+
|
21
28
|
ENV_METHODS = %w[ AUTH_TYPE GATEWAY_INTERFACE
|
22
29
|
PATH_TRANSLATED REMOTE_HOST
|
23
30
|
REMOTE_IDENT REMOTE_USER REMOTE_ADDR
|
@@ -35,6 +42,28 @@ module ActionDispatch
|
|
35
42
|
METHOD
|
36
43
|
end
|
37
44
|
|
45
|
+
def initialize(env)
|
46
|
+
super
|
47
|
+
@method = nil
|
48
|
+
@request_method = nil
|
49
|
+
@remote_ip = nil
|
50
|
+
@original_fullpath = nil
|
51
|
+
@fullpath = nil
|
52
|
+
@ip = nil
|
53
|
+
@uuid = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def check_path_parameters!
|
57
|
+
# If any of the path parameters has an invalid encoding then
|
58
|
+
# raise since it's likely to trigger errors further on.
|
59
|
+
path_parameters.each do |key, value|
|
60
|
+
next unless value.respond_to?(:valid_encoding?)
|
61
|
+
unless value.valid_encoding?
|
62
|
+
raise ActionController::BadRequest, "Invalid parameter: #{key} => #{value}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
38
67
|
def key?(key)
|
39
68
|
@env.key?(key)
|
40
69
|
end
|
@@ -46,6 +75,7 @@ module ActionDispatch
|
|
46
75
|
# Ordered Collections Protocol (WebDAV) (http://www.ietf.org/rfc/rfc3648.txt)
|
47
76
|
# Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol (http://www.ietf.org/rfc/rfc3744.txt)
|
48
77
|
# Web Distributed Authoring and Versioning (WebDAV) SEARCH (http://www.ietf.org/rfc/rfc5323.txt)
|
78
|
+
# Calendar Extensions to WebDAV (http://www.ietf.org/rfc/rfc4791.txt)
|
49
79
|
# PATCH Method for HTTP (http://www.ietf.org/rfc/rfc5789.txt)
|
50
80
|
RFC2616 = %w(OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT)
|
51
81
|
RFC2518 = %w(PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK)
|
@@ -53,15 +83,17 @@ module ActionDispatch
|
|
53
83
|
RFC3648 = %w(ORDERPATCH)
|
54
84
|
RFC3744 = %w(ACL)
|
55
85
|
RFC5323 = %w(SEARCH)
|
86
|
+
RFC4791 = %w(MKCALENDAR)
|
56
87
|
RFC5789 = %w(PATCH)
|
57
88
|
|
58
|
-
HTTP_METHODS = RFC2616 + RFC2518 + RFC3253 + RFC3648 + RFC3744 + RFC5323 + RFC5789
|
89
|
+
HTTP_METHODS = RFC2616 + RFC2518 + RFC3253 + RFC3648 + RFC3744 + RFC5323 + RFC4791 + RFC5789
|
90
|
+
|
59
91
|
HTTP_METHOD_LOOKUP = {}
|
60
92
|
|
61
93
|
# Populate the HTTP method lookup cache
|
62
|
-
HTTP_METHODS.each
|
94
|
+
HTTP_METHODS.each { |method|
|
63
95
|
HTTP_METHOD_LOOKUP[method] = method.underscore.to_sym
|
64
|
-
|
96
|
+
}
|
65
97
|
|
66
98
|
# Returns the HTTP \method that the application should see.
|
67
99
|
# In the case where the \method was overridden by a middleware
|
@@ -73,6 +105,12 @@ module ActionDispatch
|
|
73
105
|
@request_method ||= check_method(env["REQUEST_METHOD"])
|
74
106
|
end
|
75
107
|
|
108
|
+
def request_method=(request_method) #:nodoc:
|
109
|
+
if check_method(request_method)
|
110
|
+
@request_method = env["REQUEST_METHOD"] = request_method
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
76
114
|
# Returns a symbol form of the #request_method
|
77
115
|
def request_method_symbol
|
78
116
|
HTTP_METHOD_LOOKUP[request_method]
|
@@ -102,6 +140,12 @@ module ActionDispatch
|
|
102
140
|
HTTP_METHOD_LOOKUP[request_method] == :post
|
103
141
|
end
|
104
142
|
|
143
|
+
# Is this a PATCH request?
|
144
|
+
# Equivalent to <tt>request.request_method == :patch</tt>.
|
145
|
+
def patch?
|
146
|
+
HTTP_METHOD_LOOKUP[request_method] == :patch
|
147
|
+
end
|
148
|
+
|
105
149
|
# Is this a PUT request?
|
106
150
|
# Equivalent to <tt>request.request_method_symbol == :put</tt>.
|
107
151
|
def put?
|
@@ -115,9 +159,9 @@ module ActionDispatch
|
|
115
159
|
end
|
116
160
|
|
117
161
|
# Is this a HEAD request?
|
118
|
-
# Equivalent to <tt>request.
|
162
|
+
# Equivalent to <tt>request.request_method_symbol == :head</tt>.
|
119
163
|
def head?
|
120
|
-
HTTP_METHOD_LOOKUP[
|
164
|
+
HTTP_METHOD_LOOKUP[request_method] == :head
|
121
165
|
end
|
122
166
|
|
123
167
|
# Provides access to the request's HTTP headers, for example:
|
@@ -127,18 +171,40 @@ module ActionDispatch
|
|
127
171
|
Http::Headers.new(@env)
|
128
172
|
end
|
129
173
|
|
174
|
+
# Returns a +String+ with the last requested path including their params.
|
175
|
+
#
|
176
|
+
# # get '/foo'
|
177
|
+
# request.original_fullpath # => '/foo'
|
178
|
+
#
|
179
|
+
# # get '/foo?bar'
|
180
|
+
# request.original_fullpath # => '/foo?bar'
|
130
181
|
def original_fullpath
|
131
182
|
@original_fullpath ||= (env["ORIGINAL_FULLPATH"] || fullpath)
|
132
183
|
end
|
133
184
|
|
185
|
+
# Returns the +String+ full path including params of the last URL requested.
|
186
|
+
#
|
187
|
+
# # get "/articles"
|
188
|
+
# request.fullpath # => "/articles"
|
189
|
+
#
|
190
|
+
# # get "/articles?page=2"
|
191
|
+
# request.fullpath # => "/articles?page=2"
|
134
192
|
def fullpath
|
135
193
|
@fullpath ||= super
|
136
194
|
end
|
137
195
|
|
196
|
+
# Returns the original request URL as a +String+.
|
197
|
+
#
|
198
|
+
# # get "/articles?page=2"
|
199
|
+
# request.original_url # => "http://www.example.com/articles?page=2"
|
138
200
|
def original_url
|
139
201
|
base_url + original_fullpath
|
140
202
|
end
|
141
203
|
|
204
|
+
# The +String+ MIME type of the request.
|
205
|
+
#
|
206
|
+
# # get "/articles"
|
207
|
+
# request.media_type # => "application/x-www-form-urlencoded"
|
142
208
|
def media_type
|
143
209
|
content_mime_type.to_s
|
144
210
|
end
|
@@ -149,8 +215,8 @@ module ActionDispatch
|
|
149
215
|
end
|
150
216
|
|
151
217
|
# Returns true if the "X-Requested-With" header contains "XMLHttpRequest"
|
152
|
-
# (case-insensitive)
|
153
|
-
#
|
218
|
+
# (case-insensitive), which may need to be manually added depending on the
|
219
|
+
# choice of JavaScript libraries and frameworks.
|
154
220
|
def xml_http_request?
|
155
221
|
@env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/i
|
156
222
|
end
|
@@ -165,7 +231,7 @@ module ActionDispatch
|
|
165
231
|
@remote_ip ||= (@env["action_dispatch.remote_ip"] || ip).to_s
|
166
232
|
end
|
167
233
|
|
168
|
-
# Returns the unique request id, which is based
|
234
|
+
# Returns the unique request id, which is based on either the X-Request-Id header that can
|
169
235
|
# be generated by a firewall, load balancer, or web server or by the RequestId middleware
|
170
236
|
# (which sets the action_dispatch.request_id environment variable).
|
171
237
|
#
|
@@ -185,7 +251,7 @@ module ActionDispatch
|
|
185
251
|
def raw_post
|
186
252
|
unless @env.include? 'RAW_POST_DATA'
|
187
253
|
raw_post_body = body
|
188
|
-
@env['RAW_POST_DATA'] = raw_post_body.read(
|
254
|
+
@env['RAW_POST_DATA'] = raw_post_body.read(content_length)
|
189
255
|
raw_post_body.rewind if raw_post_body.respond_to?(:rewind)
|
190
256
|
end
|
191
257
|
@env['RAW_POST_DATA']
|
@@ -195,7 +261,7 @@ module ActionDispatch
|
|
195
261
|
# variable is already set, wrap it in a StringIO.
|
196
262
|
def body
|
197
263
|
if raw_post = @env['RAW_POST_DATA']
|
198
|
-
raw_post.force_encoding(Encoding::BINARY)
|
264
|
+
raw_post.force_encoding(Encoding::BINARY)
|
199
265
|
StringIO.new(raw_post)
|
200
266
|
else
|
201
267
|
@env['rack.input']
|
@@ -213,32 +279,38 @@ module ActionDispatch
|
|
213
279
|
# TODO This should be broken apart into AD::Request::Session and probably
|
214
280
|
# be included by the session middleware.
|
215
281
|
def reset_session
|
216
|
-
|
217
|
-
|
282
|
+
if session && session.respond_to?(:destroy)
|
283
|
+
session.destroy
|
284
|
+
else
|
285
|
+
self.session = {}
|
286
|
+
end
|
218
287
|
@env['action_dispatch.request.flash_hash'] = nil
|
219
288
|
end
|
220
289
|
|
221
290
|
def session=(session) #:nodoc:
|
222
|
-
@env
|
291
|
+
Session.set @env, session
|
223
292
|
end
|
224
293
|
|
225
294
|
def session_options=(options)
|
226
|
-
@env
|
295
|
+
Session::Options.set @env, options
|
227
296
|
end
|
228
297
|
|
229
298
|
# Override Rack's GET method to support indifferent access
|
230
299
|
def GET
|
231
|
-
@env["action_dispatch.request.query_parameters"] ||= deep_munge(
|
300
|
+
@env["action_dispatch.request.query_parameters"] ||= Utils.deep_munge(normalize_encode_params(super || {}))
|
301
|
+
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
|
302
|
+
raise ActionController::BadRequest.new(:query, e)
|
232
303
|
end
|
233
304
|
alias :query_parameters :GET
|
234
305
|
|
235
306
|
# Override Rack's POST method to support indifferent access
|
236
307
|
def POST
|
237
|
-
@env["action_dispatch.request.request_parameters"] ||= deep_munge(
|
308
|
+
@env["action_dispatch.request.request_parameters"] ||= Utils.deep_munge(normalize_encode_params(super || {}))
|
309
|
+
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
|
310
|
+
raise ActionController::BadRequest.new(:request, e)
|
238
311
|
end
|
239
312
|
alias :request_parameters :POST
|
240
313
|
|
241
|
-
|
242
314
|
# Returns the authorization header regardless of whether it was specified directly or through one of the
|
243
315
|
# proxy alternatives.
|
244
316
|
def authorization
|
@@ -250,36 +322,27 @@ module ActionDispatch
|
|
250
322
|
|
251
323
|
# True if the request came from localhost, 127.0.0.1.
|
252
324
|
def local?
|
253
|
-
LOCALHOST
|
325
|
+
LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip
|
254
326
|
end
|
255
327
|
|
256
|
-
#
|
328
|
+
# Extracted into ActionDispatch::Request::Utils.deep_munge, but kept here for backwards compatibility.
|
257
329
|
def deep_munge(hash)
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
v.grep(Hash) { |x| deep_munge(x) }
|
262
|
-
v.compact!
|
263
|
-
hash[k] = nil if v.empty?
|
264
|
-
when Hash
|
265
|
-
deep_munge(v)
|
266
|
-
end
|
267
|
-
end
|
330
|
+
ActiveSupport::Deprecation.warn(
|
331
|
+
'This method has been extracted into `ActionDispatch::Request::Utils.deep_munge`. Please start using that instead.'
|
332
|
+
)
|
268
333
|
|
269
|
-
hash
|
334
|
+
Utils.deep_munge(hash)
|
270
335
|
end
|
271
336
|
|
272
337
|
protected
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
end
|
338
|
+
def parse_query(qs)
|
339
|
+
Utils.deep_munge(super)
|
340
|
+
end
|
277
341
|
|
278
342
|
private
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
end
|
343
|
+
def check_method(name)
|
344
|
+
HTTP_METHOD_LOOKUP[name] || raise(ActionController::UnknownHttpMethod, "#{name}, accepted HTTP methods are #{HTTP_METHODS[0...-1].join(', ')}, and #{HTTP_METHODS[-1]}")
|
345
|
+
name
|
346
|
+
end
|
284
347
|
end
|
285
348
|
end
|