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.

Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +641 -418
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +5 -288
  5. data/lib/abstract_controller.rb +1 -8
  6. data/lib/abstract_controller/asset_paths.rb +2 -2
  7. data/lib/abstract_controller/base.rb +39 -37
  8. data/lib/abstract_controller/callbacks.rb +101 -82
  9. data/lib/abstract_controller/collector.rb +7 -3
  10. data/lib/abstract_controller/helpers.rb +23 -11
  11. data/lib/abstract_controller/layouts.rb +68 -73
  12. data/lib/abstract_controller/logger.rb +1 -2
  13. data/lib/abstract_controller/rendering.rb +22 -13
  14. data/lib/abstract_controller/translation.rb +16 -1
  15. data/lib/abstract_controller/url_for.rb +6 -6
  16. data/lib/abstract_controller/view_paths.rb +1 -1
  17. data/lib/action_controller.rb +15 -6
  18. data/lib/action_controller/base.rb +46 -22
  19. data/lib/action_controller/caching.rb +46 -33
  20. data/lib/action_controller/caching/fragments.rb +23 -53
  21. data/lib/action_controller/deprecated.rb +5 -1
  22. data/lib/action_controller/deprecated/integration_test.rb +3 -0
  23. data/lib/action_controller/log_subscriber.rb +11 -8
  24. data/lib/action_controller/metal.rb +16 -30
  25. data/lib/action_controller/metal/conditional_get.rb +76 -32
  26. data/lib/action_controller/metal/data_streaming.rb +20 -26
  27. data/lib/action_controller/metal/exceptions.rb +19 -6
  28. data/lib/action_controller/metal/flash.rb +24 -9
  29. data/lib/action_controller/metal/force_ssl.rb +32 -9
  30. data/lib/action_controller/metal/head.rb +25 -4
  31. data/lib/action_controller/metal/helpers.rb +6 -9
  32. data/lib/action_controller/metal/hide_actions.rb +1 -2
  33. data/lib/action_controller/metal/http_authentication.rb +105 -87
  34. data/lib/action_controller/metal/implicit_render.rb +1 -1
  35. data/lib/action_controller/metal/instrumentation.rb +2 -1
  36. data/lib/action_controller/metal/live.rb +141 -0
  37. data/lib/action_controller/metal/mime_responds.rb +161 -47
  38. data/lib/action_controller/metal/params_wrapper.rb +112 -74
  39. data/lib/action_controller/metal/rack_delegation.rb +9 -3
  40. data/lib/action_controller/metal/redirecting.rb +15 -20
  41. data/lib/action_controller/metal/renderers.rb +11 -9
  42. data/lib/action_controller/metal/rendering.rb +8 -0
  43. data/lib/action_controller/metal/request_forgery_protection.rb +112 -19
  44. data/lib/action_controller/metal/responder.rb +20 -19
  45. data/lib/action_controller/metal/streaming.rb +12 -18
  46. data/lib/action_controller/metal/strong_parameters.rb +516 -0
  47. data/lib/action_controller/metal/testing.rb +13 -18
  48. data/lib/action_controller/metal/url_for.rb +27 -25
  49. data/lib/action_controller/model_naming.rb +12 -0
  50. data/lib/action_controller/railtie.rb +33 -17
  51. data/lib/action_controller/railties/helpers.rb +22 -0
  52. data/lib/action_controller/record_identifier.rb +18 -72
  53. data/lib/action_controller/test_case.rb +215 -123
  54. data/lib/action_controller/vendor/html-scanner.rb +4 -19
  55. data/lib/action_dispatch.rb +27 -19
  56. data/lib/action_dispatch/http/cache.rb +63 -11
  57. data/lib/action_dispatch/http/filter_parameters.rb +18 -8
  58. data/lib/action_dispatch/http/filter_redirect.rb +37 -0
  59. data/lib/action_dispatch/http/headers.rb +27 -19
  60. data/lib/action_dispatch/http/mime_negotiation.rb +25 -2
  61. data/lib/action_dispatch/http/mime_type.rb +145 -113
  62. data/lib/action_dispatch/http/mime_types.rb +1 -1
  63. data/lib/action_dispatch/http/parameter_filter.rb +44 -46
  64. data/lib/action_dispatch/http/parameters.rb +12 -5
  65. data/lib/action_dispatch/http/rack_cache.rb +2 -3
  66. data/lib/action_dispatch/http/request.rb +49 -18
  67. data/lib/action_dispatch/http/response.rb +129 -35
  68. data/lib/action_dispatch/http/upload.rb +60 -17
  69. data/lib/action_dispatch/http/url.rb +53 -31
  70. data/lib/action_dispatch/journey.rb +5 -0
  71. data/lib/action_dispatch/journey/backwards.rb +5 -0
  72. data/lib/action_dispatch/journey/formatter.rb +146 -0
  73. data/lib/action_dispatch/journey/gtg/builder.rb +162 -0
  74. data/lib/action_dispatch/journey/gtg/simulator.rb +44 -0
  75. data/lib/action_dispatch/journey/gtg/transition_table.rb +156 -0
  76. data/lib/action_dispatch/journey/nfa/builder.rb +76 -0
  77. data/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  78. data/lib/action_dispatch/journey/nfa/simulator.rb +47 -0
  79. data/lib/action_dispatch/journey/nfa/transition_table.rb +163 -0
  80. data/lib/action_dispatch/journey/nodes/node.rb +124 -0
  81. data/lib/action_dispatch/journey/parser.rb +206 -0
  82. data/lib/action_dispatch/journey/parser.y +47 -0
  83. data/lib/action_dispatch/journey/parser_extras.rb +23 -0
  84. data/lib/action_dispatch/journey/path/pattern.rb +196 -0
  85. data/lib/action_dispatch/journey/route.rb +116 -0
  86. data/lib/action_dispatch/journey/router.rb +164 -0
  87. data/lib/action_dispatch/journey/router/strexp.rb +24 -0
  88. data/lib/action_dispatch/journey/router/utils.rb +54 -0
  89. data/lib/action_dispatch/journey/routes.rb +75 -0
  90. data/lib/action_dispatch/journey/scanner.rb +61 -0
  91. data/lib/action_dispatch/journey/visitors.rb +189 -0
  92. data/lib/action_dispatch/journey/visualizer/fsm.css +34 -0
  93. data/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  94. data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  95. data/lib/action_dispatch/middleware/callbacks.rb +9 -4
  96. data/lib/action_dispatch/middleware/cookies.rb +168 -57
  97. data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -17
  98. data/lib/action_dispatch/middleware/exception_wrapper.rb +27 -3
  99. data/lib/action_dispatch/middleware/flash.rb +58 -58
  100. data/lib/action_dispatch/middleware/params_parser.rb +14 -29
  101. data/lib/action_dispatch/middleware/public_exceptions.rb +31 -14
  102. data/lib/action_dispatch/middleware/reloader.rb +6 -6
  103. data/lib/action_dispatch/middleware/remote_ip.rb +145 -39
  104. data/lib/action_dispatch/middleware/request_id.rb +2 -6
  105. data/lib/action_dispatch/middleware/session/abstract_store.rb +22 -20
  106. data/lib/action_dispatch/middleware/session/cache_store.rb +3 -3
  107. data/lib/action_dispatch/middleware/session/cookie_store.rb +81 -7
  108. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +8 -3
  109. data/lib/action_dispatch/middleware/show_exceptions.rb +12 -45
  110. data/lib/action_dispatch/middleware/ssl.rb +70 -0
  111. data/lib/action_dispatch/middleware/stack.rb +6 -1
  112. data/lib/action_dispatch/middleware/static.rb +5 -24
  113. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +14 -11
  114. data/lib/action_dispatch/middleware/templates/rescues/_source.erb +25 -0
  115. data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +3 -3
  116. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +15 -9
  117. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +121 -5
  118. data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +7 -2
  119. data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +30 -15
  120. data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +39 -13
  121. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +6 -2
  122. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  123. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +144 -0
  124. data/lib/action_dispatch/railtie.rb +16 -6
  125. data/lib/action_dispatch/request/session.rb +181 -0
  126. data/lib/action_dispatch/routing.rb +41 -40
  127. data/lib/action_dispatch/routing/inspector.rb +240 -0
  128. data/lib/action_dispatch/routing/mapper.rb +501 -273
  129. data/lib/action_dispatch/routing/polymorphic_routes.rb +16 -20
  130. data/lib/action_dispatch/routing/redirection.rb +46 -29
  131. data/lib/action_dispatch/routing/route_set.rb +203 -164
  132. data/lib/action_dispatch/routing/routes_proxy.rb +2 -0
  133. data/lib/action_dispatch/routing/url_for.rb +48 -33
  134. data/lib/action_dispatch/testing/assertions/dom.rb +3 -13
  135. data/lib/action_dispatch/testing/assertions/response.rb +32 -40
  136. data/lib/action_dispatch/testing/assertions/routing.rb +40 -39
  137. data/lib/action_dispatch/testing/assertions/selector.rb +15 -20
  138. data/lib/action_dispatch/testing/assertions/tag.rb +20 -23
  139. data/lib/action_dispatch/testing/integration.rb +41 -22
  140. data/lib/action_dispatch/testing/test_process.rb +9 -6
  141. data/lib/action_dispatch/testing/test_request.rb +7 -3
  142. data/lib/action_pack.rb +1 -1
  143. data/lib/action_pack/version.rb +4 -4
  144. data/lib/action_view.rb +17 -8
  145. data/lib/action_view/base.rb +15 -34
  146. data/lib/action_view/buffers.rb +1 -1
  147. data/lib/action_view/context.rb +4 -4
  148. data/lib/action_view/dependency_tracker.rb +91 -0
  149. data/lib/action_view/digestor.rb +85 -0
  150. data/lib/action_view/flows.rb +1 -4
  151. data/lib/action_view/helpers.rb +2 -4
  152. data/lib/action_view/helpers/active_model_helper.rb +3 -4
  153. data/lib/action_view/helpers/asset_tag_helper.rb +211 -353
  154. data/lib/action_view/helpers/asset_url_helper.rb +354 -0
  155. data/lib/action_view/helpers/atom_feed_helper.rb +13 -10
  156. data/lib/action_view/helpers/cache_helper.rb +150 -18
  157. data/lib/action_view/helpers/capture_helper.rb +42 -29
  158. data/lib/action_view/helpers/csrf_helper.rb +0 -2
  159. data/lib/action_view/helpers/date_helper.rb +268 -247
  160. data/lib/action_view/helpers/debug_helper.rb +10 -11
  161. data/lib/action_view/helpers/form_helper.rb +904 -547
  162. data/lib/action_view/helpers/form_options_helper.rb +341 -166
  163. data/lib/action_view/helpers/form_tag_helper.rb +188 -88
  164. data/lib/action_view/helpers/javascript_helper.rb +23 -16
  165. data/lib/action_view/helpers/number_helper.rb +148 -354
  166. data/lib/action_view/helpers/output_safety_helper.rb +3 -3
  167. data/lib/action_view/helpers/record_tag_helper.rb +17 -22
  168. data/lib/action_view/helpers/rendering_helper.rb +2 -4
  169. data/lib/action_view/helpers/sanitize_helper.rb +3 -6
  170. data/lib/action_view/helpers/tag_helper.rb +43 -37
  171. data/lib/action_view/helpers/tags.rb +39 -0
  172. data/lib/action_view/helpers/tags/base.rb +148 -0
  173. data/lib/action_view/helpers/tags/check_box.rb +64 -0
  174. data/lib/action_view/helpers/tags/checkable.rb +16 -0
  175. data/lib/action_view/helpers/tags/collection_check_boxes.rb +43 -0
  176. data/lib/action_view/helpers/tags/collection_helpers.rb +83 -0
  177. data/lib/action_view/helpers/tags/collection_radio_buttons.rb +36 -0
  178. data/lib/action_view/helpers/tags/collection_select.rb +28 -0
  179. data/lib/action_view/helpers/tags/color_field.rb +25 -0
  180. data/lib/action_view/helpers/tags/date_field.rb +13 -0
  181. data/lib/action_view/helpers/tags/date_select.rb +72 -0
  182. data/lib/action_view/helpers/tags/datetime_field.rb +22 -0
  183. data/lib/action_view/helpers/tags/datetime_local_field.rb +19 -0
  184. data/lib/action_view/helpers/tags/datetime_select.rb +8 -0
  185. data/lib/action_view/helpers/tags/email_field.rb +8 -0
  186. data/lib/action_view/helpers/tags/file_field.rb +8 -0
  187. data/lib/action_view/helpers/tags/grouped_collection_select.rb +29 -0
  188. data/lib/action_view/helpers/tags/hidden_field.rb +8 -0
  189. data/lib/action_view/helpers/tags/label.rb +65 -0
  190. data/lib/action_view/helpers/tags/month_field.rb +13 -0
  191. data/lib/action_view/helpers/tags/number_field.rb +18 -0
  192. data/lib/action_view/helpers/tags/password_field.rb +12 -0
  193. data/lib/action_view/helpers/tags/radio_button.rb +31 -0
  194. data/lib/action_view/helpers/tags/range_field.rb +8 -0
  195. data/lib/action_view/helpers/tags/search_field.rb +24 -0
  196. data/lib/action_view/helpers/tags/select.rb +41 -0
  197. data/lib/action_view/helpers/tags/tel_field.rb +8 -0
  198. data/lib/action_view/helpers/tags/text_area.rb +18 -0
  199. data/lib/action_view/helpers/tags/text_field.rb +29 -0
  200. data/lib/action_view/helpers/tags/time_field.rb +13 -0
  201. data/lib/action_view/helpers/tags/time_select.rb +8 -0
  202. data/lib/action_view/helpers/tags/time_zone_select.rb +20 -0
  203. data/lib/action_view/helpers/tags/url_field.rb +8 -0
  204. data/lib/action_view/helpers/tags/week_field.rb +13 -0
  205. data/lib/action_view/helpers/text_helper.rb +126 -113
  206. data/lib/action_view/helpers/translation_helper.rb +32 -16
  207. data/lib/action_view/helpers/url_helper.rb +200 -271
  208. data/lib/action_view/locale/en.yml +1 -105
  209. data/lib/action_view/log_subscriber.rb +6 -4
  210. data/lib/action_view/lookup_context.rb +15 -39
  211. data/lib/action_view/model_naming.rb +12 -0
  212. data/lib/action_view/path_set.rb +9 -39
  213. data/lib/action_view/railtie.rb +6 -22
  214. data/lib/action_view/record_identifier.rb +84 -0
  215. data/lib/action_view/renderer/abstract_renderer.rb +10 -19
  216. data/lib/action_view/renderer/partial_renderer.rb +144 -81
  217. data/lib/action_view/renderer/renderer.rb +2 -19
  218. data/lib/action_view/renderer/streaming_template_renderer.rb +2 -5
  219. data/lib/action_view/renderer/template_renderer.rb +14 -13
  220. data/lib/action_view/routing_url_for.rb +107 -0
  221. data/lib/action_view/template.rb +22 -21
  222. data/lib/action_view/template/error.rb +22 -12
  223. data/lib/action_view/template/handlers.rb +12 -9
  224. data/lib/action_view/template/handlers/builder.rb +1 -1
  225. data/lib/action_view/template/handlers/erb.rb +11 -16
  226. data/lib/action_view/template/handlers/raw.rb +11 -0
  227. data/lib/action_view/template/resolver.rb +111 -83
  228. data/lib/action_view/template/text.rb +12 -8
  229. data/lib/action_view/template/types.rb +57 -0
  230. data/lib/action_view/test_case.rb +66 -43
  231. data/lib/action_view/testing/resolvers.rb +3 -2
  232. data/lib/action_view/vendor/html-scanner.rb +20 -0
  233. data/lib/{action_controller → action_view}/vendor/html-scanner/html/document.rb +0 -0
  234. data/lib/{action_controller → action_view}/vendor/html-scanner/html/node.rb +12 -12
  235. data/lib/{action_controller → action_view}/vendor/html-scanner/html/sanitizer.rb +18 -7
  236. data/lib/{action_controller → action_view}/vendor/html-scanner/html/selector.rb +1 -1
  237. data/lib/{action_controller → action_view}/vendor/html-scanner/html/tokenizer.rb +1 -1
  238. data/lib/{action_controller → action_view}/vendor/html-scanner/html/version.rb +0 -0
  239. metadata +135 -125
  240. data/lib/action_controller/caching/actions.rb +0 -185
  241. data/lib/action_controller/caching/pages.rb +0 -187
  242. data/lib/action_controller/caching/sweeping.rb +0 -97
  243. data/lib/action_controller/deprecated/performance_test.rb +0 -1
  244. data/lib/action_controller/metal/compatibility.rb +0 -65
  245. data/lib/action_controller/metal/session_management.rb +0 -14
  246. data/lib/action_controller/railties/paths.rb +0 -25
  247. data/lib/action_dispatch/middleware/best_standards_support.rb +0 -30
  248. data/lib/action_dispatch/middleware/body_proxy.rb +0 -30
  249. data/lib/action_dispatch/middleware/head.rb +0 -18
  250. data/lib/action_dispatch/middleware/rescue.rb +0 -26
  251. data/lib/action_dispatch/testing/performance_test.rb +0 -10
  252. data/lib/action_view/asset_paths.rb +0 -142
  253. data/lib/action_view/helpers/asset_paths.rb +0 -7
  254. data/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +0 -146
  255. data/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb +0 -93
  256. data/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb +0 -193
  257. data/lib/action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers.rb +0 -148
  258. data/lib/sprockets/assets.rake +0 -99
  259. data/lib/sprockets/bootstrap.rb +0 -37
  260. data/lib/sprockets/compressors.rb +0 -83
  261. data/lib/sprockets/helpers.rb +0 -6
  262. data/lib/sprockets/helpers/isolated_helper.rb +0 -13
  263. data/lib/sprockets/helpers/rails_helper.rb +0 -182
  264. data/lib/sprockets/railtie.rb +0 -62
  265. data/lib/sprockets/static_compiler.rb +0 -56
@@ -1 +0,0 @@
1
- ActionController::PerformanceTest = ActionDispatch::PerformanceTest
@@ -1,65 +0,0 @@
1
- require 'active_support/deprecation'
2
-
3
- module ActionController
4
- module Compatibility
5
- extend ActiveSupport::Concern
6
-
7
- # Temporary hax
8
- included do
9
- ::ActionController::UnknownAction = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('ActionController::UnknownAction', '::AbstractController::ActionNotFound')
10
- ::ActionController::DoubleRenderError = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('ActionController::DoubleRenderError', '::AbstractController::DoubleRenderError')
11
-
12
- # ROUTES TODO: This should be handled by a middleware and route generation
13
- # should be able to handle SCRIPT_NAME
14
- self.config.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
15
-
16
- def self.default_charset=(new_charset)
17
- ActiveSupport::Deprecation.warn "Setting default charset at controller level" \
18
- " is deprecated, please use `config.action_dispatch.default_charset` instead", caller
19
- ActionDispatch::Response.default_charset = new_charset
20
- end
21
-
22
- self.protected_instance_variables = %w(
23
- @_status @_headers @_params @_env @_response @_request
24
- @_view_runtime @_stream @_url_options @_action_has_layout
25
- )
26
-
27
- def rescue_action(env)
28
- ActiveSupport::Deprecation.warn "Calling `rescue_action` is deprecated and will be removed in Rails 4.0.", caller
29
- raise env["action_dispatch.rescue.exception"]
30
- end
31
- end
32
-
33
- # For old tests
34
- def initialize_template_class(*)
35
- ActiveSupport::Deprecation.warn "Calling `initialize_template_class` is deprecated and has no effect anymore.", caller
36
- end
37
-
38
- def assign_shortcuts(*)
39
- ActiveSupport::Deprecation.warn "Calling `assign_shortcuts` is deprecated and has no effect anymore.", caller
40
- end
41
-
42
- def _normalize_options(options)
43
- options[:text] = nil if options.delete(:nothing) == true
44
- options[:text] = " " if options.key?(:text) && options[:text].nil?
45
- super
46
- end
47
-
48
- def render_to_body(options)
49
- options[:template].sub!(/^\//, '') if options.key?(:template)
50
- super || " "
51
- end
52
-
53
- def _handle_method_missing
54
- ActiveSupport::Deprecation.warn "Using `method_missing` to handle non" \
55
- " existing actions is deprecated and will be removed in Rails 4.0, " \
56
- " please use `action_missing` instead.", caller
57
- method_missing(@_action_name.to_sym)
58
- end
59
-
60
- def method_for_action(action_name)
61
- super || ((self.class.public_method_defined?(:method_missing) ||
62
- self.class.protected_method_defined?(:method_missing)) && "_handle_method_missing")
63
- end
64
- end
65
- end
@@ -1,14 +0,0 @@
1
- module ActionController #:nodoc:
2
- module SessionManagement #:nodoc:
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- ActiveSupport::Deprecation.warn "ActionController::SessionManagement " \
7
- "is deprecated because it has no contents since Rails 3.1", caller
8
- end
9
-
10
- module ClassMethods
11
-
12
- end
13
- end
14
- end
@@ -1,25 +0,0 @@
1
- module ActionController
2
- module Railties
3
- module Paths
4
- def self.with(app)
5
- Module.new do
6
- define_method(:inherited) do |klass|
7
- super(klass)
8
-
9
- if namespace = klass.parents.detect { |m| m.respond_to?(:railtie_helpers_paths) }
10
- paths = namespace.railtie_helpers_paths
11
- else
12
- paths = app.helpers_paths
13
- end
14
-
15
- klass.helpers_path = paths
16
-
17
- if klass.superclass == ActionController::Base && ActionController::Base.include_all_helpers
18
- klass.helper :all
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,30 +0,0 @@
1
- module ActionDispatch
2
- class BestStandardsSupport
3
- def initialize(app, type = true)
4
- @app = app
5
-
6
- @header = case type
7
- when true
8
- "IE=Edge,chrome=1"
9
- when :builtin
10
- "IE=Edge"
11
- when false
12
- nil
13
- end
14
- end
15
-
16
- def call(env)
17
- status, headers, body = @app.call(env)
18
-
19
- if headers["X-UA-Compatible"] && @header
20
- unless headers["X-UA-Compatible"][@header]
21
- headers["X-UA-Compatible"] << "," << @header.to_s
22
- end
23
- else
24
- headers["X-UA-Compatible"] = @header
25
- end
26
-
27
- [status, headers, body]
28
- end
29
- end
30
- end
@@ -1,30 +0,0 @@
1
- # Keep this file meanwhile https://github.com/rack/rack/pull/313 is not released
2
- module ActionDispatch
3
- class BodyProxy
4
- def initialize(body, &block)
5
- @body, @block, @closed = body, block, false
6
- end
7
-
8
- def respond_to?(*args)
9
- super or @body.respond_to?(*args)
10
- end
11
-
12
- def close
13
- return if @closed
14
- @closed = true
15
- begin
16
- @body.close if @body.respond_to? :close
17
- ensure
18
- @block.call
19
- end
20
- end
21
-
22
- def closed?
23
- @closed
24
- end
25
-
26
- def method_missing(*args, &block)
27
- @body.__send__(*args, &block)
28
- end
29
- end
30
- end
@@ -1,18 +0,0 @@
1
- module ActionDispatch
2
- class Head
3
- def initialize(app)
4
- @app = app
5
- end
6
-
7
- def call(env)
8
- if env["REQUEST_METHOD"] == "HEAD"
9
- env["REQUEST_METHOD"] = "GET"
10
- env["rack.methodoverride.original_method"] = "HEAD"
11
- status, headers, _ = @app.call(env)
12
- [status, headers, []]
13
- else
14
- @app.call(env)
15
- end
16
- end
17
- end
18
- end
@@ -1,26 +0,0 @@
1
- module ActionDispatch
2
- class Rescue
3
- def initialize(app, rescuers = {}, &block)
4
- @app, @rescuers = app, {}
5
- rescuers.each { |exception, rescuer| rescue_from(exception, rescuer) }
6
- instance_eval(&block) if block_given?
7
- end
8
-
9
- def call(env)
10
- @app.call(env)
11
- rescue Exception => exception
12
- if rescuer = @rescuers[exception.class.name]
13
- env['action_dispatch.rescue.exception'] = exception
14
- rescuer.call(env)
15
- else
16
- raise exception
17
- end
18
- end
19
-
20
- protected
21
- def rescue_from(exception, rescuer)
22
- exception = exception.class.name if exception.is_a?(Exception)
23
- @rescuers[exception.to_s] = rescuer
24
- end
25
- end
26
- end
@@ -1,10 +0,0 @@
1
- require 'active_support/testing/performance'
2
-
3
- module ActionDispatch
4
- # An integration test that runs a code profiler on your test methods.
5
- # Profiling output for combinations of each test method, measurement, and
6
- # output format are written to your tmp/performance directory.
7
- class PerformanceTest < ActionDispatch::IntegrationTest
8
- include ActiveSupport::Testing::Performance
9
- end
10
- end
@@ -1,142 +0,0 @@
1
- require 'zlib'
2
- require 'active_support/core_ext/file'
3
- require 'action_controller/metal/exceptions'
4
-
5
- module ActionView
6
- class AssetPaths #:nodoc:
7
- attr_reader :config, :controller
8
-
9
- def initialize(config, controller = nil)
10
- @config = config
11
- @controller = controller
12
- end
13
-
14
- # Add the extension +ext+ if not present. Return full or scheme-relative URLs otherwise untouched.
15
- # Prefix with <tt>/dir/</tt> if lacking a leading +/+. Account for relative URL
16
- # roots. Rewrite the asset path for cache-busting asset ids. Include
17
- # asset host, if configured, with the correct request protocol.
18
- #
19
- # When :relative (default), the protocol will be determined by the client using current protocol
20
- # When :request, the protocol will be the request protocol
21
- # Otherwise, the protocol is used (E.g. :http, :https, etc)
22
- def compute_public_path(source, dir, options = {})
23
- source = source.to_s
24
- return source if is_uri?(source)
25
-
26
- source = rewrite_extension(source, dir, options[:ext]) if options[:ext]
27
- source = rewrite_asset_path(source, dir, options)
28
- source = rewrite_relative_url_root(source, relative_url_root)
29
- source = rewrite_host_and_protocol(source, options[:protocol])
30
- source
31
- end
32
-
33
- # Return the filesystem path for the source
34
- def compute_source_path(source, dir, ext)
35
- source = rewrite_extension(source, dir, ext) if ext
36
-
37
- sources = []
38
- sources << config.assets_dir
39
- sources << dir unless source[0] == ?/
40
- sources << source
41
-
42
- File.join(sources)
43
- end
44
-
45
- def is_uri?(path)
46
- path =~ %r{^[-a-z]+://|^(?:cid|data):|^//}i
47
- end
48
-
49
- private
50
-
51
- def rewrite_extension(source, dir, ext)
52
- raise NotImplementedError
53
- end
54
-
55
- def rewrite_asset_path(source, path = nil)
56
- raise NotImplementedError
57
- end
58
-
59
- def rewrite_relative_url_root(source, relative_url_root)
60
- relative_url_root && !source.starts_with?("#{relative_url_root}/") ? "#{relative_url_root}#{source}" : source
61
- end
62
-
63
- def has_request?
64
- controller.respond_to?(:request)
65
- end
66
-
67
- def rewrite_host_and_protocol(source, protocol = nil)
68
- host = compute_asset_host(source)
69
- if host && !is_uri?(host)
70
- if (protocol || default_protocol) == :request && !has_request?
71
- host = nil
72
- else
73
- host = "#{compute_protocol(protocol)}#{host}"
74
- end
75
- end
76
- host ? "#{host}#{source}" : source
77
- end
78
-
79
- def compute_protocol(protocol)
80
- protocol ||= default_protocol
81
- case protocol
82
- when :relative
83
- "//"
84
- when :request
85
- unless @controller
86
- invalid_asset_host!("The protocol requested was :request. Consider using :relative instead.")
87
- end
88
- @controller.request.protocol
89
- else
90
- "#{protocol}://"
91
- end
92
- end
93
-
94
- def default_protocol
95
- @config.default_asset_host_protocol || (has_request? ? :request : :relative)
96
- end
97
-
98
- def invalid_asset_host!(help_message)
99
- raise ActionController::RoutingError, "This asset host cannot be computed without a request in scope. #{help_message}"
100
- end
101
-
102
- # Pick an asset host for this source. Returns +nil+ if no host is set,
103
- # the host if no wildcard is set, the host interpolated with the
104
- # numbers 0-3 if it contains <tt>%d</tt> (the number is the source hash mod 4),
105
- # or the value returned from invoking call on an object responding to call
106
- # (proc or otherwise).
107
- def compute_asset_host(source)
108
- if host = asset_host_config
109
- if host.respond_to?(:call)
110
- args = [source]
111
- arity = arity_of(host)
112
- if (arity > 1 || arity < -2) && !has_request?
113
- invalid_asset_host!("Remove the second argument to your asset_host Proc if you do not need the request, or make it optional.")
114
- end
115
- args << current_request if (arity > 1 || arity < 0) && has_request?
116
- host.call(*args)
117
- else
118
- (host =~ /%d/) ? host % (Zlib.crc32(source) % 4) : host
119
- end
120
- end
121
- end
122
-
123
- def relative_url_root
124
- config.relative_url_root
125
- end
126
-
127
- def asset_host_config
128
- config.asset_host
129
- end
130
-
131
- # Returns the current request if one exists.
132
- def current_request
133
- controller.request if has_request?
134
- end
135
-
136
- # Returns the arity of a callable
137
- def arity_of(callable)
138
- callable.respond_to?(:arity) ? callable.arity : callable.method(:call).arity
139
- end
140
-
141
- end
142
- end
@@ -1,7 +0,0 @@
1
- ActiveSupport::Deprecation.warn "ActionView::Helpers::AssetPaths is deprecated. Please use ActionView::AssetPaths instead."
2
-
3
- module ActionView
4
- module Helpers
5
- AssetPaths = ::ActionView::AssetPaths
6
- end
7
- end
@@ -1,146 +0,0 @@
1
- require 'active_support/core_ext/class/attribute'
2
- require 'active_support/core_ext/string/inflections'
3
- require 'active_support/core_ext/file'
4
- require 'action_view/helpers/tag_helper'
5
-
6
- module ActionView
7
- module Helpers
8
- module AssetTagHelper
9
-
10
- class AssetIncludeTag
11
- include TagHelper
12
-
13
- attr_reader :config, :asset_paths
14
- class_attribute :expansions
15
-
16
- def self.inherited(base)
17
- base.expansions = { }
18
- end
19
-
20
- def initialize(config, asset_paths)
21
- @config = config
22
- @asset_paths = asset_paths
23
- end
24
-
25
- def asset_name
26
- raise NotImplementedError
27
- end
28
-
29
- def extension
30
- raise NotImplementedError
31
- end
32
-
33
- def custom_dir
34
- raise NotImplementedError
35
- end
36
-
37
- def asset_tag(source, options)
38
- raise NotImplementedError
39
- end
40
-
41
- def include_tag(*sources)
42
- options = sources.extract_options!.stringify_keys
43
- concat = options.delete("concat")
44
- cache = concat || options.delete("cache")
45
- recursive = options.delete("recursive")
46
-
47
- if concat || (config.perform_caching && cache)
48
- joined_name = (cache == true ? "all" : cache) + ".#{extension}"
49
- joined_path = File.join((joined_name[/^#{File::SEPARATOR}/] ? config.assets_dir : custom_dir), joined_name)
50
- unless config.perform_caching && File.exists?(joined_path)
51
- write_asset_file_contents(joined_path, compute_paths(sources, recursive))
52
- end
53
- asset_tag(joined_name, options)
54
- else
55
- sources = expand_sources(sources, recursive)
56
- ensure_sources!(sources) if cache
57
- sources.collect { |source| asset_tag(source, options) }.join("\n").html_safe
58
- end
59
- end
60
-
61
- private
62
-
63
- def path_to_asset(source, options = {})
64
- asset_paths.compute_public_path(source, asset_name.to_s.pluralize, options.merge(:ext => extension))
65
- end
66
-
67
- def path_to_asset_source(source)
68
- asset_paths.compute_source_path(source, asset_name.to_s.pluralize, extension)
69
- end
70
-
71
- def compute_paths(*args)
72
- expand_sources(*args).collect { |source| path_to_asset_source(source) }
73
- end
74
-
75
- def expand_sources(sources, recursive)
76
- if sources.first == :all
77
- collect_asset_files(custom_dir, ('**' if recursive), "*.#{extension}")
78
- else
79
- sources.inject([]) do |list, source|
80
- determined_source = determine_source(source, expansions)
81
- update_source_list(list, determined_source)
82
- end
83
- end
84
- end
85
-
86
- def update_source_list(list, source)
87
- case source
88
- when String
89
- list.delete(source)
90
- list << source
91
- when Array
92
- updated_sources = source - list
93
- list.concat(updated_sources)
94
- end
95
- end
96
-
97
- def ensure_sources!(sources)
98
- sources.each do |source|
99
- asset_file_path!(path_to_asset_source(source))
100
- end
101
- end
102
-
103
- def collect_asset_files(*path)
104
- dir = path.first
105
-
106
- Dir[File.join(*path.compact)].collect do |file|
107
- file[-(file.size - dir.size - 1)..-1].sub(/\.\w+$/, '')
108
- end.sort
109
- end
110
-
111
- def determine_source(source, collection)
112
- case source
113
- when Symbol
114
- collection[source] || raise(ArgumentError, "No expansion found for #{source.inspect}")
115
- else
116
- source
117
- end
118
- end
119
-
120
- def join_asset_file_contents(paths)
121
- paths.collect { |path| File.read(asset_file_path!(path, true)) }.join("\n\n")
122
- end
123
-
124
- def write_asset_file_contents(joined_asset_path, asset_paths)
125
- FileUtils.mkdir_p(File.dirname(joined_asset_path))
126
- File.atomic_write(joined_asset_path) { |cache| cache.write(join_asset_file_contents(asset_paths)) }
127
-
128
- # Set mtime to the latest of the combined files to allow for
129
- # consistent ETag without a shared filesystem.
130
- mt = asset_paths.map { |p| File.mtime(asset_file_path!(p)) }.max
131
- File.utime(mt, mt, joined_asset_path)
132
- end
133
-
134
- def asset_file_path!(absolute_path, error_if_file_is_uri = false)
135
- if asset_paths.is_uri?(absolute_path)
136
- raise(Errno::ENOENT, "Asset file #{path} is uri and cannot be merged into single file") if error_if_file_is_uri
137
- else
138
- raise(Errno::ENOENT, "Asset file not found at '#{absolute_path}'" ) unless File.exist?(absolute_path)
139
- return absolute_path
140
- end
141
- end
142
- end
143
-
144
- end
145
- end
146
- end