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
@@ -1,47 +1,49 @@
1
- # Includes +url_for+ into the host class. The class has to provide a +RouteSet+ by implementing
2
- # the <tt>_routes</tt> method. Otherwise, an exception will be raised.
3
- #
4
- # In addition to <tt>AbstractController::UrlFor</tt>, this module accesses the HTTP layer to define
5
- # url options like the +host+. In order to do so, this module requires the host class
6
- # to implement +env+ and +request+, which need to be a Rack-compatible.
7
- #
8
- # Example:
9
- #
10
- # class RootUrl
11
- # include ActionController::UrlFor
12
- # include Rails.application.routes.url_helpers
13
- #
14
- # delegate :env, :request, :to => :controller
15
- #
16
- # def initialize(controller)
17
- # @controller = controller
18
- # @url = root_path # named route from the application.
19
- # end
20
- # end
21
- #
22
1
  module ActionController
2
+ # Includes +url_for+ into the host class. The class has to provide a +RouteSet+ by implementing
3
+ # the <tt>_routes</tt> method. Otherwise, an exception will be raised.
4
+ #
5
+ # In addition to <tt>AbstractController::UrlFor</tt>, this module accesses the HTTP layer to define
6
+ # url options like the +host+. In order to do so, this module requires the host class
7
+ # to implement +env+ and +request+, which need to be a Rack-compatible.
8
+ #
9
+ # class RootUrl
10
+ # include ActionController::UrlFor
11
+ # include Rails.application.routes.url_helpers
12
+ #
13
+ # delegate :env, :request, to: :controller
14
+ #
15
+ # def initialize(controller)
16
+ # @controller = controller
17
+ # @url = root_path # named route from the application.
18
+ # end
19
+ # end
23
20
  module UrlFor
24
21
  extend ActiveSupport::Concern
25
22
 
26
23
  include AbstractController::UrlFor
27
24
 
28
25
  def url_options
29
- @_url_options ||= super.reverse_merge(
26
+ @_url_options ||= {
30
27
  :host => request.host,
31
28
  :port => request.optional_port,
32
29
  :protocol => request.protocol,
33
- :_path_segments => request.symbolized_path_parameters
34
- ).freeze
30
+ :_recall => request.path_parameters
31
+ }.merge!(super).freeze
35
32
 
36
- if _routes.equal?(env["action_dispatch.routes"])
37
- @_url_options.dup.tap do |options|
38
- options[:script_name] = request.script_name.dup
39
- options.freeze
33
+ if (same_origin = _routes.equal?(env["action_dispatch.routes".freeze])) ||
34
+ (script_name = env["ROUTES_#{_routes.object_id}_SCRIPT_NAME"]) ||
35
+ (original_script_name = env['ORIGINAL_SCRIPT_NAME'.freeze])
36
+
37
+ options = @_url_options.dup
38
+ if original_script_name
39
+ options[:original_script_name] = original_script_name
40
+ else
41
+ options[:script_name] = same_origin ? request.script_name.dup : script_name
40
42
  end
43
+ options.freeze
41
44
  else
42
45
  @_url_options
43
46
  end
44
47
  end
45
-
46
48
  end
47
49
  end
@@ -1,5 +1,4 @@
1
- require 'active_support/core_ext/class/attribute'
2
- require 'active_support/core_ext/object/blank'
1
+ require 'active_support/core_ext/array/extract_options'
3
2
  require 'action_dispatch/middleware/stack'
4
3
 
5
4
  module ActionController
@@ -7,7 +6,7 @@ module ActionController
7
6
  # allowing the following syntax in controllers:
8
7
  #
9
8
  # class PostsController < ApplicationController
10
- # use AuthenticationMiddleware, :except => [:index, :show]
9
+ # use AuthenticationMiddleware, except: [:index, :show]
11
10
  # end
12
11
  #
13
12
  class MiddlewareStack < ActionDispatch::MiddlewareStack #:nodoc:
@@ -31,14 +30,11 @@ module ActionController
31
30
  end
32
31
  end
33
32
 
34
- def build(action, app=nil, &block)
35
- app ||= block
33
+ def build(action, app = Proc.new)
36
34
  action = action.to_s
37
- raise "MiddlewareStack#build requires an app" unless app
38
35
 
39
36
  middlewares.reverse.inject(app) do |a, middleware|
40
- middleware.valid?(action) ?
41
- middleware.build(a) : a
37
+ middleware.valid?(action) ? middleware.build(a) : a
42
38
  end
43
39
  end
44
40
  end
@@ -58,7 +54,7 @@ module ActionController
58
54
  # And then to route requests to your metal controller, you would add
59
55
  # something like this to <tt>config/routes.rb</tt>:
60
56
  #
61
- # match 'hello', :to => HelloController.action(:index)
57
+ # get 'hello', to: HelloController.action(:index)
62
58
  #
63
59
  # The +action+ method returns a valid Rack application for the \Rails
64
60
  # router to dispatch to.
@@ -72,7 +68,8 @@ module ActionController
72
68
  # can do the following:
73
69
  #
74
70
  # class HelloController < ActionController::Metal
75
- # include ActionController::Rendering
71
+ # include AbstractController::Rendering
72
+ # include ActionView::Layouts
76
73
  # append_view_path "#{Rails.root}/app/views"
77
74
  #
78
75
  # def index
@@ -114,7 +111,7 @@ module ActionController
114
111
  # ==== Returns
115
112
  # * <tt>string</tt>
116
113
  def self.controller_name
117
- @controller_name ||= self.name.demodulize.sub(/Controller$/, '').underscore
114
+ @controller_name ||= name.demodulize.sub(/Controller$/, '').underscore
118
115
  end
119
116
 
120
117
  # Delegates to the class' <tt>controller_name</tt>
@@ -168,7 +165,7 @@ module ActionController
168
165
  headers["Location"] = url
169
166
  end
170
167
 
171
- # basic url_for that can be overridden for more robust functionality
168
+ # Basic url_for that can be overridden for more robust functionality
172
169
  def url_for(string)
173
170
  string
174
171
  end
@@ -176,24 +173,20 @@ module ActionController
176
173
  def status
177
174
  @_status
178
175
  end
176
+ alias :response_code :status # :nodoc:
179
177
 
180
178
  def status=(status)
181
179
  @_status = Rack::Utils.status_code(status)
182
180
  end
183
181
 
184
- def response_body=(val)
185
- body = if val.is_a?(String)
186
- [val]
187
- elsif val.nil? || val.respond_to?(:each)
188
- val
189
- else
190
- [val]
191
- end
192
- super body
182
+ def response_body=(body)
183
+ body = [body] unless body.nil? || body.respond_to?(:each)
184
+ super
193
185
  end
194
186
 
187
+ # Tests if render or redirect has already happened.
195
188
  def performed?
196
- response_body
189
+ response_body || (response && response.committed?)
197
190
  end
198
191
 
199
192
  def dispatch(name, request) #:nodoc:
@@ -211,39 +204,37 @@ module ActionController
211
204
  class_attribute :middleware_stack
212
205
  self.middleware_stack = ActionController::MiddlewareStack.new
213
206
 
214
- def self.inherited(base) #nodoc:
215
- base.middleware_stack = self.middleware_stack.dup
207
+ def self.inherited(base) # :nodoc:
208
+ base.middleware_stack = middleware_stack.dup
216
209
  super
217
210
  end
218
211
 
219
- # Adds given middleware class and its args to bottom of middleware_stack
212
+ # Pushes the given Rack middleware and its arguments to the bottom of the
213
+ # middleware stack.
220
214
  def self.use(*args, &block)
221
215
  middleware_stack.use(*args, &block)
222
216
  end
223
217
 
224
- # Alias for middleware_stack
218
+ # Alias for +middleware_stack+.
225
219
  def self.middleware
226
220
  middleware_stack
227
221
  end
228
222
 
229
- # Makes the controller a rack endpoint that points to the action in
230
- # the given env's action_dispatch.request.path_parameters key.
223
+ # Makes the controller a Rack endpoint that runs the action in the given
224
+ # +env+'s +action_dispatch.request.path_parameters+ key.
231
225
  def self.call(env)
232
- action(env['action_dispatch.request.path_parameters'][:action]).call(env)
226
+ req = ActionDispatch::Request.new env
227
+ action(req.path_parameters[:action]).call(env)
233
228
  end
234
229
 
235
- # Return a rack endpoint for the given action. Memoize the endpoint, so
236
- # multiple calls into MyController.action will return the same object
237
- # for the same action.
238
- #
239
- # ==== Parameters
240
- # * <tt>action</tt> - An action name
241
- #
242
- # ==== Returns
243
- # * <tt>proc</tt> - A rack application
230
+ # Returns a Rack endpoint for the given action name.
244
231
  def self.action(name, klass = ActionDispatch::Request)
245
- middleware_stack.build(name.to_s) do |env|
246
- new.dispatch(name, klass.new(env))
232
+ if middleware_stack.any?
233
+ middleware_stack.build(name) do |env|
234
+ new.dispatch(name, klass.new(env))
235
+ end
236
+ else
237
+ lambda { |env| new.dispatch(name, klass.new(env)) }
247
238
  end
248
239
  end
249
240
  end
@@ -0,0 +1,12 @@
1
+ module ActionController
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
+ convert_to_model(record_or_class).model_name
10
+ end
11
+ end
12
+ end
@@ -1,44 +1,64 @@
1
1
  require "rails"
2
2
  require "action_controller"
3
3
  require "action_dispatch/railtie"
4
- require "action_view/railtie"
5
4
  require "abstract_controller/railties/routes_helpers"
6
- require "action_controller/railties/paths"
5
+ require "action_controller/railties/helpers"
6
+ require "action_view/railtie"
7
7
 
8
8
  module ActionController
9
- class Railtie < Rails::Railtie
9
+ class Railtie < Rails::Railtie #:nodoc:
10
10
  config.action_controller = ActiveSupport::OrderedOptions.new
11
11
 
12
- initializer "action_controller.logger" do
13
- ActiveSupport.on_load(:action_controller) { self.logger ||= Rails.logger }
12
+ config.eager_load_namespaces << ActionController
13
+
14
+ initializer "action_controller.assets_config", :group => :all do |app|
15
+ app.config.action_controller.assets_dir ||= app.config.paths["public"].first
14
16
  end
15
17
 
16
- initializer "action_controller.initialize_framework_caches" do
17
- ActiveSupport.on_load(:action_controller) { self.cache_store ||= RAILS_CACHE }
18
+ initializer "action_controller.set_helpers_path" do |app|
19
+ ActionController::Helpers.helpers_path = app.helpers_paths
18
20
  end
19
21
 
20
- initializer "action_controller.assets_config", :group => :all do |app|
21
- app.config.action_controller.assets_dir ||= app.config.paths["public"].first
22
+ initializer "action_controller.parameters_config" do |app|
23
+ options = app.config.action_controller
24
+
25
+ ActionController::Parameters.permit_all_parameters = options.delete(:permit_all_parameters) { false }
26
+ if app.config.action_controller[:always_permitted_parameters]
27
+ ActionController::Parameters.always_permitted_parameters =
28
+ app.config.action_controller.delete(:always_permitted_parameters)
29
+ end
30
+ ActionController::Parameters.action_on_unpermitted_parameters = options.delete(:action_on_unpermitted_parameters) do
31
+ (Rails.env.test? || Rails.env.development?) ? :log : false
32
+ end
22
33
  end
23
34
 
24
35
  initializer "action_controller.set_configs" do |app|
25
36
  paths = app.config.paths
26
37
  options = app.config.action_controller
27
38
 
28
- options.javascripts_dir ||= paths["public/javascripts"].first
29
- options.stylesheets_dir ||= paths["public/stylesheets"].first
30
- options.page_cache_directory ||= paths["public"].first
39
+ options.logger ||= Rails.logger
40
+ options.cache_store ||= Rails.cache
41
+
42
+ options.javascripts_dir ||= paths["public/javascripts"].first
43
+ options.stylesheets_dir ||= paths["public/stylesheets"].first
31
44
 
32
- # make sure readers methods get compiled
33
- options.asset_path ||= app.config.asset_path
34
- options.asset_host ||= app.config.asset_host
35
- options.relative_url_root ||= app.config.relative_url_root
45
+ # Ensure readers methods get compiled
46
+ options.asset_host ||= app.config.asset_host
47
+ options.relative_url_root ||= app.config.relative_url_root
36
48
 
37
49
  ActiveSupport.on_load(:action_controller) do
38
50
  include app.routes.mounted_helpers
39
51
  extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
40
- extend ::ActionController::Railties::Paths.with(app)
41
- options.each { |k,v| send("#{k}=", v) }
52
+ extend ::ActionController::Railties::Helpers
53
+
54
+ options.each do |k,v|
55
+ k = "#{k}="
56
+ if respond_to?(k)
57
+ send(k, v)
58
+ elsif !Base.respond_to?(k)
59
+ raise "Invalid option key: #{k}"
60
+ end
61
+ end
42
62
  end
43
63
  end
44
64
 
@@ -0,0 +1,22 @@
1
+ module ActionController
2
+ module Railties
3
+ module Helpers
4
+ def inherited(klass)
5
+ super
6
+ return unless klass.respond_to?(:helpers_path=)
7
+
8
+ if namespace = klass.parents.detect { |m| m.respond_to?(:railtie_helpers_paths) }
9
+ paths = namespace.railtie_helpers_paths
10
+ else
11
+ paths = ActionController::Helpers.helpers_path
12
+ end
13
+
14
+ klass.helpers_path = paths
15
+
16
+ if klass.superclass == ActionController::Base && ActionController::Base.include_all_helpers
17
+ klass.helper :all
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end