actionpack 3.2.19 → 4.2.11.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (244) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +412 -503
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +11 -294
  5. data/lib/abstract_controller/asset_paths.rb +2 -2
  6. data/lib/abstract_controller/base.rb +52 -18
  7. data/lib/abstract_controller/callbacks.rb +87 -89
  8. data/lib/abstract_controller/collector.rb +17 -3
  9. data/lib/abstract_controller/helpers.rb +41 -14
  10. data/lib/abstract_controller/logger.rb +1 -2
  11. data/lib/abstract_controller/railties/routes_helpers.rb +3 -3
  12. data/lib/abstract_controller/rendering.rb +65 -118
  13. data/lib/abstract_controller/translation.rb +16 -1
  14. data/lib/abstract_controller/url_for.rb +7 -7
  15. data/lib/abstract_controller.rb +2 -10
  16. data/lib/action_controller/base.rb +61 -28
  17. data/lib/action_controller/caching/fragments.rb +30 -54
  18. data/lib/action_controller/caching.rb +38 -35
  19. data/lib/action_controller/log_subscriber.rb +35 -18
  20. data/lib/action_controller/metal/conditional_get.rb +103 -34
  21. data/lib/action_controller/metal/data_streaming.rb +20 -26
  22. data/lib/action_controller/metal/etag_with_template_digest.rb +50 -0
  23. data/lib/action_controller/metal/exceptions.rb +19 -6
  24. data/lib/action_controller/metal/flash.rb +41 -9
  25. data/lib/action_controller/metal/force_ssl.rb +70 -12
  26. data/lib/action_controller/metal/head.rb +30 -7
  27. data/lib/action_controller/metal/helpers.rb +11 -11
  28. data/lib/action_controller/metal/hide_actions.rb +0 -1
  29. data/lib/action_controller/metal/http_authentication.rb +140 -94
  30. data/lib/action_controller/metal/implicit_render.rb +1 -1
  31. data/lib/action_controller/metal/instrumentation.rb +11 -7
  32. data/lib/action_controller/metal/live.rb +328 -0
  33. data/lib/action_controller/metal/mime_responds.rb +161 -152
  34. data/lib/action_controller/metal/params_wrapper.rb +126 -81
  35. data/lib/action_controller/metal/rack_delegation.rb +10 -4
  36. data/lib/action_controller/metal/redirecting.rb +44 -41
  37. data/lib/action_controller/metal/renderers.rb +48 -19
  38. data/lib/action_controller/metal/rendering.rb +46 -11
  39. data/lib/action_controller/metal/request_forgery_protection.rb +250 -29
  40. data/lib/action_controller/metal/streaming.rb +30 -38
  41. data/lib/action_controller/metal/strong_parameters.rb +669 -0
  42. data/lib/action_controller/metal/testing.rb +12 -18
  43. data/lib/action_controller/metal/url_for.rb +31 -29
  44. data/lib/action_controller/metal.rb +31 -40
  45. data/lib/action_controller/model_naming.rb +12 -0
  46. data/lib/action_controller/railtie.rb +38 -18
  47. data/lib/action_controller/railties/helpers.rb +22 -0
  48. data/lib/action_controller/test_case.rb +359 -173
  49. data/lib/action_controller.rb +9 -16
  50. data/lib/action_dispatch/http/cache.rb +64 -11
  51. data/lib/action_dispatch/http/filter_parameters.rb +20 -10
  52. data/lib/action_dispatch/http/filter_redirect.rb +38 -0
  53. data/lib/action_dispatch/http/headers.rb +85 -17
  54. data/lib/action_dispatch/http/mime_negotiation.rb +55 -5
  55. data/lib/action_dispatch/http/mime_type.rb +167 -114
  56. data/lib/action_dispatch/http/mime_types.rb +2 -1
  57. data/lib/action_dispatch/http/parameter_filter.rb +44 -46
  58. data/lib/action_dispatch/http/parameters.rb +30 -46
  59. data/lib/action_dispatch/http/rack_cache.rb +2 -3
  60. data/lib/action_dispatch/http/request.rb +108 -45
  61. data/lib/action_dispatch/http/response.rb +247 -48
  62. data/lib/action_dispatch/http/upload.rb +60 -29
  63. data/lib/action_dispatch/http/url.rb +135 -45
  64. data/lib/action_dispatch/journey/backwards.rb +5 -0
  65. data/lib/action_dispatch/journey/formatter.rb +166 -0
  66. data/lib/action_dispatch/journey/gtg/builder.rb +162 -0
  67. data/lib/action_dispatch/journey/gtg/simulator.rb +47 -0
  68. data/lib/action_dispatch/journey/gtg/transition_table.rb +157 -0
  69. data/lib/action_dispatch/journey/nfa/builder.rb +76 -0
  70. data/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  71. data/lib/action_dispatch/journey/nfa/simulator.rb +47 -0
  72. data/lib/action_dispatch/journey/nfa/transition_table.rb +163 -0
  73. data/lib/action_dispatch/journey/nodes/node.rb +128 -0
  74. data/lib/action_dispatch/journey/parser.rb +198 -0
  75. data/lib/action_dispatch/journey/parser.y +49 -0
  76. data/lib/action_dispatch/journey/parser_extras.rb +23 -0
  77. data/lib/action_dispatch/journey/path/pattern.rb +193 -0
  78. data/lib/action_dispatch/journey/route.rb +125 -0
  79. data/lib/action_dispatch/journey/router/strexp.rb +27 -0
  80. data/lib/action_dispatch/journey/router/utils.rb +93 -0
  81. data/lib/action_dispatch/journey/router.rb +144 -0
  82. data/lib/action_dispatch/journey/routes.rb +80 -0
  83. data/lib/action_dispatch/journey/scanner.rb +61 -0
  84. data/lib/action_dispatch/journey/visitors.rb +221 -0
  85. data/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
  86. data/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  87. data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  88. data/lib/action_dispatch/journey.rb +5 -0
  89. data/lib/action_dispatch/middleware/callbacks.rb +16 -11
  90. data/lib/action_dispatch/middleware/cookies.rb +346 -125
  91. data/lib/action_dispatch/middleware/debug_exceptions.rb +52 -24
  92. data/lib/action_dispatch/middleware/exception_wrapper.rb +75 -9
  93. data/lib/action_dispatch/middleware/flash.rb +85 -72
  94. data/lib/action_dispatch/middleware/params_parser.rb +16 -31
  95. data/lib/action_dispatch/middleware/public_exceptions.rb +39 -14
  96. data/lib/action_dispatch/middleware/reloader.rb +16 -7
  97. data/lib/action_dispatch/middleware/remote_ip.rb +132 -40
  98. data/lib/action_dispatch/middleware/request_id.rb +3 -7
  99. data/lib/action_dispatch/middleware/session/abstract_store.rb +22 -20
  100. data/lib/action_dispatch/middleware/session/cache_store.rb +3 -3
  101. data/lib/action_dispatch/middleware/session/cookie_store.rb +84 -29
  102. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +8 -3
  103. data/lib/action_dispatch/middleware/show_exceptions.rb +15 -44
  104. data/lib/action_dispatch/middleware/ssl.rb +72 -0
  105. data/lib/action_dispatch/middleware/stack.rb +6 -1
  106. data/lib/action_dispatch/middleware/static.rb +80 -23
  107. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +34 -0
  108. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  109. data/lib/action_dispatch/middleware/templates/rescues/_source.erb +27 -0
  110. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
  111. data/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
  112. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
  113. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
  114. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +133 -5
  115. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
  116. data/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  117. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
  118. data/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  119. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
  120. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
  121. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
  122. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  123. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  124. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
  125. data/lib/action_dispatch/railtie.rb +19 -6
  126. data/lib/action_dispatch/request/session.rb +193 -0
  127. data/lib/action_dispatch/request/utils.rb +35 -0
  128. data/lib/action_dispatch/routing/endpoint.rb +10 -0
  129. data/lib/action_dispatch/routing/inspector.rb +234 -0
  130. data/lib/action_dispatch/routing/mapper.rb +897 -436
  131. data/lib/action_dispatch/routing/polymorphic_routes.rb +213 -92
  132. data/lib/action_dispatch/routing/redirection.rb +97 -37
  133. data/lib/action_dispatch/routing/route_set.rb +432 -239
  134. data/lib/action_dispatch/routing/routes_proxy.rb +7 -4
  135. data/lib/action_dispatch/routing/url_for.rb +63 -34
  136. data/lib/action_dispatch/routing.rb +57 -89
  137. data/lib/action_dispatch/testing/assertions/dom.rb +2 -36
  138. data/lib/action_dispatch/testing/assertions/response.rb +24 -38
  139. data/lib/action_dispatch/testing/assertions/routing.rb +55 -54
  140. data/lib/action_dispatch/testing/assertions/selector.rb +2 -434
  141. data/lib/action_dispatch/testing/assertions/tag.rb +2 -137
  142. data/lib/action_dispatch/testing/assertions.rb +11 -7
  143. data/lib/action_dispatch/testing/integration.rb +88 -72
  144. data/lib/action_dispatch/testing/test_process.rb +9 -6
  145. data/lib/action_dispatch/testing/test_request.rb +13 -9
  146. data/lib/action_dispatch/testing/test_response.rb +1 -5
  147. data/lib/action_dispatch.rb +24 -21
  148. data/lib/action_pack/gem_version.rb +15 -0
  149. data/lib/action_pack/version.rb +5 -7
  150. data/lib/action_pack.rb +1 -1
  151. metadata +181 -292
  152. data/lib/abstract_controller/layouts.rb +0 -423
  153. data/lib/abstract_controller/view_paths.rb +0 -96
  154. data/lib/action_controller/caching/actions.rb +0 -185
  155. data/lib/action_controller/caching/pages.rb +0 -187
  156. data/lib/action_controller/caching/sweeping.rb +0 -97
  157. data/lib/action_controller/deprecated/integration_test.rb +0 -2
  158. data/lib/action_controller/deprecated/performance_test.rb +0 -1
  159. data/lib/action_controller/deprecated.rb +0 -3
  160. data/lib/action_controller/metal/compatibility.rb +0 -65
  161. data/lib/action_controller/metal/responder.rb +0 -286
  162. data/lib/action_controller/metal/session_management.rb +0 -14
  163. data/lib/action_controller/railties/paths.rb +0 -25
  164. data/lib/action_controller/record_identifier.rb +0 -85
  165. data/lib/action_controller/vendor/html-scanner/html/document.rb +0 -68
  166. data/lib/action_controller/vendor/html-scanner/html/node.rb +0 -532
  167. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +0 -177
  168. data/lib/action_controller/vendor/html-scanner/html/selector.rb +0 -830
  169. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +0 -107
  170. data/lib/action_controller/vendor/html-scanner/html/version.rb +0 -11
  171. data/lib/action_controller/vendor/html-scanner.rb +0 -20
  172. data/lib/action_dispatch/middleware/best_standards_support.rb +0 -30
  173. data/lib/action_dispatch/middleware/body_proxy.rb +0 -30
  174. data/lib/action_dispatch/middleware/head.rb +0 -18
  175. data/lib/action_dispatch/middleware/rescue.rb +0 -26
  176. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +0 -31
  177. data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +0 -26
  178. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +0 -10
  179. data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +0 -2
  180. data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +0 -15
  181. data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +0 -17
  182. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +0 -2
  183. data/lib/action_dispatch/testing/performance_test.rb +0 -10
  184. data/lib/action_view/asset_paths.rb +0 -142
  185. data/lib/action_view/base.rb +0 -220
  186. data/lib/action_view/buffers.rb +0 -43
  187. data/lib/action_view/context.rb +0 -36
  188. data/lib/action_view/flows.rb +0 -79
  189. data/lib/action_view/helpers/active_model_helper.rb +0 -50
  190. data/lib/action_view/helpers/asset_paths.rb +0 -7
  191. data/lib/action_view/helpers/asset_tag_helper.rb +0 -457
  192. data/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +0 -146
  193. data/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb +0 -93
  194. data/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb +0 -193
  195. data/lib/action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers.rb +0 -148
  196. data/lib/action_view/helpers/atom_feed_helper.rb +0 -200
  197. data/lib/action_view/helpers/cache_helper.rb +0 -64
  198. data/lib/action_view/helpers/capture_helper.rb +0 -203
  199. data/lib/action_view/helpers/controller_helper.rb +0 -25
  200. data/lib/action_view/helpers/csrf_helper.rb +0 -32
  201. data/lib/action_view/helpers/date_helper.rb +0 -1062
  202. data/lib/action_view/helpers/debug_helper.rb +0 -40
  203. data/lib/action_view/helpers/form_helper.rb +0 -1486
  204. data/lib/action_view/helpers/form_options_helper.rb +0 -658
  205. data/lib/action_view/helpers/form_tag_helper.rb +0 -685
  206. data/lib/action_view/helpers/javascript_helper.rb +0 -110
  207. data/lib/action_view/helpers/number_helper.rb +0 -622
  208. data/lib/action_view/helpers/output_safety_helper.rb +0 -38
  209. data/lib/action_view/helpers/record_tag_helper.rb +0 -111
  210. data/lib/action_view/helpers/rendering_helper.rb +0 -90
  211. data/lib/action_view/helpers/sanitize_helper.rb +0 -259
  212. data/lib/action_view/helpers/tag_helper.rb +0 -160
  213. data/lib/action_view/helpers/text_helper.rb +0 -426
  214. data/lib/action_view/helpers/translation_helper.rb +0 -91
  215. data/lib/action_view/helpers/url_helper.rb +0 -693
  216. data/lib/action_view/helpers.rb +0 -60
  217. data/lib/action_view/locale/en.yml +0 -160
  218. data/lib/action_view/log_subscriber.rb +0 -28
  219. data/lib/action_view/lookup_context.rb +0 -254
  220. data/lib/action_view/path_set.rb +0 -89
  221. data/lib/action_view/railtie.rb +0 -55
  222. data/lib/action_view/renderer/abstract_renderer.rb +0 -41
  223. data/lib/action_view/renderer/partial_renderer.rb +0 -415
  224. data/lib/action_view/renderer/renderer.rb +0 -54
  225. data/lib/action_view/renderer/streaming_template_renderer.rb +0 -106
  226. data/lib/action_view/renderer/template_renderer.rb +0 -94
  227. data/lib/action_view/template/error.rb +0 -128
  228. data/lib/action_view/template/handlers/builder.rb +0 -26
  229. data/lib/action_view/template/handlers/erb.rb +0 -125
  230. data/lib/action_view/template/handlers.rb +0 -50
  231. data/lib/action_view/template/resolver.rb +0 -272
  232. data/lib/action_view/template/text.rb +0 -30
  233. data/lib/action_view/template.rb +0 -337
  234. data/lib/action_view/test_case.rb +0 -245
  235. data/lib/action_view/testing/resolvers.rb +0 -50
  236. data/lib/action_view.rb +0 -84
  237. data/lib/sprockets/assets.rake +0 -99
  238. data/lib/sprockets/bootstrap.rb +0 -37
  239. data/lib/sprockets/compressors.rb +0 -83
  240. data/lib/sprockets/helpers/isolated_helper.rb +0 -13
  241. data/lib/sprockets/helpers/rails_helper.rb +0 -182
  242. data/lib/sprockets/helpers.rb +0 -6
  243. data/lib/sprockets/railtie.rb +0 -62
  244. data/lib/sprockets/static_compiler.rb +0 -56
@@ -3,19 +3,51 @@ module ActionController #:nodoc:
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- delegate :flash, :to => :request
7
- delegate :alert, :notice, :to => "request.flash"
8
- helper_method :alert, :notice
6
+ class_attribute :_flash_types, instance_accessor: false
7
+ self._flash_types = []
8
+
9
+ delegate :flash, to: :request
10
+ add_flash_types(:alert, :notice)
9
11
  end
10
12
 
11
- protected
12
- def redirect_to(options = {}, response_status_and_flash = {}) #:doc:
13
- if alert = response_status_and_flash.delete(:alert)
14
- flash[:alert] = alert
13
+ module ClassMethods
14
+ # Creates new flash types. You can pass as many types as you want to create
15
+ # flash types other than the default <tt>alert</tt> and <tt>notice</tt> in
16
+ # your controllers and views. For instance:
17
+ #
18
+ # # in application_controller.rb
19
+ # class ApplicationController < ActionController::Base
20
+ # add_flash_types :warning
21
+ # end
22
+ #
23
+ # # in your controller
24
+ # redirect_to user_path(@user), warning: "Incomplete profile"
25
+ #
26
+ # # in your view
27
+ # <%= warning %>
28
+ #
29
+ # This method will automatically define a new method for each of the given
30
+ # names, and it will be available in your views.
31
+ def add_flash_types(*types)
32
+ types.each do |type|
33
+ next if _flash_types.include?(type)
34
+
35
+ define_method(type) do
36
+ request.flash[type]
37
+ end
38
+ helper_method type
39
+
40
+ self._flash_types += [type]
15
41
  end
42
+ end
43
+ end
16
44
 
17
- if notice = response_status_and_flash.delete(:notice)
18
- flash[:notice] = notice
45
+ protected
46
+ def redirect_to(options = {}, response_status_and_flash = {}) #:doc:
47
+ self.class._flash_types.each do |flash_type|
48
+ if type = response_status_and_flash.delete(flash_type)
49
+ flash[flash_type] = type
50
+ end
19
51
  end
20
52
 
21
53
  if other_flashes = response_status_and_flash.delete(:flash)
@@ -1,3 +1,6 @@
1
+ require 'active_support/core_ext/hash/except'
2
+ require 'active_support/core_ext/hash/slice'
3
+
1
4
  module ActionController
2
5
  # This module provides a method which will redirect browser to use HTTPS
3
6
  # protocol. This will ensure that user's sensitive information will be
@@ -14,26 +17,81 @@ module ActionController
14
17
  extend ActiveSupport::Concern
15
18
  include AbstractController::Callbacks
16
19
 
20
+ ACTION_OPTIONS = [:only, :except, :if, :unless]
21
+ URL_OPTIONS = [:protocol, :host, :domain, :subdomain, :port, :path]
22
+ REDIRECT_OPTIONS = [:status, :flash, :alert, :notice]
23
+
17
24
  module ClassMethods
18
25
  # Force the request to this particular controller or specified actions to be
19
26
  # under HTTPS protocol.
20
27
  #
21
- # Note that this method will not be effective on development environment.
28
+ # If you need to disable this for any reason (e.g. development) then you can use
29
+ # an +:if+ or +:unless+ condition.
30
+ #
31
+ # class AccountsController < ApplicationController
32
+ # force_ssl if: :ssl_configured?
33
+ #
34
+ # def ssl_configured?
35
+ # !Rails.env.development?
36
+ # end
37
+ # end
38
+ #
39
+ # ==== URL Options
40
+ # You can pass any of the following options to affect the redirect url
41
+ # * <tt>host</tt> - Redirect to a different host name
42
+ # * <tt>subdomain</tt> - Redirect to a different subdomain
43
+ # * <tt>domain</tt> - Redirect to a different domain
44
+ # * <tt>port</tt> - Redirect to a non-standard port
45
+ # * <tt>path</tt> - Redirect to a different path
46
+ #
47
+ # ==== Redirect Options
48
+ # You can pass any of the following options to affect the redirect status and response
49
+ # * <tt>status</tt> - Redirect with a custom status (default is 301 Moved Permanently)
50
+ # * <tt>flash</tt> - Set a flash message when redirecting
51
+ # * <tt>alert</tt> - Set an alert message when redirecting
52
+ # * <tt>notice</tt> - Set a notice message when redirecting
22
53
  #
23
- # ==== Options
24
- # * <tt>only</tt> - The callback should be run only for this action
25
- # * <tt>except</tt> - The callback should be run for all actions except this action
54
+ # ==== Action Options
55
+ # You can pass any of the following options to affect the before_action callback
56
+ # * <tt>only</tt> - The callback should be run only for this action
57
+ # * <tt>except</tt> - The callback should be run for all actions except this action
58
+ # * <tt>if</tt> - A symbol naming an instance method or a proc; the callback
59
+ # will be called only when it returns a true value.
60
+ # * <tt>unless</tt> - A symbol naming an instance method or a proc; the callback
61
+ # will be called only when it returns a false value.
26
62
  def force_ssl(options = {})
27
- host = options.delete(:host)
28
- before_filter(options) do
29
- if !request.ssl? && !Rails.env.development?
30
- redirect_options = {:protocol => 'https://', :status => :moved_permanently}
31
- redirect_options.merge!(:host => host) if host
32
- redirect_options.merge!(:params => request.query_parameters)
33
- redirect_to redirect_options
34
- end
63
+ action_options = options.slice(*ACTION_OPTIONS)
64
+ redirect_options = options.except(*ACTION_OPTIONS)
65
+ before_action(action_options) do
66
+ force_ssl_redirect(redirect_options)
35
67
  end
36
68
  end
37
69
  end
70
+
71
+ # Redirect the existing request to use the HTTPS protocol.
72
+ #
73
+ # ==== Parameters
74
+ # * <tt>host_or_options</tt> - Either a host name or any of the url & redirect options
75
+ # available to the <tt>force_ssl</tt> method.
76
+ def force_ssl_redirect(host_or_options = nil)
77
+ unless request.ssl?
78
+ options = {
79
+ :protocol => 'https://',
80
+ :host => request.host,
81
+ :path => request.fullpath,
82
+ :status => :moved_permanently
83
+ }
84
+
85
+ if host_or_options.is_a?(Hash)
86
+ options.merge!(host_or_options)
87
+ elsif host_or_options
88
+ options[:host] = host_or_options
89
+ end
90
+
91
+ secure_url = ActionDispatch::Http::URL.url_for(options.slice(*URL_OPTIONS))
92
+ flash.keep if respond_to?(:flash)
93
+ redirect_to secure_url, options.slice(*REDIRECT_OPTIONS)
94
+ end
95
+ end
38
96
  end
39
97
  end
@@ -1,21 +1,21 @@
1
1
  module ActionController
2
2
  module Head
3
- extend ActiveSupport::Concern
4
-
5
- # Return a response that has no content (merely headers). The options
3
+ # Returns a response that has no content (merely headers). The options
6
4
  # argument is interpreted to be a hash of header names and values.
7
5
  # This allows you to easily return a response that consists only of
8
6
  # significant headers:
9
7
  #
10
- # head :created, :location => person_path(@person)
8
+ # head :created, location: person_path(@person)
11
9
  #
12
- # head :created, :location => @person
10
+ # head :created, location: @person
13
11
  #
14
12
  # It can also be used to return exceptional conditions:
15
13
  #
16
14
  # return head(:method_not_allowed) unless request.post?
17
15
  # return head(:bad_request) unless valid_request?
18
16
  # render
17
+ #
18
+ # See Rack::Utils::SYMBOL_TO_STATUS_CODE for a full list of valid +status+ symbols.
19
19
  def head(status, options = {})
20
20
  options, status = status, nil if status.is_a?(Hash)
21
21
  status ||= options.delete(:status) || :ok
@@ -28,8 +28,31 @@ module ActionController
28
28
 
29
29
  self.status = status
30
30
  self.location = url_for(location) if location
31
- self.content_type = content_type || (Mime[formats.first] if formats)
32
- self.response_body = " "
31
+
32
+ self.response_body = ""
33
+
34
+ if include_content?(self.response_code)
35
+ self.content_type = content_type || (Mime[formats.first] if formats)
36
+ self.response.charset = false if self.response
37
+ else
38
+ headers.delete('Content-Type')
39
+ headers.delete('Content-Length')
40
+ end
41
+
42
+ true
43
+ end
44
+
45
+ private
46
+ # :nodoc:
47
+ def include_content?(status)
48
+ case status
49
+ when 100..199
50
+ false
51
+ when 204, 205, 304
52
+ false
53
+ else
54
+ true
55
+ end
33
56
  end
34
57
  end
35
58
  end
@@ -1,6 +1,3 @@
1
- require 'active_support/core_ext/array/wrap'
2
- require 'active_support/core_ext/class/attribute'
3
-
4
1
  module ActionController
5
2
  # The \Rails framework provides a large number of helpers for working with assets, dates, forms,
6
3
  # numbers and model objects, to name a few. These helpers are available to all templates
@@ -8,7 +5,7 @@ module ActionController
8
5
  #
9
6
  # In addition to using the standard template helpers provided, creating custom helpers to
10
7
  # extract complicated logic or reusable functionality is strongly encouraged. By default, each controller
11
- # will include all helpers.
8
+ # will include all helpers. These helpers are only accessible on the controller through <tt>.helpers</tt>
12
9
  #
13
10
  # In previous versions of \Rails the controller will include a helper whose
14
11
  # name matches that of the controller, e.g., <tt>MyController</tt> will automatically
@@ -17,7 +14,6 @@ module ActionController
17
14
  # Additional helpers can be specified using the +helper+ class method in ActionController::Base or any
18
15
  # controller which inherits from it.
19
16
  #
20
- # ==== Examples
21
17
  # The +to_s+ method from the \Time class can be wrapped in a helper method to display a custom message if
22
18
  # a \Time object is blank:
23
19
  #
@@ -53,6 +49,7 @@ module ActionController
53
49
  module Helpers
54
50
  extend ActiveSupport::Concern
55
51
 
52
+ class << self; attr_accessor :helpers_path; end
56
53
  include AbstractController::Helpers
57
54
 
58
55
  included do
@@ -76,7 +73,11 @@ module ActionController
76
73
 
77
74
  # Provides a proxy to access helpers methods from outside the view.
78
75
  def helpers
79
- @helper_proxy ||= ActionView::Base.new.extend(_helpers)
76
+ @helper_proxy ||= begin
77
+ proxy = ActionView::Base.new
78
+ proxy.config = config.inheritable_copy
79
+ proxy.extend(_helpers)
80
+ end
80
81
  end
81
82
 
82
83
  # Overwrite modules_for_helpers to accept :all as argument, which loads
@@ -93,12 +94,11 @@ module ActionController
93
94
  end
94
95
 
95
96
  def all_helpers_from_path(path)
96
- helpers = []
97
- Array.wrap(path).each do |_path|
98
- extract = /^#{Regexp.quote(_path.to_s)}\/?(.*)_helper.rb$/
99
- helpers += Dir["#{_path}/**/*_helper.rb"].map { |file| file.sub(extract, '\1') }
97
+ helpers = Array(path).flat_map do |_path|
98
+ extract = /^#{Regexp.quote(_path.to_s)}\/?(.*)_helper.rb$/
99
+ names = Dir["#{_path}/**/*_helper.rb"].map { |file| file.sub(extract, '\1') }
100
+ names.sort!
100
101
  end
101
- helpers.sort!
102
102
  helpers.uniq!
103
103
  helpers
104
104
  end
@@ -1,4 +1,3 @@
1
- require 'active_support/core_ext/class/attribute'
2
1
 
3
2
  module ActionController
4
3
  # Adds the ability to prevent public methods on a controller to be called as actions.