actionpack 3.2.19 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +850 -401
- data/MIT-LICENSE +1 -1
- data/README.rdoc +5 -288
- 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 +25 -13
- data/lib/abstract_controller/layouts.rb +74 -74
- data/lib/abstract_controller/logger.rb +1 -2
- data/lib/abstract_controller/rendering.rb +30 -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/abstract_controller.rb +1 -8
- data/lib/action_controller/base.rb +46 -22
- data/lib/action_controller/caching/fragments.rb +23 -53
- data/lib/action_controller/caching.rb +46 -33
- data/lib/action_controller/deprecated/integration_test.rb +3 -0
- data/lib/action_controller/deprecated.rb +5 -1
- data/lib/action_controller/log_subscriber.rb +16 -8
- 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 +70 -12
- data/lib/action_controller/metal/head.rb +25 -4
- data/lib/action_controller/metal/helpers.rb +5 -9
- data/lib/action_controller/metal/hide_actions.rb +0 -1
- data/lib/action_controller/metal/http_authentication.rb +107 -83
- 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 +175 -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 +9 -1
- 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 +520 -0
- data/lib/action_controller/metal/testing.rb +13 -18
- data/lib/action_controller/metal/url_for.rb +28 -25
- data/lib/action_controller/metal.rb +17 -32
- 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 +251 -131
- data/lib/action_controller/vendor/html-scanner.rb +4 -19
- data/lib/action_controller.rb +15 -6
- 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 +49 -17
- data/lib/action_dispatch/http/mime_negotiation.rb +24 -1
- data/lib/action_dispatch/http/mime_type.rb +154 -100
- 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 +28 -28
- data/lib/action_dispatch/http/rack_cache.rb +2 -3
- data/lib/action_dispatch/http/request.rb +64 -18
- data/lib/action_dispatch/http/response.rb +130 -35
- data/lib/action_dispatch/http/upload.rb +63 -20
- data/lib/action_dispatch/http/url.rb +98 -35
- 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 +124 -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/router.rb +166 -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 +197 -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/journey.rb +5 -0
- data/lib/action_dispatch/middleware/callbacks.rb +9 -4
- data/lib/action_dispatch/middleware/cookies.rb +259 -114
- data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -17
- data/lib/action_dispatch/middleware/exception_wrapper.rb +29 -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 +30 -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/cookie_store.rb +82 -28
- 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 +2 -1
- 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 +7 -9
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +15 -9
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +127 -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/inspector.rb +240 -0
- data/lib/action_dispatch/routing/mapper.rb +540 -291
- 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 +207 -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/routing.rb +48 -83
- 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 +42 -41
- data/lib/action_dispatch/testing/assertions/selector.rb +17 -22
- data/lib/action_dispatch/testing/assertions/tag.rb +20 -23
- data/lib/action_dispatch/testing/integration.rb +65 -51
- data/lib/action_dispatch/testing/test_process.rb +9 -6
- data/lib/action_dispatch/testing/test_request.rb +7 -3
- data/lib/action_dispatch.rb +21 -15
- data/lib/action_pack/version.rb +7 -6
- data/lib/action_pack.rb +1 -1
- data/lib/action_view/base.rb +15 -34
- data/lib/action_view/buffers.rb +7 -1
- data/lib/action_view/context.rb +4 -4
- data/lib/action_view/dependency_tracker.rb +93 -0
- data/lib/action_view/digestor.rb +85 -0
- data/lib/action_view/flows.rb +1 -4
- data/lib/action_view/helpers/active_model_helper.rb +3 -4
- data/lib/action_view/helpers/asset_tag_helper.rb +215 -352
- data/lib/action_view/helpers/asset_url_helper.rb +355 -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 +44 -31
- data/lib/action_view/helpers/csrf_helper.rb +0 -2
- data/lib/action_view/helpers/date_helper.rb +269 -248
- data/lib/action_view/helpers/debug_helper.rb +10 -11
- data/lib/action_view/helpers/form_helper.rb +931 -537
- data/lib/action_view/helpers/form_options_helper.rb +341 -166
- data/lib/action_view/helpers/form_tag_helper.rb +190 -90
- data/lib/action_view/helpers/javascript_helper.rb +23 -16
- data/lib/action_view/helpers/number_helper.rb +148 -329
- 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 -2
- data/lib/action_view/helpers/sanitize_helper.rb +3 -6
- data/lib/action_view/helpers/tag_helper.rb +46 -33
- data/lib/action_view/helpers/tags/base.rb +147 -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 +40 -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/tags.rb +39 -0
- data/lib/action_view/helpers/text_helper.rb +130 -114
- data/lib/action_view/helpers/translation_helper.rb +32 -16
- data/lib/action_view/helpers/url_helper.rb +211 -270
- data/lib/action_view/helpers.rb +2 -4
- 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 -28
- data/lib/action_view/model_naming.rb +12 -0
- data/lib/action_view/path_set.rb +8 -20
- 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 +25 -19
- data/lib/action_view/renderer/partial_renderer.rb +158 -81
- data/lib/action_view/renderer/renderer.rb +8 -12
- data/lib/action_view/renderer/streaming_template_renderer.rb +2 -5
- data/lib/action_view/renderer/template_renderer.rb +12 -10
- data/lib/action_view/routing_url_for.rb +107 -0
- data/lib/action_view/template/error.rb +22 -12
- data/lib/action_view/template/handlers/builder.rb +1 -1
- data/lib/action_view/template/handlers/erb.rb +40 -19
- data/lib/action_view/template/handlers/raw.rb +11 -0
- data/lib/action_view/template/handlers.rb +12 -9
- data/lib/action_view/template/resolver.rb +107 -53
- data/lib/action_view/template/text.rb +12 -8
- data/lib/action_view/template/types.rb +57 -0
- data/lib/action_view/template.rb +25 -23
- data/lib/action_view/test_case.rb +67 -42
- 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 +13 -2
- data/lib/{action_controller → action_view}/vendor/html-scanner/html/selector.rb +9 -9
- 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
- data/lib/action_view/vendor/html-scanner.rb +20 -0
- data/lib/action_view.rb +17 -8
- metadata +184 -214
- 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/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
|
@@ -8,52 +8,54 @@ module AbstractController
|
|
|
8
8
|
include ActiveSupport::Callbacks
|
|
9
9
|
|
|
10
10
|
included do
|
|
11
|
-
define_callbacks :process_action, :terminator => "response_body"
|
|
11
|
+
define_callbacks :process_action, :terminator => "response_body", :skip_after_callbacks_if_terminated => true
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
# Override AbstractController::Base's process_action to run the
|
|
15
15
|
# process_action callbacks around the normal behavior.
|
|
16
16
|
def process_action(*args)
|
|
17
|
-
run_callbacks(:process_action
|
|
17
|
+
run_callbacks(:process_action) do
|
|
18
18
|
super
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
module ClassMethods
|
|
23
23
|
# If :only or :except are used, convert the options into the
|
|
24
|
-
#
|
|
24
|
+
# :unless and :if options of ActiveSupport::Callbacks.
|
|
25
25
|
# The basic idea is that :only => :index gets converted to
|
|
26
|
-
# :if => proc {|c| c.action_name == "index" }
|
|
27
|
-
# proc is only evaluated once per action for the lifetime of
|
|
28
|
-
# a Rails process.
|
|
26
|
+
# :if => proc {|c| c.action_name == "index" }.
|
|
29
27
|
#
|
|
30
28
|
# ==== Options
|
|
31
29
|
# * <tt>only</tt> - The callback should be run only for this action
|
|
32
30
|
# * <tt>except</tt> - The callback should be run for all actions except this action
|
|
33
31
|
def _normalize_callback_options(options)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
_normalize_callback_option(options, :only, :if)
|
|
33
|
+
_normalize_callback_option(options, :except, :unless)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def _normalize_callback_option(options, from, to) # :nodoc:
|
|
37
|
+
if from = options[from]
|
|
38
|
+
from = Array(from).map {|o| "action_name == '#{o}'"}.join(" || ")
|
|
39
|
+
options[to] = Array(options[to]) << from
|
|
41
40
|
end
|
|
42
41
|
end
|
|
43
42
|
|
|
44
|
-
# Skip before, after, and around
|
|
43
|
+
# Skip before, after, and around action callbacks matching any of the names
|
|
44
|
+
# Aliased as skip_filter.
|
|
45
45
|
#
|
|
46
46
|
# ==== Parameters
|
|
47
47
|
# * <tt>names</tt> - A list of valid names that could be used for
|
|
48
48
|
# callbacks. Note that skipping uses Ruby equality, so it's
|
|
49
49
|
# impossible to skip a callback defined using an anonymous proc
|
|
50
50
|
# using #skip_filter
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
def skip_action_callback(*names)
|
|
52
|
+
skip_before_action(*names)
|
|
53
|
+
skip_after_action(*names)
|
|
54
|
+
skip_around_action(*names)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
alias_method :skip_filter, :skip_action_callback
|
|
58
|
+
|
|
57
59
|
# Take callback names and an optional callback proc, normalize them,
|
|
58
60
|
# then call the block with each callback. This allows us to abstract
|
|
59
61
|
# the normalization across several methods that use it.
|
|
@@ -66,7 +68,7 @@ module AbstractController
|
|
|
66
68
|
# ==== Block Parameters
|
|
67
69
|
# * <tt>name</tt> - The callback to be added
|
|
68
70
|
# * <tt>options</tt> - A hash of options to be used when adding the callback
|
|
69
|
-
def _insert_callbacks(callbacks, block)
|
|
71
|
+
def _insert_callbacks(callbacks, block = nil)
|
|
70
72
|
options = callbacks.last.is_a?(Hash) ? callbacks.pop : {}
|
|
71
73
|
_normalize_callback_options(options)
|
|
72
74
|
callbacks.push(block) if block
|
|
@@ -76,121 +78,138 @@ module AbstractController
|
|
|
76
78
|
end
|
|
77
79
|
|
|
78
80
|
##
|
|
79
|
-
# :method:
|
|
81
|
+
# :method: before_action
|
|
80
82
|
#
|
|
81
|
-
# :call-seq:
|
|
83
|
+
# :call-seq: before_action(names, block)
|
|
82
84
|
#
|
|
83
|
-
# Append a before
|
|
85
|
+
# Append a callback before actions. See _insert_callbacks for parameter details.
|
|
86
|
+
# Aliased as before_filter.
|
|
84
87
|
|
|
85
88
|
##
|
|
86
|
-
# :method:
|
|
89
|
+
# :method: prepend_before_action
|
|
87
90
|
#
|
|
88
|
-
# :call-seq:
|
|
91
|
+
# :call-seq: prepend_before_action(names, block)
|
|
89
92
|
#
|
|
90
|
-
# Prepend a before
|
|
93
|
+
# Prepend a callback before actions. See _insert_callbacks for parameter details.
|
|
94
|
+
# Aliased as prepend_before_filter.
|
|
91
95
|
|
|
92
96
|
##
|
|
93
|
-
# :method:
|
|
97
|
+
# :method: skip_before_action
|
|
94
98
|
#
|
|
95
|
-
# :call-seq:
|
|
99
|
+
# :call-seq: skip_before_action(names)
|
|
96
100
|
#
|
|
97
|
-
# Skip a before
|
|
101
|
+
# Skip a callback before actions. See _insert_callbacks for parameter details.
|
|
102
|
+
# Aliased as skip_before_filter.
|
|
98
103
|
|
|
99
104
|
##
|
|
100
|
-
# :method:
|
|
105
|
+
# :method: append_before_action
|
|
101
106
|
#
|
|
102
|
-
# :call-seq:
|
|
107
|
+
# :call-seq: append_before_action(names, block)
|
|
103
108
|
#
|
|
104
|
-
# Append a before
|
|
109
|
+
# Append a callback before actions. See _insert_callbacks for parameter details.
|
|
110
|
+
# Aliased as append_before_filter.
|
|
105
111
|
|
|
106
112
|
##
|
|
107
|
-
# :method:
|
|
113
|
+
# :method: after_action
|
|
108
114
|
#
|
|
109
|
-
# :call-seq:
|
|
115
|
+
# :call-seq: after_action(names, block)
|
|
110
116
|
#
|
|
111
|
-
# Append
|
|
117
|
+
# Append a callback after actions. See _insert_callbacks for parameter details.
|
|
118
|
+
# Aliased as after_filter.
|
|
112
119
|
|
|
113
120
|
##
|
|
114
|
-
# :method:
|
|
121
|
+
# :method: prepend_after_action
|
|
115
122
|
#
|
|
116
|
-
# :call-seq:
|
|
123
|
+
# :call-seq: prepend_after_action(names, block)
|
|
117
124
|
#
|
|
118
|
-
# Prepend
|
|
125
|
+
# Prepend a callback after actions. See _insert_callbacks for parameter details.
|
|
126
|
+
# Aliased as prepend_after_filter.
|
|
119
127
|
|
|
120
128
|
##
|
|
121
|
-
# :method:
|
|
129
|
+
# :method: skip_after_action
|
|
122
130
|
#
|
|
123
|
-
# :call-seq:
|
|
131
|
+
# :call-seq: skip_after_action(names)
|
|
124
132
|
#
|
|
125
|
-
# Skip
|
|
133
|
+
# Skip a callback after actions. See _insert_callbacks for parameter details.
|
|
134
|
+
# Aliased as skip_after_filter.
|
|
126
135
|
|
|
127
136
|
##
|
|
128
|
-
# :method:
|
|
137
|
+
# :method: append_after_action
|
|
129
138
|
#
|
|
130
|
-
# :call-seq:
|
|
139
|
+
# :call-seq: append_after_action(names, block)
|
|
131
140
|
#
|
|
132
|
-
# Append
|
|
141
|
+
# Append a callback after actions. See _insert_callbacks for parameter details.
|
|
142
|
+
# Aliased as append_after_filter.
|
|
133
143
|
|
|
134
144
|
##
|
|
135
|
-
# :method:
|
|
145
|
+
# :method: around_action
|
|
136
146
|
#
|
|
137
|
-
# :call-seq:
|
|
147
|
+
# :call-seq: around_action(names, block)
|
|
138
148
|
#
|
|
139
|
-
# Append
|
|
149
|
+
# Append a callback around actions. See _insert_callbacks for parameter details.
|
|
150
|
+
# Aliased as around_filter.
|
|
140
151
|
|
|
141
152
|
##
|
|
142
|
-
# :method:
|
|
153
|
+
# :method: prepend_around_action
|
|
143
154
|
#
|
|
144
|
-
# :call-seq:
|
|
155
|
+
# :call-seq: prepend_around_action(names, block)
|
|
145
156
|
#
|
|
146
|
-
# Prepend
|
|
157
|
+
# Prepend a callback around actions. See _insert_callbacks for parameter details.
|
|
158
|
+
# Aliased as prepend_around_filter.
|
|
147
159
|
|
|
148
160
|
##
|
|
149
|
-
# :method:
|
|
161
|
+
# :method: skip_around_action
|
|
150
162
|
#
|
|
151
|
-
# :call-seq:
|
|
163
|
+
# :call-seq: skip_around_action(names)
|
|
152
164
|
#
|
|
153
|
-
# Skip
|
|
165
|
+
# Skip a callback around actions. See _insert_callbacks for parameter details.
|
|
166
|
+
# Aliased as skip_around_filter.
|
|
154
167
|
|
|
155
168
|
##
|
|
156
|
-
# :method:
|
|
169
|
+
# :method: append_around_action
|
|
157
170
|
#
|
|
158
|
-
# :call-seq:
|
|
171
|
+
# :call-seq: append_around_action(names, block)
|
|
159
172
|
#
|
|
160
|
-
# Append
|
|
173
|
+
# Append a callback around actions. See _insert_callbacks for parameter details.
|
|
174
|
+
# Aliased as append_around_filter.
|
|
161
175
|
|
|
162
|
-
# set up
|
|
176
|
+
# set up before_action, prepend_before_action, skip_before_action, etc.
|
|
163
177
|
# for each of before, after, and around.
|
|
164
|
-
[:before, :after, :around].each do |
|
|
178
|
+
[:before, :after, :around].each do |callback|
|
|
165
179
|
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
|
166
|
-
# Append a before, after or around
|
|
180
|
+
# Append a before, after or around callback. See _insert_callbacks
|
|
167
181
|
# for details on the allowed parameters.
|
|
168
|
-
def #{
|
|
169
|
-
_insert_callbacks(names, blk) do |name, options|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
182
|
+
def #{callback}_action(*names, &blk) # def before_action(*names, &blk)
|
|
183
|
+
_insert_callbacks(names, blk) do |name, options| # _insert_callbacks(names, blk) do |name, options|
|
|
184
|
+
set_callback(:process_action, :#{callback}, name, options) # set_callback(:process_action, :before, name, options)
|
|
185
|
+
end # end
|
|
186
|
+
end # end
|
|
187
|
+
|
|
188
|
+
alias_method :#{callback}_filter, :#{callback}_action
|
|
189
|
+
|
|
190
|
+
# Prepend a before, after or around callback. See _insert_callbacks
|
|
176
191
|
# for details on the allowed parameters.
|
|
177
|
-
def prepend_#{
|
|
178
|
-
_insert_callbacks(names, blk) do |name, options|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
192
|
+
def prepend_#{callback}_action(*names, &blk) # def prepend_before_action(*names, &blk)
|
|
193
|
+
_insert_callbacks(names, blk) do |name, options| # _insert_callbacks(names, blk) do |name, options|
|
|
194
|
+
set_callback(:process_action, :#{callback}, name, options.merge(:prepend => true)) # set_callback(:process_action, :before, name, options.merge(:prepend => true))
|
|
195
|
+
end # end
|
|
196
|
+
end # end
|
|
197
|
+
|
|
198
|
+
alias_method :prepend_#{callback}_filter, :prepend_#{callback}_action
|
|
199
|
+
|
|
200
|
+
# Skip a before, after or around callback. See _insert_callbacks
|
|
185
201
|
# for details on the allowed parameters.
|
|
186
|
-
def skip_#{
|
|
187
|
-
_insert_callbacks(names
|
|
188
|
-
skip_callback(:process_action, :#{
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
#
|
|
193
|
-
|
|
202
|
+
def skip_#{callback}_action(*names) # def skip_before_action(*names)
|
|
203
|
+
_insert_callbacks(names) do |name, options| # _insert_callbacks(names) do |name, options|
|
|
204
|
+
skip_callback(:process_action, :#{callback}, name, options) # skip_callback(:process_action, :before, name, options)
|
|
205
|
+
end # end
|
|
206
|
+
end # end
|
|
207
|
+
|
|
208
|
+
alias_method :skip_#{callback}_filter, :skip_#{callback}_action
|
|
209
|
+
|
|
210
|
+
# *_action is the same as append_*_action
|
|
211
|
+
alias_method :append_#{callback}_action, :#{callback}_action # alias_method :append_before_action, :before_action
|
|
212
|
+
alias_method :append_#{callback}_filter, :#{callback}_action # alias_method :append_before_filter, :before_action
|
|
194
213
|
RUBY_EVAL
|
|
195
214
|
end
|
|
196
215
|
end
|
|
@@ -4,7 +4,7 @@ module AbstractController
|
|
|
4
4
|
module Collector
|
|
5
5
|
def self.generate_method_for_mime(mime)
|
|
6
6
|
sym = mime.is_a?(Symbol) ? mime : mime.to_sym
|
|
7
|
-
const = sym.
|
|
7
|
+
const = sym.upcase
|
|
8
8
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
9
9
|
def #{sym}(*args, &block) # def html(*args, &block)
|
|
10
10
|
custom(Mime::#{const}, *args, &block) # custom(Mime::HTML, *args, &block)
|
|
@@ -16,10 +16,14 @@ module AbstractController
|
|
|
16
16
|
generate_method_for_mime(mime)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
Mime::Type.register_callback do |mime|
|
|
20
|
+
generate_method_for_mime(mime) unless self.instance_methods.include?(mime.to_sym)
|
|
21
|
+
end
|
|
22
|
+
|
|
19
23
|
protected
|
|
20
24
|
|
|
21
25
|
def method_missing(symbol, &block)
|
|
22
|
-
mime_constant = Mime.const_get(symbol.
|
|
26
|
+
mime_constant = Mime.const_get(symbol.upcase)
|
|
23
27
|
|
|
24
28
|
if Mime::SET.include?(mime_constant)
|
|
25
29
|
AbstractController::Collector.generate_method_for_mime(mime_constant)
|
|
@@ -29,4 +33,4 @@ module AbstractController
|
|
|
29
33
|
end
|
|
30
34
|
end
|
|
31
35
|
end
|
|
32
|
-
end
|
|
36
|
+
end
|
|
@@ -19,7 +19,7 @@ module AbstractController
|
|
|
19
19
|
def inherited(klass)
|
|
20
20
|
helpers = _helpers
|
|
21
21
|
klass._helpers = Module.new { include helpers }
|
|
22
|
-
klass.class_eval { default_helper_module! unless anonymous?
|
|
22
|
+
klass.class_eval { default_helper_module! } unless klass.anonymous?
|
|
23
23
|
super
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -29,12 +29,12 @@ module AbstractController
|
|
|
29
29
|
# helper_method :current_user, :logged_in?
|
|
30
30
|
#
|
|
31
31
|
# def current_user
|
|
32
|
-
# @current_user ||= User.
|
|
32
|
+
# @current_user ||= User.find_by(id: session[:user])
|
|
33
33
|
# end
|
|
34
34
|
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
35
|
+
# def logged_in?
|
|
36
|
+
# current_user != nil
|
|
37
|
+
# end
|
|
38
38
|
# end
|
|
39
39
|
#
|
|
40
40
|
# In a view:
|
|
@@ -49,20 +49,19 @@ module AbstractController
|
|
|
49
49
|
|
|
50
50
|
meths.each do |meth|
|
|
51
51
|
_helpers.class_eval <<-ruby_eval, __FILE__, __LINE__ + 1
|
|
52
|
-
def #{meth}(*args, &blk)
|
|
53
|
-
controller.send(%(#{meth}), *args, &blk)
|
|
54
|
-
end
|
|
52
|
+
def #{meth}(*args, &blk) # def current_user(*args, &blk)
|
|
53
|
+
controller.send(%(#{meth}), *args, &blk) # controller.send(:current_user, *args, &blk)
|
|
54
|
+
end # end
|
|
55
55
|
ruby_eval
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
# The +helper+ class method can take a series of helper module names, a block, or both.
|
|
60
60
|
#
|
|
61
|
-
# ====
|
|
62
|
-
# * <tt>*args</tt> - Module, Symbol, String
|
|
61
|
+
# ==== Options
|
|
62
|
+
# * <tt>*args</tt> - Module, Symbol, String
|
|
63
63
|
# * <tt>block</tt> - A block defining helper methods
|
|
64
64
|
#
|
|
65
|
-
# ==== Examples
|
|
66
65
|
# When the argument is a module it will be included directly in the template class.
|
|
67
66
|
# helper FooHelper # => includes FooHelper
|
|
68
67
|
#
|
|
@@ -114,7 +113,7 @@ module AbstractController
|
|
|
114
113
|
# helpers with the following behavior:
|
|
115
114
|
#
|
|
116
115
|
# String or Symbol:: :FooBar or "FooBar" becomes "foo_bar_helper",
|
|
117
|
-
#
|
|
116
|
+
# and "foo_bar_helper.rb" is loaded using require_dependency.
|
|
118
117
|
#
|
|
119
118
|
# Module:: No further processing
|
|
120
119
|
#
|
|
@@ -132,7 +131,11 @@ module AbstractController
|
|
|
132
131
|
case arg
|
|
133
132
|
when String, Symbol
|
|
134
133
|
file_name = "#{arg.to_s.underscore}_helper"
|
|
135
|
-
|
|
134
|
+
begin
|
|
135
|
+
require_dependency(file_name)
|
|
136
|
+
rescue LoadError => e
|
|
137
|
+
raise MissingHelperError.new(e, file_name)
|
|
138
|
+
end
|
|
136
139
|
file_name.camelize.constantize
|
|
137
140
|
when Module
|
|
138
141
|
arg
|
|
@@ -142,6 +145,15 @@ module AbstractController
|
|
|
142
145
|
end
|
|
143
146
|
end
|
|
144
147
|
|
|
148
|
+
class MissingHelperError < LoadError
|
|
149
|
+
def initialize(error, path)
|
|
150
|
+
@error = error
|
|
151
|
+
@path = "helpers/#{path}.rb"
|
|
152
|
+
set_backtrace error.backtrace
|
|
153
|
+
super("Missing helper file helpers/%s.rb" % path)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
145
157
|
private
|
|
146
158
|
# Makes all the (instance) methods in the helper module available to templates
|
|
147
159
|
# rendered through this controller.
|