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,101 +1,4 @@
|
|
1
1
|
"en":
|
2
|
-
number:
|
3
|
-
# Used in number_with_delimiter()
|
4
|
-
# These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
|
5
|
-
format:
|
6
|
-
# Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
|
7
|
-
separator: "."
|
8
|
-
# Delimits thousands (e.g. 1,000,000 is a million) (always in groups of three)
|
9
|
-
delimiter: ","
|
10
|
-
# Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
|
11
|
-
precision: 3
|
12
|
-
# If set to true, precision will mean the number of significant digits instead
|
13
|
-
# of the number of decimal digits (1234 with precision 2 becomes 1200, 1.23543 becomes 1.2)
|
14
|
-
significant: false
|
15
|
-
# If set, the zeros after the decimal separator will always be stripped (eg.: 1.200 will be 1.2)
|
16
|
-
strip_insignificant_zeros: false
|
17
|
-
|
18
|
-
# Used in number_to_currency()
|
19
|
-
currency:
|
20
|
-
format:
|
21
|
-
# Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
|
22
|
-
format: "%u%n"
|
23
|
-
unit: "$"
|
24
|
-
# These five are to override number.format and are optional
|
25
|
-
separator: "."
|
26
|
-
delimiter: ","
|
27
|
-
precision: 2
|
28
|
-
significant: false
|
29
|
-
strip_insignificant_zeros: false
|
30
|
-
|
31
|
-
# Used in number_to_percentage()
|
32
|
-
percentage:
|
33
|
-
format:
|
34
|
-
# These five are to override number.format and are optional
|
35
|
-
# separator:
|
36
|
-
delimiter: ""
|
37
|
-
# precision:
|
38
|
-
# significant: false
|
39
|
-
# strip_insignificant_zeros: false
|
40
|
-
|
41
|
-
# Used in number_to_precision()
|
42
|
-
precision:
|
43
|
-
format:
|
44
|
-
# These five are to override number.format and are optional
|
45
|
-
# separator:
|
46
|
-
delimiter: ""
|
47
|
-
# precision:
|
48
|
-
# significant: false
|
49
|
-
# strip_insignificant_zeros: false
|
50
|
-
|
51
|
-
# Used in number_to_human_size() and number_to_human()
|
52
|
-
human:
|
53
|
-
format:
|
54
|
-
# These five are to override number.format and are optional
|
55
|
-
# separator:
|
56
|
-
delimiter: ""
|
57
|
-
precision: 3
|
58
|
-
significant: true
|
59
|
-
strip_insignificant_zeros: true
|
60
|
-
# Used in number_to_human_size()
|
61
|
-
storage_units:
|
62
|
-
# Storage units output formatting.
|
63
|
-
# %u is the storage unit, %n is the number (default: 2 MB)
|
64
|
-
format: "%n %u"
|
65
|
-
units:
|
66
|
-
byte:
|
67
|
-
one: "Byte"
|
68
|
-
other: "Bytes"
|
69
|
-
kb: "KB"
|
70
|
-
mb: "MB"
|
71
|
-
gb: "GB"
|
72
|
-
tb: "TB"
|
73
|
-
# Used in number_to_human()
|
74
|
-
decimal_units:
|
75
|
-
format: "%n %u"
|
76
|
-
# Decimal units output formatting
|
77
|
-
# By default we will only quantify some of the exponents
|
78
|
-
# but the commented ones might be defined or overridden
|
79
|
-
# by the user.
|
80
|
-
units:
|
81
|
-
# femto: Quadrillionth
|
82
|
-
# pico: Trillionth
|
83
|
-
# nano: Billionth
|
84
|
-
# micro: Millionth
|
85
|
-
# mili: Thousandth
|
86
|
-
# centi: Hundredth
|
87
|
-
# deci: Tenth
|
88
|
-
unit: ""
|
89
|
-
# ten:
|
90
|
-
# one: Ten
|
91
|
-
# other: Tens
|
92
|
-
# hundred: Hundred
|
93
|
-
thousand: Thousand
|
94
|
-
million: Million
|
95
|
-
billion: Billion
|
96
|
-
trillion: Trillion
|
97
|
-
quadrillion: Quadrillion
|
98
|
-
|
99
2
|
# Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
|
100
3
|
datetime:
|
101
4
|
distance_in_words:
|
@@ -146,15 +49,8 @@
|
|
146
49
|
# Default value for :prompt => true in FormOptionsHelper
|
147
50
|
prompt: "Please select"
|
148
51
|
|
149
|
-
# Default translation keys for submit FormHelper
|
52
|
+
# Default translation keys for submit and button FormHelper
|
150
53
|
submit:
|
151
54
|
create: 'Create %{model}'
|
152
55
|
update: 'Update %{model}'
|
153
56
|
submit: 'Save %{model}'
|
154
|
-
|
155
|
-
# Default translation keys for button FormHelper
|
156
|
-
button:
|
157
|
-
create: 'Create %{model}'
|
158
|
-
update: 'Update %{model}'
|
159
|
-
submit: 'Save %{model}'
|
160
|
-
|
@@ -3,24 +3,26 @@ module ActionView
|
|
3
3
|
#
|
4
4
|
# Provides functionality so that Rails can output logs from Action View.
|
5
5
|
class LogSubscriber < ActiveSupport::LogSubscriber
|
6
|
+
VIEWS_PATTERN = /^app\/views\//.freeze
|
7
|
+
|
6
8
|
def render_template(event)
|
9
|
+
return unless logger.info?
|
7
10
|
message = " Rendered #{from_rails_root(event.payload[:identifier])}"
|
8
11
|
message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout]
|
9
|
-
message <<
|
12
|
+
message << " (#{event.duration.round(1)}ms)"
|
10
13
|
info(message)
|
11
14
|
end
|
12
15
|
alias :render_partial :render_template
|
13
16
|
alias :render_collection :render_template
|
14
17
|
|
15
|
-
# TODO: Ideally, ActionView should have its own logger so it does not depend on AC.logger
|
16
18
|
def logger
|
17
|
-
|
19
|
+
ActionView::Base.logger
|
18
20
|
end
|
19
21
|
|
20
22
|
protected
|
21
23
|
|
22
24
|
def from_rails_root(string)
|
23
|
-
string.sub("#{Rails.root}/", "").sub(
|
25
|
+
string.sub("#{Rails.root}/", "").sub(VIEWS_PATTERN, "")
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'active_support/core_ext/object/blank'
|
1
|
+
require 'thread_safe'
|
3
2
|
require 'active_support/core_ext/module/remove_method'
|
4
3
|
|
5
4
|
module ActionView
|
@@ -25,11 +24,11 @@ module ActionView
|
|
25
24
|
Accessors.send :define_method, :"default_#{name}", &block
|
26
25
|
Accessors.module_eval <<-METHOD, __FILE__, __LINE__ + 1
|
27
26
|
def #{name}
|
28
|
-
@details
|
27
|
+
@details.fetch(:#{name}, [])
|
29
28
|
end
|
30
29
|
|
31
30
|
def #{name}=(value)
|
32
|
-
value = value.present? ? Array
|
31
|
+
value = value.present? ? Array(value) : default_#{name}
|
33
32
|
_set_detail(:#{name}, value) if value != @details[:#{name}]
|
34
33
|
end
|
35
34
|
|
@@ -44,14 +43,8 @@ module ActionView
|
|
44
43
|
module Accessors #:nodoc:
|
45
44
|
end
|
46
45
|
|
47
|
-
register_detail(:locale)
|
48
|
-
|
49
|
-
locales.concat(I18n.fallbacks[I18n.locale]) if I18n.respond_to? :fallbacks
|
50
|
-
locales << I18n.default_locale
|
51
|
-
locales.uniq!
|
52
|
-
locales
|
53
|
-
end
|
54
|
-
register_detail(:formats) { Mime::SET.symbols }
|
46
|
+
register_detail(:locale) { [I18n.locale, I18n.default_locale].uniq }
|
47
|
+
register_detail(:formats) { ActionView::Base.default_formats || [:html, :text, :js, :css, :xml, :json] }
|
55
48
|
register_detail(:handlers){ Template::Handlers.extensions }
|
56
49
|
|
57
50
|
class DetailsKey #:nodoc:
|
@@ -59,16 +52,9 @@ module ActionView
|
|
59
52
|
alias :object_hash :hash
|
60
53
|
|
61
54
|
attr_reader :hash
|
62
|
-
@details_keys =
|
55
|
+
@details_keys = ThreadSafe::Cache.new
|
63
56
|
|
64
57
|
def self.get(details)
|
65
|
-
if details[:formats]
|
66
|
-
details = details.dup
|
67
|
-
syms = Set.new Mime::SET.symbols
|
68
|
-
details[:formats] = details[:formats].select { |v|
|
69
|
-
syms.include? v
|
70
|
-
}
|
71
|
-
end
|
72
58
|
@details_keys[details] ||= new
|
73
59
|
end
|
74
60
|
|
@@ -110,12 +96,12 @@ module ActionView
|
|
110
96
|
|
111
97
|
# Helpers related to template lookup using the lookup context information.
|
112
98
|
module ViewPaths
|
113
|
-
attr_reader :view_paths
|
99
|
+
attr_reader :view_paths, :html_fallback_for_js
|
114
100
|
|
115
101
|
# Whenever setting view paths, makes a copy so we can manipulate then in
|
116
102
|
# instance objects as we wish.
|
117
103
|
def view_paths=(paths)
|
118
|
-
@view_paths = ActionView::PathSet.new(Array
|
104
|
+
@view_paths = ActionView::PathSet.new(Array(paths))
|
119
105
|
end
|
120
106
|
|
121
107
|
def find(name, prefixes = [], partial = false, keys = [], options = {})
|
@@ -127,10 +113,6 @@ module ActionView
|
|
127
113
|
@view_paths.find_all(*args_for_lookup(name, prefixes, partial, keys, options))
|
128
114
|
end
|
129
115
|
|
130
|
-
def find_file(name, prefixes = [], partial = false, keys = [], options = {})
|
131
|
-
@view_paths.find_file(*args_for_lookup(name, prefixes, partial, keys, options))
|
132
|
-
end
|
133
|
-
|
134
116
|
def exists?(name, prefixes = [], partial = false, keys = [], options = {})
|
135
117
|
@view_paths.exists?(*args_for_lookup(name, prefixes, partial, keys, options))
|
136
118
|
end
|
@@ -168,14 +150,9 @@ module ActionView
|
|
168
150
|
# as well as incorrectly putting part of the path in the template
|
169
151
|
# name instead of the prefix.
|
170
152
|
def normalize_name(name, prefixes) #:nodoc:
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
""
|
175
|
-
end
|
176
|
-
|
177
|
-
prefixes = nil if prefixes.blank?
|
178
|
-
parts = name.split('/')
|
153
|
+
prefixes = prefixes.presence
|
154
|
+
parts = name.to_s.split('/')
|
155
|
+
parts.shift if parts.first.empty?
|
179
156
|
name = parts.pop
|
180
157
|
|
181
158
|
return name, prefixes || [""] if parts.empty?
|
@@ -185,10 +162,6 @@ module ActionView
|
|
185
162
|
|
186
163
|
return name, prefixes
|
187
164
|
end
|
188
|
-
|
189
|
-
def handlers_regexp #:nodoc:
|
190
|
-
@@handlers_regexp ||= /\.(?:#{default_handlers.join('|')})$/
|
191
|
-
end
|
192
165
|
end
|
193
166
|
|
194
167
|
include Accessors
|
@@ -211,7 +184,10 @@ module ActionView
|
|
211
184
|
def formats=(values)
|
212
185
|
if values
|
213
186
|
values.concat(default_formats) if values.delete "*/*"
|
214
|
-
|
187
|
+
if values == [:js]
|
188
|
+
values << :html
|
189
|
+
@html_fallback_for_js = true
|
190
|
+
end
|
215
191
|
end
|
216
192
|
super(values)
|
217
193
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ActionView
|
2
|
+
module ModelNaming
|
3
|
+
# Converts the given object to an ActiveModel compliant one.
|
4
|
+
def convert_to_model(object)
|
5
|
+
object.respond_to?(:to_model) ? object.to_model : object
|
6
|
+
end
|
7
|
+
|
8
|
+
def model_name_from_record_or_class(record_or_class)
|
9
|
+
(record_or_class.is_a?(Class) ? record_or_class : convert_to_model(record_or_class).class).model_name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/action_view/path_set.rb
CHANGED
@@ -5,6 +5,8 @@ module ActionView #:nodoc:
|
|
5
5
|
|
6
6
|
attr_reader :paths
|
7
7
|
|
8
|
+
delegate :[], :include?, :pop, :size, :each, to: :paths
|
9
|
+
|
8
10
|
def initialize(paths = [])
|
9
11
|
@paths = typecast paths
|
10
12
|
end
|
@@ -14,30 +16,10 @@ module ActionView #:nodoc:
|
|
14
16
|
self
|
15
17
|
end
|
16
18
|
|
17
|
-
def [](i)
|
18
|
-
paths[i]
|
19
|
-
end
|
20
|
-
|
21
19
|
def to_ary
|
22
20
|
paths.dup
|
23
21
|
end
|
24
22
|
|
25
|
-
def include?(item)
|
26
|
-
paths.include? item
|
27
|
-
end
|
28
|
-
|
29
|
-
def pop
|
30
|
-
paths.pop
|
31
|
-
end
|
32
|
-
|
33
|
-
def size
|
34
|
-
paths.size
|
35
|
-
end
|
36
|
-
|
37
|
-
def each(&block)
|
38
|
-
paths.each(&block)
|
39
|
-
end
|
40
|
-
|
41
23
|
def compact
|
42
24
|
PathSet.new paths.compact
|
43
25
|
end
|
@@ -58,35 +40,23 @@ module ActionView #:nodoc:
|
|
58
40
|
find_all(*args).first || raise(MissingTemplate.new(self, *args))
|
59
41
|
end
|
60
42
|
|
61
|
-
def find_file(path, prefixes = [], *args)
|
62
|
-
_find_all(path, prefixes, args, true).first || raise(MissingTemplate.new(self, path, prefixes, *args))
|
63
|
-
end
|
64
|
-
|
65
43
|
def find_all(path, prefixes = [], *args)
|
66
|
-
_find_all path, prefixes, args, false
|
67
|
-
end
|
68
|
-
|
69
|
-
def exists?(path, prefixes, *args)
|
70
|
-
find_all(path, prefixes, *args).any?
|
71
|
-
end
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
def _find_all(path, prefixes, args, outside_app)
|
76
44
|
prefixes = [prefixes] if String === prefixes
|
77
45
|
prefixes.each do |prefix|
|
78
46
|
paths.each do |resolver|
|
79
|
-
|
80
|
-
templates = resolver.find_all_anywhere(path, prefix, *args)
|
81
|
-
else
|
82
|
-
templates = resolver.find_all(path, prefix, *args)
|
83
|
-
end
|
47
|
+
templates = resolver.find_all(path, prefix, *args)
|
84
48
|
return templates unless templates.empty?
|
85
49
|
end
|
86
50
|
end
|
87
51
|
[]
|
88
52
|
end
|
89
53
|
|
54
|
+
def exists?(path, prefixes, *args)
|
55
|
+
find_all(path, prefixes, *args).any?
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
90
60
|
def typecast(paths)
|
91
61
|
paths.map do |path|
|
92
62
|
case path
|
data/lib/action_view/railtie.rb
CHANGED
@@ -3,11 +3,11 @@ require "rails"
|
|
3
3
|
|
4
4
|
module ActionView
|
5
5
|
# = Action View Railtie
|
6
|
-
class Railtie < Rails::Railtie
|
6
|
+
class Railtie < Rails::Railtie # :nodoc:
|
7
7
|
config.action_view = ActiveSupport::OrderedOptions.new
|
8
|
-
config.action_view.
|
9
|
-
|
10
|
-
config.
|
8
|
+
config.action_view.embed_authenticity_token_in_remote_forms = false
|
9
|
+
|
10
|
+
config.eager_load_namespaces << ActionView
|
11
11
|
|
12
12
|
initializer "action_view.embed_authenticity_token_in_remote_forms" do |app|
|
13
13
|
ActiveSupport.on_load(:action_view) do
|
@@ -16,24 +16,8 @@ module ActionView
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
initializer "action_view.
|
20
|
-
|
21
|
-
ActiveSupport.on_load(:action_view) do
|
22
|
-
ActionView::Helpers::AssetTagHelper::AssetPaths.cache_asset_ids = false
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
initializer "action_view.javascript_expansions" do |app|
|
28
|
-
ActiveSupport.on_load(:action_view) do
|
29
|
-
ActionView::Helpers::AssetTagHelper.register_javascript_expansion(
|
30
|
-
app.config.action_view.delete(:javascript_expansions)
|
31
|
-
)
|
32
|
-
|
33
|
-
ActionView::Helpers::AssetTagHelper.register_stylesheet_expansion(
|
34
|
-
app.config.action_view.delete(:stylesheet_expansions)
|
35
|
-
)
|
36
|
-
end
|
19
|
+
initializer "action_view.logger" do
|
20
|
+
ActiveSupport.on_load(:action_view) { self.logger ||= Rails.logger }
|
37
21
|
end
|
38
22
|
|
39
23
|
initializer "action_view.set_configs" do |app|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'active_support/core_ext/module'
|
2
|
+
require 'action_view/model_naming'
|
3
|
+
|
4
|
+
module ActionView
|
5
|
+
# The record identifier encapsulates a number of naming conventions for dealing with records, like Active Records or
|
6
|
+
# pretty much any other model type that has an id. These patterns are then used to try elevate the view actions to
|
7
|
+
# a higher logical level.
|
8
|
+
#
|
9
|
+
# # routes
|
10
|
+
# resources :posts
|
11
|
+
#
|
12
|
+
# # view
|
13
|
+
# <%= div_for(post) do %> <div id="post_45" class="post">
|
14
|
+
# <%= post.body %> What a wonderful world!
|
15
|
+
# <% end %> </div>
|
16
|
+
#
|
17
|
+
# # controller
|
18
|
+
# def update
|
19
|
+
# post = Post.find(params[:id])
|
20
|
+
# post.update(params[:post])
|
21
|
+
#
|
22
|
+
# redirect_to(post) # Calls polymorphic_url(post) which in turn calls post_url(post)
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# As the example above shows, you can stop caring to a large extent what the actual id of the post is.
|
26
|
+
# You just know that one is being assigned and that the subsequent calls in redirect_to expect that
|
27
|
+
# same naming convention and allows you to write less code if you follow it.
|
28
|
+
module RecordIdentifier
|
29
|
+
extend self
|
30
|
+
extend ModelNaming
|
31
|
+
|
32
|
+
include ModelNaming
|
33
|
+
|
34
|
+
JOIN = '_'.freeze
|
35
|
+
NEW = 'new'.freeze
|
36
|
+
|
37
|
+
# The DOM class convention is to use the singular form of an object or class.
|
38
|
+
#
|
39
|
+
# dom_class(post) # => "post"
|
40
|
+
# dom_class(Person) # => "person"
|
41
|
+
#
|
42
|
+
# If you need to address multiple instances of the same class in the same view, you can prefix the dom_class:
|
43
|
+
#
|
44
|
+
# dom_class(post, :edit) # => "edit_post"
|
45
|
+
# dom_class(Person, :edit) # => "edit_person"
|
46
|
+
def dom_class(record_or_class, prefix = nil)
|
47
|
+
singular = model_name_from_record_or_class(record_or_class).param_key
|
48
|
+
prefix ? "#{prefix}#{JOIN}#{singular}" : singular
|
49
|
+
end
|
50
|
+
|
51
|
+
# The DOM id convention is to use the singular form of an object or class with the id following an underscore.
|
52
|
+
# If no id is found, prefix with "new_" instead.
|
53
|
+
#
|
54
|
+
# dom_id(Post.find(45)) # => "post_45"
|
55
|
+
# dom_id(Post.new) # => "new_post"
|
56
|
+
#
|
57
|
+
# If you need to address multiple instances of the same class in the same view, you can prefix the dom_id:
|
58
|
+
#
|
59
|
+
# dom_id(Post.find(45), :edit) # => "edit_post_45"
|
60
|
+
# dom_id(Post.new, :custom) # => "custom_post"
|
61
|
+
def dom_id(record, prefix = nil)
|
62
|
+
if record_id = record_key_for_dom_id(record)
|
63
|
+
"#{dom_class(record, prefix)}#{JOIN}#{record_id}"
|
64
|
+
else
|
65
|
+
dom_class(record, prefix || NEW)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
protected
|
70
|
+
|
71
|
+
# Returns a string representation of the key attribute(s) that is suitable for use in an HTML DOM id.
|
72
|
+
# This can be overwritten to customize the default generated string representation if desired.
|
73
|
+
# If you need to read back a key from a dom_id in order to query for the underlying database record,
|
74
|
+
# you should write a helper like 'person_record_from_dom_id' that will extract the key either based
|
75
|
+
# on the default implementation (which just joins all key attributes with '_') or on your own
|
76
|
+
# overwritten version of the method. By default, this implementation passes the key string through a
|
77
|
+
# method that replaces all characters that are invalid inside DOM ids, with valid ones. You need to
|
78
|
+
# make sure yourself that your dom ids are valid, in case you overwrite this method.
|
79
|
+
def record_key_for_dom_id(record)
|
80
|
+
key = convert_to_model(record).to_key
|
81
|
+
key ? key.join('_') : key
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|