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
@@ -3,19 +3,51 @@ module ActionController #:nodoc:
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
class_attribute :_flash_types, instance_accessor: false
|
7
|
+
self._flash_types = []
|
8
|
+
|
9
|
+
delegate :flash, to: :request
|
10
|
+
add_flash_types(:alert, :notice)
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
module ClassMethods
|
14
|
+
# Creates new flash types. You can pass as many types as you want to create
|
15
|
+
# flash types other than the default <tt>alert</tt> and <tt>notice</tt> in
|
16
|
+
# your controllers and views. For instance:
|
17
|
+
#
|
18
|
+
# # in application_controller.rb
|
19
|
+
# class ApplicationController < ActionController::Base
|
20
|
+
# add_flash_types :warning
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# # in your controller
|
24
|
+
# redirect_to user_path(@user), warning: "Incomplete profile"
|
25
|
+
#
|
26
|
+
# # in your view
|
27
|
+
# <%= warning %>
|
28
|
+
#
|
29
|
+
# This method will automatically define a new method for each of the given
|
30
|
+
# names, and it will be available in your views.
|
31
|
+
def add_flash_types(*types)
|
32
|
+
types.each do |type|
|
33
|
+
next if _flash_types.include?(type)
|
34
|
+
|
35
|
+
define_method(type) do
|
36
|
+
request.flash[type]
|
37
|
+
end
|
38
|
+
helper_method type
|
39
|
+
|
40
|
+
self._flash_types += [type]
|
15
41
|
end
|
42
|
+
end
|
43
|
+
end
|
16
44
|
|
17
|
-
|
18
|
-
|
45
|
+
protected
|
46
|
+
def redirect_to(options = {}, response_status_and_flash = {}) #:doc:
|
47
|
+
self.class._flash_types.each do |flash_type|
|
48
|
+
if type = response_status_and_flash.delete(flash_type)
|
49
|
+
flash[flash_type] = type
|
50
|
+
end
|
19
51
|
end
|
20
52
|
|
21
53
|
if other_flashes = response_status_and_flash.delete(:flash)
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'active_support/core_ext/hash/except'
|
2
|
+
require 'active_support/core_ext/hash/slice'
|
3
|
+
|
1
4
|
module ActionController
|
2
5
|
# This module provides a method which will redirect browser to use HTTPS
|
3
6
|
# protocol. This will ensure that user's sensitive information will be
|
@@ -14,26 +17,81 @@ module ActionController
|
|
14
17
|
extend ActiveSupport::Concern
|
15
18
|
include AbstractController::Callbacks
|
16
19
|
|
20
|
+
ACTION_OPTIONS = [:only, :except, :if, :unless]
|
21
|
+
URL_OPTIONS = [:protocol, :host, :domain, :subdomain, :port, :path]
|
22
|
+
REDIRECT_OPTIONS = [:status, :flash, :alert, :notice]
|
23
|
+
|
17
24
|
module ClassMethods
|
18
25
|
# Force the request to this particular controller or specified actions to be
|
19
26
|
# under HTTPS protocol.
|
20
27
|
#
|
21
|
-
#
|
28
|
+
# If you need to disable this for any reason (e.g. development) then you can use
|
29
|
+
# an +:if+ or +:unless+ condition.
|
30
|
+
#
|
31
|
+
# class AccountsController < ApplicationController
|
32
|
+
# force_ssl if: :ssl_configured?
|
33
|
+
#
|
34
|
+
# def ssl_configured?
|
35
|
+
# !Rails.env.development?
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# ==== URL Options
|
40
|
+
# You can pass any of the following options to affect the redirect url
|
41
|
+
# * <tt>host</tt> - Redirect to a different host name
|
42
|
+
# * <tt>subdomain</tt> - Redirect to a different subdomain
|
43
|
+
# * <tt>domain</tt> - Redirect to a different domain
|
44
|
+
# * <tt>port</tt> - Redirect to a non-standard port
|
45
|
+
# * <tt>path</tt> - Redirect to a different path
|
46
|
+
#
|
47
|
+
# ==== Redirect Options
|
48
|
+
# You can pass any of the following options to affect the redirect status and response
|
49
|
+
# * <tt>status</tt> - Redirect with a custom status (default is 301 Moved Permanently)
|
50
|
+
# * <tt>flash</tt> - Set a flash message when redirecting
|
51
|
+
# * <tt>alert</tt> - Set an alert message when redirecting
|
52
|
+
# * <tt>notice</tt> - Set a notice message when redirecting
|
22
53
|
#
|
23
|
-
# ==== Options
|
24
|
-
#
|
25
|
-
# * <tt>
|
54
|
+
# ==== Action Options
|
55
|
+
# You can pass any of the following options to affect the before_action callback
|
56
|
+
# * <tt>only</tt> - The callback should be run only for this action
|
57
|
+
# * <tt>except</tt> - The callback should be run for all actions except this action
|
58
|
+
# * <tt>if</tt> - A symbol naming an instance method or a proc; the callback
|
59
|
+
# will be called only when it returns a true value.
|
60
|
+
# * <tt>unless</tt> - A symbol naming an instance method or a proc; the callback
|
61
|
+
# will be called only when it returns a false value.
|
26
62
|
def force_ssl(options = {})
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
redirect_options.merge!(:host => host) if host
|
32
|
-
redirect_options.merge!(:params => request.query_parameters)
|
33
|
-
redirect_to redirect_options
|
34
|
-
end
|
63
|
+
action_options = options.slice(*ACTION_OPTIONS)
|
64
|
+
redirect_options = options.except(*ACTION_OPTIONS)
|
65
|
+
before_action(action_options) do
|
66
|
+
force_ssl_redirect(redirect_options)
|
35
67
|
end
|
36
68
|
end
|
37
69
|
end
|
70
|
+
|
71
|
+
# Redirect the existing request to use the HTTPS protocol.
|
72
|
+
#
|
73
|
+
# ==== Parameters
|
74
|
+
# * <tt>host_or_options</tt> - Either a host name or any of the url & redirect options
|
75
|
+
# available to the <tt>force_ssl</tt> method.
|
76
|
+
def force_ssl_redirect(host_or_options = nil)
|
77
|
+
unless request.ssl?
|
78
|
+
options = {
|
79
|
+
:protocol => 'https://',
|
80
|
+
:host => request.host,
|
81
|
+
:path => request.fullpath,
|
82
|
+
:status => :moved_permanently
|
83
|
+
}
|
84
|
+
|
85
|
+
if host_or_options.is_a?(Hash)
|
86
|
+
options.merge!(host_or_options)
|
87
|
+
elsif host_or_options
|
88
|
+
options[:host] = host_or_options
|
89
|
+
end
|
90
|
+
|
91
|
+
secure_url = ActionDispatch::Http::URL.url_for(options.slice(*URL_OPTIONS))
|
92
|
+
flash.keep if respond_to?(:flash)
|
93
|
+
redirect_to secure_url, options.slice(*REDIRECT_OPTIONS)
|
94
|
+
end
|
95
|
+
end
|
38
96
|
end
|
39
97
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
module ActionController
|
2
2
|
module Head
|
3
|
-
|
4
|
-
|
5
|
-
# Return a response that has no content (merely headers). The options
|
3
|
+
# Returns a response that has no content (merely headers). The options
|
6
4
|
# argument is interpreted to be a hash of header names and values.
|
7
5
|
# This allows you to easily return a response that consists only of
|
8
6
|
# significant headers:
|
9
7
|
#
|
10
|
-
# head :created, :
|
8
|
+
# head :created, location: person_path(@person)
|
11
9
|
#
|
12
|
-
# head :created, :
|
10
|
+
# head :created, location: @person
|
13
11
|
#
|
14
12
|
# It can also be used to return exceptional conditions:
|
15
13
|
#
|
16
14
|
# return head(:method_not_allowed) unless request.post?
|
17
15
|
# return head(:bad_request) unless valid_request?
|
18
16
|
# render
|
17
|
+
#
|
18
|
+
# See Rack::Utils::SYMBOL_TO_STATUS_CODE for a full list of valid +status+ symbols.
|
19
19
|
def head(status, options = {})
|
20
20
|
options, status = status, nil if status.is_a?(Hash)
|
21
21
|
status ||= options.delete(:status) || :ok
|
@@ -28,8 +28,31 @@ module ActionController
|
|
28
28
|
|
29
29
|
self.status = status
|
30
30
|
self.location = url_for(location) if location
|
31
|
-
|
32
|
-
self.response_body = "
|
31
|
+
|
32
|
+
self.response_body = ""
|
33
|
+
|
34
|
+
if include_content?(self.response_code)
|
35
|
+
self.content_type = content_type || (Mime[formats.first] if formats)
|
36
|
+
self.response.charset = false if self.response
|
37
|
+
else
|
38
|
+
headers.delete('Content-Type')
|
39
|
+
headers.delete('Content-Length')
|
40
|
+
end
|
41
|
+
|
42
|
+
true
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
# :nodoc:
|
47
|
+
def include_content?(status)
|
48
|
+
case status
|
49
|
+
when 100..199
|
50
|
+
false
|
51
|
+
when 204, 205, 304
|
52
|
+
false
|
53
|
+
else
|
54
|
+
true
|
55
|
+
end
|
33
56
|
end
|
34
57
|
end
|
35
58
|
end
|
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'active_support/core_ext/array/wrap'
|
2
|
-
require 'active_support/core_ext/class/attribute'
|
3
|
-
|
4
1
|
module ActionController
|
5
2
|
# The \Rails framework provides a large number of helpers for working with assets, dates, forms,
|
6
3
|
# numbers and model objects, to name a few. These helpers are available to all templates
|
@@ -8,7 +5,7 @@ module ActionController
|
|
8
5
|
#
|
9
6
|
# In addition to using the standard template helpers provided, creating custom helpers to
|
10
7
|
# extract complicated logic or reusable functionality is strongly encouraged. By default, each controller
|
11
|
-
# will include all helpers.
|
8
|
+
# will include all helpers. These helpers are only accessible on the controller through <tt>.helpers</tt>
|
12
9
|
#
|
13
10
|
# In previous versions of \Rails the controller will include a helper whose
|
14
11
|
# name matches that of the controller, e.g., <tt>MyController</tt> will automatically
|
@@ -17,7 +14,6 @@ module ActionController
|
|
17
14
|
# Additional helpers can be specified using the +helper+ class method in ActionController::Base or any
|
18
15
|
# controller which inherits from it.
|
19
16
|
#
|
20
|
-
# ==== Examples
|
21
17
|
# The +to_s+ method from the \Time class can be wrapped in a helper method to display a custom message if
|
22
18
|
# a \Time object is blank:
|
23
19
|
#
|
@@ -53,6 +49,7 @@ module ActionController
|
|
53
49
|
module Helpers
|
54
50
|
extend ActiveSupport::Concern
|
55
51
|
|
52
|
+
class << self; attr_accessor :helpers_path; end
|
56
53
|
include AbstractController::Helpers
|
57
54
|
|
58
55
|
included do
|
@@ -76,7 +73,11 @@ module ActionController
|
|
76
73
|
|
77
74
|
# Provides a proxy to access helpers methods from outside the view.
|
78
75
|
def helpers
|
79
|
-
@helper_proxy ||=
|
76
|
+
@helper_proxy ||= begin
|
77
|
+
proxy = ActionView::Base.new
|
78
|
+
proxy.config = config.inheritable_copy
|
79
|
+
proxy.extend(_helpers)
|
80
|
+
end
|
80
81
|
end
|
81
82
|
|
82
83
|
# Overwrite modules_for_helpers to accept :all as argument, which loads
|
@@ -93,12 +94,11 @@ module ActionController
|
|
93
94
|
end
|
94
95
|
|
95
96
|
def all_helpers_from_path(path)
|
96
|
-
helpers =
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
helpers = Array(path).flat_map do |_path|
|
98
|
+
extract = /^#{Regexp.quote(_path.to_s)}\/?(.*)_helper.rb$/
|
99
|
+
names = Dir["#{_path}/**/*_helper.rb"].map { |file| file.sub(extract, '\1') }
|
100
|
+
names.sort!
|
100
101
|
end
|
101
|
-
helpers.sort!
|
102
102
|
helpers.uniq!
|
103
103
|
helpers
|
104
104
|
end
|