actionpack 3.2.22.5 → 4.0.0.beta1
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 +4 -4
- data/CHANGELOG.md +641 -418
- data/MIT-LICENSE +1 -1
- data/README.rdoc +5 -288
- data/lib/abstract_controller.rb +1 -8
- data/lib/abstract_controller/asset_paths.rb +2 -2
- data/lib/abstract_controller/base.rb +39 -37
- data/lib/abstract_controller/callbacks.rb +101 -82
- data/lib/abstract_controller/collector.rb +7 -3
- data/lib/abstract_controller/helpers.rb +23 -11
- data/lib/abstract_controller/layouts.rb +68 -73
- data/lib/abstract_controller/logger.rb +1 -2
- data/lib/abstract_controller/rendering.rb +22 -13
- data/lib/abstract_controller/translation.rb +16 -1
- data/lib/abstract_controller/url_for.rb +6 -6
- data/lib/abstract_controller/view_paths.rb +1 -1
- data/lib/action_controller.rb +15 -6
- data/lib/action_controller/base.rb +46 -22
- data/lib/action_controller/caching.rb +46 -33
- data/lib/action_controller/caching/fragments.rb +23 -53
- data/lib/action_controller/deprecated.rb +5 -1
- data/lib/action_controller/deprecated/integration_test.rb +3 -0
- data/lib/action_controller/log_subscriber.rb +11 -8
- data/lib/action_controller/metal.rb +16 -30
- data/lib/action_controller/metal/conditional_get.rb +76 -32
- data/lib/action_controller/metal/data_streaming.rb +20 -26
- data/lib/action_controller/metal/exceptions.rb +19 -6
- data/lib/action_controller/metal/flash.rb +24 -9
- data/lib/action_controller/metal/force_ssl.rb +32 -9
- data/lib/action_controller/metal/head.rb +25 -4
- data/lib/action_controller/metal/helpers.rb +6 -9
- data/lib/action_controller/metal/hide_actions.rb +1 -2
- data/lib/action_controller/metal/http_authentication.rb +105 -87
- data/lib/action_controller/metal/implicit_render.rb +1 -1
- data/lib/action_controller/metal/instrumentation.rb +2 -1
- data/lib/action_controller/metal/live.rb +141 -0
- data/lib/action_controller/metal/mime_responds.rb +161 -47
- data/lib/action_controller/metal/params_wrapper.rb +112 -74
- data/lib/action_controller/metal/rack_delegation.rb +9 -3
- data/lib/action_controller/metal/redirecting.rb +15 -20
- data/lib/action_controller/metal/renderers.rb +11 -9
- data/lib/action_controller/metal/rendering.rb +8 -0
- data/lib/action_controller/metal/request_forgery_protection.rb +112 -19
- data/lib/action_controller/metal/responder.rb +20 -19
- data/lib/action_controller/metal/streaming.rb +12 -18
- data/lib/action_controller/metal/strong_parameters.rb +516 -0
- data/lib/action_controller/metal/testing.rb +13 -18
- data/lib/action_controller/metal/url_for.rb +27 -25
- data/lib/action_controller/model_naming.rb +12 -0
- data/lib/action_controller/railtie.rb +33 -17
- data/lib/action_controller/railties/helpers.rb +22 -0
- data/lib/action_controller/record_identifier.rb +18 -72
- data/lib/action_controller/test_case.rb +215 -123
- data/lib/action_controller/vendor/html-scanner.rb +4 -19
- data/lib/action_dispatch.rb +27 -19
- data/lib/action_dispatch/http/cache.rb +63 -11
- data/lib/action_dispatch/http/filter_parameters.rb +18 -8
- data/lib/action_dispatch/http/filter_redirect.rb +37 -0
- data/lib/action_dispatch/http/headers.rb +27 -19
- data/lib/action_dispatch/http/mime_negotiation.rb +25 -2
- data/lib/action_dispatch/http/mime_type.rb +145 -113
- data/lib/action_dispatch/http/mime_types.rb +1 -1
- data/lib/action_dispatch/http/parameter_filter.rb +44 -46
- data/lib/action_dispatch/http/parameters.rb +12 -5
- data/lib/action_dispatch/http/rack_cache.rb +2 -3
- data/lib/action_dispatch/http/request.rb +49 -18
- data/lib/action_dispatch/http/response.rb +129 -35
- data/lib/action_dispatch/http/upload.rb +60 -17
- data/lib/action_dispatch/http/url.rb +53 -31
- data/lib/action_dispatch/journey.rb +5 -0
- data/lib/action_dispatch/journey/backwards.rb +5 -0
- data/lib/action_dispatch/journey/formatter.rb +146 -0
- data/lib/action_dispatch/journey/gtg/builder.rb +162 -0
- data/lib/action_dispatch/journey/gtg/simulator.rb +44 -0
- data/lib/action_dispatch/journey/gtg/transition_table.rb +156 -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 +124 -0
- data/lib/action_dispatch/journey/parser.rb +206 -0
- data/lib/action_dispatch/journey/parser.y +47 -0
- data/lib/action_dispatch/journey/parser_extras.rb +23 -0
- data/lib/action_dispatch/journey/path/pattern.rb +196 -0
- data/lib/action_dispatch/journey/route.rb +116 -0
- data/lib/action_dispatch/journey/router.rb +164 -0
- data/lib/action_dispatch/journey/router/strexp.rb +24 -0
- data/lib/action_dispatch/journey/router/utils.rb +54 -0
- data/lib/action_dispatch/journey/routes.rb +75 -0
- data/lib/action_dispatch/journey/scanner.rb +61 -0
- data/lib/action_dispatch/journey/visitors.rb +189 -0
- data/lib/action_dispatch/journey/visualizer/fsm.css +34 -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/middleware/callbacks.rb +9 -4
- data/lib/action_dispatch/middleware/cookies.rb +168 -57
- data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -17
- data/lib/action_dispatch/middleware/exception_wrapper.rb +27 -3
- data/lib/action_dispatch/middleware/flash.rb +58 -58
- data/lib/action_dispatch/middleware/params_parser.rb +14 -29
- data/lib/action_dispatch/middleware/public_exceptions.rb +31 -14
- data/lib/action_dispatch/middleware/reloader.rb +6 -6
- data/lib/action_dispatch/middleware/remote_ip.rb +145 -39
- data/lib/action_dispatch/middleware/request_id.rb +2 -6
- 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 +81 -7
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +8 -3
- data/lib/action_dispatch/middleware/show_exceptions.rb +12 -45
- data/lib/action_dispatch/middleware/ssl.rb +70 -0
- data/lib/action_dispatch/middleware/stack.rb +6 -1
- data/lib/action_dispatch/middleware/static.rb +5 -24
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +14 -11
- data/lib/action_dispatch/middleware/templates/rescues/_source.erb +25 -0
- data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +3 -3
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +15 -9
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +121 -5
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +7 -2
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +30 -15
- data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +39 -13
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +6 -2
- data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +144 -0
- data/lib/action_dispatch/railtie.rb +16 -6
- data/lib/action_dispatch/request/session.rb +181 -0
- data/lib/action_dispatch/routing.rb +41 -40
- data/lib/action_dispatch/routing/inspector.rb +240 -0
- data/lib/action_dispatch/routing/mapper.rb +501 -273
- data/lib/action_dispatch/routing/polymorphic_routes.rb +16 -20
- data/lib/action_dispatch/routing/redirection.rb +46 -29
- data/lib/action_dispatch/routing/route_set.rb +203 -164
- data/lib/action_dispatch/routing/routes_proxy.rb +2 -0
- data/lib/action_dispatch/routing/url_for.rb +48 -33
- data/lib/action_dispatch/testing/assertions/dom.rb +3 -13
- data/lib/action_dispatch/testing/assertions/response.rb +32 -40
- data/lib/action_dispatch/testing/assertions/routing.rb +40 -39
- data/lib/action_dispatch/testing/assertions/selector.rb +15 -20
- data/lib/action_dispatch/testing/assertions/tag.rb +20 -23
- data/lib/action_dispatch/testing/integration.rb +41 -22
- data/lib/action_dispatch/testing/test_process.rb +9 -6
- data/lib/action_dispatch/testing/test_request.rb +7 -3
- data/lib/action_pack.rb +1 -1
- data/lib/action_pack/version.rb +4 -4
- data/lib/action_view.rb +17 -8
- data/lib/action_view/base.rb +15 -34
- data/lib/action_view/buffers.rb +1 -1
- data/lib/action_view/context.rb +4 -4
- data/lib/action_view/dependency_tracker.rb +91 -0
- data/lib/action_view/digestor.rb +85 -0
- data/lib/action_view/flows.rb +1 -4
- data/lib/action_view/helpers.rb +2 -4
- data/lib/action_view/helpers/active_model_helper.rb +3 -4
- data/lib/action_view/helpers/asset_tag_helper.rb +211 -353
- data/lib/action_view/helpers/asset_url_helper.rb +354 -0
- data/lib/action_view/helpers/atom_feed_helper.rb +13 -10
- data/lib/action_view/helpers/cache_helper.rb +150 -18
- data/lib/action_view/helpers/capture_helper.rb +42 -29
- data/lib/action_view/helpers/csrf_helper.rb +0 -2
- data/lib/action_view/helpers/date_helper.rb +268 -247
- data/lib/action_view/helpers/debug_helper.rb +10 -11
- data/lib/action_view/helpers/form_helper.rb +904 -547
- data/lib/action_view/helpers/form_options_helper.rb +341 -166
- data/lib/action_view/helpers/form_tag_helper.rb +188 -88
- data/lib/action_view/helpers/javascript_helper.rb +23 -16
- data/lib/action_view/helpers/number_helper.rb +148 -354
- data/lib/action_view/helpers/output_safety_helper.rb +3 -3
- data/lib/action_view/helpers/record_tag_helper.rb +17 -22
- data/lib/action_view/helpers/rendering_helper.rb +2 -4
- data/lib/action_view/helpers/sanitize_helper.rb +3 -6
- data/lib/action_view/helpers/tag_helper.rb +43 -37
- data/lib/action_view/helpers/tags.rb +39 -0
- data/lib/action_view/helpers/tags/base.rb +148 -0
- data/lib/action_view/helpers/tags/check_box.rb +64 -0
- data/lib/action_view/helpers/tags/checkable.rb +16 -0
- data/lib/action_view/helpers/tags/collection_check_boxes.rb +43 -0
- data/lib/action_view/helpers/tags/collection_helpers.rb +83 -0
- data/lib/action_view/helpers/tags/collection_radio_buttons.rb +36 -0
- data/lib/action_view/helpers/tags/collection_select.rb +28 -0
- data/lib/action_view/helpers/tags/color_field.rb +25 -0
- data/lib/action_view/helpers/tags/date_field.rb +13 -0
- data/lib/action_view/helpers/tags/date_select.rb +72 -0
- data/lib/action_view/helpers/tags/datetime_field.rb +22 -0
- data/lib/action_view/helpers/tags/datetime_local_field.rb +19 -0
- data/lib/action_view/helpers/tags/datetime_select.rb +8 -0
- data/lib/action_view/helpers/tags/email_field.rb +8 -0
- data/lib/action_view/helpers/tags/file_field.rb +8 -0
- data/lib/action_view/helpers/tags/grouped_collection_select.rb +29 -0
- data/lib/action_view/helpers/tags/hidden_field.rb +8 -0
- data/lib/action_view/helpers/tags/label.rb +65 -0
- data/lib/action_view/helpers/tags/month_field.rb +13 -0
- data/lib/action_view/helpers/tags/number_field.rb +18 -0
- data/lib/action_view/helpers/tags/password_field.rb +12 -0
- data/lib/action_view/helpers/tags/radio_button.rb +31 -0
- data/lib/action_view/helpers/tags/range_field.rb +8 -0
- data/lib/action_view/helpers/tags/search_field.rb +24 -0
- data/lib/action_view/helpers/tags/select.rb +41 -0
- data/lib/action_view/helpers/tags/tel_field.rb +8 -0
- data/lib/action_view/helpers/tags/text_area.rb +18 -0
- data/lib/action_view/helpers/tags/text_field.rb +29 -0
- data/lib/action_view/helpers/tags/time_field.rb +13 -0
- data/lib/action_view/helpers/tags/time_select.rb +8 -0
- data/lib/action_view/helpers/tags/time_zone_select.rb +20 -0
- data/lib/action_view/helpers/tags/url_field.rb +8 -0
- data/lib/action_view/helpers/tags/week_field.rb +13 -0
- data/lib/action_view/helpers/text_helper.rb +126 -113
- data/lib/action_view/helpers/translation_helper.rb +32 -16
- data/lib/action_view/helpers/url_helper.rb +200 -271
- data/lib/action_view/locale/en.yml +1 -105
- data/lib/action_view/log_subscriber.rb +6 -4
- data/lib/action_view/lookup_context.rb +15 -39
- data/lib/action_view/model_naming.rb +12 -0
- data/lib/action_view/path_set.rb +9 -39
- data/lib/action_view/railtie.rb +6 -22
- data/lib/action_view/record_identifier.rb +84 -0
- data/lib/action_view/renderer/abstract_renderer.rb +10 -19
- data/lib/action_view/renderer/partial_renderer.rb +144 -81
- data/lib/action_view/renderer/renderer.rb +2 -19
- data/lib/action_view/renderer/streaming_template_renderer.rb +2 -5
- data/lib/action_view/renderer/template_renderer.rb +14 -13
- data/lib/action_view/routing_url_for.rb +107 -0
- data/lib/action_view/template.rb +22 -21
- data/lib/action_view/template/error.rb +22 -12
- data/lib/action_view/template/handlers.rb +12 -9
- data/lib/action_view/template/handlers/builder.rb +1 -1
- data/lib/action_view/template/handlers/erb.rb +11 -16
- data/lib/action_view/template/handlers/raw.rb +11 -0
- data/lib/action_view/template/resolver.rb +111 -83
- data/lib/action_view/template/text.rb +12 -8
- data/lib/action_view/template/types.rb +57 -0
- data/lib/action_view/test_case.rb +66 -43
- data/lib/action_view/testing/resolvers.rb +3 -2
- data/lib/action_view/vendor/html-scanner.rb +20 -0
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/document.rb +0 -0
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/node.rb +12 -12
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/sanitizer.rb +18 -7
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/selector.rb +1 -1
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/tokenizer.rb +1 -1
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/version.rb +0 -0
- metadata +135 -125
- 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/performance_test.rb +0 -1
- data/lib/action_controller/metal/compatibility.rb +0 -65
- data/lib/action_controller/metal/session_management.rb +0 -14
- data/lib/action_controller/railties/paths.rb +0 -25
- 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/testing/performance_test.rb +0 -10
- data/lib/action_view/asset_paths.rb +0 -142
- data/lib/action_view/helpers/asset_paths.rb +0 -7
- 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/sprockets/assets.rake +0 -99
- data/lib/sprockets/bootstrap.rb +0 -37
- data/lib/sprockets/compressors.rb +0 -83
- data/lib/sprockets/helpers.rb +0 -6
- data/lib/sprockets/helpers/isolated_helper.rb +0 -13
- data/lib/sprockets/helpers/rails_helper.rb +0 -182
- data/lib/sprockets/railtie.rb +0 -62
- data/lib/sprockets/static_compiler.rb +0 -56
@@ -1,7 +1,5 @@
|
|
1
1
|
require "abstract_controller/base"
|
2
2
|
require "action_view"
|
3
|
-
require "active_support/core_ext/object/instance_variables"
|
4
|
-
require "active_support/hash_with_indifferent_access"
|
5
3
|
|
6
4
|
module AbstractController
|
7
5
|
class DoubleRenderError < Error
|
@@ -51,9 +49,19 @@ module AbstractController
|
|
51
49
|
module ClassMethods
|
52
50
|
def view_context_class
|
53
51
|
@view_context_class ||= begin
|
54
|
-
routes
|
55
|
-
helpers =
|
56
|
-
|
52
|
+
routes = respond_to?(:_routes) && _routes
|
53
|
+
helpers = respond_to?(:_helpers) && _helpers
|
54
|
+
|
55
|
+
Class.new(ActionView::Base) do
|
56
|
+
if routes
|
57
|
+
include routes.url_helpers
|
58
|
+
include routes.mounted_helpers
|
59
|
+
end
|
60
|
+
|
61
|
+
if helpers
|
62
|
+
include helpers
|
63
|
+
end
|
64
|
+
end
|
57
65
|
end
|
58
66
|
end
|
59
67
|
end
|
@@ -111,20 +119,20 @@ module AbstractController
|
|
111
119
|
view_renderer.render(view_context, options)
|
112
120
|
end
|
113
121
|
|
114
|
-
DEFAULT_PROTECTED_INSTANCE_VARIABLES =
|
115
|
-
|
116
|
-
|
117
|
-
|
122
|
+
DEFAULT_PROTECTED_INSTANCE_VARIABLES = [
|
123
|
+
:@_action_name, :@_response_body, :@_formats, :@_prefixes, :@_config,
|
124
|
+
:@_view_context_class, :@_view_renderer, :@_lookup_context
|
125
|
+
]
|
118
126
|
|
119
127
|
# This method should return a hash with assigns.
|
120
128
|
# You can overwrite this configuration per controller.
|
121
129
|
# :api: public
|
122
130
|
def view_assigns
|
123
131
|
hash = {}
|
124
|
-
variables =
|
132
|
+
variables = instance_variables
|
125
133
|
variables -= protected_instance_variables
|
126
134
|
variables -= DEFAULT_PROTECTED_INSTANCE_VARIABLES
|
127
|
-
variables.each { |name| hash[name
|
135
|
+
variables.each { |name| hash[name[1..-1]] = instance_variable_get(name) }
|
128
136
|
hash
|
129
137
|
end
|
130
138
|
|
@@ -139,7 +147,7 @@ module AbstractController
|
|
139
147
|
end
|
140
148
|
|
141
149
|
# Normalize args by converting render "foo" to render :action => "foo" and
|
142
|
-
# render "foo/bar" to render :
|
150
|
+
# render "foo/bar" to render :file => "foo/bar".
|
143
151
|
# :api: plugin
|
144
152
|
def _normalize_args(action=nil, options={})
|
145
153
|
case action
|
@@ -148,11 +156,12 @@ module AbstractController
|
|
148
156
|
options = action
|
149
157
|
when String, Symbol
|
150
158
|
action = action.to_s
|
151
|
-
key = action.include?(?/) ? :
|
159
|
+
key = action.include?(?/) ? :file : :action
|
152
160
|
options[key] = action
|
153
161
|
else
|
154
162
|
options[:partial] = action
|
155
163
|
end
|
164
|
+
|
156
165
|
options
|
157
166
|
end
|
158
167
|
|
@@ -1,13 +1,28 @@
|
|
1
1
|
module AbstractController
|
2
2
|
module Translation
|
3
|
+
# Delegates to <tt>I18n.translate</tt>. Also aliased as <tt>t</tt>.
|
4
|
+
#
|
5
|
+
# When the given key starts with a period, it will be scoped by the current
|
6
|
+
# controller and action. So if you call <tt>translate(".foo")</tt> from
|
7
|
+
# <tt>PeopleController#index</tt>, it will convert the call to
|
8
|
+
# <tt>I18n.translate("people.index.foo")</tt>. This makes it less repetitive
|
9
|
+
# to translate many keys within the same controller / action and gives you a
|
10
|
+
# simple framework for scoping them consistently.
|
3
11
|
def translate(*args)
|
12
|
+
key = args.first
|
13
|
+
if key.is_a?(String) && (key[0] == '.')
|
14
|
+
key = "#{ controller_path.gsub('/', '.') }.#{ action_name }#{ key }"
|
15
|
+
args[0] = key
|
16
|
+
end
|
17
|
+
|
4
18
|
I18n.translate(*args)
|
5
19
|
end
|
6
20
|
alias :t :translate
|
7
21
|
|
22
|
+
# Delegates to <tt>I18n.localize</tt>. Also aliased as <tt>l</tt>.
|
8
23
|
def localize(*args)
|
9
24
|
I18n.localize(*args)
|
10
25
|
end
|
11
26
|
alias :l :localize
|
12
27
|
end
|
13
|
-
end
|
28
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
# Includes +url_for+ into the host class (e.g. an abstract controller or mailer). The class
|
2
|
-
# has to provide a +RouteSet+ by implementing the <tt>_routes</tt> methods. Otherwise, an
|
3
|
-
# exception will be raised.
|
4
|
-
#
|
5
|
-
# Note that this module is completely decoupled from HTTP - the only requirement is a valid
|
6
|
-
# <tt>_routes</tt> implementation.
|
7
1
|
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.
|
5
|
+
#
|
6
|
+
# Note that this module is completely decoupled from HTTP - the only requirement is a valid
|
7
|
+
# <tt>_routes</tt> implementation.
|
8
8
|
module UrlFor
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
include ActionDispatch::Routing::UrlFor
|
@@ -89,7 +89,7 @@ module AbstractController
|
|
89
89
|
# * <tt>paths</tt> - If a PathSet is provided, use that;
|
90
90
|
# otherwise, process the parameter into a PathSet.
|
91
91
|
def view_paths=(paths)
|
92
|
-
self._view_paths = ActionView::PathSet.new(Array
|
92
|
+
self._view_paths = ActionView::PathSet.new(Array(paths))
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
data/lib/action_controller.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
require 'active_support/rails'
|
1
2
|
require 'abstract_controller'
|
2
3
|
require 'action_dispatch'
|
4
|
+
require 'action_controller/metal/live'
|
5
|
+
require 'action_controller/metal/strong_parameters'
|
3
6
|
|
4
7
|
module ActionController
|
5
8
|
extend ActiveSupport::Autoload
|
@@ -31,16 +34,14 @@ module ActionController
|
|
31
34
|
autoload :RequestForgeryProtection
|
32
35
|
autoload :Rescue
|
33
36
|
autoload :Responder
|
34
|
-
autoload :SessionManagement
|
35
37
|
autoload :Streaming
|
38
|
+
autoload :StrongParameters
|
36
39
|
autoload :Testing
|
37
40
|
autoload :UrlFor
|
38
41
|
end
|
39
42
|
|
40
43
|
autoload :Integration, 'action_controller/deprecated/integration_test'
|
41
44
|
autoload :IntegrationTest, 'action_controller/deprecated/integration_test'
|
42
|
-
autoload :PerformanceTest, 'action_controller/deprecated/performance_test'
|
43
|
-
autoload :UrlWriter, 'action_controller/deprecated'
|
44
45
|
autoload :Routing, 'action_controller/deprecated'
|
45
46
|
autoload :TestCase, 'action_controller/test_case'
|
46
47
|
autoload :TemplateAssertions, 'action_controller/test_case'
|
@@ -48,18 +49,26 @@ module ActionController
|
|
48
49
|
eager_autoload do
|
49
50
|
autoload :RecordIdentifier
|
50
51
|
end
|
52
|
+
|
53
|
+
def self.eager_load!
|
54
|
+
super
|
55
|
+
ActionController::Caching.eager_load!
|
56
|
+
HTML.eager_load!
|
57
|
+
end
|
51
58
|
end
|
52
59
|
|
53
60
|
# All of these simply register additional autoloads
|
54
61
|
require 'action_view'
|
55
|
-
require '
|
62
|
+
require 'action_view/vendor/html-scanner'
|
63
|
+
|
64
|
+
ActiveSupport.on_load(:action_view) do
|
65
|
+
ActionView::RoutingUrlFor.send(:include, ActionDispatch::Routing::UrlFor)
|
66
|
+
end
|
56
67
|
|
57
68
|
# Common Active Support usage in Action Controller
|
58
|
-
require 'active_support/concern'
|
59
69
|
require 'active_support/core_ext/class/attribute_accessors'
|
60
70
|
require 'active_support/core_ext/load_error'
|
61
71
|
require 'active_support/core_ext/module/attr_internal'
|
62
|
-
require 'active_support/core_ext/module/delegation'
|
63
72
|
require 'active_support/core_ext/name_error'
|
64
73
|
require 'active_support/core_ext/uri'
|
65
74
|
require 'active_support/inflector'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "action_controller/log_subscriber"
|
2
|
+
require "action_controller/metal/params_wrapper"
|
2
3
|
|
3
4
|
module ActionController
|
4
5
|
# Action Controllers are the core of a web request in \Rails. They are made up of one or more actions that are executed
|
@@ -43,7 +44,7 @@ module ActionController
|
|
43
44
|
#
|
44
45
|
# def server_ip
|
45
46
|
# location = request.env["SERVER_ADDR"]
|
46
|
-
# render :
|
47
|
+
# render text: "This server hosted at #{location}"
|
47
48
|
# end
|
48
49
|
#
|
49
50
|
# == Parameters
|
@@ -88,15 +89,6 @@ module ActionController
|
|
88
89
|
#
|
89
90
|
# Do not put secret information in cookie-based sessions!
|
90
91
|
#
|
91
|
-
# Other options for session storage:
|
92
|
-
#
|
93
|
-
# * ActiveRecord::SessionStore - Sessions are stored in your database, which works better than PStore with multiple app servers and,
|
94
|
-
# unlike CookieStore, hides your session contents from the user. To use ActiveRecord::SessionStore, set
|
95
|
-
#
|
96
|
-
# MyApplication::Application.config.session_store :active_record_store
|
97
|
-
#
|
98
|
-
# in your <tt>config/initializers/session_store.rb</tt> and run <tt>script/rails g session_migration</tt>.
|
99
|
-
#
|
100
92
|
# == Responses
|
101
93
|
#
|
102
94
|
# Each action results in a response, which holds the headers and document to be sent to the user's browser. The actual response
|
@@ -116,15 +108,15 @@ module ActionController
|
|
116
108
|
#
|
117
109
|
# Title: <%= @post.title %>
|
118
110
|
#
|
119
|
-
# You don't have to rely on the automated rendering. For example, actions that could result in the rendering of different templates
|
111
|
+
# You don't have to rely on the automated rendering. For example, actions that could result in the rendering of different templates
|
120
112
|
# will use the manual rendering methods:
|
121
113
|
#
|
122
114
|
# def search
|
123
115
|
# @results = Search.find(params[:query])
|
124
116
|
# case @results.count
|
125
|
-
# when 0 then render :
|
126
|
-
# when 1 then render :
|
127
|
-
# when 2..10 then render :
|
117
|
+
# when 0 then render action: "no_results"
|
118
|
+
# when 1 then render action: "show"
|
119
|
+
# when 2..10 then render action: "show_many"
|
128
120
|
# end
|
129
121
|
# end
|
130
122
|
#
|
@@ -133,14 +125,14 @@ module ActionController
|
|
133
125
|
# == Redirects
|
134
126
|
#
|
135
127
|
# Redirects are used to move from one action to another. For example, after a <tt>create</tt> action, which stores a blog entry to the
|
136
|
-
# database, we might like to show the user the new entry. Because we're following good DRY principles (Don't Repeat Yourself), we're
|
128
|
+
# database, we might like to show the user the new entry. Because we're following good DRY principles (Don't Repeat Yourself), we're
|
137
129
|
# going to reuse (and redirect to) a <tt>show</tt> action that we'll assume has already been created. The code might look like this:
|
138
130
|
#
|
139
131
|
# def create
|
140
132
|
# @entry = Entry.new(params[:entry])
|
141
133
|
# if @entry.save
|
142
134
|
# # The entry was saved correctly, redirect to show
|
143
|
-
# redirect_to :
|
135
|
+
# redirect_to action: 'show', id: @entry.id
|
144
136
|
# else
|
145
137
|
# # things didn't go so well, do something else
|
146
138
|
# end
|
@@ -157,20 +149,48 @@ module ActionController
|
|
157
149
|
# An action may contain only a single render or a single redirect. Attempting to try to do either again will result in a DoubleRenderError:
|
158
150
|
#
|
159
151
|
# def do_something
|
160
|
-
# redirect_to :
|
161
|
-
# render :
|
152
|
+
# redirect_to action: "elsewhere"
|
153
|
+
# render action: "overthere" # raises DoubleRenderError
|
162
154
|
# end
|
163
155
|
#
|
164
156
|
# If you need to redirect on the condition of something, then be sure to add "and return" to halt execution.
|
165
157
|
#
|
166
158
|
# def do_something
|
167
|
-
# redirect_to(:
|
168
|
-
# render :
|
159
|
+
# redirect_to(action: "elsewhere") and return if monkeys.nil?
|
160
|
+
# render action: "overthere" # won't be called if monkeys is nil
|
169
161
|
# end
|
170
162
|
#
|
171
163
|
class Base < Metal
|
172
164
|
abstract!
|
173
165
|
|
166
|
+
# We document the request and response methods here because albeit they are
|
167
|
+
# implemented in ActionController::Metal, the type of the returned objects
|
168
|
+
# is unknown at that level.
|
169
|
+
|
170
|
+
##
|
171
|
+
# :method: request
|
172
|
+
#
|
173
|
+
# Returns an ActionDispatch::Request instance that represents the
|
174
|
+
# current request.
|
175
|
+
|
176
|
+
##
|
177
|
+
# :method: response
|
178
|
+
#
|
179
|
+
# Returns an ActionDispatch::Response that represents the current
|
180
|
+
# response.
|
181
|
+
|
182
|
+
# Shortcut helper that returns all the modules included in
|
183
|
+
# ActionController::Base except the ones passed as arguments:
|
184
|
+
#
|
185
|
+
# class MetalController
|
186
|
+
# ActionController::Base.without_modules(:ParamsWrapper, :Streaming).each do |left|
|
187
|
+
# include left
|
188
|
+
# end
|
189
|
+
# end
|
190
|
+
#
|
191
|
+
# This gives better control over what you want to exclude and makes it
|
192
|
+
# easier to create a bare controller class, instead of listing the modules
|
193
|
+
# required manually.
|
174
194
|
def self.without_modules(*modules)
|
175
195
|
modules = modules.map do |m|
|
176
196
|
m.is_a?(Symbol) ? ActionController.const_get(m) : m
|
@@ -195,6 +215,7 @@ module ActionController
|
|
195
215
|
Caching,
|
196
216
|
MimeResponds,
|
197
217
|
ImplicitRender,
|
218
|
+
StrongParameters,
|
198
219
|
|
199
220
|
Cookies,
|
200
221
|
Flash,
|
@@ -227,8 +248,11 @@ module ActionController
|
|
227
248
|
include mod
|
228
249
|
end
|
229
250
|
|
230
|
-
#
|
231
|
-
|
251
|
+
# Define some internal variables that should not be propagated to the view.
|
252
|
+
self.protected_instance_variables = [
|
253
|
+
:@_status, :@_headers, :@_params, :@_env, :@_response, :@_request,
|
254
|
+
:@_view_runtime, :@_stream, :@_url_options, :@_action_has_layout
|
255
|
+
]
|
232
256
|
|
233
257
|
ActiveSupport.run_load_hooks(:action_controller, self)
|
234
258
|
end
|
@@ -2,41 +2,33 @@ require 'fileutils'
|
|
2
2
|
require 'uri'
|
3
3
|
require 'set'
|
4
4
|
|
5
|
-
module ActionController
|
5
|
+
module ActionController
|
6
6
|
# \Caching is a cheap way of speeding up slow applications by keeping the result of
|
7
7
|
# calculations, renderings, and database calls around for subsequent requests.
|
8
|
-
# Action Controller affords you three approaches in varying levels of granularity:
|
9
|
-
# Page, Action, Fragment.
|
10
8
|
#
|
11
|
-
# You can read more about each approach
|
12
|
-
# modules below.
|
9
|
+
# You can read more about each approach by clicking the modules below.
|
13
10
|
#
|
14
|
-
# Note: To turn off all caching
|
11
|
+
# Note: To turn off all caching, set
|
15
12
|
# config.action_controller.perform_caching = false.
|
16
13
|
#
|
17
14
|
# == \Caching stores
|
18
15
|
#
|
19
16
|
# All the caching stores from ActiveSupport::Cache are available to be used as backends
|
20
|
-
# for Action Controller caching.
|
21
|
-
# as page caching is always written to disk.
|
17
|
+
# for Action Controller caching.
|
22
18
|
#
|
23
19
|
# Configuration examples (MemoryStore is the default):
|
24
20
|
#
|
25
21
|
# config.action_controller.cache_store = :memory_store
|
26
|
-
# config.action_controller.cache_store = :file_store,
|
27
|
-
# config.action_controller.cache_store = :mem_cache_store,
|
28
|
-
# config.action_controller.cache_store = :mem_cache_store, Memcached::Rails.new(
|
29
|
-
# config.action_controller.cache_store = MyOwnStore.new(
|
22
|
+
# config.action_controller.cache_store = :file_store, '/path/to/cache/directory'
|
23
|
+
# config.action_controller.cache_store = :mem_cache_store, 'localhost'
|
24
|
+
# config.action_controller.cache_store = :mem_cache_store, Memcached::Rails.new('localhost:11211')
|
25
|
+
# config.action_controller.cache_store = MyOwnStore.new('parameter')
|
30
26
|
module Caching
|
31
27
|
extend ActiveSupport::Concern
|
32
28
|
extend ActiveSupport::Autoload
|
33
29
|
|
34
30
|
eager_autoload do
|
35
|
-
autoload :Actions
|
36
31
|
autoload :Fragments
|
37
|
-
autoload :Pages
|
38
|
-
autoload :Sweeper, 'action_controller/caching/sweeping'
|
39
|
-
autoload :Sweeping, 'action_controller/caching/sweeping'
|
40
32
|
end
|
41
33
|
|
42
34
|
module ConfigMethods
|
@@ -48,39 +40,60 @@ module ActionController #:nodoc:
|
|
48
40
|
config.cache_store = ActiveSupport::Cache.lookup_store(store)
|
49
41
|
end
|
50
42
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
43
|
+
private
|
44
|
+
def cache_configured?
|
45
|
+
perform_caching && cache_store
|
46
|
+
end
|
56
47
|
end
|
57
48
|
|
58
49
|
include RackDelegation
|
59
50
|
include AbstractController::Callbacks
|
60
51
|
|
61
52
|
include ConfigMethods
|
62
|
-
include
|
63
|
-
include Sweeping if defined?(ActiveRecord)
|
53
|
+
include Fragments
|
64
54
|
|
65
55
|
included do
|
66
56
|
extend ConfigMethods
|
67
57
|
|
58
|
+
config_accessor :default_static_extension
|
59
|
+
self.default_static_extension ||= '.html'
|
60
|
+
|
61
|
+
def self.page_cache_extension=(extension)
|
62
|
+
ActiveSupport::Deprecation.deprecation_warning(:page_cache_extension, :default_static_extension)
|
63
|
+
self.default_static_extension = extension
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.page_cache_extension
|
67
|
+
ActiveSupport::Deprecation.deprecation_warning(:page_cache_extension, :default_static_extension)
|
68
|
+
default_static_extension
|
69
|
+
end
|
70
|
+
|
68
71
|
config_accessor :perform_caching
|
69
72
|
self.perform_caching = true if perform_caching.nil?
|
70
|
-
end
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
+
class_attribute :_view_cache_dependencies
|
75
|
+
self._view_cache_dependencies = []
|
76
|
+
helper_method :view_cache_dependencies if respond_to?(:helper_method)
|
74
77
|
end
|
75
78
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
if cache_configured?
|
80
|
-
cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
|
81
|
-
else
|
82
|
-
yield
|
79
|
+
module ClassMethods
|
80
|
+
def view_cache_dependency(&dependency)
|
81
|
+
self._view_cache_dependencies += [dependency]
|
83
82
|
end
|
84
83
|
end
|
84
|
+
|
85
|
+
def view_cache_dependencies
|
86
|
+
self.class._view_cache_dependencies.map { |dep| instance_exec(&dep) }.compact
|
87
|
+
end
|
88
|
+
|
89
|
+
protected
|
90
|
+
# Convenience accessor.
|
91
|
+
def cache(key, options = {}, &block)
|
92
|
+
if cache_configured?
|
93
|
+
cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
|
94
|
+
else
|
95
|
+
yield
|
96
|
+
end
|
97
|
+
end
|
85
98
|
end
|
86
99
|
end
|