actionpack 4.0.13 → 4.1.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 (194) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +131 -1636
  3. data/README.rdoc +1 -6
  4. data/lib/abstract_controller.rb +1 -2
  5. data/lib/abstract_controller/base.rb +3 -25
  6. data/lib/abstract_controller/callbacks.rb +4 -2
  7. data/lib/abstract_controller/collector.rb +11 -1
  8. data/lib/abstract_controller/helpers.rb +18 -15
  9. data/lib/abstract_controller/rendering.rb +48 -127
  10. data/lib/action_controller.rb +1 -17
  11. data/lib/action_controller/base.rb +14 -6
  12. data/lib/action_controller/caching.rb +1 -11
  13. data/lib/action_controller/log_subscriber.rb +1 -1
  14. data/lib/action_controller/metal.rb +0 -4
  15. data/lib/action_controller/metal/flash.rb +17 -0
  16. data/lib/action_controller/metal/force_ssl.rb +1 -1
  17. data/lib/action_controller/metal/head.rb +1 -3
  18. data/lib/action_controller/metal/helpers.rb +6 -2
  19. data/lib/action_controller/metal/http_authentication.rb +7 -14
  20. data/lib/action_controller/metal/instrumentation.rb +1 -1
  21. data/lib/action_controller/metal/live.rb +74 -0
  22. data/lib/action_controller/metal/mime_responds.rb +93 -16
  23. data/lib/action_controller/metal/params_wrapper.rb +4 -11
  24. data/lib/action_controller/metal/rack_delegation.rb +1 -1
  25. data/lib/action_controller/metal/redirecting.rb +20 -20
  26. data/lib/action_controller/metal/renderers.rb +8 -5
  27. data/lib/action_controller/metal/rendering.rb +14 -11
  28. data/lib/action_controller/metal/request_forgery_protection.rb +67 -13
  29. data/lib/action_controller/metal/responder.rb +12 -2
  30. data/lib/action_controller/metal/streaming.rb +18 -20
  31. data/lib/action_controller/metal/strong_parameters.rb +22 -34
  32. data/lib/action_controller/railtie.rb +0 -1
  33. data/lib/action_controller/test_case.rb +0 -15
  34. data/lib/action_dispatch.rb +1 -0
  35. data/lib/action_dispatch/http/headers.rb +1 -3
  36. data/lib/action_dispatch/http/mime_negotiation.rb +16 -2
  37. data/lib/action_dispatch/http/mime_type.rb +4 -22
  38. data/lib/action_dispatch/http/mime_types.rb +1 -0
  39. data/lib/action_dispatch/http/parameters.rb +18 -19
  40. data/lib/action_dispatch/http/request.rb +16 -25
  41. data/lib/action_dispatch/http/response.rb +21 -8
  42. data/lib/action_dispatch/http/upload.rb +0 -13
  43. data/lib/action_dispatch/http/url.rb +10 -18
  44. data/lib/action_dispatch/journey/formatter.rb +3 -3
  45. data/lib/action_dispatch/journey/gtg/transition_table.rb +3 -5
  46. data/lib/action_dispatch/journey/parser.rb +1 -1
  47. data/lib/action_dispatch/journey/parser.y +1 -0
  48. data/lib/action_dispatch/journey/router.rb +7 -1
  49. data/lib/action_dispatch/journey/router/utils.rb +1 -1
  50. data/lib/action_dispatch/journey/visitors.rb +26 -47
  51. data/lib/action_dispatch/middleware/callbacks.rb +6 -6
  52. data/lib/action_dispatch/middleware/cookies.rb +15 -15
  53. data/lib/action_dispatch/middleware/debug_exceptions.rb +21 -13
  54. data/lib/action_dispatch/middleware/exception_wrapper.rb +1 -1
  55. data/lib/action_dispatch/middleware/flash.rb +5 -11
  56. data/lib/action_dispatch/middleware/params_parser.rb +1 -1
  57. data/lib/action_dispatch/middleware/public_exceptions.rb +1 -5
  58. data/lib/action_dispatch/middleware/session/cache_store.rb +3 -3
  59. data/lib/action_dispatch/middleware/session/cookie_store.rb +4 -3
  60. data/lib/action_dispatch/middleware/show_exceptions.rb +5 -2
  61. data/lib/action_dispatch/middleware/ssl.rb +1 -1
  62. data/lib/action_dispatch/middleware/static.rb +5 -25
  63. data/lib/action_dispatch/middleware/templates/rescues/{_request_and_response.erb → _request_and_response.html.erb} +0 -0
  64. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  65. data/lib/action_dispatch/middleware/templates/rescues/{_trace.erb → _trace.html.erb} +0 -0
  66. data/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +15 -0
  67. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +1 -1
  68. data/lib/action_dispatch/middleware/templates/rescues/{missing_template.erb → missing_template.html.erb} +1 -1
  69. data/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  70. data/lib/action_dispatch/middleware/templates/rescues/{routing_error.erb → routing_error.html.erb} +1 -1
  71. data/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  72. data/lib/action_dispatch/middleware/templates/rescues/{template_error.erb → template_error.html.erb} +1 -1
  73. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +8 -0
  74. data/lib/action_dispatch/middleware/templates/rescues/{unknown_action.erb → unknown_action.html.erb} +1 -1
  75. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  76. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +3 -3
  77. data/lib/action_dispatch/railtie.rb +1 -2
  78. data/lib/action_dispatch/request/session.rb +12 -0
  79. data/lib/action_dispatch/request/utils.rb +24 -0
  80. data/lib/action_dispatch/routing.rb +7 -6
  81. data/lib/action_dispatch/routing/inspector.rb +4 -4
  82. data/lib/action_dispatch/routing/mapper.rb +81 -138
  83. data/lib/action_dispatch/routing/polymorphic_routes.rb +13 -0
  84. data/lib/action_dispatch/routing/redirection.rb +34 -27
  85. data/lib/action_dispatch/routing/route_set.rb +43 -37
  86. data/lib/action_dispatch/routing/url_for.rb +3 -1
  87. data/lib/action_dispatch/testing/assertions/response.rb +8 -15
  88. data/lib/action_dispatch/testing/assertions/selector.rb +4 -4
  89. data/lib/action_dispatch/testing/integration.rb +1 -7
  90. data/lib/action_pack/version.rb +1 -1
  91. metadata +43 -167
  92. data/lib/abstract_controller/layouts.rb +0 -423
  93. data/lib/abstract_controller/view_paths.rb +0 -96
  94. data/lib/action_controller/deprecated.rb +0 -7
  95. data/lib/action_controller/deprecated/integration_test.rb +0 -5
  96. data/lib/action_controller/record_identifier.rb +0 -31
  97. data/lib/action_controller/vendor/html-scanner.rb +0 -5
  98. data/lib/action_view.rb +0 -93
  99. data/lib/action_view/base.rb +0 -205
  100. data/lib/action_view/buffers.rb +0 -49
  101. data/lib/action_view/context.rb +0 -36
  102. data/lib/action_view/dependency_tracker.rb +0 -93
  103. data/lib/action_view/digestor.rb +0 -113
  104. data/lib/action_view/flows.rb +0 -76
  105. data/lib/action_view/helpers.rb +0 -58
  106. data/lib/action_view/helpers/active_model_helper.rb +0 -49
  107. data/lib/action_view/helpers/asset_tag_helper.rb +0 -320
  108. data/lib/action_view/helpers/asset_url_helper.rb +0 -355
  109. data/lib/action_view/helpers/atom_feed_helper.rb +0 -203
  110. data/lib/action_view/helpers/cache_helper.rb +0 -196
  111. data/lib/action_view/helpers/capture_helper.rb +0 -216
  112. data/lib/action_view/helpers/controller_helper.rb +0 -25
  113. data/lib/action_view/helpers/csrf_helper.rb +0 -32
  114. data/lib/action_view/helpers/date_helper.rb +0 -1087
  115. data/lib/action_view/helpers/debug_helper.rb +0 -39
  116. data/lib/action_view/helpers/form_helper.rb +0 -1882
  117. data/lib/action_view/helpers/form_options_helper.rb +0 -838
  118. data/lib/action_view/helpers/form_tag_helper.rb +0 -785
  119. data/lib/action_view/helpers/javascript_helper.rb +0 -117
  120. data/lib/action_view/helpers/number_helper.rb +0 -451
  121. data/lib/action_view/helpers/output_safety_helper.rb +0 -38
  122. data/lib/action_view/helpers/record_tag_helper.rb +0 -106
  123. data/lib/action_view/helpers/rendering_helper.rb +0 -90
  124. data/lib/action_view/helpers/sanitize_helper.rb +0 -256
  125. data/lib/action_view/helpers/tag_helper.rb +0 -173
  126. data/lib/action_view/helpers/tags.rb +0 -39
  127. data/lib/action_view/helpers/tags/base.rb +0 -148
  128. data/lib/action_view/helpers/tags/check_box.rb +0 -64
  129. data/lib/action_view/helpers/tags/checkable.rb +0 -16
  130. data/lib/action_view/helpers/tags/collection_check_boxes.rb +0 -53
  131. data/lib/action_view/helpers/tags/collection_helpers.rb +0 -84
  132. data/lib/action_view/helpers/tags/collection_radio_buttons.rb +0 -36
  133. data/lib/action_view/helpers/tags/collection_select.rb +0 -28
  134. data/lib/action_view/helpers/tags/color_field.rb +0 -25
  135. data/lib/action_view/helpers/tags/date_field.rb +0 -13
  136. data/lib/action_view/helpers/tags/date_select.rb +0 -72
  137. data/lib/action_view/helpers/tags/datetime_field.rb +0 -22
  138. data/lib/action_view/helpers/tags/datetime_local_field.rb +0 -19
  139. data/lib/action_view/helpers/tags/datetime_select.rb +0 -8
  140. data/lib/action_view/helpers/tags/email_field.rb +0 -8
  141. data/lib/action_view/helpers/tags/file_field.rb +0 -8
  142. data/lib/action_view/helpers/tags/grouped_collection_select.rb +0 -29
  143. data/lib/action_view/helpers/tags/hidden_field.rb +0 -8
  144. data/lib/action_view/helpers/tags/label.rb +0 -65
  145. data/lib/action_view/helpers/tags/month_field.rb +0 -13
  146. data/lib/action_view/helpers/tags/number_field.rb +0 -18
  147. data/lib/action_view/helpers/tags/password_field.rb +0 -12
  148. data/lib/action_view/helpers/tags/radio_button.rb +0 -31
  149. data/lib/action_view/helpers/tags/range_field.rb +0 -8
  150. data/lib/action_view/helpers/tags/search_field.rb +0 -22
  151. data/lib/action_view/helpers/tags/select.rb +0 -40
  152. data/lib/action_view/helpers/tags/tel_field.rb +0 -8
  153. data/lib/action_view/helpers/tags/text_area.rb +0 -18
  154. data/lib/action_view/helpers/tags/text_field.rb +0 -30
  155. data/lib/action_view/helpers/tags/time_field.rb +0 -13
  156. data/lib/action_view/helpers/tags/time_select.rb +0 -8
  157. data/lib/action_view/helpers/tags/time_zone_select.rb +0 -20
  158. data/lib/action_view/helpers/tags/url_field.rb +0 -8
  159. data/lib/action_view/helpers/tags/week_field.rb +0 -13
  160. data/lib/action_view/helpers/text_helper.rb +0 -448
  161. data/lib/action_view/helpers/translation_helper.rb +0 -112
  162. data/lib/action_view/helpers/url_helper.rb +0 -635
  163. data/lib/action_view/locale/en.yml +0 -56
  164. data/lib/action_view/log_subscriber.rb +0 -30
  165. data/lib/action_view/lookup_context.rb +0 -248
  166. data/lib/action_view/model_naming.rb +0 -12
  167. data/lib/action_view/path_set.rb +0 -77
  168. data/lib/action_view/railtie.rb +0 -43
  169. data/lib/action_view/record_identifier.rb +0 -84
  170. data/lib/action_view/renderer/abstract_renderer.rb +0 -47
  171. data/lib/action_view/renderer/partial_renderer.rb +0 -500
  172. data/lib/action_view/renderer/renderer.rb +0 -50
  173. data/lib/action_view/renderer/streaming_template_renderer.rb +0 -103
  174. data/lib/action_view/renderer/template_renderer.rb +0 -96
  175. data/lib/action_view/routing_url_for.rb +0 -107
  176. data/lib/action_view/tasks/dependencies.rake +0 -17
  177. data/lib/action_view/template.rb +0 -339
  178. data/lib/action_view/template/error.rb +0 -138
  179. data/lib/action_view/template/handlers.rb +0 -53
  180. data/lib/action_view/template/handlers/builder.rb +0 -26
  181. data/lib/action_view/template/handlers/erb.rb +0 -146
  182. data/lib/action_view/template/handlers/raw.rb +0 -11
  183. data/lib/action_view/template/resolver.rb +0 -340
  184. data/lib/action_view/template/text.rb +0 -34
  185. data/lib/action_view/template/types.rb +0 -57
  186. data/lib/action_view/test_case.rb +0 -270
  187. data/lib/action_view/testing/resolvers.rb +0 -50
  188. data/lib/action_view/vendor/html-scanner.rb +0 -20
  189. data/lib/action_view/vendor/html-scanner/html/document.rb +0 -68
  190. data/lib/action_view/vendor/html-scanner/html/node.rb +0 -532
  191. data/lib/action_view/vendor/html-scanner/html/sanitizer.rb +0 -188
  192. data/lib/action_view/vendor/html-scanner/html/selector.rb +0 -830
  193. data/lib/action_view/vendor/html-scanner/html/tokenizer.rb +0 -107
  194. data/lib/action_view/vendor/html-scanner/html/version.rb +0 -11
@@ -74,6 +74,19 @@ module ActionDispatch
74
74
  # * <tt>:routing_type</tt> - Allowed values are <tt>:path</tt> or <tt>:url</tt>.
75
75
  # Default is <tt>:url</tt>.
76
76
  #
77
+ # Also includes all the options from <tt>url_for</tt>. These include such
78
+ # things as <tt>:anchor</tt> or <tt>:trailing_slash</tt>. Example usage
79
+ # is given below:
80
+ #
81
+ # polymorphic_url([blog, post], anchor: 'my_anchor')
82
+ # # => "http://example.com/blogs/1/posts/1#my_anchor"
83
+ # polymorphic_url([blog, post], anchor: 'my_anchor', script_name: "/my_app")
84
+ # # => "http://example.com/my_app/blogs/1/posts/1#my_anchor"
85
+ #
86
+ # For all of these options, see the documentation for <tt>url_for</tt>.
87
+ #
88
+ # ==== Functionality
89
+ #
77
90
  # # an Article record
78
91
  # polymorphic_url(record) # same as article_url(record)
79
92
  #
@@ -17,7 +17,7 @@ module ActionDispatch
17
17
  def call(env)
18
18
  req = Request.new(env)
19
19
 
20
- # If any of the path parameters has a invalid encoding then
20
+ # If any of the path parameters has an invalid encoding then
21
21
  # raise since it's likely to trigger errors further on.
22
22
  req.symbolized_path_parameters.each do |key, value|
23
23
  unless value.valid_encoding?
@@ -26,19 +26,14 @@ module ActionDispatch
26
26
  end
27
27
 
28
28
  uri = URI.parse(path(req.symbolized_path_parameters, req))
29
-
30
- unless uri.host
31
- if relative_path?(uri.path)
32
- uri.path = "#{req.script_name}/#{uri.path}"
33
- elsif uri.path.empty?
34
- uri.path = req.script_name.empty? ? "/" : req.script_name
35
- end
36
- end
37
-
38
29
  uri.scheme ||= req.scheme
39
30
  uri.host ||= req.host
40
31
  uri.port ||= req.port unless req.standard_port?
41
32
 
33
+ if relative_path?(uri.path)
34
+ uri.path = "#{req.script_name}/#{uri.path}"
35
+ end
36
+
42
37
  body = %(<html><body>You are being <a href="#{ERB::Util.h(uri.to_s)}">redirected</a>.</body></html>)
43
38
 
44
39
  headers = {
@@ -62,11 +57,33 @@ module ActionDispatch
62
57
  def relative_path?(path)
63
58
  path && !path.empty? && path[0] != '/'
64
59
  end
60
+
61
+ def escape(params)
62
+ Hash[params.map{ |k,v| [k, Rack::Utils.escape(v)] }]
63
+ end
64
+
65
+ def escape_fragment(params)
66
+ Hash[params.map{ |k,v| [k, Journey::Router::Utils.escape_fragment(v)] }]
67
+ end
68
+
69
+ def escape_path(params)
70
+ Hash[params.map{ |k,v| [k, Journey::Router::Utils.escape_path(v)] }]
71
+ end
65
72
  end
66
73
 
67
74
  class PathRedirect < Redirect
75
+ URL_PARTS = /\A([^?]+)?(\?[^#]+)?(#.+)?\z/
76
+
68
77
  def path(params, request)
69
- (params.empty? || !block.match(/%\{\w*\}/)) ? block : (block % escape(params))
78
+ if block.match(URL_PARTS)
79
+ path = interpolation_required?($1, params) ? $1 % escape_path(params) : $1
80
+ query = interpolation_required?($2, params) ? $2 % escape(params) : $2
81
+ fragment = interpolation_required?($3, params) ? $3 % escape_fragment(params) : $3
82
+
83
+ "#{path}#{query}#{fragment}"
84
+ else
85
+ interpolation_required?(block, params) ? block % escape(params) : block
86
+ end
70
87
  end
71
88
 
72
89
  def inspect
@@ -74,8 +91,8 @@ module ActionDispatch
74
91
  end
75
92
 
76
93
  private
77
- def escape(params)
78
- Hash[params.map{ |k,v| [k, Rack::Utils.escape(v)] }]
94
+ def interpolation_required?(string, params)
95
+ !params.empty? && string && string.match(/%\{\w*\}/)
79
96
  end
80
97
  end
81
98
 
@@ -95,27 +112,17 @@ module ActionDispatch
95
112
  url_options[:path] = (url_options[:path] % escape_path(params))
96
113
  end
97
114
 
98
- unless options[:host] || options[:domain]
99
- if relative_path?(url_options[:path])
100
- url_options[:path] = "/#{url_options[:path]}"
101
- url_options[:script_name] = request.script_name
102
- elsif url_options[:path].empty?
103
- url_options[:path] = request.script_name.empty? ? "/" : ""
104
- url_options[:script_name] = request.script_name
105
- end
115
+ if relative_path?(url_options[:path])
116
+ url_options[:path] = "/#{url_options[:path]}"
117
+ url_options[:script_name] = request.script_name
106
118
  end
107
-
119
+
108
120
  ActionDispatch::Http::URL.url_for url_options
109
121
  end
110
122
 
111
123
  def inspect
112
124
  "redirect(#{status}, #{options.map{ |k,v| "#{k}: #{v}" }.join(', ')})"
113
125
  end
114
-
115
- private
116
- def escape_path(params)
117
- Hash[params.map{ |k,v| [k, URI.parser.escape(v)] }]
118
- end
119
126
  end
120
127
 
121
128
  module Redirection
@@ -1,13 +1,11 @@
1
1
  require 'action_dispatch/journey'
2
2
  require 'forwardable'
3
3
  require 'thread_safe'
4
- require 'active_support/concern'
5
4
  require 'active_support/core_ext/object/to_query'
6
5
  require 'active_support/core_ext/hash/slice'
7
6
  require 'active_support/core_ext/module/remove_method'
8
7
  require 'active_support/core_ext/array/extract_options'
9
8
  require 'action_controller/metal/exceptions'
10
- require 'action_dispatch/http/request'
11
9
 
12
10
  module ActionDispatch
13
11
  module Routing
@@ -165,10 +163,9 @@ module ActionDispatch
165
163
 
166
164
  def initialize(route, options)
167
165
  super
168
- @klass = Journey::Router::Utils
169
- @required_parts = @route.required_parts
170
- @arg_size = @required_parts.size
171
- @optimized_path = @route.optimized_path
166
+ @path_parts = @route.required_parts
167
+ @arg_size = @path_parts.size
168
+ @string_route = @route.optimized_path
172
169
  end
173
170
 
174
171
  def call(t, args)
@@ -185,36 +182,43 @@ module ActionDispatch
185
182
  private
186
183
 
187
184
  def optimized_helper(args)
188
- params = Hash[parameterize_args(args)]
189
- missing_keys = missing_keys(params)
185
+ path = @string_route.dup
186
+ klass = Journey::Router::Utils
190
187
 
191
- unless missing_keys.empty?
192
- raise_generation_error(params, missing_keys)
193
- end
188
+ @path_parts.zip(args) do |part, arg|
189
+ parameterized_arg = arg.to_param
194
190
 
195
- @optimized_path.map{ |segment| replace_segment(params, segment) }.join
196
- end
191
+ if parameterized_arg.nil? || parameterized_arg.empty?
192
+ raise_generation_error(args)
193
+ end
197
194
 
198
- def replace_segment(params, segment)
199
- Symbol === segment ? @klass.escape_fragment(params[segment]) : segment
195
+ # Replace each route parameter
196
+ # e.g. :id for regular parameter or *path for globbing
197
+ # with ruby string interpolation code
198
+ path.gsub!(/(\*|:)#{part}/, klass.escape_fragment(parameterized_arg))
199
+ end
200
+ path
200
201
  end
201
202
 
202
203
  def optimize_routes_generation?(t)
203
204
  t.send(:optimize_routes_generation?)
204
205
  end
205
206
 
206
- def parameterize_args(args)
207
- @required_parts.zip(args.map(&:to_param))
208
- end
207
+ def raise_generation_error(args)
208
+ parts, missing_keys = [], []
209
209
 
210
- def missing_keys(args)
211
- args.select{ |part, arg| arg.nil? || arg.empty? }.keys
212
- end
210
+ @path_parts.zip(args) do |part, arg|
211
+ parameterized_arg = arg.to_param
213
212
 
214
- def raise_generation_error(args, missing_keys)
215
- constraints = Hash[@route.requirements.merge(args).sort]
216
- message = "No route matches #{constraints.inspect}"
217
- message << " missing required keys: #{missing_keys.sort.inspect}"
213
+ if parameterized_arg.nil? || parameterized_arg.empty?
214
+ missing_keys << part
215
+ end
216
+
217
+ parts << [part, arg]
218
+ end
219
+
220
+ message = "No route matches #{Hash[parts].inspect}"
221
+ message << " missing required keys: #{missing_keys.inspect}"
218
222
 
219
223
  raise ActionController::UrlGenerationError, message
220
224
  end
@@ -222,7 +226,7 @@ module ActionDispatch
222
226
 
223
227
  def initialize(route, options)
224
228
  @options = options
225
- @segment_keys = route.segment_keys.uniq
229
+ @segment_keys = route.segment_keys
226
230
  @route = route
227
231
  end
228
232
 
@@ -510,11 +514,12 @@ module ActionDispatch
510
514
  @recall = recall.dup
511
515
  @set = set
512
516
 
517
+ normalize_recall!
513
518
  normalize_options!
514
519
  normalize_controller_action_id!
515
520
  use_relative_controller!
516
521
  normalize_controller!
517
- handle_nil_action!
522
+ normalize_action!
518
523
  end
519
524
 
520
525
  def controller
@@ -533,6 +538,11 @@ module ActionDispatch
533
538
  end
534
539
  end
535
540
 
541
+ # Set 'index' as default action for recall
542
+ def normalize_recall!
543
+ @recall[:action] ||= 'index'
544
+ end
545
+
536
546
  def normalize_options!
537
547
  # If an explicit :controller was given, always make :action explicit
538
548
  # too, so that action expiry works as expected for things like
@@ -548,8 +558,8 @@ module ActionDispatch
548
558
  options[:controller] = options[:controller].to_s
549
559
  end
550
560
 
551
- if options[:action]
552
- options[:action] = options[:action].to_s
561
+ if options.key?(:action)
562
+ options[:action] = (options[:action] || 'index').to_s
553
563
  end
554
564
  end
555
565
 
@@ -559,8 +569,6 @@ module ActionDispatch
559
569
  # :controller, :action or :id is not found, don't pull any
560
570
  # more keys from the recall.
561
571
  def normalize_controller_action_id!
562
- @recall[:action] ||= 'index' if current_controller
563
-
564
572
  use_recall_for(:controller) or return
565
573
  use_recall_for(:action) or return
566
574
  use_recall_for(:id)
@@ -582,13 +590,11 @@ module ActionDispatch
582
590
  @options[:controller] = controller.sub(%r{^/}, '') if controller
583
591
  end
584
592
 
585
- # This handles the case of action: nil being explicitly passed.
586
- # It is identical to action: "index"
587
- def handle_nil_action!
588
- if options.has_key?(:action) && options[:action].nil?
589
- options[:action] = 'index'
593
+ # Move 'index' action from options to recall
594
+ def normalize_action!
595
+ if @options[:action] == 'index'
596
+ @recall[:action] = @options.delete(:action)
590
597
  end
591
- recall[:action] = options.delete(:action) if options[:action] == 'index'
592
598
  end
593
599
 
594
600
  # Generates a path from routes, returns [path, params].
@@ -20,7 +20,7 @@ module ActionDispatch
20
20
  #
21
21
  # <%= link_to('Click here', controller: 'users',
22
22
  # action: 'new', message: 'Welcome!') %>
23
- # # => "/users/new?message=Welcome%21"
23
+ # # => <a href="/users/new?message=Welcome%21">Click here</a>
24
24
  #
25
25
  # link_to, and all other functions that require URL generation functionality,
26
26
  # actually use ActionController::UrlFor under the hood. And in particular,
@@ -155,6 +155,8 @@ module ActionDispatch
155
155
  _routes.url_for(options.symbolize_keys.reverse_merge!(url_options))
156
156
  when String
157
157
  options
158
+ when Array
159
+ polymorphic_url(options, options.extract_options!)
158
160
  else
159
161
  polymorphic_url(options)
160
162
  end
@@ -27,6 +27,9 @@ module ActionDispatch
27
27
  assert @response.send("#{type}?"), message
28
28
  else
29
29
  code = Rack::Utils::SYMBOL_TO_STATUS_CODE[type]
30
+ if code.nil?
31
+ raise ArgumentError, "Invalid response type :#{type}"
32
+ end
30
33
  assert_equal code, @response.response_code, message
31
34
  end
32
35
  else
@@ -67,21 +70,11 @@ module ActionDispatch
67
70
  end
68
71
 
69
72
  def normalize_argument_to_redirection(fragment)
70
- normalized = case fragment
71
- when Regexp
72
- fragment
73
- when %r{^\w[A-Za-z\d+.-]*:.*}
74
- fragment
75
- when String
76
- @request.protocol + @request.host_with_port + fragment
77
- when :back
78
- raise RedirectBackError unless refer = @request.headers["Referer"]
79
- refer
80
- else
81
- @controller.url_for(fragment)
82
- end
83
-
84
- normalized.respond_to?(:delete) ? normalized.delete("\0\r\n") : normalized
73
+ if Regexp === fragment
74
+ fragment
75
+ else
76
+ @controller._compute_redirect_to_location(fragment)
77
+ end
85
78
  end
86
79
  end
87
80
  end
@@ -267,7 +267,7 @@ module ActionDispatch
267
267
  text.strip! unless NO_STRIP.include?(match.name)
268
268
  text.sub!(/\A\n/, '') if match.name == "textarea"
269
269
  unless match_with.is_a?(Regexp) ? (text =~ match_with) : (text == match_with.to_s)
270
- content_mismatch ||= sprintf("<%s> expected but was\n<%s>", match_with, text)
270
+ content_mismatch ||= sprintf("<%s> expected but was\n<%s>.", match_with, text)
271
271
  true
272
272
  end
273
273
  end
@@ -276,7 +276,7 @@ module ActionDispatch
276
276
  html = match.children.map(&:to_s).join
277
277
  html.strip! unless NO_STRIP.include?(match.name)
278
278
  unless match_with.is_a?(Regexp) ? (html =~ match_with) : (html == match_with.to_s)
279
- content_mismatch ||= sprintf("<%s> expected but was\n<%s>", match_with, html)
279
+ content_mismatch ||= sprintf("<%s> expected but was\n<%s>.", match_with, html)
280
280
  true
281
281
  end
282
282
  end
@@ -289,9 +289,9 @@ module ActionDispatch
289
289
 
290
290
  # FIXME: minitest provides messaging when we use assert_operator,
291
291
  # so is this custom message really needed?
292
- message = message || %(Expected #{count_description(min, max, count)} matching "#{selector.to_s}", found #{matches.size})
292
+ message = message || %(Expected #{count_description(min, max, count)} matching "#{selector.to_s}", found #{matches.size}.)
293
293
  if count
294
- assert_equal count, matches.size, message
294
+ assert_equal matches.size, count, message
295
295
  else
296
296
  assert_operator matches.size, :>=, min, message if min
297
297
  assert_operator matches.size, :<=, max, message if max
@@ -3,7 +3,7 @@ require 'uri'
3
3
  require 'active_support/core_ext/kernel/singleton_class'
4
4
  require 'active_support/core_ext/object/try'
5
5
  require 'rack/test'
6
- require 'minitest/unit'
6
+ require 'minitest'
7
7
 
8
8
  module ActionDispatch
9
9
  module Integration #:nodoc:
@@ -298,8 +298,6 @@ module ActionDispatch
298
298
 
299
299
  session = Rack::Test::Session.new(_mock_session)
300
300
 
301
- env.merge!(env)
302
-
303
301
  # NOTE: rack-test v0.5 doesn't build a default uri correctly
304
302
  # Make sure requested path is always a full uri
305
303
  uri = URI.parse('/')
@@ -489,10 +487,6 @@ module ActionDispatch
489
487
  @@app = nil
490
488
 
491
489
  def self.app
492
- if !@@app && !ActionDispatch.test_app
493
- ActiveSupport::Deprecation.warn "Rails application fallback is deprecated and no longer works, please set ActionDispatch.test_app"
494
- end
495
-
496
490
  @@app || ActionDispatch.test_app
497
491
  end
498
492
 
@@ -1,7 +1,7 @@
1
1
  module ActionPack
2
2
  # Returns the version of the currently loaded ActionPack as a Gem::Version
3
3
  def self.version
4
- Gem::Version.new "4.0.13"
4
+ Gem::Version.new "4.1.0.beta1"
5
5
  end
6
6
 
7
7
  module VERSION #:nodoc:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.13
4
+ version: 4.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-06 00:00:00.000000000 Z
11
+ date: 2013-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,98 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.13
19
+ version: 4.1.0.beta1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.13
27
- - !ruby/object:Gem::Dependency
28
- name: builder
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 3.1.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 3.1.0
26
+ version: 4.1.0.beta1
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rack
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ~>
46
32
  - !ruby/object:Gem::Version
47
33
  version: 1.5.2
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
38
+ - - ~>
53
39
  - !ruby/object:Gem::Version
54
40
  version: 1.5.2
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rack-test
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ~>
60
46
  - !ruby/object:Gem::Version
61
47
  version: 0.6.2
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ~>
67
53
  - !ruby/object:Gem::Version
68
54
  version: 0.6.2
69
55
  - !ruby/object:Gem::Dependency
70
- name: erubis
56
+ name: actionview
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - "~>"
59
+ - - '='
74
60
  - !ruby/object:Gem::Version
75
- version: 2.7.0
61
+ version: 4.1.0.beta1
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - "~>"
66
+ - - '='
81
67
  - !ruby/object:Gem::Version
82
- version: 2.7.0
68
+ version: 4.1.0.beta1
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: activemodel
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - '='
88
74
  - !ruby/object:Gem::Version
89
- version: 4.0.13
75
+ version: 4.1.0.beta1
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - '='
95
81
  - !ruby/object:Gem::Version
96
- version: 4.0.13
97
- - !ruby/object:Gem::Dependency
98
- name: tzinfo
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.3.37
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.3.37
82
+ version: 4.1.0.beta1
111
83
  description: Web apps on Rails. Simple, battle-tested conventions for building and
112
84
  testing MVC web applications. Works with any Rack-compatible server.
113
85
  email: david@loudthinking.com
@@ -116,29 +88,23 @@ extensions: []
116
88
  extra_rdoc_files: []
117
89
  files:
118
90
  - CHANGELOG.md
119
- - MIT-LICENSE
120
91
  - README.rdoc
121
- - lib/abstract_controller.rb
92
+ - MIT-LICENSE
122
93
  - lib/abstract_controller/asset_paths.rb
123
94
  - lib/abstract_controller/base.rb
124
95
  - lib/abstract_controller/callbacks.rb
125
96
  - lib/abstract_controller/collector.rb
126
97
  - lib/abstract_controller/helpers.rb
127
- - lib/abstract_controller/layouts.rb
128
98
  - lib/abstract_controller/logger.rb
129
99
  - lib/abstract_controller/railties/routes_helpers.rb
130
100
  - lib/abstract_controller/rendering.rb
131
101
  - lib/abstract_controller/translation.rb
132
102
  - lib/abstract_controller/url_for.rb
133
- - lib/abstract_controller/view_paths.rb
134
- - lib/action_controller.rb
103
+ - lib/abstract_controller.rb
135
104
  - lib/action_controller/base.rb
136
- - lib/action_controller/caching.rb
137
105
  - lib/action_controller/caching/fragments.rb
138
- - lib/action_controller/deprecated.rb
139
- - lib/action_controller/deprecated/integration_test.rb
106
+ - lib/action_controller/caching.rb
140
107
  - lib/action_controller/log_subscriber.rb
141
- - lib/action_controller/metal.rb
142
108
  - lib/action_controller/metal/conditional_get.rb
143
109
  - lib/action_controller/metal/cookies.rb
144
110
  - lib/action_controller/metal/data_streaming.rb
@@ -165,14 +131,13 @@ files:
165
131
  - lib/action_controller/metal/strong_parameters.rb
166
132
  - lib/action_controller/metal/testing.rb
167
133
  - lib/action_controller/metal/url_for.rb
134
+ - lib/action_controller/metal.rb
168
135
  - lib/action_controller/middleware.rb
169
136
  - lib/action_controller/model_naming.rb
170
137
  - lib/action_controller/railtie.rb
171
138
  - lib/action_controller/railties/helpers.rb
172
- - lib/action_controller/record_identifier.rb
173
139
  - lib/action_controller/test_case.rb
174
- - lib/action_controller/vendor/html-scanner.rb
175
- - lib/action_dispatch.rb
140
+ - lib/action_controller.rb
176
141
  - lib/action_dispatch/http/cache.rb
177
142
  - lib/action_dispatch/http/filter_parameters.rb
178
143
  - lib/action_dispatch/http/filter_redirect.rb
@@ -187,7 +152,6 @@ files:
187
152
  - lib/action_dispatch/http/response.rb
188
153
  - lib/action_dispatch/http/upload.rb
189
154
  - lib/action_dispatch/http/url.rb
190
- - lib/action_dispatch/journey.rb
191
155
  - lib/action_dispatch/journey/backwards.rb
192
156
  - lib/action_dispatch/journey/formatter.rb
193
157
  - lib/action_dispatch/journey/gtg/builder.rb
@@ -203,15 +167,16 @@ files:
203
167
  - lib/action_dispatch/journey/parser_extras.rb
204
168
  - lib/action_dispatch/journey/path/pattern.rb
205
169
  - lib/action_dispatch/journey/route.rb
206
- - lib/action_dispatch/journey/router.rb
207
170
  - lib/action_dispatch/journey/router/strexp.rb
208
171
  - lib/action_dispatch/journey/router/utils.rb
172
+ - lib/action_dispatch/journey/router.rb
209
173
  - lib/action_dispatch/journey/routes.rb
210
174
  - lib/action_dispatch/journey/scanner.rb
211
175
  - lib/action_dispatch/journey/visitors.rb
212
176
  - lib/action_dispatch/journey/visualizer/fsm.css
213
177
  - lib/action_dispatch/journey/visualizer/fsm.js
214
178
  - lib/action_dispatch/journey/visualizer/index.html.erb
179
+ - lib/action_dispatch/journey.rb
215
180
  - lib/action_dispatch/middleware/callbacks.rb
216
181
  - lib/action_dispatch/middleware/cookies.rb
217
182
  - lib/action_dispatch/middleware/debug_exceptions.rb
@@ -230,20 +195,26 @@ files:
230
195
  - lib/action_dispatch/middleware/ssl.rb
231
196
  - lib/action_dispatch/middleware/stack.rb
232
197
  - lib/action_dispatch/middleware/static.rb
233
- - lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb
198
+ - lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
199
+ - lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb
234
200
  - lib/action_dispatch/middleware/templates/rescues/_source.erb
235
- - lib/action_dispatch/middleware/templates/rescues/_trace.erb
201
+ - lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
202
+ - lib/action_dispatch/middleware/templates/rescues/_trace.text.erb
236
203
  - lib/action_dispatch/middleware/templates/rescues/diagnostics.erb
237
204
  - lib/action_dispatch/middleware/templates/rescues/layout.erb
238
- - lib/action_dispatch/middleware/templates/rescues/missing_template.erb
239
- - lib/action_dispatch/middleware/templates/rescues/routing_error.erb
240
- - lib/action_dispatch/middleware/templates/rescues/template_error.erb
241
- - lib/action_dispatch/middleware/templates/rescues/unknown_action.erb
205
+ - lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb
206
+ - lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb
207
+ - lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb
208
+ - lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb
209
+ - lib/action_dispatch/middleware/templates/rescues/template_error.html.erb
210
+ - lib/action_dispatch/middleware/templates/rescues/template_error.text.erb
211
+ - lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb
212
+ - lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb
242
213
  - lib/action_dispatch/middleware/templates/routes/_route.html.erb
243
214
  - lib/action_dispatch/middleware/templates/routes/_table.html.erb
244
215
  - lib/action_dispatch/railtie.rb
245
216
  - lib/action_dispatch/request/session.rb
246
- - lib/action_dispatch/routing.rb
217
+ - lib/action_dispatch/request/utils.rb
247
218
  - lib/action_dispatch/routing/inspector.rb
248
219
  - lib/action_dispatch/routing/mapper.rb
249
220
  - lib/action_dispatch/routing/polymorphic_routes.rb
@@ -251,115 +222,20 @@ files:
251
222
  - lib/action_dispatch/routing/route_set.rb
252
223
  - lib/action_dispatch/routing/routes_proxy.rb
253
224
  - lib/action_dispatch/routing/url_for.rb
254
- - lib/action_dispatch/testing/assertions.rb
225
+ - lib/action_dispatch/routing.rb
255
226
  - lib/action_dispatch/testing/assertions/dom.rb
256
227
  - lib/action_dispatch/testing/assertions/response.rb
257
228
  - lib/action_dispatch/testing/assertions/routing.rb
258
229
  - lib/action_dispatch/testing/assertions/selector.rb
259
230
  - lib/action_dispatch/testing/assertions/tag.rb
231
+ - lib/action_dispatch/testing/assertions.rb
260
232
  - lib/action_dispatch/testing/integration.rb
261
233
  - lib/action_dispatch/testing/test_process.rb
262
234
  - lib/action_dispatch/testing/test_request.rb
263
235
  - lib/action_dispatch/testing/test_response.rb
264
- - lib/action_pack.rb
236
+ - lib/action_dispatch.rb
265
237
  - lib/action_pack/version.rb
266
- - lib/action_view.rb
267
- - lib/action_view/base.rb
268
- - lib/action_view/buffers.rb
269
- - lib/action_view/context.rb
270
- - lib/action_view/dependency_tracker.rb
271
- - lib/action_view/digestor.rb
272
- - lib/action_view/flows.rb
273
- - lib/action_view/helpers.rb
274
- - lib/action_view/helpers/active_model_helper.rb
275
- - lib/action_view/helpers/asset_tag_helper.rb
276
- - lib/action_view/helpers/asset_url_helper.rb
277
- - lib/action_view/helpers/atom_feed_helper.rb
278
- - lib/action_view/helpers/cache_helper.rb
279
- - lib/action_view/helpers/capture_helper.rb
280
- - lib/action_view/helpers/controller_helper.rb
281
- - lib/action_view/helpers/csrf_helper.rb
282
- - lib/action_view/helpers/date_helper.rb
283
- - lib/action_view/helpers/debug_helper.rb
284
- - lib/action_view/helpers/form_helper.rb
285
- - lib/action_view/helpers/form_options_helper.rb
286
- - lib/action_view/helpers/form_tag_helper.rb
287
- - lib/action_view/helpers/javascript_helper.rb
288
- - lib/action_view/helpers/number_helper.rb
289
- - lib/action_view/helpers/output_safety_helper.rb
290
- - lib/action_view/helpers/record_tag_helper.rb
291
- - lib/action_view/helpers/rendering_helper.rb
292
- - lib/action_view/helpers/sanitize_helper.rb
293
- - lib/action_view/helpers/tag_helper.rb
294
- - lib/action_view/helpers/tags.rb
295
- - lib/action_view/helpers/tags/base.rb
296
- - lib/action_view/helpers/tags/check_box.rb
297
- - lib/action_view/helpers/tags/checkable.rb
298
- - lib/action_view/helpers/tags/collection_check_boxes.rb
299
- - lib/action_view/helpers/tags/collection_helpers.rb
300
- - lib/action_view/helpers/tags/collection_radio_buttons.rb
301
- - lib/action_view/helpers/tags/collection_select.rb
302
- - lib/action_view/helpers/tags/color_field.rb
303
- - lib/action_view/helpers/tags/date_field.rb
304
- - lib/action_view/helpers/tags/date_select.rb
305
- - lib/action_view/helpers/tags/datetime_field.rb
306
- - lib/action_view/helpers/tags/datetime_local_field.rb
307
- - lib/action_view/helpers/tags/datetime_select.rb
308
- - lib/action_view/helpers/tags/email_field.rb
309
- - lib/action_view/helpers/tags/file_field.rb
310
- - lib/action_view/helpers/tags/grouped_collection_select.rb
311
- - lib/action_view/helpers/tags/hidden_field.rb
312
- - lib/action_view/helpers/tags/label.rb
313
- - lib/action_view/helpers/tags/month_field.rb
314
- - lib/action_view/helpers/tags/number_field.rb
315
- - lib/action_view/helpers/tags/password_field.rb
316
- - lib/action_view/helpers/tags/radio_button.rb
317
- - lib/action_view/helpers/tags/range_field.rb
318
- - lib/action_view/helpers/tags/search_field.rb
319
- - lib/action_view/helpers/tags/select.rb
320
- - lib/action_view/helpers/tags/tel_field.rb
321
- - lib/action_view/helpers/tags/text_area.rb
322
- - lib/action_view/helpers/tags/text_field.rb
323
- - lib/action_view/helpers/tags/time_field.rb
324
- - lib/action_view/helpers/tags/time_select.rb
325
- - lib/action_view/helpers/tags/time_zone_select.rb
326
- - lib/action_view/helpers/tags/url_field.rb
327
- - lib/action_view/helpers/tags/week_field.rb
328
- - lib/action_view/helpers/text_helper.rb
329
- - lib/action_view/helpers/translation_helper.rb
330
- - lib/action_view/helpers/url_helper.rb
331
- - lib/action_view/locale/en.yml
332
- - lib/action_view/log_subscriber.rb
333
- - lib/action_view/lookup_context.rb
334
- - lib/action_view/model_naming.rb
335
- - lib/action_view/path_set.rb
336
- - lib/action_view/railtie.rb
337
- - lib/action_view/record_identifier.rb
338
- - lib/action_view/renderer/abstract_renderer.rb
339
- - lib/action_view/renderer/partial_renderer.rb
340
- - lib/action_view/renderer/renderer.rb
341
- - lib/action_view/renderer/streaming_template_renderer.rb
342
- - lib/action_view/renderer/template_renderer.rb
343
- - lib/action_view/routing_url_for.rb
344
- - lib/action_view/tasks/dependencies.rake
345
- - lib/action_view/template.rb
346
- - lib/action_view/template/error.rb
347
- - lib/action_view/template/handlers.rb
348
- - lib/action_view/template/handlers/builder.rb
349
- - lib/action_view/template/handlers/erb.rb
350
- - lib/action_view/template/handlers/raw.rb
351
- - lib/action_view/template/resolver.rb
352
- - lib/action_view/template/text.rb
353
- - lib/action_view/template/types.rb
354
- - lib/action_view/test_case.rb
355
- - lib/action_view/testing/resolvers.rb
356
- - lib/action_view/vendor/html-scanner.rb
357
- - lib/action_view/vendor/html-scanner/html/document.rb
358
- - lib/action_view/vendor/html-scanner/html/node.rb
359
- - lib/action_view/vendor/html-scanner/html/sanitizer.rb
360
- - lib/action_view/vendor/html-scanner/html/selector.rb
361
- - lib/action_view/vendor/html-scanner/html/tokenizer.rb
362
- - lib/action_view/vendor/html-scanner/html/version.rb
238
+ - lib/action_pack.rb
363
239
  homepage: http://www.rubyonrails.org
364
240
  licenses:
365
241
  - MIT
@@ -370,18 +246,18 @@ require_paths:
370
246
  - lib
371
247
  required_ruby_version: !ruby/object:Gem::Requirement
372
248
  requirements:
373
- - - ">="
249
+ - - '>='
374
250
  - !ruby/object:Gem::Version
375
251
  version: 1.9.3
376
252
  required_rubygems_version: !ruby/object:Gem::Requirement
377
253
  requirements:
378
- - - ">="
254
+ - - '>'
379
255
  - !ruby/object:Gem::Version
380
- version: '0'
256
+ version: 1.3.1
381
257
  requirements:
382
258
  - none
383
259
  rubyforge_project:
384
- rubygems_version: 2.4.5
260
+ rubygems_version: 2.1.11
385
261
  signing_key:
386
262
  specification_version: 4
387
263
  summary: Web-flow and rendering framework putting the VC in MVC (part of Rails).