activejob-lock 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2864) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +21 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +48 -0
  6. data/Rakefile +77 -0
  7. data/activejob-lock.gemspec +30 -0
  8. data/lib/activejob/lock/queue_adapters/resque_adapter.rb +44 -0
  9. data/lib/activejob/lock/queue_adapters.rb +1 -0
  10. data/lib/activejob/lock/version.rb +5 -0
  11. data/lib/activejob/lock.rb +38 -0
  12. data/rails/.gitignore +21 -0
  13. data/rails/.travis.yml +62 -0
  14. data/rails/.yardopts +4 -0
  15. data/rails/CONTRIBUTING.md +17 -0
  16. data/rails/Gemfile +126 -0
  17. data/rails/Gemfile.lock +273 -0
  18. data/rails/RAILS_VERSION +1 -0
  19. data/rails/README.md +85 -0
  20. data/rails/RELEASING_RAILS.rdoc +217 -0
  21. data/rails/Rakefile +67 -0
  22. data/rails/actionmailer/CHANGELOG.md +63 -0
  23. data/rails/actionmailer/MIT-LICENSE +21 -0
  24. data/rails/actionmailer/README.rdoc +176 -0
  25. data/rails/actionmailer/Rakefile +35 -0
  26. data/rails/actionmailer/actionmailer.gemspec +28 -0
  27. data/rails/actionmailer/lib/action_mailer/base.rb +947 -0
  28. data/rails/actionmailer/lib/action_mailer/collector.rb +30 -0
  29. data/rails/actionmailer/lib/action_mailer/delivery_job.rb +13 -0
  30. data/rails/actionmailer/lib/action_mailer/delivery_methods.rb +84 -0
  31. data/rails/actionmailer/lib/action_mailer/gem_version.rb +15 -0
  32. data/rails/actionmailer/lib/action_mailer/log_subscriber.rb +39 -0
  33. data/rails/actionmailer/lib/action_mailer/mail_helper.rb +58 -0
  34. data/rails/actionmailer/lib/action_mailer/message_delivery.rb +115 -0
  35. data/rails/actionmailer/lib/action_mailer/preview.rb +118 -0
  36. data/rails/actionmailer/lib/action_mailer/railtie.rb +64 -0
  37. data/rails/actionmailer/lib/action_mailer/test_case.rb +104 -0
  38. data/rails/actionmailer/lib/action_mailer/test_helper.rb +62 -0
  39. data/rails/actionmailer/lib/action_mailer/version.rb +9 -0
  40. data/rails/actionmailer/lib/action_mailer.rb +50 -0
  41. data/rails/actionmailer/lib/rails/generators/mailer/USAGE +17 -0
  42. data/rails/actionmailer/lib/rails/generators/mailer/mailer_generator.rb +19 -0
  43. data/rails/actionmailer/lib/rails/generators/mailer/templates/application_mailer.rb +4 -0
  44. data/rails/actionmailer/lib/rails/generators/mailer/templates/mailer.rb +17 -0
  45. data/rails/actionmailer/test/abstract_unit.rb +49 -0
  46. data/rails/actionmailer/test/assert_select_email_test.rb +47 -0
  47. data/rails/actionmailer/test/asset_host_test.rb +37 -0
  48. data/rails/actionmailer/test/base_test.rb +885 -0
  49. data/rails/actionmailer/test/delivery_methods_test.rb +237 -0
  50. data/rails/actionmailer/test/fixtures/anonymous/welcome.erb +1 -0
  51. data/rails/actionmailer/test/fixtures/another.path/base_mailer/welcome.erb +1 -0
  52. data/rails/actionmailer/test/fixtures/asset_host_mailer/email_with_asset.html.erb +1 -0
  53. data/rails/actionmailer/test/fixtures/asset_mailer/welcome.html.erb +1 -0
  54. data/rails/actionmailer/test/fixtures/async_mailer/welcome.erb +1 -0
  55. data/rails/actionmailer/test/fixtures/attachments/foo.jpg +0 -0
  56. data/rails/actionmailer/test/fixtures/attachments/test.jpg +0 -0
  57. data/rails/actionmailer/test/fixtures/auto_layout_mailer/hello.html.erb +1 -0
  58. data/rails/actionmailer/test/fixtures/auto_layout_mailer/multipart.html.erb +1 -0
  59. data/rails/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.erb +1 -0
  60. data/rails/actionmailer/test/fixtures/base_mailer/attachment_with_content.erb +1 -0
  61. data/rails/actionmailer/test/fixtures/base_mailer/attachment_with_hash.html.erb +0 -0
  62. data/rails/actionmailer/test/fixtures/base_mailer/attachment_with_hash_default_encoding.html.erb +0 -0
  63. data/rails/actionmailer/test/fixtures/base_mailer/different_layout.html.erb +1 -0
  64. data/rails/actionmailer/test/fixtures/base_mailer/different_layout.text.erb +1 -0
  65. data/rails/actionmailer/test/fixtures/base_mailer/email_custom_layout.text.html.erb +1 -0
  66. data/rails/actionmailer/test/fixtures/base_mailer/email_with_translations.html.erb +1 -0
  67. data/rails/actionmailer/test/fixtures/base_mailer/explicit_multipart_templates.html.erb +1 -0
  68. data/rails/actionmailer/test/fixtures/base_mailer/explicit_multipart_templates.text.erb +1 -0
  69. data/rails/actionmailer/test/fixtures/base_mailer/explicit_multipart_with_one_template.erb +1 -0
  70. data/rails/actionmailer/test/fixtures/base_mailer/html_only.html.erb +1 -0
  71. data/rails/actionmailer/test/fixtures/base_mailer/implicit_multipart.html.erb +1 -0
  72. data/rails/actionmailer/test/fixtures/base_mailer/implicit_multipart.text.erb +1 -0
  73. data/rails/actionmailer/test/fixtures/base_mailer/implicit_with_locale.en.html.erb +1 -0
  74. data/rails/actionmailer/test/fixtures/base_mailer/implicit_with_locale.html.erb +1 -0
  75. data/rails/actionmailer/test/fixtures/base_mailer/implicit_with_locale.pl.text.erb +1 -0
  76. data/rails/actionmailer/test/fixtures/base_mailer/implicit_with_locale.text.erb +1 -0
  77. data/rails/actionmailer/test/fixtures/base_mailer/inline_attachment.html.erb +5 -0
  78. data/rails/actionmailer/test/fixtures/base_mailer/inline_attachment.text.erb +4 -0
  79. data/rails/actionmailer/test/fixtures/base_mailer/plain_text_only.text.erb +1 -0
  80. data/rails/actionmailer/test/fixtures/base_mailer/welcome.erb +1 -0
  81. data/rails/actionmailer/test/fixtures/base_mailer/welcome_with_headers.html.erb +0 -0
  82. data/rails/actionmailer/test/fixtures/base_mailer/without_mail_call.erb +1 -0
  83. data/rails/actionmailer/test/fixtures/base_test/after_action_mailer/welcome.html.erb +0 -0
  84. data/rails/actionmailer/test/fixtures/base_test/before_action_mailer/welcome.html.erb +0 -0
  85. data/rails/actionmailer/test/fixtures/base_test/default_inline_attachment_mailer/welcome.html.erb +0 -0
  86. data/rails/actionmailer/test/fixtures/base_test/late_inline_attachment_mailer/on_render.erb +7 -0
  87. data/rails/actionmailer/test/fixtures/explicit_layout_mailer/logout.html.erb +1 -0
  88. data/rails/actionmailer/test/fixtures/explicit_layout_mailer/signup.html.erb +1 -0
  89. data/rails/actionmailer/test/fixtures/first_mailer/share.erb +1 -0
  90. data/rails/actionmailer/test/fixtures/i18n_test_mailer/mail_with_i18n_subject.erb +4 -0
  91. data/rails/actionmailer/test/fixtures/layouts/auto_layout_mailer.html.erb +1 -0
  92. data/rails/actionmailer/test/fixtures/layouts/auto_layout_mailer.text.erb +1 -0
  93. data/rails/actionmailer/test/fixtures/layouts/different_layout.html.erb +1 -0
  94. data/rails/actionmailer/test/fixtures/layouts/different_layout.text.erb +1 -0
  95. data/rails/actionmailer/test/fixtures/layouts/spam.html.erb +1 -0
  96. data/rails/actionmailer/test/fixtures/mail_delivery_test/delivery_mailer/welcome.html.erb +0 -0
  97. data/rails/actionmailer/test/fixtures/nested_layout_mailer/signup.html.erb +1 -0
  98. data/rails/actionmailer/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.erb +1 -0
  99. data/rails/actionmailer/test/fixtures/proc_mailer/welcome.html.erb +0 -0
  100. data/rails/actionmailer/test/fixtures/raw_email +14 -0
  101. data/rails/actionmailer/test/fixtures/second_mailer/share.erb +1 -0
  102. data/rails/actionmailer/test/fixtures/templates/signed_up.erb +3 -0
  103. data/rails/actionmailer/test/fixtures/test_helper_mailer/welcome +1 -0
  104. data/rails/actionmailer/test/fixtures/test_mailer/_subtemplate.text.erb +1 -0
  105. data/rails/actionmailer/test/fixtures/test_mailer/custom_templating_extension.html.haml +6 -0
  106. data/rails/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.haml +6 -0
  107. data/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb +10 -0
  108. data/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb~ +10 -0
  109. data/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.erb +1 -0
  110. data/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak +1 -0
  111. data/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.erb +2 -0
  112. data/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.yaml.erb +1 -0
  113. data/rails/actionmailer/test/fixtures/test_mailer/included_subtemplate.text.erb +1 -0
  114. data/rails/actionmailer/test/fixtures/test_mailer/multipart_alternative.html.erb +1 -0
  115. data/rails/actionmailer/test/fixtures/test_mailer/multipart_alternative.plain.erb +1 -0
  116. data/rails/actionmailer/test/fixtures/test_mailer/rxml_template.rxml +2 -0
  117. data/rails/actionmailer/test/fixtures/test_mailer/signed_up.html.erb +3 -0
  118. data/rails/actionmailer/test/fixtures/url_test_mailer/exercise_url_for.erb +1 -0
  119. data/rails/actionmailer/test/fixtures/url_test_mailer/signed_up_with_url.erb +5 -0
  120. data/rails/actionmailer/test/i18n_with_controller_test.rb +70 -0
  121. data/rails/actionmailer/test/log_subscriber_test.rb +47 -0
  122. data/rails/actionmailer/test/mail_helper_test.rb +111 -0
  123. data/rails/actionmailer/test/mail_layout_test.rb +95 -0
  124. data/rails/actionmailer/test/mailers/asset_mailer.rb +7 -0
  125. data/rails/actionmailer/test/mailers/base_mailer.rb +130 -0
  126. data/rails/actionmailer/test/mailers/delayed_mailer.rb +6 -0
  127. data/rails/actionmailer/test/mailers/proc_mailer.rb +17 -0
  128. data/rails/actionmailer/test/message_delivery_test.rb +104 -0
  129. data/rails/actionmailer/test/test_case_test.rb +28 -0
  130. data/rails/actionmailer/test/test_helper_test.rb +135 -0
  131. data/rails/actionmailer/test/url_test.rb +138 -0
  132. data/rails/actionpack/CHANGELOG.md +501 -0
  133. data/rails/actionpack/MIT-LICENSE +21 -0
  134. data/rails/actionpack/README.rdoc +58 -0
  135. data/rails/actionpack/Rakefile +53 -0
  136. data/rails/actionpack/actionpack.gemspec +31 -0
  137. data/rails/actionpack/lib/abstract_controller/asset_paths.rb +10 -0
  138. data/rails/actionpack/lib/abstract_controller/base.rb +269 -0
  139. data/rails/actionpack/lib/abstract_controller/callbacks.rb +196 -0
  140. data/rails/actionpack/lib/abstract_controller/collector.rb +46 -0
  141. data/rails/actionpack/lib/abstract_controller/helpers.rb +194 -0
  142. data/rails/actionpack/lib/abstract_controller/logger.rb +12 -0
  143. data/rails/actionpack/lib/abstract_controller/railties/routes_helpers.rb +18 -0
  144. data/rails/actionpack/lib/abstract_controller/rendering.rb +120 -0
  145. data/rails/actionpack/lib/abstract_controller/translation.rb +28 -0
  146. data/rails/actionpack/lib/abstract_controller/url_for.rb +33 -0
  147. data/rails/actionpack/lib/abstract_controller.rb +20 -0
  148. data/rails/actionpack/lib/action_controller/base.rb +268 -0
  149. data/rails/actionpack/lib/action_controller/caching/fragments.rb +103 -0
  150. data/rails/actionpack/lib/action_controller/caching.rb +89 -0
  151. data/rails/actionpack/lib/action_controller/log_subscriber.rb +83 -0
  152. data/rails/actionpack/lib/action_controller/metal/conditional_get.rb +200 -0
  153. data/rails/actionpack/lib/action_controller/metal/cookies.rb +16 -0
  154. data/rails/actionpack/lib/action_controller/metal/data_streaming.rb +171 -0
  155. data/rails/actionpack/lib/action_controller/metal/etag_with_template_digest.rb +50 -0
  156. data/rails/actionpack/lib/action_controller/metal/exceptions.rb +59 -0
  157. data/rails/actionpack/lib/action_controller/metal/flash.rb +60 -0
  158. data/rails/actionpack/lib/action_controller/metal/force_ssl.rb +97 -0
  159. data/rails/actionpack/lib/action_controller/metal/head.rb +56 -0
  160. data/rails/actionpack/lib/action_controller/metal/helpers.rb +113 -0
  161. data/rails/actionpack/lib/action_controller/metal/hide_actions.rb +40 -0
  162. data/rails/actionpack/lib/action_controller/metal/http_authentication.rb +507 -0
  163. data/rails/actionpack/lib/action_controller/metal/implicit_render.rb +19 -0
  164. data/rails/actionpack/lib/action_controller/metal/instrumentation.rb +109 -0
  165. data/rails/actionpack/lib/action_controller/metal/live.rb +328 -0
  166. data/rails/actionpack/lib/action_controller/metal/mime_responds.rb +324 -0
  167. data/rails/actionpack/lib/action_controller/metal/params_wrapper.rb +285 -0
  168. data/rails/actionpack/lib/action_controller/metal/rack_delegation.rb +32 -0
  169. data/rails/actionpack/lib/action_controller/metal/redirecting.rb +112 -0
  170. data/rails/actionpack/lib/action_controller/metal/renderers.rb +140 -0
  171. data/rails/actionpack/lib/action_controller/metal/rendering.rb +100 -0
  172. data/rails/actionpack/lib/action_controller/metal/request_forgery_protection.rb +334 -0
  173. data/rails/actionpack/lib/action_controller/metal/rescue.rb +35 -0
  174. data/rails/actionpack/lib/action_controller/metal/streaming.rb +221 -0
  175. data/rails/actionpack/lib/action_controller/metal/strong_parameters.rb +667 -0
  176. data/rails/actionpack/lib/action_controller/metal/testing.rb +31 -0
  177. data/rails/actionpack/lib/action_controller/metal/url_for.rb +49 -0
  178. data/rails/actionpack/lib/action_controller/metal.rb +241 -0
  179. data/rails/actionpack/lib/action_controller/middleware.rb +39 -0
  180. data/rails/actionpack/lib/action_controller/model_naming.rb +12 -0
  181. data/rails/actionpack/lib/action_controller/railtie.rb +71 -0
  182. data/rails/actionpack/lib/action_controller/railties/helpers.rb +22 -0
  183. data/rails/actionpack/lib/action_controller/test_case.rb +754 -0
  184. data/rails/actionpack/lib/action_controller.rb +58 -0
  185. data/rails/actionpack/lib/action_dispatch/http/cache.rb +176 -0
  186. data/rails/actionpack/lib/action_dispatch/http/filter_parameters.rb +78 -0
  187. data/rails/actionpack/lib/action_dispatch/http/filter_redirect.rb +38 -0
  188. data/rails/actionpack/lib/action_dispatch/http/headers.rb +99 -0
  189. data/rails/actionpack/lib/action_dispatch/http/mime_negotiation.rb +156 -0
  190. data/rails/actionpack/lib/action_dispatch/http/mime_type.rb +315 -0
  191. data/rails/actionpack/lib/action_dispatch/http/mime_types.rb +36 -0
  192. data/rails/actionpack/lib/action_dispatch/http/parameter_filter.rb +72 -0
  193. data/rails/actionpack/lib/action_dispatch/http/parameters.rb +67 -0
  194. data/rails/actionpack/lib/action_dispatch/http/rack_cache.rb +61 -0
  195. data/rails/actionpack/lib/action_dispatch/http/request.rb +348 -0
  196. data/rails/actionpack/lib/action_dispatch/http/response.rb +406 -0
  197. data/rails/actionpack/lib/action_dispatch/http/upload.rb +72 -0
  198. data/rails/actionpack/lib/action_dispatch/http/url.rb +268 -0
  199. data/rails/actionpack/lib/action_dispatch/journey/backwards.rb +5 -0
  200. data/rails/actionpack/lib/action_dispatch/journey/formatter.rb +166 -0
  201. data/rails/actionpack/lib/action_dispatch/journey/gtg/builder.rb +162 -0
  202. data/rails/actionpack/lib/action_dispatch/journey/gtg/simulator.rb +47 -0
  203. data/rails/actionpack/lib/action_dispatch/journey/gtg/transition_table.rb +157 -0
  204. data/rails/actionpack/lib/action_dispatch/journey/nfa/builder.rb +76 -0
  205. data/rails/actionpack/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  206. data/rails/actionpack/lib/action_dispatch/journey/nfa/simulator.rb +47 -0
  207. data/rails/actionpack/lib/action_dispatch/journey/nfa/transition_table.rb +163 -0
  208. data/rails/actionpack/lib/action_dispatch/journey/nodes/node.rb +128 -0
  209. data/rails/actionpack/lib/action_dispatch/journey/parser.rb +198 -0
  210. data/rails/actionpack/lib/action_dispatch/journey/parser.y +49 -0
  211. data/rails/actionpack/lib/action_dispatch/journey/parser_extras.rb +23 -0
  212. data/rails/actionpack/lib/action_dispatch/journey/path/pattern.rb +193 -0
  213. data/rails/actionpack/lib/action_dispatch/journey/route.rb +125 -0
  214. data/rails/actionpack/lib/action_dispatch/journey/router/strexp.rb +27 -0
  215. data/rails/actionpack/lib/action_dispatch/journey/router/utils.rb +93 -0
  216. data/rails/actionpack/lib/action_dispatch/journey/router.rb +144 -0
  217. data/rails/actionpack/lib/action_dispatch/journey/routes.rb +76 -0
  218. data/rails/actionpack/lib/action_dispatch/journey/scanner.rb +61 -0
  219. data/rails/actionpack/lib/action_dispatch/journey/visitors.rb +221 -0
  220. data/rails/actionpack/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
  221. data/rails/actionpack/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  222. data/rails/actionpack/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  223. data/rails/actionpack/lib/action_dispatch/journey.rb +5 -0
  224. data/rails/actionpack/lib/action_dispatch/middleware/callbacks.rb +37 -0
  225. data/rails/actionpack/lib/action_dispatch/middleware/cookies.rb +574 -0
  226. data/rails/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb +110 -0
  227. data/rails/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb +148 -0
  228. data/rails/actionpack/lib/action_dispatch/middleware/flash.rb +276 -0
  229. data/rails/actionpack/lib/action_dispatch/middleware/params_parser.rb +60 -0
  230. data/rails/actionpack/lib/action_dispatch/middleware/public_exceptions.rb +55 -0
  231. data/rails/actionpack/lib/action_dispatch/middleware/reloader.rb +98 -0
  232. data/rails/actionpack/lib/action_dispatch/middleware/remote_ip.rb +173 -0
  233. data/rails/actionpack/lib/action_dispatch/middleware/request_id.rb +35 -0
  234. data/rails/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb +90 -0
  235. data/rails/actionpack/lib/action_dispatch/middleware/session/cache_store.rb +49 -0
  236. data/rails/actionpack/lib/action_dispatch/middleware/session/cookie_store.rb +123 -0
  237. data/rails/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb +22 -0
  238. data/rails/actionpack/lib/action_dispatch/middleware/show_exceptions.rb +58 -0
  239. data/rails/actionpack/lib/action_dispatch/middleware/ssl.rb +72 -0
  240. data/rails/actionpack/lib/action_dispatch/middleware/stack.rb +129 -0
  241. data/rails/actionpack/lib/action_dispatch/middleware/static.rb +116 -0
  242. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +34 -0
  243. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  244. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_source.erb +27 -0
  245. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
  246. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
  247. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
  248. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
  249. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/layout.erb +160 -0
  250. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
  251. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  252. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
  253. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  254. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
  255. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
  256. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
  257. data/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  258. data/rails/actionpack/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  259. data/rails/actionpack/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
  260. data/rails/actionpack/lib/action_dispatch/railtie.rb +45 -0
  261. data/rails/actionpack/lib/action_dispatch/request/session.rb +193 -0
  262. data/rails/actionpack/lib/action_dispatch/request/utils.rb +35 -0
  263. data/rails/actionpack/lib/action_dispatch/routing/endpoint.rb +10 -0
  264. data/rails/actionpack/lib/action_dispatch/routing/inspector.rb +234 -0
  265. data/rails/actionpack/lib/action_dispatch/routing/mapper.rb +1979 -0
  266. data/rails/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb +330 -0
  267. data/rails/actionpack/lib/action_dispatch/routing/redirection.rb +191 -0
  268. data/rails/actionpack/lib/action_dispatch/routing/route_set.rb +862 -0
  269. data/rails/actionpack/lib/action_dispatch/routing/routes_proxy.rb +41 -0
  270. data/rails/actionpack/lib/action_dispatch/routing/url_for.rb +195 -0
  271. data/rails/actionpack/lib/action_dispatch/routing.rb +261 -0
  272. data/rails/actionpack/lib/action_dispatch/testing/assertions/dom.rb +3 -0
  273. data/rails/actionpack/lib/action_dispatch/testing/assertions/response.rb +82 -0
  274. data/rails/actionpack/lib/action_dispatch/testing/assertions/routing.rb +212 -0
  275. data/rails/actionpack/lib/action_dispatch/testing/assertions/selector.rb +3 -0
  276. data/rails/actionpack/lib/action_dispatch/testing/assertions/tag.rb +3 -0
  277. data/rails/actionpack/lib/action_dispatch/testing/assertions.rb +22 -0
  278. data/rails/actionpack/lib/action_dispatch/testing/integration.rb +511 -0
  279. data/rails/actionpack/lib/action_dispatch/testing/test_process.rb +44 -0
  280. data/rails/actionpack/lib/action_dispatch/testing/test_request.rb +78 -0
  281. data/rails/actionpack/lib/action_dispatch/testing/test_response.rb +36 -0
  282. data/rails/actionpack/lib/action_dispatch.rb +105 -0
  283. data/rails/actionpack/lib/action_pack/gem_version.rb +15 -0
  284. data/rails/actionpack/lib/action_pack/version.rb +8 -0
  285. data/rails/actionpack/lib/action_pack.rb +24 -0
  286. data/rails/actionpack/test/abstract/callbacks_test.rb +315 -0
  287. data/rails/actionpack/test/abstract/collector_test.rb +63 -0
  288. data/rails/actionpack/test/abstract/translation_test.rb +50 -0
  289. data/rails/actionpack/test/abstract_unit.rb +521 -0
  290. data/rails/actionpack/test/assertions/response_assertions_test.rb +63 -0
  291. data/rails/actionpack/test/controller/action_pack_assertions_test.rb +657 -0
  292. data/rails/actionpack/test/controller/base_test.rb +342 -0
  293. data/rails/actionpack/test/controller/caching_test.rb +351 -0
  294. data/rails/actionpack/test/controller/content_type_test.rb +167 -0
  295. data/rails/actionpack/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  296. data/rails/actionpack/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  297. data/rails/actionpack/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  298. data/rails/actionpack/test/controller/default_url_options_with_before_action_test.rb +29 -0
  299. data/rails/actionpack/test/controller/filters_test.rb +1047 -0
  300. data/rails/actionpack/test/controller/flash_hash_test.rb +211 -0
  301. data/rails/actionpack/test/controller/flash_test.rb +335 -0
  302. data/rails/actionpack/test/controller/force_ssl_test.rb +324 -0
  303. data/rails/actionpack/test/controller/helper_test.rb +297 -0
  304. data/rails/actionpack/test/controller/http_basic_authentication_test.rb +144 -0
  305. data/rails/actionpack/test/controller/http_digest_authentication_test.rb +289 -0
  306. data/rails/actionpack/test/controller/http_token_authentication_test.rb +200 -0
  307. data/rails/actionpack/test/controller/integration_test.rb +899 -0
  308. data/rails/actionpack/test/controller/live_stream_test.rb +454 -0
  309. data/rails/actionpack/test/controller/localized_templates_test.rb +46 -0
  310. data/rails/actionpack/test/controller/log_subscriber_test.rb +345 -0
  311. data/rails/actionpack/test/controller/mime/accept_format_test.rb +92 -0
  312. data/rails/actionpack/test/controller/mime/respond_to_test.rb +784 -0
  313. data/rails/actionpack/test/controller/mime/responders_test.rb +32 -0
  314. data/rails/actionpack/test/controller/new_base/bare_metal_test.rb +153 -0
  315. data/rails/actionpack/test/controller/new_base/base_test.rb +132 -0
  316. data/rails/actionpack/test/controller/new_base/content_negotiation_test.rb +27 -0
  317. data/rails/actionpack/test/controller/new_base/content_type_test.rb +112 -0
  318. data/rails/actionpack/test/controller/new_base/metal_test.rb +45 -0
  319. data/rails/actionpack/test/controller/new_base/middleware_test.rb +110 -0
  320. data/rails/actionpack/test/controller/new_base/render_action_test.rb +315 -0
  321. data/rails/actionpack/test/controller/new_base/render_body_test.rb +170 -0
  322. data/rails/actionpack/test/controller/new_base/render_context_test.rb +54 -0
  323. data/rails/actionpack/test/controller/new_base/render_file_test.rb +70 -0
  324. data/rails/actionpack/test/controller/new_base/render_html_test.rb +190 -0
  325. data/rails/actionpack/test/controller/new_base/render_implicit_action_test.rb +57 -0
  326. data/rails/actionpack/test/controller/new_base/render_layout_test.rb +127 -0
  327. data/rails/actionpack/test/controller/new_base/render_partial_test.rb +63 -0
  328. data/rails/actionpack/test/controller/new_base/render_plain_test.rb +168 -0
  329. data/rails/actionpack/test/controller/new_base/render_streaming_test.rb +114 -0
  330. data/rails/actionpack/test/controller/new_base/render_template_test.rb +239 -0
  331. data/rails/actionpack/test/controller/new_base/render_test.rb +136 -0
  332. data/rails/actionpack/test/controller/new_base/render_text_test.rb +158 -0
  333. data/rails/actionpack/test/controller/new_base/render_xml_test.rb +11 -0
  334. data/rails/actionpack/test/controller/output_escaping_test.rb +17 -0
  335. data/rails/actionpack/test/controller/parameters/accessors_test.rb +125 -0
  336. data/rails/actionpack/test/controller/parameters/always_permitted_parameters_test.rb +29 -0
  337. data/rails/actionpack/test/controller/parameters/log_on_unpermitted_params_test.rb +72 -0
  338. data/rails/actionpack/test/controller/parameters/multi_parameter_attributes_test.rb +38 -0
  339. data/rails/actionpack/test/controller/parameters/mutators_test.rb +99 -0
  340. data/rails/actionpack/test/controller/parameters/nested_parameters_test.rb +187 -0
  341. data/rails/actionpack/test/controller/parameters/parameters_permit_test.rb +289 -0
  342. data/rails/actionpack/test/controller/parameters/raise_on_unpermitted_params_test.rb +33 -0
  343. data/rails/actionpack/test/controller/params_wrapper_test.rb +362 -0
  344. data/rails/actionpack/test/controller/permitted_params_test.rb +25 -0
  345. data/rails/actionpack/test/controller/redirect_test.rb +354 -0
  346. data/rails/actionpack/test/controller/render_js_test.rb +34 -0
  347. data/rails/actionpack/test/controller/render_json_test.rb +136 -0
  348. data/rails/actionpack/test/controller/render_other_test.rb +24 -0
  349. data/rails/actionpack/test/controller/render_test.rb +579 -0
  350. data/rails/actionpack/test/controller/render_xml_test.rb +97 -0
  351. data/rails/actionpack/test/controller/request/test_request_test.rb +35 -0
  352. data/rails/actionpack/test/controller/request_forgery_protection_test.rb +510 -0
  353. data/rails/actionpack/test/controller/required_params_test.rb +51 -0
  354. data/rails/actionpack/test/controller/rescue_test.rb +348 -0
  355. data/rails/actionpack/test/controller/resources_test.rb +1334 -0
  356. data/rails/actionpack/test/controller/routing_test.rb +2026 -0
  357. data/rails/actionpack/test/controller/runner_test.rb +22 -0
  358. data/rails/actionpack/test/controller/send_file_test.rb +209 -0
  359. data/rails/actionpack/test/controller/show_exceptions_test.rb +112 -0
  360. data/rails/actionpack/test/controller/streaming_test.rb +26 -0
  361. data/rails/actionpack/test/controller/test_case_test.rb +913 -0
  362. data/rails/actionpack/test/controller/url_for_integration_test.rb +188 -0
  363. data/rails/actionpack/test/controller/url_for_test.rb +446 -0
  364. data/rails/actionpack/test/controller/url_rewriter_test.rb +90 -0
  365. data/rails/actionpack/test/controller/webservice_test.rb +114 -0
  366. data/rails/actionpack/test/dispatch/callbacks_test.rb +58 -0
  367. data/rails/actionpack/test/dispatch/cookies_test.rb +1159 -0
  368. data/rails/actionpack/test/dispatch/debug_exceptions_test.rb +350 -0
  369. data/rails/actionpack/test/dispatch/exception_wrapper_test.rb +97 -0
  370. data/rails/actionpack/test/dispatch/header_test.rb +139 -0
  371. data/rails/actionpack/test/dispatch/live_response_test.rb +94 -0
  372. data/rails/actionpack/test/dispatch/mapper_test.rb +112 -0
  373. data/rails/actionpack/test/dispatch/middleware_stack/middleware_test.rb +77 -0
  374. data/rails/actionpack/test/dispatch/middleware_stack_test.rb +117 -0
  375. data/rails/actionpack/test/dispatch/mime_type_test.rb +203 -0
  376. data/rails/actionpack/test/dispatch/mount_test.rb +93 -0
  377. data/rails/actionpack/test/dispatch/prefix_generation_test.rb +465 -0
  378. data/rails/actionpack/test/dispatch/rack_cache_test.rb +21 -0
  379. data/rails/actionpack/test/dispatch/reloader_test.rb +176 -0
  380. data/rails/actionpack/test/dispatch/request/json_params_parsing_test.rb +164 -0
  381. data/rails/actionpack/test/dispatch/request/multipart_params_parsing_test.rb +186 -0
  382. data/rails/actionpack/test/dispatch/request/query_string_parsing_test.rb +171 -0
  383. data/rails/actionpack/test/dispatch/request/session_test.rb +116 -0
  384. data/rails/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb +177 -0
  385. data/rails/actionpack/test/dispatch/request_id_test.rb +65 -0
  386. data/rails/actionpack/test/dispatch/request_test.rb +1159 -0
  387. data/rails/actionpack/test/dispatch/response_test.rb +344 -0
  388. data/rails/actionpack/test/dispatch/routing/concerns_test.rb +120 -0
  389. data/rails/actionpack/test/dispatch/routing/inspector_test.rb +326 -0
  390. data/rails/actionpack/test/dispatch/routing/route_set_test.rb +205 -0
  391. data/rails/actionpack/test/dispatch/routing_assertions_test.rb +131 -0
  392. data/rails/actionpack/test/dispatch/routing_test.rb +4475 -0
  393. data/rails/actionpack/test/dispatch/session/abstract_store_test.rb +56 -0
  394. data/rails/actionpack/test/dispatch/session/cache_store_test.rb +179 -0
  395. data/rails/actionpack/test/dispatch/session/cookie_store_test.rb +356 -0
  396. data/rails/actionpack/test/dispatch/session/mem_cache_store_test.rb +201 -0
  397. data/rails/actionpack/test/dispatch/session/test_session_test.rb +43 -0
  398. data/rails/actionpack/test/dispatch/show_exceptions_test.rb +115 -0
  399. data/rails/actionpack/test/dispatch/ssl_test.rb +219 -0
  400. data/rails/actionpack/test/dispatch/static_test.rb +239 -0
  401. data/rails/actionpack/test/dispatch/template_assertions_test.rb +110 -0
  402. data/rails/actionpack/test/dispatch/test_request_test.rb +99 -0
  403. data/rails/actionpack/test/dispatch/test_response_test.rb +21 -0
  404. data/rails/actionpack/test/dispatch/uploaded_file_test.rb +105 -0
  405. data/rails/actionpack/test/dispatch/url_generation_test.rb +134 -0
  406. data/rails/actionpack/test/fixtures/_top_level_partial_only.erb +1 -0
  407. data/rails/actionpack/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  408. data/rails/actionpack/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  409. data/rails/actionpack/test/fixtures/company.rb +9 -0
  410. data/rails/actionpack/test/fixtures/filter_test/implicit_actions/edit.html.erb +1 -0
  411. data/rails/actionpack/test/fixtures/filter_test/implicit_actions/show.html.erb +1 -0
  412. data/rails/actionpack/test/fixtures/functional_caching/_partial.erb +3 -0
  413. data/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  414. data/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  415. data/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached_with_variant.html+phone.erb +3 -0
  416. data/rails/actionpack/test/fixtures/functional_caching/fragment_cached.html.erb +3 -0
  417. data/rails/actionpack/test/fixtures/functional_caching/fragment_cached_without_digest.html.erb +3 -0
  418. data/rails/actionpack/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  419. data/rails/actionpack/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  420. data/rails/actionpack/test/fixtures/helpers/abc_helper.rb +3 -0
  421. data/rails/actionpack/test/fixtures/helpers/fun/games_helper.rb +5 -0
  422. data/rails/actionpack/test/fixtures/helpers/fun/pdf_helper.rb +5 -0
  423. data/rails/actionpack/test/fixtures/helpers/just_me_helper.rb +3 -0
  424. data/rails/actionpack/test/fixtures/helpers/me_too_helper.rb +3 -0
  425. data/rails/actionpack/test/fixtures/helpers1_pack/pack1_helper.rb +5 -0
  426. data/rails/actionpack/test/fixtures/helpers2_pack/pack2_helper.rb +5 -0
  427. data/rails/actionpack/test/fixtures/helpers_typo/admin/users_helper.rb +5 -0
  428. data/rails/actionpack/test/fixtures/layouts/_customers.erb +1 -0
  429. data/rails/actionpack/test/fixtures/layouts/block_with_layout.erb +3 -0
  430. data/rails/actionpack/test/fixtures/layouts/builder.builder +3 -0
  431. data/rails/actionpack/test/fixtures/layouts/partial_with_layout.erb +3 -0
  432. data/rails/actionpack/test/fixtures/layouts/standard.html.erb +1 -0
  433. data/rails/actionpack/test/fixtures/layouts/talk_from_action.erb +2 -0
  434. data/rails/actionpack/test/fixtures/layouts/with_html_partial.html.erb +1 -0
  435. data/rails/actionpack/test/fixtures/layouts/xhr.html.erb +2 -0
  436. data/rails/actionpack/test/fixtures/layouts/yield.erb +2 -0
  437. data/rails/actionpack/test/fixtures/localized/hello_world.de.html +1 -0
  438. data/rails/actionpack/test/fixtures/localized/hello_world.en.html +1 -0
  439. data/rails/actionpack/test/fixtures/localized/hello_world.it.erb +1 -0
  440. data/rails/actionpack/test/fixtures/multipart/binary_file +0 -0
  441. data/rails/actionpack/test/fixtures/multipart/boundary_problem_file +10 -0
  442. data/rails/actionpack/test/fixtures/multipart/bracketed_param +5 -0
  443. data/rails/actionpack/test/fixtures/multipart/bracketed_utf8_param +5 -0
  444. data/rails/actionpack/test/fixtures/multipart/empty +10 -0
  445. data/rails/actionpack/test/fixtures/multipart/hello.txt +1 -0
  446. data/rails/actionpack/test/fixtures/multipart/large_text_file +10 -0
  447. data/rails/actionpack/test/fixtures/multipart/mixed_files +0 -0
  448. data/rails/actionpack/test/fixtures/multipart/mona_lisa.jpg +0 -0
  449. data/rails/actionpack/test/fixtures/multipart/none +9 -0
  450. data/rails/actionpack/test/fixtures/multipart/single_parameter +5 -0
  451. data/rails/actionpack/test/fixtures/multipart/single_utf8_param +5 -0
  452. data/rails/actionpack/test/fixtures/multipart/text_file +10 -0
  453. data/rails/actionpack/test/fixtures/old_content_type/render_default_content_types_for_respond_to.xml.erb +1 -0
  454. data/rails/actionpack/test/fixtures/old_content_type/render_default_for_builder.builder +1 -0
  455. data/rails/actionpack/test/fixtures/old_content_type/render_default_for_erb.erb +1 -0
  456. data/rails/actionpack/test/fixtures/post_test/layouts/post.html.erb +1 -0
  457. data/rails/actionpack/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  458. data/rails/actionpack/test/fixtures/post_test/post/index.html.erb +1 -0
  459. data/rails/actionpack/test/fixtures/post_test/post/index.iphone.erb +1 -0
  460. data/rails/actionpack/test/fixtures/post_test/super_post/index.html.erb +1 -0
  461. data/rails/actionpack/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  462. data/rails/actionpack/test/fixtures/public/400.html +1 -0
  463. data/rails/actionpack/test/fixtures/public/404.html +1 -0
  464. data/rails/actionpack/test/fixtures/public/500.da.html +1 -0
  465. data/rails/actionpack/test/fixtures/public/500.html +1 -0
  466. data/rails/actionpack/test/fixtures/public/bar/index.html +1 -0
  467. data/rails/actionpack/test/fixtures/public/bar.html +1 -0
  468. data/rails/actionpack/test/fixtures/public/foo/bar.html +1 -0
  469. data/rails/actionpack/test/fixtures/public/foo/baz.css +3 -0
  470. data/rails/actionpack/test/fixtures/public/foo/index.html +1 -0
  471. data/rails/actionpack/test/fixtures/public/foo//343/201/223/343/202/223/343/201/253/343/201/241/343/201/257.html +1 -0
  472. data/rails/actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js +4 -0
  473. data/rails/actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js.gz +0 -0
  474. data/rails/actionpack/test/fixtures/public/gzip/foo.zoo +4 -0
  475. data/rails/actionpack/test/fixtures/public/gzip/foo.zoo.gz +0 -0
  476. data/rails/actionpack/test/fixtures/public/index.html +1 -0
  477. data/rails/actionpack/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  478. data/rails/actionpack/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  479. data/rails/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  480. data/rails/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  481. data/rails/actionpack/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  482. data/rails/actionpack/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  483. data/rails/actionpack/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  484. data/rails/actionpack/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  485. data/rails/actionpack/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  486. data/rails/actionpack/test/fixtures/respond_to/using_defaults_with_all.html.erb +1 -0
  487. data/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  488. data/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  489. data/rails/actionpack/test/fixtures/respond_to/variant_any_implicit_render.html+phablet.erb +1 -0
  490. data/rails/actionpack/test/fixtures/respond_to/variant_any_implicit_render.html+tablet.erb +1 -0
  491. data/rails/actionpack/test/fixtures/respond_to/variant_inline_syntax_without_block.html+phone.erb +1 -0
  492. data/rails/actionpack/test/fixtures/respond_to/variant_plus_none_for_format.html.erb +1 -0
  493. data/rails/actionpack/test/fixtures/respond_to/variant_with_implicit_rendering.html+mobile.erb +1 -0
  494. data/rails/actionpack/test/fixtures/ruby_template.ruby +2 -0
  495. data/rails/actionpack/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +10 -0
  496. data/rails/actionpack/test/fixtures/shared.html.erb +1 -0
  497. data/rails/actionpack/test/fixtures/star_star_mime/index.js.erb +1 -0
  498. data/rails/actionpack/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  499. data/rails/actionpack/test/fixtures/test/_partial.erb +1 -0
  500. data/rails/actionpack/test/fixtures/test/_partial.html.erb +1 -0
  501. data/rails/actionpack/test/fixtures/test/_partial.js.erb +1 -0
  502. data/rails/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  503. data/rails/actionpack/test/fixtures/test/formatted_xml_erb.builder +1 -0
  504. data/rails/actionpack/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  505. data/rails/actionpack/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  506. data/rails/actionpack/test/fixtures/test/hello/hello.erb +1 -0
  507. data/rails/actionpack/test/fixtures/test/hello_world.erb +1 -0
  508. data/rails/actionpack/test/fixtures/test/hello_world_with_partial.html.erb +2 -0
  509. data/rails/actionpack/test/fixtures/test/hello_xml_world.builder +11 -0
  510. data/rails/actionpack/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  511. data/rails/actionpack/test/fixtures/test/render_file_with_ivar.erb +1 -0
  512. data/rails/actionpack/test/fixtures/test/render_file_with_locals.erb +1 -0
  513. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/bar/index.html +1 -0
  514. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/bar.html +1 -0
  515. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/bar.html +1 -0
  516. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/baz.css +3 -0
  517. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/index.html +1 -0
  518. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo//343/201/223/343/202/223/343/201/253/343/201/241/343/201/257.html +1 -0
  519. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/application-a71b3024f80aea3181c09774ca17e712.js +4 -0
  520. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/application-a71b3024f80aea3181c09774ca17e712.js.gz +0 -0
  521. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/foo.zoo +4 -0
  522. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/foo.zoo.gz +0 -0
  523. data/rails/actionpack/test/fixtures//345/205/254/345/205/261/index.html +1 -0
  524. data/rails/actionpack/test/journey/gtg/builder_test.rb +79 -0
  525. data/rails/actionpack/test/journey/gtg/transition_table_test.rb +115 -0
  526. data/rails/actionpack/test/journey/nfa/simulator_test.rb +98 -0
  527. data/rails/actionpack/test/journey/nfa/transition_table_test.rb +72 -0
  528. data/rails/actionpack/test/journey/nodes/symbol_test.rb +17 -0
  529. data/rails/actionpack/test/journey/path/pattern_test.rb +284 -0
  530. data/rails/actionpack/test/journey/route/definition/parser_test.rb +110 -0
  531. data/rails/actionpack/test/journey/route/definition/scanner_test.rb +69 -0
  532. data/rails/actionpack/test/journey/route_test.rb +106 -0
  533. data/rails/actionpack/test/journey/router/utils_test.rb +38 -0
  534. data/rails/actionpack/test/journey/router_test.rb +622 -0
  535. data/rails/actionpack/test/journey/routes_test.rb +53 -0
  536. data/rails/actionpack/test/lib/controller/fake_controllers.rb +35 -0
  537. data/rails/actionpack/test/lib/controller/fake_models.rb +73 -0
  538. data/rails/actionpack/test/routing/helper_test.rb +45 -0
  539. data/rails/actionpack/test/tmp/.gitignore +0 -0
  540. data/rails/actionview/CHANGELOG.md +228 -0
  541. data/rails/actionview/MIT-LICENSE +21 -0
  542. data/rails/actionview/README.rdoc +39 -0
  543. data/rails/actionview/RUNNING_UNIT_TESTS.rdoc +27 -0
  544. data/rails/actionview/Rakefile +83 -0
  545. data/rails/actionview/actionview.gemspec +31 -0
  546. data/rails/actionview/lib/action_view/base.rb +205 -0
  547. data/rails/actionview/lib/action_view/buffers.rb +50 -0
  548. data/rails/actionview/lib/action_view/context.rb +36 -0
  549. data/rails/actionview/lib/action_view/dependency_tracker.rb +141 -0
  550. data/rails/actionview/lib/action_view/digestor.rb +122 -0
  551. data/rails/actionview/lib/action_view/flows.rb +76 -0
  552. data/rails/actionview/lib/action_view/gem_version.rb +15 -0
  553. data/rails/actionview/lib/action_view/helpers/active_model_helper.rb +49 -0
  554. data/rails/actionview/lib/action_view/helpers/asset_tag_helper.rb +329 -0
  555. data/rails/actionview/lib/action_view/helpers/asset_url_helper.rb +366 -0
  556. data/rails/actionview/lib/action_view/helpers/atom_feed_helper.rb +203 -0
  557. data/rails/actionview/lib/action_view/helpers/cache_helper.rb +200 -0
  558. data/rails/actionview/lib/action_view/helpers/capture_helper.rb +207 -0
  559. data/rails/actionview/lib/action_view/helpers/controller_helper.rb +25 -0
  560. data/rails/actionview/lib/action_view/helpers/csrf_helper.rb +33 -0
  561. data/rails/actionview/lib/action_view/helpers/date_helper.rb +1098 -0
  562. data/rails/actionview/lib/action_view/helpers/debug_helper.rb +35 -0
  563. data/rails/actionview/lib/action_view/helpers/form_helper.rb +1942 -0
  564. data/rails/actionview/lib/action_view/helpers/form_options_helper.rb +841 -0
  565. data/rails/actionview/lib/action_view/helpers/form_tag_helper.rb +877 -0
  566. data/rails/actionview/lib/action_view/helpers/javascript_helper.rb +81 -0
  567. data/rails/actionview/lib/action_view/helpers/number_helper.rb +432 -0
  568. data/rails/actionview/lib/action_view/helpers/output_safety_helper.rb +38 -0
  569. data/rails/actionview/lib/action_view/helpers/record_tag_helper.rb +108 -0
  570. data/rails/actionview/lib/action_view/helpers/rendering_helper.rb +98 -0
  571. data/rails/actionview/lib/action_view/helpers/sanitize_helper.rb +172 -0
  572. data/rails/actionview/lib/action_view/helpers/tag_helper.rb +188 -0
  573. data/rails/actionview/lib/action_view/helpers/tags/base.rb +155 -0
  574. data/rails/actionview/lib/action_view/helpers/tags/check_box.rb +64 -0
  575. data/rails/actionview/lib/action_view/helpers/tags/checkable.rb +16 -0
  576. data/rails/actionview/lib/action_view/helpers/tags/collection_check_boxes.rb +57 -0
  577. data/rails/actionview/lib/action_view/helpers/tags/collection_helpers.rb +85 -0
  578. data/rails/actionview/lib/action_view/helpers/tags/collection_radio_buttons.rb +36 -0
  579. data/rails/actionview/lib/action_view/helpers/tags/collection_select.rb +28 -0
  580. data/rails/actionview/lib/action_view/helpers/tags/color_field.rb +25 -0
  581. data/rails/actionview/lib/action_view/helpers/tags/date_field.rb +13 -0
  582. data/rails/actionview/lib/action_view/helpers/tags/date_select.rb +72 -0
  583. data/rails/actionview/lib/action_view/helpers/tags/datetime_field.rb +30 -0
  584. data/rails/actionview/lib/action_view/helpers/tags/datetime_local_field.rb +19 -0
  585. data/rails/actionview/lib/action_view/helpers/tags/datetime_select.rb +8 -0
  586. data/rails/actionview/lib/action_view/helpers/tags/email_field.rb +8 -0
  587. data/rails/actionview/lib/action_view/helpers/tags/file_field.rb +8 -0
  588. data/rails/actionview/lib/action_view/helpers/tags/grouped_collection_select.rb +29 -0
  589. data/rails/actionview/lib/action_view/helpers/tags/hidden_field.rb +8 -0
  590. data/rails/actionview/lib/action_view/helpers/tags/label.rb +79 -0
  591. data/rails/actionview/lib/action_view/helpers/tags/month_field.rb +13 -0
  592. data/rails/actionview/lib/action_view/helpers/tags/number_field.rb +18 -0
  593. data/rails/actionview/lib/action_view/helpers/tags/password_field.rb +12 -0
  594. data/rails/actionview/lib/action_view/helpers/tags/placeholderable.rb +22 -0
  595. data/rails/actionview/lib/action_view/helpers/tags/radio_button.rb +31 -0
  596. data/rails/actionview/lib/action_view/helpers/tags/range_field.rb +8 -0
  597. data/rails/actionview/lib/action_view/helpers/tags/search_field.rb +22 -0
  598. data/rails/actionview/lib/action_view/helpers/tags/select.rb +41 -0
  599. data/rails/actionview/lib/action_view/helpers/tags/tel_field.rb +8 -0
  600. data/rails/actionview/lib/action_view/helpers/tags/text_area.rb +22 -0
  601. data/rails/actionview/lib/action_view/helpers/tags/text_field.rb +33 -0
  602. data/rails/actionview/lib/action_view/helpers/tags/time_field.rb +13 -0
  603. data/rails/actionview/lib/action_view/helpers/tags/time_select.rb +8 -0
  604. data/rails/actionview/lib/action_view/helpers/tags/time_zone_select.rb +20 -0
  605. data/rails/actionview/lib/action_view/helpers/tags/translator.rb +40 -0
  606. data/rails/actionview/lib/action_view/helpers/tags/url_field.rb +8 -0
  607. data/rails/actionview/lib/action_view/helpers/tags/week_field.rb +13 -0
  608. data/rails/actionview/lib/action_view/helpers/tags.rb +42 -0
  609. data/rails/actionview/lib/action_view/helpers/text_helper.rb +467 -0
  610. data/rails/actionview/lib/action_view/helpers/translation_helper.rb +106 -0
  611. data/rails/actionview/lib/action_view/helpers/url_helper.rb +620 -0
  612. data/rails/actionview/lib/action_view/helpers.rb +64 -0
  613. data/rails/actionview/lib/action_view/layouts.rb +426 -0
  614. data/rails/actionview/lib/action_view/locale/en.yml +56 -0
  615. data/rails/actionview/lib/action_view/log_subscriber.rb +44 -0
  616. data/rails/actionview/lib/action_view/lookup_context.rb +255 -0
  617. data/rails/actionview/lib/action_view/model_naming.rb +12 -0
  618. data/rails/actionview/lib/action_view/path_set.rb +77 -0
  619. data/rails/actionview/lib/action_view/railtie.rb +49 -0
  620. data/rails/actionview/lib/action_view/record_identifier.rb +84 -0
  621. data/rails/actionview/lib/action_view/renderer/abstract_renderer.rb +49 -0
  622. data/rails/actionview/lib/action_view/renderer/partial_renderer.rb +548 -0
  623. data/rails/actionview/lib/action_view/renderer/renderer.rb +50 -0
  624. data/rails/actionview/lib/action_view/renderer/streaming_template_renderer.rb +103 -0
  625. data/rails/actionview/lib/action_view/renderer/template_renderer.rb +101 -0
  626. data/rails/actionview/lib/action_view/rendering.rb +146 -0
  627. data/rails/actionview/lib/action_view/routing_url_for.rb +134 -0
  628. data/rails/actionview/lib/action_view/tasks/dependencies.rake +21 -0
  629. data/rails/actionview/lib/action_view/template/error.rb +141 -0
  630. data/rails/actionview/lib/action_view/template/handlers/builder.rb +26 -0
  631. data/rails/actionview/lib/action_view/template/handlers/erb.rb +145 -0
  632. data/rails/actionview/lib/action_view/template/handlers/raw.rb +11 -0
  633. data/rails/actionview/lib/action_view/template/handlers.rb +62 -0
  634. data/rails/actionview/lib/action_view/template/html.rb +34 -0
  635. data/rails/actionview/lib/action_view/template/resolver.rb +349 -0
  636. data/rails/actionview/lib/action_view/template/text.rb +34 -0
  637. data/rails/actionview/lib/action_view/template/types.rb +57 -0
  638. data/rails/actionview/lib/action_view/template.rb +336 -0
  639. data/rails/actionview/lib/action_view/test_case.rb +278 -0
  640. data/rails/actionview/lib/action_view/testing/resolvers.rb +54 -0
  641. data/rails/actionview/lib/action_view/version.rb +8 -0
  642. data/rails/actionview/lib/action_view/view_paths.rb +111 -0
  643. data/rails/actionview/lib/action_view.rb +96 -0
  644. data/rails/actionview/test/abstract_unit.rb +345 -0
  645. data/rails/actionview/test/actionpack/abstract/abstract_controller_test.rb +310 -0
  646. data/rails/actionview/test/actionpack/abstract/helper_test.rb +127 -0
  647. data/rails/actionview/test/actionpack/abstract/layouts_test.rb +384 -0
  648. data/rails/actionview/test/actionpack/abstract/render_test.rb +103 -0
  649. data/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me3/formatted.html.erb +1 -0
  650. data/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me3/index.erb +1 -0
  651. data/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me4/index.erb +1 -0
  652. data/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me5/index.erb +1 -0
  653. data/rails/actionview/test/actionpack/abstract/views/action_with_ivars.erb +1 -0
  654. data/rails/actionview/test/actionpack/abstract/views/helper_test.erb +1 -0
  655. data/rails/actionview/test/actionpack/abstract/views/index.erb +1 -0
  656. data/rails/actionview/test/actionpack/abstract/views/layouts/abstract_controller/testing/me4.erb +1 -0
  657. data/rails/actionview/test/actionpack/abstract/views/layouts/application.erb +1 -0
  658. data/rails/actionview/test/actionpack/abstract/views/naked_render.erb +1 -0
  659. data/rails/actionview/test/actionpack/controller/capture_test.rb +81 -0
  660. data/rails/actionview/test/actionpack/controller/layout_test.rb +269 -0
  661. data/rails/actionview/test/actionpack/controller/render_test.rb +1344 -0
  662. data/rails/actionview/test/actionpack/controller/view_paths_test.rb +174 -0
  663. data/rails/actionview/test/active_record_unit.rb +91 -0
  664. data/rails/actionview/test/activerecord/controller_runtime_test.rb +93 -0
  665. data/rails/actionview/test/activerecord/debug_helper_test.rb +8 -0
  666. data/rails/actionview/test/activerecord/form_helper_activerecord_test.rb +92 -0
  667. data/rails/actionview/test/activerecord/polymorphic_routes_test.rb +733 -0
  668. data/rails/actionview/test/activerecord/render_partial_with_record_identification_test.rb +210 -0
  669. data/rails/actionview/test/fixtures/_top_level_partial.html.erb +1 -0
  670. data/rails/actionview/test/fixtures/_top_level_partial_only.erb +1 -0
  671. data/rails/actionview/test/fixtures/actionpack/bad_customers/_bad_customer.html.erb +1 -0
  672. data/rails/actionview/test/fixtures/actionpack/customers/_customer.html.erb +1 -0
  673. data/rails/actionview/test/fixtures/actionpack/fun/games/_form.erb +1 -0
  674. data/rails/actionview/test/fixtures/actionpack/fun/games/hello_world.erb +1 -0
  675. data/rails/actionview/test/fixtures/actionpack/good_customers/_good_customer.html.erb +1 -0
  676. data/rails/actionview/test/fixtures/actionpack/hello.html +1 -0
  677. data/rails/actionview/test/fixtures/actionpack/layout_tests/alt/layouts/alt.erb +0 -0
  678. data/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/controller_name_space/nested.erb +1 -0
  679. data/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/item.erb +1 -0
  680. data/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/layout_test.erb +1 -0
  681. data/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  682. data/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/symlinked/symlinked_layout.erb +5 -0
  683. data/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/third_party_template_library.mab +1 -0
  684. data/rails/actionview/test/fixtures/actionpack/layout_tests/views/goodbye.erb +1 -0
  685. data/rails/actionview/test/fixtures/actionpack/layout_tests/views/hello.erb +1 -0
  686. data/rails/actionview/test/fixtures/actionpack/layouts/_column.html.erb +2 -0
  687. data/rails/actionview/test/fixtures/actionpack/layouts/_customers.erb +1 -0
  688. data/rails/actionview/test/fixtures/actionpack/layouts/_partial_and_yield.erb +2 -0
  689. data/rails/actionview/test/fixtures/actionpack/layouts/_yield_only.erb +1 -0
  690. data/rails/actionview/test/fixtures/actionpack/layouts/_yield_with_params.erb +1 -0
  691. data/rails/actionview/test/fixtures/actionpack/layouts/block_with_layout.erb +3 -0
  692. data/rails/actionview/test/fixtures/actionpack/layouts/builder.builder +3 -0
  693. data/rails/actionview/test/fixtures/actionpack/layouts/partial_with_layout.erb +3 -0
  694. data/rails/actionview/test/fixtures/actionpack/layouts/standard.html.erb +1 -0
  695. data/rails/actionview/test/fixtures/actionpack/layouts/streaming.erb +4 -0
  696. data/rails/actionview/test/fixtures/actionpack/layouts/talk_from_action.erb +2 -0
  697. data/rails/actionview/test/fixtures/actionpack/layouts/with_html_partial.html.erb +1 -0
  698. data/rails/actionview/test/fixtures/actionpack/layouts/xhr.html.erb +2 -0
  699. data/rails/actionview/test/fixtures/actionpack/layouts/yield.erb +2 -0
  700. data/rails/actionview/test/fixtures/actionpack/layouts/yield_with_render_inline_inside.erb +2 -0
  701. data/rails/actionview/test/fixtures/actionpack/layouts/yield_with_render_partial_inside.erb +2 -0
  702. data/rails/actionview/test/fixtures/actionpack/quiz/questions/_question.html.erb +1 -0
  703. data/rails/actionview/test/fixtures/actionpack/shared.html.erb +1 -0
  704. data/rails/actionview/test/fixtures/actionpack/test/_changing_priority.html.erb +1 -0
  705. data/rails/actionview/test/fixtures/actionpack/test/_changing_priority.json.erb +1 -0
  706. data/rails/actionview/test/fixtures/actionpack/test/_counter.html.erb +1 -0
  707. data/rails/actionview/test/fixtures/actionpack/test/_customer.erb +1 -0
  708. data/rails/actionview/test/fixtures/actionpack/test/_customer_counter.erb +1 -0
  709. data/rails/actionview/test/fixtures/actionpack/test/_customer_counter_with_as.erb +1 -0
  710. data/rails/actionview/test/fixtures/actionpack/test/_customer_greeting.erb +1 -0
  711. data/rails/actionview/test/fixtures/actionpack/test/_customer_iteration.erb +1 -0
  712. data/rails/actionview/test/fixtures/actionpack/test/_customer_iteration_with_as.erb +1 -0
  713. data/rails/actionview/test/fixtures/actionpack/test/_customer_with_var.erb +1 -0
  714. data/rails/actionview/test/fixtures/actionpack/test/_directory/_partial_with_locales.html.erb +1 -0
  715. data/rails/actionview/test/fixtures/actionpack/test/_first_json_partial.json.erb +1 -0
  716. data/rails/actionview/test/fixtures/actionpack/test/_form.erb +1 -0
  717. data/rails/actionview/test/fixtures/actionpack/test/_hash_greeting.erb +1 -0
  718. data/rails/actionview/test/fixtures/actionpack/test/_hash_object.erb +2 -0
  719. data/rails/actionview/test/fixtures/actionpack/test/_hello.builder +1 -0
  720. data/rails/actionview/test/fixtures/actionpack/test/_json_change_priority.json.erb +0 -0
  721. data/rails/actionview/test/fixtures/actionpack/test/_labelling_form.erb +1 -0
  722. data/rails/actionview/test/fixtures/actionpack/test/_layout_for_partial.html.erb +3 -0
  723. data/rails/actionview/test/fixtures/actionpack/test/_partial.erb +1 -0
  724. data/rails/actionview/test/fixtures/actionpack/test/_partial.html.erb +1 -0
  725. data/rails/actionview/test/fixtures/actionpack/test/_partial.js.erb +1 -0
  726. data/rails/actionview/test/fixtures/actionpack/test/_partial_for_use_in_layout.html.erb +1 -0
  727. data/rails/actionview/test/fixtures/actionpack/test/_partial_html_erb.html.erb +1 -0
  728. data/rails/actionview/test/fixtures/actionpack/test/_partial_name_local_variable.erb +1 -0
  729. data/rails/actionview/test/fixtures/actionpack/test/_partial_only.erb +1 -0
  730. data/rails/actionview/test/fixtures/actionpack/test/_partial_only_html.html +1 -0
  731. data/rails/actionview/test/fixtures/actionpack/test/_partial_with_partial.erb +2 -0
  732. data/rails/actionview/test/fixtures/actionpack/test/_person.erb +2 -0
  733. data/rails/actionview/test/fixtures/actionpack/test/_raise_indentation.html.erb +13 -0
  734. data/rails/actionview/test/fixtures/actionpack/test/_second_json_partial.json.erb +1 -0
  735. data/rails/actionview/test/fixtures/actionpack/test/action_talk_to_layout.erb +2 -0
  736. data/rails/actionview/test/fixtures/actionpack/test/calling_partial_with_layout.html.erb +1 -0
  737. data/rails/actionview/test/fixtures/actionpack/test/capturing.erb +4 -0
  738. data/rails/actionview/test/fixtures/actionpack/test/change_priority.html.erb +2 -0
  739. data/rails/actionview/test/fixtures/actionpack/test/content_for.erb +1 -0
  740. data/rails/actionview/test/fixtures/actionpack/test/content_for_concatenated.erb +3 -0
  741. data/rails/actionview/test/fixtures/actionpack/test/content_for_with_parameter.erb +2 -0
  742. data/rails/actionview/test/fixtures/actionpack/test/dot.directory/render_file_with_ivar.erb +1 -0
  743. data/rails/actionview/test/fixtures/actionpack/test/formatted_html_erb.html.erb +1 -0
  744. data/rails/actionview/test/fixtures/actionpack/test/formatted_xml_erb.builder +1 -0
  745. data/rails/actionview/test/fixtures/actionpack/test/formatted_xml_erb.html.erb +1 -0
  746. data/rails/actionview/test/fixtures/actionpack/test/formatted_xml_erb.xml.erb +1 -0
  747. data/rails/actionview/test/fixtures/actionpack/test/greeting.html.erb +1 -0
  748. data/rails/actionview/test/fixtures/actionpack/test/greeting.xml.erb +1 -0
  749. data/rails/actionview/test/fixtures/actionpack/test/hello/hello.erb +1 -0
  750. data/rails/actionview/test/fixtures/actionpack/test/hello,world.erb +1 -0
  751. data/rails/actionview/test/fixtures/actionpack/test/hello.builder +4 -0
  752. data/rails/actionview/test/fixtures/actionpack/test/hello_world.erb +1 -0
  753. data/rails/actionview/test/fixtures/actionpack/test/hello_world_container.builder +3 -0
  754. data/rails/actionview/test/fixtures/actionpack/test/hello_world_from_rxml.builder +3 -0
  755. data/rails/actionview/test/fixtures/actionpack/test/hello_world_with_layout_false.erb +1 -0
  756. data/rails/actionview/test/fixtures/actionpack/test/hello_world_with_partial.html.erb +2 -0
  757. data/rails/actionview/test/fixtures/actionpack/test/hello_xml_world.builder +11 -0
  758. data/rails/actionview/test/fixtures/actionpack/test/html_template.html.erb +1 -0
  759. data/rails/actionview/test/fixtures/actionpack/test/hyphen-ated.erb +1 -0
  760. data/rails/actionview/test/fixtures/actionpack/test/implicit_content_type.atom.builder +2 -0
  761. data/rails/actionview/test/fixtures/actionpack/test/list.erb +1 -0
  762. data/rails/actionview/test/fixtures/actionpack/test/non_erb_block_content_for.builder +4 -0
  763. data/rails/actionview/test/fixtures/actionpack/test/potential_conflicts.erb +4 -0
  764. data/rails/actionview/test/fixtures/actionpack/test/proper_block_detection.erb +1 -0
  765. data/rails/actionview/test/fixtures/actionpack/test/render_file_from_template.html.erb +1 -0
  766. data/rails/actionview/test/fixtures/actionpack/test/render_file_with_ivar.erb +1 -0
  767. data/rails/actionview/test/fixtures/actionpack/test/render_file_with_locals.erb +1 -0
  768. data/rails/actionview/test/fixtures/actionpack/test/render_file_with_locals_and_default.erb +1 -0
  769. data/rails/actionview/test/fixtures/actionpack/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  770. data/rails/actionview/test/fixtures/actionpack/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  771. data/rails/actionview/test/fixtures/actionpack/test/render_implicit_js_template_without_layout.js.erb +1 -0
  772. data/rails/actionview/test/fixtures/actionpack/test/render_partial_inside_directory.html.erb +1 -0
  773. data/rails/actionview/test/fixtures/actionpack/test/render_to_string_test.erb +1 -0
  774. data/rails/actionview/test/fixtures/actionpack/test/render_two_partials.html.erb +2 -0
  775. data/rails/actionview/test/fixtures/actionpack/test/using_layout_around_block.html.erb +1 -0
  776. data/rails/actionview/test/fixtures/actionpack/test/with_html_partial.html.erb +1 -0
  777. data/rails/actionview/test/fixtures/actionpack/test/with_partial.html.erb +1 -0
  778. data/rails/actionview/test/fixtures/actionpack/test/with_partial.text.erb +1 -0
  779. data/rails/actionview/test/fixtures/actionpack/test/with_xml_template.html.erb +1 -0
  780. data/rails/actionview/test/fixtures/blog_public/.gitignore +1 -0
  781. data/rails/actionview/test/fixtures/blog_public/blog.html +1 -0
  782. data/rails/actionview/test/fixtures/blog_public/index.html +1 -0
  783. data/rails/actionview/test/fixtures/blog_public/subdir/index.html +1 -0
  784. data/rails/actionview/test/fixtures/comments/empty.de.html.erb +1 -0
  785. data/rails/actionview/test/fixtures/comments/empty.html.builder +1 -0
  786. data/rails/actionview/test/fixtures/comments/empty.html.erb +1 -0
  787. data/rails/actionview/test/fixtures/comments/empty.xml.erb +1 -0
  788. data/rails/actionview/test/fixtures/companies.yml +24 -0
  789. data/rails/actionview/test/fixtures/company.rb +9 -0
  790. data/rails/actionview/test/fixtures/custom_pattern/another.html.erb +1 -0
  791. data/rails/actionview/test/fixtures/custom_pattern/html/another.erb +1 -0
  792. data/rails/actionview/test/fixtures/custom_pattern/html/path.erb +1 -0
  793. data/rails/actionview/test/fixtures/customers/_customer.html.erb +1 -0
  794. data/rails/actionview/test/fixtures/customers/_customer.xml.erb +1 -0
  795. data/rails/actionview/test/fixtures/db_definitions/sqlite.sql +49 -0
  796. data/rails/actionview/test/fixtures/developer.rb +6 -0
  797. data/rails/actionview/test/fixtures/developers/_developer.erb +1 -0
  798. data/rails/actionview/test/fixtures/developers.yml +21 -0
  799. data/rails/actionview/test/fixtures/developers_projects.yml +13 -0
  800. data/rails/actionview/test/fixtures/digestor/comments/_comment.html.erb +1 -0
  801. data/rails/actionview/test/fixtures/digestor/comments/_comments.html.erb +1 -0
  802. data/rails/actionview/test/fixtures/digestor/events/_event.html.erb +0 -0
  803. data/rails/actionview/test/fixtures/digestor/level/_recursion.html.erb +1 -0
  804. data/rails/actionview/test/fixtures/digestor/level/below/_header.html.erb +0 -0
  805. data/rails/actionview/test/fixtures/digestor/level/below/index.html.erb +1 -0
  806. data/rails/actionview/test/fixtures/digestor/level/recursion.html.erb +1 -0
  807. data/rails/actionview/test/fixtures/digestor/messages/_form.html.erb +0 -0
  808. data/rails/actionview/test/fixtures/digestor/messages/_header.html.erb +0 -0
  809. data/rails/actionview/test/fixtures/digestor/messages/_message.html.erb +1 -0
  810. data/rails/actionview/test/fixtures/digestor/messages/actions/_move.html.erb +0 -0
  811. data/rails/actionview/test/fixtures/digestor/messages/edit.html.erb +5 -0
  812. data/rails/actionview/test/fixtures/digestor/messages/index.html.erb +2 -0
  813. data/rails/actionview/test/fixtures/digestor/messages/new.html+iphone.erb +15 -0
  814. data/rails/actionview/test/fixtures/digestor/messages/show.html.erb +14 -0
  815. data/rails/actionview/test/fixtures/fun/games/_game.erb +1 -0
  816. data/rails/actionview/test/fixtures/fun/games/hello_world.erb +1 -0
  817. data/rails/actionview/test/fixtures/fun/serious/games/_game.erb +1 -0
  818. data/rails/actionview/test/fixtures/functional_caching/fragment_cached_without_digest.html.erb +3 -0
  819. data/rails/actionview/test/fixtures/games/_game.erb +1 -0
  820. data/rails/actionview/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  821. data/rails/actionview/test/fixtures/happy_path/render_action/hello_world.erb +1 -0
  822. data/rails/actionview/test/fixtures/helpers/abc_helper.rb +3 -0
  823. data/rails/actionview/test/fixtures/helpers/helpery_test_helper.rb +5 -0
  824. data/rails/actionview/test/fixtures/helpers_missing/invalid_require_helper.rb +5 -0
  825. data/rails/actionview/test/fixtures/layout_tests/alt/hello.erb +1 -0
  826. data/rails/actionview/test/fixtures/layouts/_column.html.erb +2 -0
  827. data/rails/actionview/test/fixtures/layouts/_customers.erb +1 -0
  828. data/rails/actionview/test/fixtures/layouts/_partial_and_yield.erb +2 -0
  829. data/rails/actionview/test/fixtures/layouts/_yield_only.erb +1 -0
  830. data/rails/actionview/test/fixtures/layouts/_yield_with_params.erb +1 -0
  831. data/rails/actionview/test/fixtures/layouts/streaming.erb +4 -0
  832. data/rails/actionview/test/fixtures/layouts/yield.erb +2 -0
  833. data/rails/actionview/test/fixtures/layouts/yield_with_render_inline_inside.erb +2 -0
  834. data/rails/actionview/test/fixtures/layouts/yield_with_render_partial_inside.erb +2 -0
  835. data/rails/actionview/test/fixtures/mascot.rb +3 -0
  836. data/rails/actionview/test/fixtures/mascots/_mascot.html.erb +1 -0
  837. data/rails/actionview/test/fixtures/mascots.yml +4 -0
  838. data/rails/actionview/test/fixtures/multipart/bracketed_utf8_param +5 -0
  839. data/rails/actionview/test/fixtures/multipart/single_utf8_param +5 -0
  840. data/rails/actionview/test/fixtures/override/test/hello_world.erb +1 -0
  841. data/rails/actionview/test/fixtures/override2/layouts/test/sub.erb +1 -0
  842. data/rails/actionview/test/fixtures/plain_text.raw +1 -0
  843. data/rails/actionview/test/fixtures/plain_text_with_characters.raw +1 -0
  844. data/rails/actionview/test/fixtures/project.rb +3 -0
  845. data/rails/actionview/test/fixtures/projects/_project.erb +1 -0
  846. data/rails/actionview/test/fixtures/projects.yml +7 -0
  847. data/rails/actionview/test/fixtures/public/.gitignore +1 -0
  848. data/rails/actionview/test/fixtures/public/elsewhere/cools.js +1 -0
  849. data/rails/actionview/test/fixtures/public/elsewhere/file.css +1 -0
  850. data/rails/actionview/test/fixtures/public/foo/baz.css +3 -0
  851. data/rails/actionview/test/fixtures/public/javascripts/application.js +1 -0
  852. data/rails/actionview/test/fixtures/public/javascripts/bank.js +1 -0
  853. data/rails/actionview/test/fixtures/public/javascripts/common.javascript +1 -0
  854. data/rails/actionview/test/fixtures/public/javascripts/controls.js +1 -0
  855. data/rails/actionview/test/fixtures/public/javascripts/dragdrop.js +1 -0
  856. data/rails/actionview/test/fixtures/public/javascripts/effects.js +1 -0
  857. data/rails/actionview/test/fixtures/public/javascripts/prototype.js +1 -0
  858. data/rails/actionview/test/fixtures/public/javascripts/robber.js +1 -0
  859. data/rails/actionview/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  860. data/rails/actionview/test/fixtures/public/javascripts/version.1.0.js +1 -0
  861. data/rails/actionview/test/fixtures/public/stylesheets/bank.css +1 -0
  862. data/rails/actionview/test/fixtures/public/stylesheets/random.styles +1 -0
  863. data/rails/actionview/test/fixtures/public/stylesheets/robber.css +1 -0
  864. data/rails/actionview/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  865. data/rails/actionview/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  866. data/rails/actionview/test/fixtures/replies/_reply.erb +1 -0
  867. data/rails/actionview/test/fixtures/replies.yml +15 -0
  868. data/rails/actionview/test/fixtures/reply.rb +7 -0
  869. data/rails/actionview/test/fixtures/respond_to/using_defaults_with_all.html.erb +1 -0
  870. data/rails/actionview/test/fixtures/ruby_template.ruby +2 -0
  871. data/rails/actionview/test/fixtures/scope/test/modgreet.erb +1 -0
  872. data/rails/actionview/test/fixtures/shared.html.erb +1 -0
  873. data/rails/actionview/test/fixtures/test/_200.html.erb +1 -0
  874. data/rails/actionview/test/fixtures/test/_b_layout_for_partial.html.erb +1 -0
  875. data/rails/actionview/test/fixtures/test/_b_layout_for_partial_with_object.html.erb +1 -0
  876. data/rails/actionview/test/fixtures/test/_b_layout_for_partial_with_object_counter.html.erb +1 -0
  877. data/rails/actionview/test/fixtures/test/_changing_priority.html.erb +1 -0
  878. data/rails/actionview/test/fixtures/test/_changing_priority.json.erb +1 -0
  879. data/rails/actionview/test/fixtures/test/_content_tag_nested_in_content_tag.erb +3 -0
  880. data/rails/actionview/test/fixtures/test/_counter.html.erb +1 -0
  881. data/rails/actionview/test/fixtures/test/_customer.erb +1 -0
  882. data/rails/actionview/test/fixtures/test/_customer_greeting.erb +1 -0
  883. data/rails/actionview/test/fixtures/test/_customer_with_var.erb +1 -0
  884. data/rails/actionview/test/fixtures/test/_directory/_partial_with_locales.html.erb +1 -0
  885. data/rails/actionview/test/fixtures/test/_first_json_partial.json.erb +1 -0
  886. data/rails/actionview/test/fixtures/test/_from_helper.erb +1 -0
  887. data/rails/actionview/test/fixtures/test/_json_change_priority.json.erb +0 -0
  888. data/rails/actionview/test/fixtures/test/_label_with_block.erb +4 -0
  889. data/rails/actionview/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  890. data/rails/actionview/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  891. data/rails/actionview/test/fixtures/test/_layout_with_partial_and_yield.html.erb +4 -0
  892. data/rails/actionview/test/fixtures/test/_local_inspector.html.erb +1 -0
  893. data/rails/actionview/test/fixtures/test/_object_inspector.erb +1 -0
  894. data/rails/actionview/test/fixtures/test/_one.html.erb +1 -0
  895. data/rails/actionview/test/fixtures/test/_partial.erb +1 -0
  896. data/rails/actionview/test/fixtures/test/_partial.html.erb +1 -0
  897. data/rails/actionview/test/fixtures/test/_partial.js.erb +1 -0
  898. data/rails/actionview/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  899. data/rails/actionview/test/fixtures/test/_partial_name_local_variable.erb +1 -0
  900. data/rails/actionview/test/fixtures/test/_partial_only.erb +1 -0
  901. data/rails/actionview/test/fixtures/test/_partial_with_layout.erb +2 -0
  902. data/rails/actionview/test/fixtures/test/_partial_with_layout_block_content.erb +4 -0
  903. data/rails/actionview/test/fixtures/test/_partial_with_layout_block_partial.erb +4 -0
  904. data/rails/actionview/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  905. data/rails/actionview/test/fixtures/test/_partial_with_partial.erb +2 -0
  906. data/rails/actionview/test/fixtures/test/_raise.html.erb +1 -0
  907. data/rails/actionview/test/fixtures/test/_raise_indentation.html.erb +13 -0
  908. data/rails/actionview/test/fixtures/test/_second_json_partial.json.erb +1 -0
  909. data/rails/actionview/test/fixtures/test/_two.html.erb +1 -0
  910. data/rails/actionview/test/fixtures/test/_utf8_partial.html.erb +1 -0
  911. data/rails/actionview/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  912. data/rails/actionview/test/fixtures/test/basic.html.erb +1 -0
  913. data/rails/actionview/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  914. data/rails/actionview/test/fixtures/test/change_priority.html.erb +2 -0
  915. data/rails/actionview/test/fixtures/test/dont_pick_me +1 -0
  916. data/rails/actionview/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  917. data/rails/actionview/test/fixtures/test/greeting.xml.erb +1 -0
  918. data/rails/actionview/test/fixtures/test/hello/hello.erb +1 -0
  919. data/rails/actionview/test/fixtures/test/hello.builder +4 -0
  920. data/rails/actionview/test/fixtures/test/hello_world.da.html.erb +1 -0
  921. data/rails/actionview/test/fixtures/test/hello_world.erb +1 -0
  922. data/rails/actionview/test/fixtures/test/hello_world.erb~ +1 -0
  923. data/rails/actionview/test/fixtures/test/hello_world.html+phone.erb +1 -0
  924. data/rails/actionview/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  925. data/rails/actionview/test/fixtures/test/hello_world.text+phone.erb +1 -0
  926. data/rails/actionview/test/fixtures/test/hello_world_with_partial.html.erb +2 -0
  927. data/rails/actionview/test/fixtures/test/html_template.html.erb +1 -0
  928. data/rails/actionview/test/fixtures/test/layout_render_file.erb +2 -0
  929. data/rails/actionview/test/fixtures/test/layout_render_object.erb +1 -0
  930. data/rails/actionview/test/fixtures/test/list.erb +1 -0
  931. data/rails/actionview/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  932. data/rails/actionview/test/fixtures/test/malformed/malformed.erb~ +1 -0
  933. data/rails/actionview/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  934. data/rails/actionview/test/fixtures/test/malformed/malformed~ +1 -0
  935. data/rails/actionview/test/fixtures/test/nested_layout.erb +3 -0
  936. data/rails/actionview/test/fixtures/test/nested_streaming.erb +3 -0
  937. data/rails/actionview/test/fixtures/test/nil_return.erb +1 -0
  938. data/rails/actionview/test/fixtures/test/one.html.erb +1 -0
  939. data/rails/actionview/test/fixtures/test/render_file_with_ivar.erb +1 -0
  940. data/rails/actionview/test/fixtures/test/render_file_with_locals.erb +1 -0
  941. data/rails/actionview/test/fixtures/test/render_file_with_locals_and_default.erb +1 -0
  942. data/rails/actionview/test/fixtures/test/render_partial_inside_directory.html.erb +1 -0
  943. data/rails/actionview/test/fixtures/test/render_two_partials.html.erb +2 -0
  944. data/rails/actionview/test/fixtures/test/streaming.erb +3 -0
  945. data/rails/actionview/test/fixtures/test/streaming_buster.erb +3 -0
  946. data/rails/actionview/test/fixtures/test/sub_template_raise.html.erb +1 -0
  947. data/rails/actionview/test/fixtures/test/template.erb +1 -0
  948. data/rails/actionview/test/fixtures/test/update_element_with_capture.erb +9 -0
  949. data/rails/actionview/test/fixtures/test/utf8.html.erb +4 -0
  950. data/rails/actionview/test/fixtures/test/utf8_magic.html.erb +5 -0
  951. data/rails/actionview/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  952. data/rails/actionview/test/fixtures/topic.rb +3 -0
  953. data/rails/actionview/test/fixtures/topics/_topic.html.erb +1 -0
  954. data/rails/actionview/test/fixtures/topics.yml +22 -0
  955. data/rails/actionview/test/fixtures/translations/templates/array.erb +1 -0
  956. data/rails/actionview/test/fixtures/translations/templates/default.erb +1 -0
  957. data/rails/actionview/test/fixtures/translations/templates/found.erb +1 -0
  958. data/rails/actionview/test/fixtures/translations/templates/missing.erb +1 -0
  959. data/rails/actionview/test/fixtures/with_format.json.erb +1 -0
  960. data/rails/actionview/test/lib/controller/fake_models.rb +201 -0
  961. data/rails/actionview/test/template/active_model_helper_test.rb +99 -0
  962. data/rails/actionview/test/template/asset_tag_helper_test.rb +796 -0
  963. data/rails/actionview/test/template/atom_feed_helper_test.rb +349 -0
  964. data/rails/actionview/test/template/capture_helper_test.rb +219 -0
  965. data/rails/actionview/test/template/compiled_templates_test.rb +59 -0
  966. data/rails/actionview/test/template/date_helper_i18n_test.rb +148 -0
  967. data/rails/actionview/test/template/date_helper_test.rb +3228 -0
  968. data/rails/actionview/test/template/dependency_tracker_test.rb +196 -0
  969. data/rails/actionview/test/template/digestor_test.rb +312 -0
  970. data/rails/actionview/test/template/erb/form_for_test.rb +11 -0
  971. data/rails/actionview/test/template/erb/helper.rb +24 -0
  972. data/rails/actionview/test/template/erb/tag_helper_test.rb +30 -0
  973. data/rails/actionview/test/template/erb_util_test.rb +107 -0
  974. data/rails/actionview/test/template/form_collections_helper_test.rb +459 -0
  975. data/rails/actionview/test/template/form_helper_test.rb +3461 -0
  976. data/rails/actionview/test/template/form_options_helper_i18n_test.rb +27 -0
  977. data/rails/actionview/test/template/form_options_helper_test.rb +1358 -0
  978. data/rails/actionview/test/template/form_tag_helper_test.rb +656 -0
  979. data/rails/actionview/test/template/html_test.rb +17 -0
  980. data/rails/actionview/test/template/javascript_helper_test.rb +69 -0
  981. data/rails/actionview/test/template/log_subscriber_test.rb +91 -0
  982. data/rails/actionview/test/template/lookup_context_test.rb +282 -0
  983. data/rails/actionview/test/template/number_helper_test.rb +197 -0
  984. data/rails/actionview/test/template/output_safety_helper_test.rb +35 -0
  985. data/rails/actionview/test/template/partial_iteration_test.rb +33 -0
  986. data/rails/actionview/test/template/record_identifier_test.rb +49 -0
  987. data/rails/actionview/test/template/record_tag_helper_test.rb +117 -0
  988. data/rails/actionview/test/template/render_test.rb +600 -0
  989. data/rails/actionview/test/template/resolver_patterns_test.rb +31 -0
  990. data/rails/actionview/test/template/sanitize_helper_test.rb +35 -0
  991. data/rails/actionview/test/template/streaming_render_test.rb +108 -0
  992. data/rails/actionview/test/template/tag_helper_test.rb +166 -0
  993. data/rails/actionview/test/template/template_error_test.rb +20 -0
  994. data/rails/actionview/test/template/template_test.rb +200 -0
  995. data/rails/actionview/test/template/test_case_test.rb +378 -0
  996. data/rails/actionview/test/template/test_test.rb +92 -0
  997. data/rails/actionview/test/template/testing/fixture_resolver_test.rb +18 -0
  998. data/rails/actionview/test/template/testing/null_resolver_test.rb +12 -0
  999. data/rails/actionview/test/template/text_helper_test.rb +510 -0
  1000. data/rails/actionview/test/template/text_test.rb +17 -0
  1001. data/rails/actionview/test/template/translation_helper_test.rb +193 -0
  1002. data/rails/actionview/test/template/url_helper_test.rb +798 -0
  1003. data/rails/actionview/test/tmp/.gitkeep +0 -0
  1004. data/rails/activejob/.gitignore +1 -0
  1005. data/rails/activejob/CHANGELOG.md +7 -0
  1006. data/rails/activejob/MIT-LICENSE +21 -0
  1007. data/rails/activejob/README.md +131 -0
  1008. data/rails/activejob/Rakefile +90 -0
  1009. data/rails/activejob/activejob.gemspec +23 -0
  1010. data/rails/activejob/lib/active_job/arguments.rb +144 -0
  1011. data/rails/activejob/lib/active_job/base.rb +66 -0
  1012. data/rails/activejob/lib/active_job/callbacks.rb +146 -0
  1013. data/rails/activejob/lib/active_job/configured_job.rb +16 -0
  1014. data/rails/activejob/lib/active_job/core.rb +88 -0
  1015. data/rails/activejob/lib/active_job/enqueuing.rb +77 -0
  1016. data/rails/activejob/lib/active_job/execution.rb +42 -0
  1017. data/rails/activejob/lib/active_job/gem_version.rb +15 -0
  1018. data/rails/activejob/lib/active_job/logging.rb +107 -0
  1019. data/rails/activejob/lib/active_job/queue_adapter.rb +35 -0
  1020. data/rails/activejob/lib/active_job/queue_adapters/backburner_adapter.rb +36 -0
  1021. data/rails/activejob/lib/active_job/queue_adapters/delayed_job_adapter.rb +39 -0
  1022. data/rails/activejob/lib/active_job/queue_adapters/inline_adapter.rb +23 -0
  1023. data/rails/activejob/lib/active_job/queue_adapters/qu_adapter.rb +42 -0
  1024. data/rails/activejob/lib/active_job/queue_adapters/que_adapter.rb +35 -0
  1025. data/rails/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb +54 -0
  1026. data/rails/activejob/lib/active_job/queue_adapters/resque_adapter.rb +52 -0
  1027. data/rails/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb +45 -0
  1028. data/rails/activejob/lib/active_job/queue_adapters/sneakers_adapter.rb +46 -0
  1029. data/rails/activejob/lib/active_job/queue_adapters/sucker_punch_adapter.rb +40 -0
  1030. data/rails/activejob/lib/active_job/queue_adapters/test_adapter.rb +51 -0
  1031. data/rails/activejob/lib/active_job/queue_adapters.rb +52 -0
  1032. data/rails/activejob/lib/active_job/queue_name.rb +51 -0
  1033. data/rails/activejob/lib/active_job/railtie.rb +23 -0
  1034. data/rails/activejob/lib/active_job/test_case.rb +7 -0
  1035. data/rails/activejob/lib/active_job/test_helper.rb +230 -0
  1036. data/rails/activejob/lib/active_job/version.rb +8 -0
  1037. data/rails/activejob/lib/active_job.rb +37 -0
  1038. data/rails/activejob/lib/rails/generators/job/job_generator.rb +24 -0
  1039. data/rails/activejob/lib/rails/generators/job/templates/job.rb +9 -0
  1040. data/rails/activejob/test/adapters/backburner.rb +3 -0
  1041. data/rails/activejob/test/adapters/delayed_job.rb +7 -0
  1042. data/rails/activejob/test/adapters/inline.rb +1 -0
  1043. data/rails/activejob/test/adapters/qu.rb +3 -0
  1044. data/rails/activejob/test/adapters/que.rb +4 -0
  1045. data/rails/activejob/test/adapters/queue_classic.rb +2 -0
  1046. data/rails/activejob/test/adapters/resque.rb +2 -0
  1047. data/rails/activejob/test/adapters/sidekiq.rb +2 -0
  1048. data/rails/activejob/test/adapters/sneakers.rb +2 -0
  1049. data/rails/activejob/test/adapters/sucker_punch.rb +2 -0
  1050. data/rails/activejob/test/adapters/test.rb +3 -0
  1051. data/rails/activejob/test/cases/adapter_test.rb +7 -0
  1052. data/rails/activejob/test/cases/argument_serialization_test.rb +105 -0
  1053. data/rails/activejob/test/cases/callbacks_test.rb +23 -0
  1054. data/rails/activejob/test/cases/job_serialization_test.rb +15 -0
  1055. data/rails/activejob/test/cases/logging_test.rb +114 -0
  1056. data/rails/activejob/test/cases/queue_naming_test.rb +102 -0
  1057. data/rails/activejob/test/cases/queuing_test.rb +44 -0
  1058. data/rails/activejob/test/cases/rescue_test.rb +34 -0
  1059. data/rails/activejob/test/cases/test_case_test.rb +14 -0
  1060. data/rails/activejob/test/cases/test_helper_test.rb +265 -0
  1061. data/rails/activejob/test/helper.rb +30 -0
  1062. data/rails/activejob/test/integration/queuing_test.rb +47 -0
  1063. data/rails/activejob/test/jobs/callback_job.rb +29 -0
  1064. data/rails/activejob/test/jobs/gid_job.rb +8 -0
  1065. data/rails/activejob/test/jobs/hello_job.rb +7 -0
  1066. data/rails/activejob/test/jobs/kwargs_job.rb +7 -0
  1067. data/rails/activejob/test/jobs/logging_job.rb +10 -0
  1068. data/rails/activejob/test/jobs/nested_job.rb +10 -0
  1069. data/rails/activejob/test/jobs/rescue_job.rb +27 -0
  1070. data/rails/activejob/test/models/person.rb +20 -0
  1071. data/rails/activejob/test/support/backburner/inline.rb +8 -0
  1072. data/rails/activejob/test/support/delayed_job/delayed/backend/test.rb +113 -0
  1073. data/rails/activejob/test/support/delayed_job/delayed/serialization/test.rb +0 -0
  1074. data/rails/activejob/test/support/integration/adapters/backburner.rb +38 -0
  1075. data/rails/activejob/test/support/integration/adapters/delayed_job.rb +20 -0
  1076. data/rails/activejob/test/support/integration/adapters/inline.rb +15 -0
  1077. data/rails/activejob/test/support/integration/adapters/qu.rb +38 -0
  1078. data/rails/activejob/test/support/integration/adapters/que.rb +37 -0
  1079. data/rails/activejob/test/support/integration/adapters/queue_classic.rb +39 -0
  1080. data/rails/activejob/test/support/integration/adapters/resque.rb +49 -0
  1081. data/rails/activejob/test/support/integration/adapters/sidekiq.rb +57 -0
  1082. data/rails/activejob/test/support/integration/adapters/sneakers.rb +90 -0
  1083. data/rails/activejob/test/support/integration/adapters/sucker_punch.rb +6 -0
  1084. data/rails/activejob/test/support/integration/dummy_app_template.rb +27 -0
  1085. data/rails/activejob/test/support/integration/helper.rb +30 -0
  1086. data/rails/activejob/test/support/integration/jobs_manager.rb +27 -0
  1087. data/rails/activejob/test/support/integration/test_case_helpers.rb +48 -0
  1088. data/rails/activejob/test/support/job_buffer.rb +19 -0
  1089. data/rails/activejob/test/support/que/inline.rb +9 -0
  1090. data/rails/activejob/test/support/queue_classic/inline.rb +23 -0
  1091. data/rails/activejob/test/support/sneakers/inline.rb +12 -0
  1092. data/rails/activemodel/CHANGELOG.md +61 -0
  1093. data/rails/activemodel/MIT-LICENSE +21 -0
  1094. data/rails/activemodel/README.rdoc +272 -0
  1095. data/rails/activemodel/Rakefile +36 -0
  1096. data/rails/activemodel/activemodel.gemspec +24 -0
  1097. data/rails/activemodel/lib/active_model/attribute_methods.rb +478 -0
  1098. data/rails/activemodel/lib/active_model/callbacks.rb +149 -0
  1099. data/rails/activemodel/lib/active_model/conversion.rb +100 -0
  1100. data/rails/activemodel/lib/active_model/dirty.rb +267 -0
  1101. data/rails/activemodel/lib/active_model/errors.rb +475 -0
  1102. data/rails/activemodel/lib/active_model/forbidden_attributes_protection.rb +28 -0
  1103. data/rails/activemodel/lib/active_model/gem_version.rb +15 -0
  1104. data/rails/activemodel/lib/active_model/lint.rb +113 -0
  1105. data/rails/activemodel/lib/active_model/locale/en.yml +35 -0
  1106. data/rails/activemodel/lib/active_model/model.rb +99 -0
  1107. data/rails/activemodel/lib/active_model/naming.rb +316 -0
  1108. data/rails/activemodel/lib/active_model/railtie.rb +12 -0
  1109. data/rails/activemodel/lib/active_model/secure_password.rb +134 -0
  1110. data/rails/activemodel/lib/active_model/serialization.rb +163 -0
  1111. data/rails/activemodel/lib/active_model/serializers/json.rb +145 -0
  1112. data/rails/activemodel/lib/active_model/serializers/xml.rb +238 -0
  1113. data/rails/activemodel/lib/active_model/test_case.rb +4 -0
  1114. data/rails/activemodel/lib/active_model/translation.rb +69 -0
  1115. data/rails/activemodel/lib/active_model/validations/absence.rb +31 -0
  1116. data/rails/activemodel/lib/active_model/validations/acceptance.rb +55 -0
  1117. data/rails/activemodel/lib/active_model/validations/callbacks.rb +117 -0
  1118. data/rails/activemodel/lib/active_model/validations/clusivity.rb +51 -0
  1119. data/rails/activemodel/lib/active_model/validations/confirmation.rb +67 -0
  1120. data/rails/activemodel/lib/active_model/validations/exclusion.rb +46 -0
  1121. data/rails/activemodel/lib/active_model/validations/format.rb +113 -0
  1122. data/rails/activemodel/lib/active_model/validations/inclusion.rb +46 -0
  1123. data/rails/activemodel/lib/active_model/validations/length.rb +126 -0
  1124. data/rails/activemodel/lib/active_model/validations/numericality.rb +159 -0
  1125. data/rails/activemodel/lib/active_model/validations/presence.rb +39 -0
  1126. data/rails/activemodel/lib/active_model/validations/validates.rb +173 -0
  1127. data/rails/activemodel/lib/active_model/validations/with.rb +153 -0
  1128. data/rails/activemodel/lib/active_model/validations.rb +401 -0
  1129. data/rails/activemodel/lib/active_model/validator.rb +182 -0
  1130. data/rails/activemodel/lib/active_model/version.rb +8 -0
  1131. data/rails/activemodel/lib/active_model.rb +71 -0
  1132. data/rails/activemodel/test/cases/attribute_methods_test.rb +281 -0
  1133. data/rails/activemodel/test/cases/callbacks_test.rb +114 -0
  1134. data/rails/activemodel/test/cases/conversion_test.rb +50 -0
  1135. data/rails/activemodel/test/cases/dirty_test.rb +228 -0
  1136. data/rails/activemodel/test/cases/errors_test.rb +326 -0
  1137. data/rails/activemodel/test/cases/forbidden_attributes_protection_test.rb +36 -0
  1138. data/rails/activemodel/test/cases/helper.rb +20 -0
  1139. data/rails/activemodel/test/cases/lint_test.rb +20 -0
  1140. data/rails/activemodel/test/cases/model_test.rb +75 -0
  1141. data/rails/activemodel/test/cases/naming_test.rb +280 -0
  1142. data/rails/activemodel/test/cases/railtie_test.rb +32 -0
  1143. data/rails/activemodel/test/cases/secure_password_test.rb +218 -0
  1144. data/rails/activemodel/test/cases/serialization_test.rb +168 -0
  1145. data/rails/activemodel/test/cases/serializers/json_serialization_test.rb +198 -0
  1146. data/rails/activemodel/test/cases/serializers/xml_serialization_test.rb +250 -0
  1147. data/rails/activemodel/test/cases/translation_test.rb +108 -0
  1148. data/rails/activemodel/test/cases/validations/absence_validation_test.rb +68 -0
  1149. data/rails/activemodel/test/cases/validations/acceptance_validation_test.rb +68 -0
  1150. data/rails/activemodel/test/cases/validations/callbacks_test.rb +98 -0
  1151. data/rails/activemodel/test/cases/validations/conditional_validation_test.rb +139 -0
  1152. data/rails/activemodel/test/cases/validations/confirmation_validation_test.rb +108 -0
  1153. data/rails/activemodel/test/cases/validations/exclusion_validation_test.rb +92 -0
  1154. data/rails/activemodel/test/cases/validations/format_validation_test.rb +149 -0
  1155. data/rails/activemodel/test/cases/validations/i18n_generate_message_validation_test.rb +150 -0
  1156. data/rails/activemodel/test/cases/validations/i18n_validation_test.rb +373 -0
  1157. data/rails/activemodel/test/cases/validations/inclusion_validation_test.rb +147 -0
  1158. data/rails/activemodel/test/cases/validations/length_validation_test.rb +424 -0
  1159. data/rails/activemodel/test/cases/validations/numericality_validation_test.rb +211 -0
  1160. data/rails/activemodel/test/cases/validations/presence_validation_test.rb +107 -0
  1161. data/rails/activemodel/test/cases/validations/validates_test.rb +158 -0
  1162. data/rails/activemodel/test/cases/validations/validations_context_test.rb +50 -0
  1163. data/rails/activemodel/test/cases/validations/with_validation_test.rb +172 -0
  1164. data/rails/activemodel/test/cases/validations_test.rb +429 -0
  1165. data/rails/activemodel/test/config.rb +3 -0
  1166. data/rails/activemodel/test/models/account.rb +5 -0
  1167. data/rails/activemodel/test/models/blog_post.rb +9 -0
  1168. data/rails/activemodel/test/models/contact.rb +41 -0
  1169. data/rails/activemodel/test/models/custom_reader.rb +15 -0
  1170. data/rails/activemodel/test/models/helicopter.rb +7 -0
  1171. data/rails/activemodel/test/models/person.rb +17 -0
  1172. data/rails/activemodel/test/models/person_with_validator.rb +24 -0
  1173. data/rails/activemodel/test/models/project.rb +3 -0
  1174. data/rails/activemodel/test/models/reply.rb +32 -0
  1175. data/rails/activemodel/test/models/sheep.rb +3 -0
  1176. data/rails/activemodel/test/models/topic.rb +40 -0
  1177. data/rails/activemodel/test/models/track_back.rb +11 -0
  1178. data/rails/activemodel/test/models/user.rb +10 -0
  1179. data/rails/activemodel/test/models/visitor.rb +10 -0
  1180. data/rails/activemodel/test/validators/email_validator.rb +6 -0
  1181. data/rails/activemodel/test/validators/namespace/email_validator.rb +6 -0
  1182. data/rails/activerecord/CHANGELOG.md +1568 -0
  1183. data/rails/activerecord/MIT-LICENSE +20 -0
  1184. data/rails/activerecord/README.rdoc +218 -0
  1185. data/rails/activerecord/RUNNING_UNIT_TESTS.rdoc +44 -0
  1186. data/rails/activerecord/Rakefile +168 -0
  1187. data/rails/activerecord/activerecord.gemspec +28 -0
  1188. data/rails/activerecord/examples/.gitignore +1 -0
  1189. data/rails/activerecord/examples/performance.rb +184 -0
  1190. data/rails/activerecord/examples/simple.rb +14 -0
  1191. data/rails/activerecord/lib/active_record/aggregations.rb +266 -0
  1192. data/rails/activerecord/lib/active_record/association_relation.rb +22 -0
  1193. data/rails/activerecord/lib/active_record/associations/alias_tracker.rb +87 -0
  1194. data/rails/activerecord/lib/active_record/associations/association.rb +253 -0
  1195. data/rails/activerecord/lib/active_record/associations/association_scope.rb +194 -0
  1196. data/rails/activerecord/lib/active_record/associations/belongs_to_association.rb +115 -0
  1197. data/rails/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb +40 -0
  1198. data/rails/activerecord/lib/active_record/associations/builder/association.rb +149 -0
  1199. data/rails/activerecord/lib/active_record/associations/builder/belongs_to.rb +116 -0
  1200. data/rails/activerecord/lib/active_record/associations/builder/collection_association.rb +95 -0
  1201. data/rails/activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb +124 -0
  1202. data/rails/activerecord/lib/active_record/associations/builder/has_many.rb +15 -0
  1203. data/rails/activerecord/lib/active_record/associations/builder/has_one.rb +23 -0
  1204. data/rails/activerecord/lib/active_record/associations/builder/singular_association.rb +38 -0
  1205. data/rails/activerecord/lib/active_record/associations/collection_association.rb +639 -0
  1206. data/rails/activerecord/lib/active_record/associations/collection_proxy.rb +1028 -0
  1207. data/rails/activerecord/lib/active_record/associations/foreign_association.rb +11 -0
  1208. data/rails/activerecord/lib/active_record/associations/has_many_association.rb +192 -0
  1209. data/rails/activerecord/lib/active_record/associations/has_many_through_association.rb +238 -0
  1210. data/rails/activerecord/lib/active_record/associations/has_one_association.rb +106 -0
  1211. data/rails/activerecord/lib/active_record/associations/has_one_through_association.rb +36 -0
  1212. data/rails/activerecord/lib/active_record/associations/join_dependency/join_association.rb +122 -0
  1213. data/rails/activerecord/lib/active_record/associations/join_dependency/join_base.rb +22 -0
  1214. data/rails/activerecord/lib/active_record/associations/join_dependency/join_part.rb +71 -0
  1215. data/rails/activerecord/lib/active_record/associations/join_dependency.rb +282 -0
  1216. data/rails/activerecord/lib/active_record/associations/preloader/association.rb +162 -0
  1217. data/rails/activerecord/lib/active_record/associations/preloader/belongs_to.rb +17 -0
  1218. data/rails/activerecord/lib/active_record/associations/preloader/collection_association.rb +24 -0
  1219. data/rails/activerecord/lib/active_record/associations/preloader/has_many.rb +17 -0
  1220. data/rails/activerecord/lib/active_record/associations/preloader/has_many_through.rb +19 -0
  1221. data/rails/activerecord/lib/active_record/associations/preloader/has_one.rb +23 -0
  1222. data/rails/activerecord/lib/active_record/associations/preloader/has_one_through.rb +9 -0
  1223. data/rails/activerecord/lib/active_record/associations/preloader/singular_association.rb +21 -0
  1224. data/rails/activerecord/lib/active_record/associations/preloader/through_association.rb +96 -0
  1225. data/rails/activerecord/lib/active_record/associations/preloader.rb +203 -0
  1226. data/rails/activerecord/lib/active_record/associations/singular_association.rb +86 -0
  1227. data/rails/activerecord/lib/active_record/associations/through_association.rb +107 -0
  1228. data/rails/activerecord/lib/active_record/associations.rb +1725 -0
  1229. data/rails/activerecord/lib/active_record/attribute.rb +163 -0
  1230. data/rails/activerecord/lib/active_record/attribute_assignment.rb +212 -0
  1231. data/rails/activerecord/lib/active_record/attribute_decorators.rb +66 -0
  1232. data/rails/activerecord/lib/active_record/attribute_methods/before_type_cast.rb +76 -0
  1233. data/rails/activerecord/lib/active_record/attribute_methods/dirty.rb +185 -0
  1234. data/rails/activerecord/lib/active_record/attribute_methods/primary_key.rb +128 -0
  1235. data/rails/activerecord/lib/active_record/attribute_methods/query.rb +40 -0
  1236. data/rails/activerecord/lib/active_record/attribute_methods/read.rb +103 -0
  1237. data/rails/activerecord/lib/active_record/attribute_methods/serialization.rb +70 -0
  1238. data/rails/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb +69 -0
  1239. data/rails/activerecord/lib/active_record/attribute_methods/write.rb +83 -0
  1240. data/rails/activerecord/lib/active_record/attribute_methods.rb +439 -0
  1241. data/rails/activerecord/lib/active_record/attribute_set/builder.rb +96 -0
  1242. data/rails/activerecord/lib/active_record/attribute_set.rb +77 -0
  1243. data/rails/activerecord/lib/active_record/attributes.rb +146 -0
  1244. data/rails/activerecord/lib/active_record/autosave_association.rb +454 -0
  1245. data/rails/activerecord/lib/active_record/base.rb +317 -0
  1246. data/rails/activerecord/lib/active_record/callbacks.rb +313 -0
  1247. data/rails/activerecord/lib/active_record/coders/json.rb +13 -0
  1248. data/rails/activerecord/lib/active_record/coders/yaml_column.rb +38 -0
  1249. data/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +661 -0
  1250. data/rails/activerecord/lib/active_record/connection_adapters/abstract/database_limits.rb +67 -0
  1251. data/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +384 -0
  1252. data/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb +95 -0
  1253. data/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +133 -0
  1254. data/rails/activerecord/lib/active_record/connection_adapters/abstract/savepoints.rb +21 -0
  1255. data/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb +125 -0
  1256. data/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +592 -0
  1257. data/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb +50 -0
  1258. data/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +1023 -0
  1259. data/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb +219 -0
  1260. data/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +494 -0
  1261. data/rails/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +905 -0
  1262. data/rails/activerecord/lib/active_record/connection_adapters/column.rb +82 -0
  1263. data/rails/activerecord/lib/active_record/connection_adapters/connection_specification.rb +275 -0
  1264. data/rails/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +282 -0
  1265. data/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +491 -0
  1266. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/array_parser.rb +93 -0
  1267. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/column.rb +20 -0
  1268. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb +232 -0
  1269. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/array.rb +99 -0
  1270. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/bit.rb +52 -0
  1271. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +13 -0
  1272. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +15 -0
  1273. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +46 -0
  1274. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/date.rb +11 -0
  1275. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
  1276. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +13 -0
  1277. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/enum.rb +17 -0
  1278. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/float.rb +21 -0
  1279. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +59 -0
  1280. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/inet.rb +13 -0
  1281. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +13 -0
  1282. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/integer.rb +11 -0
  1283. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/json.rb +35 -0
  1284. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +23 -0
  1285. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/money.rb +43 -0
  1286. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb +43 -0
  1287. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/range.rb +79 -0
  1288. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +19 -0
  1289. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/time.rb +11 -0
  1290. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +97 -0
  1291. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +21 -0
  1292. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/vector.rb +26 -0
  1293. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid/xml.rb +28 -0
  1294. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +36 -0
  1295. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb +108 -0
  1296. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +30 -0
  1297. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +152 -0
  1298. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb +587 -0
  1299. data/rails/activerecord/lib/active_record/connection_adapters/postgresql/utils.rb +77 -0
  1300. data/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +754 -0
  1301. data/rails/activerecord/lib/active_record/connection_adapters/schema_cache.rb +94 -0
  1302. data/rails/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +622 -0
  1303. data/rails/activerecord/lib/active_record/connection_adapters/statement_pool.rb +40 -0
  1304. data/rails/activerecord/lib/active_record/connection_handling.rb +132 -0
  1305. data/rails/activerecord/lib/active_record/core.rb +572 -0
  1306. data/rails/activerecord/lib/active_record/counter_cache.rb +175 -0
  1307. data/rails/activerecord/lib/active_record/dynamic_matchers.rb +140 -0
  1308. data/rails/activerecord/lib/active_record/enum.rb +198 -0
  1309. data/rails/activerecord/lib/active_record/errors.rb +252 -0
  1310. data/rails/activerecord/lib/active_record/explain.rb +38 -0
  1311. data/rails/activerecord/lib/active_record/explain_registry.rb +30 -0
  1312. data/rails/activerecord/lib/active_record/explain_subscriber.rb +29 -0
  1313. data/rails/activerecord/lib/active_record/fixture_set/file.rb +56 -0
  1314. data/rails/activerecord/lib/active_record/fixtures.rb +1007 -0
  1315. data/rails/activerecord/lib/active_record/gem_version.rb +15 -0
  1316. data/rails/activerecord/lib/active_record/inheritance.rb +247 -0
  1317. data/rails/activerecord/lib/active_record/integration.rb +113 -0
  1318. data/rails/activerecord/lib/active_record/locale/en.yml +47 -0
  1319. data/rails/activerecord/lib/active_record/locking/optimistic.rb +206 -0
  1320. data/rails/activerecord/lib/active_record/locking/pessimistic.rb +77 -0
  1321. data/rails/activerecord/lib/active_record/log_subscriber.rb +75 -0
  1322. data/rails/activerecord/lib/active_record/migration/command_recorder.rb +197 -0
  1323. data/rails/activerecord/lib/active_record/migration/join_table.rb +15 -0
  1324. data/rails/activerecord/lib/active_record/migration.rb +1051 -0
  1325. data/rails/activerecord/lib/active_record/model_schema.rb +340 -0
  1326. data/rails/activerecord/lib/active_record/nested_attributes.rb +548 -0
  1327. data/rails/activerecord/lib/active_record/no_touching.rb +52 -0
  1328. data/rails/activerecord/lib/active_record/null_relation.rb +81 -0
  1329. data/rails/activerecord/lib/active_record/persistence.rb +532 -0
  1330. data/rails/activerecord/lib/active_record/query_cache.rb +56 -0
  1331. data/rails/activerecord/lib/active_record/querying.rb +68 -0
  1332. data/rails/activerecord/lib/active_record/railtie.rb +162 -0
  1333. data/rails/activerecord/lib/active_record/railties/console_sandbox.rb +5 -0
  1334. data/rails/activerecord/lib/active_record/railties/controller_runtime.rb +50 -0
  1335. data/rails/activerecord/lib/active_record/railties/databases.rake +391 -0
  1336. data/rails/activerecord/lib/active_record/railties/jdbcmysql_error.rb +16 -0
  1337. data/rails/activerecord/lib/active_record/readonly_attributes.rb +23 -0
  1338. data/rails/activerecord/lib/active_record/reflection.rb +881 -0
  1339. data/rails/activerecord/lib/active_record/relation/batches.rb +138 -0
  1340. data/rails/activerecord/lib/active_record/relation/calculations.rb +403 -0
  1341. data/rails/activerecord/lib/active_record/relation/delegation.rb +140 -0
  1342. data/rails/activerecord/lib/active_record/relation/finder_methods.rb +528 -0
  1343. data/rails/activerecord/lib/active_record/relation/merger.rb +170 -0
  1344. data/rails/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb +47 -0
  1345. data/rails/activerecord/lib/active_record/relation/predicate_builder/relation_handler.rb +13 -0
  1346. data/rails/activerecord/lib/active_record/relation/predicate_builder.rb +141 -0
  1347. data/rails/activerecord/lib/active_record/relation/query_methods.rb +1177 -0
  1348. data/rails/activerecord/lib/active_record/relation/spawn_methods.rb +75 -0
  1349. data/rails/activerecord/lib/active_record/relation.rb +681 -0
  1350. data/rails/activerecord/lib/active_record/result.rb +131 -0
  1351. data/rails/activerecord/lib/active_record/runtime_registry.rb +22 -0
  1352. data/rails/activerecord/lib/active_record/sanitization.rb +191 -0
  1353. data/rails/activerecord/lib/active_record/schema.rb +64 -0
  1354. data/rails/activerecord/lib/active_record/schema_dumper.rb +251 -0
  1355. data/rails/activerecord/lib/active_record/schema_migration.rb +56 -0
  1356. data/rails/activerecord/lib/active_record/scoping/default.rb +134 -0
  1357. data/rails/activerecord/lib/active_record/scoping/named.rb +164 -0
  1358. data/rails/activerecord/lib/active_record/scoping.rb +87 -0
  1359. data/rails/activerecord/lib/active_record/serialization.rb +22 -0
  1360. data/rails/activerecord/lib/active_record/serializers/xml_serializer.rb +193 -0
  1361. data/rails/activerecord/lib/active_record/statement_cache.rb +111 -0
  1362. data/rails/activerecord/lib/active_record/store.rb +205 -0
  1363. data/rails/activerecord/lib/active_record/tasks/database_tasks.rb +296 -0
  1364. data/rails/activerecord/lib/active_record/tasks/mysql_database_tasks.rb +145 -0
  1365. data/rails/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb +90 -0
  1366. data/rails/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb +55 -0
  1367. data/rails/activerecord/lib/active_record/timestamp.rb +121 -0
  1368. data/rails/activerecord/lib/active_record/transactions.rb +415 -0
  1369. data/rails/activerecord/lib/active_record/translation.rb +22 -0
  1370. data/rails/activerecord/lib/active_record/type/big_integer.rb +13 -0
  1371. data/rails/activerecord/lib/active_record/type/binary.rb +50 -0
  1372. data/rails/activerecord/lib/active_record/type/boolean.rb +30 -0
  1373. data/rails/activerecord/lib/active_record/type/date.rb +46 -0
  1374. data/rails/activerecord/lib/active_record/type/date_time.rb +54 -0
  1375. data/rails/activerecord/lib/active_record/type/decimal.rb +48 -0
  1376. data/rails/activerecord/lib/active_record/type/decimal_without_scale.rb +11 -0
  1377. data/rails/activerecord/lib/active_record/type/decorator.rb +14 -0
  1378. data/rails/activerecord/lib/active_record/type/float.rb +19 -0
  1379. data/rails/activerecord/lib/active_record/type/hash_lookup_type_map.rb +17 -0
  1380. data/rails/activerecord/lib/active_record/type/integer.rb +59 -0
  1381. data/rails/activerecord/lib/active_record/type/mutable.rb +16 -0
  1382. data/rails/activerecord/lib/active_record/type/numeric.rb +36 -0
  1383. data/rails/activerecord/lib/active_record/type/serialized.rb +56 -0
  1384. data/rails/activerecord/lib/active_record/type/string.rb +40 -0
  1385. data/rails/activerecord/lib/active_record/type/text.rb +11 -0
  1386. data/rails/activerecord/lib/active_record/type/time.rb +26 -0
  1387. data/rails/activerecord/lib/active_record/type/time_value.rb +38 -0
  1388. data/rails/activerecord/lib/active_record/type/type_map.rb +64 -0
  1389. data/rails/activerecord/lib/active_record/type/unsigned_integer.rb +15 -0
  1390. data/rails/activerecord/lib/active_record/type/value.rb +105 -0
  1391. data/rails/activerecord/lib/active_record/type.rb +23 -0
  1392. data/rails/activerecord/lib/active_record/validations/associated.rb +51 -0
  1393. data/rails/activerecord/lib/active_record/validations/presence.rb +67 -0
  1394. data/rails/activerecord/lib/active_record/validations/uniqueness.rb +229 -0
  1395. data/rails/activerecord/lib/active_record/validations.rb +90 -0
  1396. data/rails/activerecord/lib/active_record/version.rb +8 -0
  1397. data/rails/activerecord/lib/active_record.rb +173 -0
  1398. data/rails/activerecord/lib/rails/generators/active_record/migration/migration_generator.rb +70 -0
  1399. data/rails/activerecord/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +19 -0
  1400. data/rails/activerecord/lib/rails/generators/active_record/migration/templates/migration.rb +39 -0
  1401. data/rails/activerecord/lib/rails/generators/active_record/migration.rb +18 -0
  1402. data/rails/activerecord/lib/rails/generators/active_record/model/model_generator.rb +52 -0
  1403. data/rails/activerecord/lib/rails/generators/active_record/model/templates/model.rb +10 -0
  1404. data/rails/activerecord/lib/rails/generators/active_record/model/templates/module.rb +7 -0
  1405. data/rails/activerecord/lib/rails/generators/active_record.rb +17 -0
  1406. data/rails/activerecord/test/.gitignore +1 -0
  1407. data/rails/activerecord/test/active_record/connection_adapters/fake_adapter.rb +46 -0
  1408. data/rails/activerecord/test/assets/example.log +1 -0
  1409. data/rails/activerecord/test/assets/flowers.jpg +0 -0
  1410. data/rails/activerecord/test/assets/test.txt +1 -0
  1411. data/rails/activerecord/test/cases/adapter_test.rb +261 -0
  1412. data/rails/activerecord/test/cases/adapters/mysql/active_schema_test.rb +155 -0
  1413. data/rails/activerecord/test/cases/adapters/mysql/case_sensitivity_test.rb +55 -0
  1414. data/rails/activerecord/test/cases/adapters/mysql/connection_test.rb +184 -0
  1415. data/rails/activerecord/test/cases/adapters/mysql/consistency_test.rb +49 -0
  1416. data/rails/activerecord/test/cases/adapters/mysql/datetime_test.rb +87 -0
  1417. data/rails/activerecord/test/cases/adapters/mysql/enum_test.rb +10 -0
  1418. data/rails/activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb +153 -0
  1419. data/rails/activerecord/test/cases/adapters/mysql/quoting_test.rb +25 -0
  1420. data/rails/activerecord/test/cases/adapters/mysql/reserved_word_test.rb +153 -0
  1421. data/rails/activerecord/test/cases/adapters/mysql/schema_test.rb +100 -0
  1422. data/rails/activerecord/test/cases/adapters/mysql/sp_test.rb +15 -0
  1423. data/rails/activerecord/test/cases/adapters/mysql/sql_types_test.rb +14 -0
  1424. data/rails/activerecord/test/cases/adapters/mysql/statement_pool_test.rb +23 -0
  1425. data/rails/activerecord/test/cases/adapters/mysql/unsigned_type_test.rb +30 -0
  1426. data/rails/activerecord/test/cases/adapters/mysql2/active_schema_test.rb +155 -0
  1427. data/rails/activerecord/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  1428. data/rails/activerecord/test/cases/adapters/mysql2/boolean_test.rb +92 -0
  1429. data/rails/activerecord/test/cases/adapters/mysql2/case_sensitivity_test.rb +55 -0
  1430. data/rails/activerecord/test/cases/adapters/mysql2/connection_test.rb +134 -0
  1431. data/rails/activerecord/test/cases/adapters/mysql2/datetime_test.rb +87 -0
  1432. data/rails/activerecord/test/cases/adapters/mysql2/enum_test.rb +10 -0
  1433. data/rails/activerecord/test/cases/adapters/mysql2/explain_test.rb +27 -0
  1434. data/rails/activerecord/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  1435. data/rails/activerecord/test/cases/adapters/mysql2/schema_migrations_test.rb +47 -0
  1436. data/rails/activerecord/test/cases/adapters/mysql2/schema_test.rb +81 -0
  1437. data/rails/activerecord/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  1438. data/rails/activerecord/test/cases/adapters/mysql2/unsigned_type_test.rb +30 -0
  1439. data/rails/activerecord/test/cases/adapters/postgresql/active_schema_test.rb +58 -0
  1440. data/rails/activerecord/test/cases/adapters/postgresql/array_test.rb +295 -0
  1441. data/rails/activerecord/test/cases/adapters/postgresql/bit_string_test.rb +78 -0
  1442. data/rails/activerecord/test/cases/adapters/postgresql/bytea_test.rb +125 -0
  1443. data/rails/activerecord/test/cases/adapters/postgresql/change_schema_test.rb +31 -0
  1444. data/rails/activerecord/test/cases/adapters/postgresql/citext_test.rb +71 -0
  1445. data/rails/activerecord/test/cases/adapters/postgresql/composite_test.rb +131 -0
  1446. data/rails/activerecord/test/cases/adapters/postgresql/connection_test.rb +215 -0
  1447. data/rails/activerecord/test/cases/adapters/postgresql/datatype_test.rb +126 -0
  1448. data/rails/activerecord/test/cases/adapters/postgresql/domain_test.rb +47 -0
  1449. data/rails/activerecord/test/cases/adapters/postgresql/enum_test.rb +83 -0
  1450. data/rails/activerecord/test/cases/adapters/postgresql/explain_test.rb +26 -0
  1451. data/rails/activerecord/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  1452. data/rails/activerecord/test/cases/adapters/postgresql/full_text_test.rb +26 -0
  1453. data/rails/activerecord/test/cases/adapters/postgresql/geometric_test.rb +72 -0
  1454. data/rails/activerecord/test/cases/adapters/postgresql/hstore_test.rb +345 -0
  1455. data/rails/activerecord/test/cases/adapters/postgresql/infinity_test.rb +60 -0
  1456. data/rails/activerecord/test/cases/adapters/postgresql/integer_test.rb +25 -0
  1457. data/rails/activerecord/test/cases/adapters/postgresql/json_test.rb +206 -0
  1458. data/rails/activerecord/test/cases/adapters/postgresql/ltree_test.rb +46 -0
  1459. data/rails/activerecord/test/cases/adapters/postgresql/money_test.rb +96 -0
  1460. data/rails/activerecord/test/cases/adapters/postgresql/network_test.rb +71 -0
  1461. data/rails/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +462 -0
  1462. data/rails/activerecord/test/cases/adapters/postgresql/quoting_test.rb +74 -0
  1463. data/rails/activerecord/test/cases/adapters/postgresql/range_test.rb +323 -0
  1464. data/rails/activerecord/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  1465. data/rails/activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb +114 -0
  1466. data/rails/activerecord/test/cases/adapters/postgresql/schema_test.rb +462 -0
  1467. data/rails/activerecord/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  1468. data/rails/activerecord/test/cases/adapters/postgresql/timestamp_test.rb +170 -0
  1469. data/rails/activerecord/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  1470. data/rails/activerecord/test/cases/adapters/postgresql/utils_test.rb +61 -0
  1471. data/rails/activerecord/test/cases/adapters/postgresql/uuid_test.rb +315 -0
  1472. data/rails/activerecord/test/cases/adapters/postgresql/view_test.rb +63 -0
  1473. data/rails/activerecord/test/cases/adapters/postgresql/xml_test.rb +48 -0
  1474. data/rails/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  1475. data/rails/activerecord/test/cases/adapters/sqlite3/explain_test.rb +27 -0
  1476. data/rails/activerecord/test/cases/adapters/sqlite3/quoting_test.rb +116 -0
  1477. data/rails/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +461 -0
  1478. data/rails/activerecord/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +21 -0
  1479. data/rails/activerecord/test/cases/adapters/sqlite3/statement_pool_test.rb +25 -0
  1480. data/rails/activerecord/test/cases/aggregations_test.rb +158 -0
  1481. data/rails/activerecord/test/cases/ar_schema_test.rb +161 -0
  1482. data/rails/activerecord/test/cases/associations/association_scope_test.rb +21 -0
  1483. data/rails/activerecord/test/cases/associations/belongs_to_associations_test.rb +978 -0
  1484. data/rails/activerecord/test/cases/associations/callbacks_test.rb +190 -0
  1485. data/rails/activerecord/test/cases/associations/cascaded_eager_loading_test.rb +188 -0
  1486. data/rails/activerecord/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -0
  1487. data/rails/activerecord/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -0
  1488. data/rails/activerecord/test/cases/associations/eager_load_nested_include_test.rb +128 -0
  1489. data/rails/activerecord/test/cases/associations/eager_singularization_test.rb +148 -0
  1490. data/rails/activerecord/test/cases/associations/eager_test.rb +1366 -0
  1491. data/rails/activerecord/test/cases/associations/extension_test.rb +82 -0
  1492. data/rails/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb +905 -0
  1493. data/rails/activerecord/test/cases/associations/has_many_associations_test.rb +2099 -0
  1494. data/rails/activerecord/test/cases/associations/has_many_through_associations_test.rb +1163 -0
  1495. data/rails/activerecord/test/cases/associations/has_one_associations_test.rb +610 -0
  1496. data/rails/activerecord/test/cases/associations/has_one_through_associations_test.rb +346 -0
  1497. data/rails/activerecord/test/cases/associations/inner_join_association_test.rb +139 -0
  1498. data/rails/activerecord/test/cases/associations/inverse_associations_test.rb +693 -0
  1499. data/rails/activerecord/test/cases/associations/join_model_test.rb +751 -0
  1500. data/rails/activerecord/test/cases/associations/nested_through_associations_test.rb +579 -0
  1501. data/rails/activerecord/test/cases/associations/required_test.rb +82 -0
  1502. data/rails/activerecord/test/cases/associations_test.rb +380 -0
  1503. data/rails/activerecord/test/cases/attribute_decorators_test.rb +125 -0
  1504. data/rails/activerecord/test/cases/attribute_methods/read_test.rb +60 -0
  1505. data/rails/activerecord/test/cases/attribute_methods_test.rb +941 -0
  1506. data/rails/activerecord/test/cases/attribute_set_test.rb +200 -0
  1507. data/rails/activerecord/test/cases/attribute_test.rb +180 -0
  1508. data/rails/activerecord/test/cases/attributes_test.rb +115 -0
  1509. data/rails/activerecord/test/cases/autosave_association_test.rb +1588 -0
  1510. data/rails/activerecord/test/cases/base_test.rb +1627 -0
  1511. data/rails/activerecord/test/cases/batches_test.rb +212 -0
  1512. data/rails/activerecord/test/cases/binary_test.rb +49 -0
  1513. data/rails/activerecord/test/cases/bind_parameter_test.rb +100 -0
  1514. data/rails/activerecord/test/cases/calculations_test.rb +634 -0
  1515. data/rails/activerecord/test/cases/callbacks_test.rb +539 -0
  1516. data/rails/activerecord/test/cases/clone_test.rb +40 -0
  1517. data/rails/activerecord/test/cases/coders/yaml_column_test.rb +63 -0
  1518. data/rails/activerecord/test/cases/column_alias_test.rb +17 -0
  1519. data/rails/activerecord/test/cases/column_definition_test.rb +123 -0
  1520. data/rails/activerecord/test/cases/connection_adapters/adapter_leasing_test.rb +54 -0
  1521. data/rails/activerecord/test/cases/connection_adapters/connection_handler_test.rb +53 -0
  1522. data/rails/activerecord/test/cases/connection_adapters/connection_specification_test.rb +12 -0
  1523. data/rails/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -0
  1524. data/rails/activerecord/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -0
  1525. data/rails/activerecord/test/cases/connection_adapters/quoting_test.rb +13 -0
  1526. data/rails/activerecord/test/cases/connection_adapters/schema_cache_test.rb +56 -0
  1527. data/rails/activerecord/test/cases/connection_adapters/type_lookup_test.rb +106 -0
  1528. data/rails/activerecord/test/cases/connection_management_test.rb +122 -0
  1529. data/rails/activerecord/test/cases/connection_pool_test.rb +346 -0
  1530. data/rails/activerecord/test/cases/connection_specification/resolver_test.rb +116 -0
  1531. data/rails/activerecord/test/cases/core_test.rb +112 -0
  1532. data/rails/activerecord/test/cases/counter_cache_test.rb +201 -0
  1533. data/rails/activerecord/test/cases/custom_locking_test.rb +17 -0
  1534. data/rails/activerecord/test/cases/database_statements_test.rb +19 -0
  1535. data/rails/activerecord/test/cases/date_time_test.rb +61 -0
  1536. data/rails/activerecord/test/cases/defaults_test.rb +223 -0
  1537. data/rails/activerecord/test/cases/dirty_test.rb +759 -0
  1538. data/rails/activerecord/test/cases/disconnected_test.rb +28 -0
  1539. data/rails/activerecord/test/cases/dup_test.rb +157 -0
  1540. data/rails/activerecord/test/cases/enum_test.rb +290 -0
  1541. data/rails/activerecord/test/cases/explain_subscriber_test.rb +59 -0
  1542. data/rails/activerecord/test/cases/explain_test.rb +76 -0
  1543. data/rails/activerecord/test/cases/finder_respond_to_test.rb +60 -0
  1544. data/rails/activerecord/test/cases/finder_test.rb +1163 -0
  1545. data/rails/activerecord/test/cases/fixture_set/file_test.rb +138 -0
  1546. data/rails/activerecord/test/cases/fixtures_test.rb +869 -0
  1547. data/rails/activerecord/test/cases/forbidden_attributes_protection_test.rb +99 -0
  1548. data/rails/activerecord/test/cases/habtm_destroy_order_test.rb +61 -0
  1549. data/rails/activerecord/test/cases/helper.rb +210 -0
  1550. data/rails/activerecord/test/cases/hot_compatibility_test.rb +54 -0
  1551. data/rails/activerecord/test/cases/i18n_test.rb +45 -0
  1552. data/rails/activerecord/test/cases/inheritance_test.rb +369 -0
  1553. data/rails/activerecord/test/cases/integration_test.rb +139 -0
  1554. data/rails/activerecord/test/cases/invalid_connection_test.rb +22 -0
  1555. data/rails/activerecord/test/cases/invalid_date_test.rb +32 -0
  1556. data/rails/activerecord/test/cases/invertible_migration_test.rb +295 -0
  1557. data/rails/activerecord/test/cases/json_serialization_test.rb +300 -0
  1558. data/rails/activerecord/test/cases/locking_test.rb +477 -0
  1559. data/rails/activerecord/test/cases/log_subscriber_test.rb +136 -0
  1560. data/rails/activerecord/test/cases/migration/change_schema_test.rb +450 -0
  1561. data/rails/activerecord/test/cases/migration/change_table_test.rb +224 -0
  1562. data/rails/activerecord/test/cases/migration/column_attributes_test.rb +185 -0
  1563. data/rails/activerecord/test/cases/migration/column_positioning_test.rb +56 -0
  1564. data/rails/activerecord/test/cases/migration/columns_test.rb +299 -0
  1565. data/rails/activerecord/test/cases/migration/command_recorder_test.rb +305 -0
  1566. data/rails/activerecord/test/cases/migration/create_join_table_test.rb +148 -0
  1567. data/rails/activerecord/test/cases/migration/foreign_key_test.rb +250 -0
  1568. data/rails/activerecord/test/cases/migration/helper.rb +39 -0
  1569. data/rails/activerecord/test/cases/migration/index_test.rb +208 -0
  1570. data/rails/activerecord/test/cases/migration/logger_test.rb +36 -0
  1571. data/rails/activerecord/test/cases/migration/pending_migrations_test.rb +53 -0
  1572. data/rails/activerecord/test/cases/migration/references_foreign_key_test.rb +111 -0
  1573. data/rails/activerecord/test/cases/migration/references_index_test.rb +101 -0
  1574. data/rails/activerecord/test/cases/migration/references_statements_test.rb +116 -0
  1575. data/rails/activerecord/test/cases/migration/rename_table_test.rb +93 -0
  1576. data/rails/activerecord/test/cases/migration/table_and_index_test.rb +24 -0
  1577. data/rails/activerecord/test/cases/migration_test.rb +939 -0
  1578. data/rails/activerecord/test/cases/migrator_test.rb +388 -0
  1579. data/rails/activerecord/test/cases/mixin_test.rb +70 -0
  1580. data/rails/activerecord/test/cases/modules_test.rb +173 -0
  1581. data/rails/activerecord/test/cases/multiparameter_attributes_test.rb +350 -0
  1582. data/rails/activerecord/test/cases/multiple_db_test.rb +115 -0
  1583. data/rails/activerecord/test/cases/nested_attributes_test.rb +1057 -0
  1584. data/rails/activerecord/test/cases/nested_attributes_with_callbacks_test.rb +144 -0
  1585. data/rails/activerecord/test/cases/persistence_test.rb +881 -0
  1586. data/rails/activerecord/test/cases/pooled_connections_test.rb +81 -0
  1587. data/rails/activerecord/test/cases/primary_keys_test.rb +236 -0
  1588. data/rails/activerecord/test/cases/query_cache_test.rb +322 -0
  1589. data/rails/activerecord/test/cases/quoting_test.rb +156 -0
  1590. data/rails/activerecord/test/cases/readonly_test.rb +118 -0
  1591. data/rails/activerecord/test/cases/reaper_test.rb +85 -0
  1592. data/rails/activerecord/test/cases/reflection_test.rb +454 -0
  1593. data/rails/activerecord/test/cases/relation/delegation_test.rb +68 -0
  1594. data/rails/activerecord/test/cases/relation/merging_test.rb +161 -0
  1595. data/rails/activerecord/test/cases/relation/mutation_test.rb +165 -0
  1596. data/rails/activerecord/test/cases/relation/predicate_builder_test.rb +14 -0
  1597. data/rails/activerecord/test/cases/relation/where_chain_test.rb +181 -0
  1598. data/rails/activerecord/test/cases/relation/where_test.rb +278 -0
  1599. data/rails/activerecord/test/cases/relation_test.rb +267 -0
  1600. data/rails/activerecord/test/cases/relations_test.rb +1756 -0
  1601. data/rails/activerecord/test/cases/reload_models_test.rb +22 -0
  1602. data/rails/activerecord/test/cases/result_test.rb +80 -0
  1603. data/rails/activerecord/test/cases/sanitize_test.rb +83 -0
  1604. data/rails/activerecord/test/cases/schema_dumper_test.rb +445 -0
  1605. data/rails/activerecord/test/cases/scoping/default_scoping_test.rb +436 -0
  1606. data/rails/activerecord/test/cases/scoping/named_scoping_test.rb +524 -0
  1607. data/rails/activerecord/test/cases/scoping/relation_scoping_test.rb +357 -0
  1608. data/rails/activerecord/test/cases/serialization_test.rb +104 -0
  1609. data/rails/activerecord/test/cases/serialized_attribute_test.rb +267 -0
  1610. data/rails/activerecord/test/cases/statement_cache_test.rb +98 -0
  1611. data/rails/activerecord/test/cases/store_test.rb +194 -0
  1612. data/rails/activerecord/test/cases/tasks/database_tasks_test.rb +380 -0
  1613. data/rails/activerecord/test/cases/tasks/mysql_rake_test.rb +311 -0
  1614. data/rails/activerecord/test/cases/tasks/postgresql_rake_test.rb +245 -0
  1615. data/rails/activerecord/test/cases/tasks/sqlite_rake_test.rb +193 -0
  1616. data/rails/activerecord/test/cases/test_case.rb +123 -0
  1617. data/rails/activerecord/test/cases/timestamp_test.rb +446 -0
  1618. data/rails/activerecord/test/cases/transaction_callbacks_test.rb +444 -0
  1619. data/rails/activerecord/test/cases/transaction_isolation_test.rb +106 -0
  1620. data/rails/activerecord/test/cases/transactions_test.rb +792 -0
  1621. data/rails/activerecord/test/cases/type/decimal_test.rb +51 -0
  1622. data/rails/activerecord/test/cases/type/integer_test.rb +121 -0
  1623. data/rails/activerecord/test/cases/type/string_test.rb +36 -0
  1624. data/rails/activerecord/test/cases/type/type_map_test.rb +177 -0
  1625. data/rails/activerecord/test/cases/type/unsigned_integer_test.rb +18 -0
  1626. data/rails/activerecord/test/cases/types_test.rb +141 -0
  1627. data/rails/activerecord/test/cases/unconnected_test.rb +33 -0
  1628. data/rails/activerecord/test/cases/validations/association_validation_test.rb +86 -0
  1629. data/rails/activerecord/test/cases/validations/i18n_generate_message_validation_test.rb +84 -0
  1630. data/rails/activerecord/test/cases/validations/i18n_validation_test.rb +90 -0
  1631. data/rails/activerecord/test/cases/validations/length_validation_test.rb +47 -0
  1632. data/rails/activerecord/test/cases/validations/presence_validation_test.rb +68 -0
  1633. data/rails/activerecord/test/cases/validations/uniqueness_validation_test.rb +406 -0
  1634. data/rails/activerecord/test/cases/validations_repair_helper.rb +23 -0
  1635. data/rails/activerecord/test/cases/validations_test.rb +165 -0
  1636. data/rails/activerecord/test/cases/view_test.rb +113 -0
  1637. data/rails/activerecord/test/cases/xml_serialization_test.rb +447 -0
  1638. data/rails/activerecord/test/cases/yaml_serialization_test.rb +86 -0
  1639. data/rails/activerecord/test/config.example.yml +106 -0
  1640. data/rails/activerecord/test/config.rb +5 -0
  1641. data/rails/activerecord/test/fixtures/.gitignore +1 -0
  1642. data/rails/activerecord/test/fixtures/accounts.yml +29 -0
  1643. data/rails/activerecord/test/fixtures/admin/accounts.yml +2 -0
  1644. data/rails/activerecord/test/fixtures/admin/randomly_named_a9.yml +7 -0
  1645. data/rails/activerecord/test/fixtures/admin/randomly_named_b0.yml +7 -0
  1646. data/rails/activerecord/test/fixtures/admin/users.yml +10 -0
  1647. data/rails/activerecord/test/fixtures/all/developers.yml +0 -0
  1648. data/rails/activerecord/test/fixtures/all/people.yml +0 -0
  1649. data/rails/activerecord/test/fixtures/all/tasks.yml +0 -0
  1650. data/rails/activerecord/test/fixtures/author_addresses.yml +5 -0
  1651. data/rails/activerecord/test/fixtures/author_favorites.yml +4 -0
  1652. data/rails/activerecord/test/fixtures/authors.yml +15 -0
  1653. data/rails/activerecord/test/fixtures/binaries.yml +133 -0
  1654. data/rails/activerecord/test/fixtures/books.yml +11 -0
  1655. data/rails/activerecord/test/fixtures/bulbs.yml +5 -0
  1656. data/rails/activerecord/test/fixtures/cars.yml +9 -0
  1657. data/rails/activerecord/test/fixtures/categories/special_categories.yml +9 -0
  1658. data/rails/activerecord/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  1659. data/rails/activerecord/test/fixtures/categories.yml +19 -0
  1660. data/rails/activerecord/test/fixtures/categories_ordered.yml +7 -0
  1661. data/rails/activerecord/test/fixtures/categories_posts.yml +31 -0
  1662. data/rails/activerecord/test/fixtures/categorizations.yml +23 -0
  1663. data/rails/activerecord/test/fixtures/clubs.yml +8 -0
  1664. data/rails/activerecord/test/fixtures/collections.yml +3 -0
  1665. data/rails/activerecord/test/fixtures/colleges.yml +3 -0
  1666. data/rails/activerecord/test/fixtures/comments.yml +65 -0
  1667. data/rails/activerecord/test/fixtures/companies.yml +67 -0
  1668. data/rails/activerecord/test/fixtures/computers.yml +10 -0
  1669. data/rails/activerecord/test/fixtures/courses.yml +8 -0
  1670. data/rails/activerecord/test/fixtures/customers.yml +26 -0
  1671. data/rails/activerecord/test/fixtures/dashboards.yml +6 -0
  1672. data/rails/activerecord/test/fixtures/developers.yml +22 -0
  1673. data/rails/activerecord/test/fixtures/developers_projects.yml +17 -0
  1674. data/rails/activerecord/test/fixtures/dog_lovers.yml +7 -0
  1675. data/rails/activerecord/test/fixtures/dogs.yml +4 -0
  1676. data/rails/activerecord/test/fixtures/edges.yml +5 -0
  1677. data/rails/activerecord/test/fixtures/entrants.yml +14 -0
  1678. data/rails/activerecord/test/fixtures/essays.yml +6 -0
  1679. data/rails/activerecord/test/fixtures/faces.yml +11 -0
  1680. data/rails/activerecord/test/fixtures/fk_test_has_fk.yml +3 -0
  1681. data/rails/activerecord/test/fixtures/fk_test_has_pk.yml +2 -0
  1682. data/rails/activerecord/test/fixtures/friendships.yml +4 -0
  1683. data/rails/activerecord/test/fixtures/funny_jokes.yml +10 -0
  1684. data/rails/activerecord/test/fixtures/interests.yml +33 -0
  1685. data/rails/activerecord/test/fixtures/items.yml +3 -0
  1686. data/rails/activerecord/test/fixtures/jobs.yml +7 -0
  1687. data/rails/activerecord/test/fixtures/legacy_things.yml +3 -0
  1688. data/rails/activerecord/test/fixtures/mateys.yml +4 -0
  1689. data/rails/activerecord/test/fixtures/member_details.yml +8 -0
  1690. data/rails/activerecord/test/fixtures/member_types.yml +6 -0
  1691. data/rails/activerecord/test/fixtures/members.yml +11 -0
  1692. data/rails/activerecord/test/fixtures/memberships.yml +34 -0
  1693. data/rails/activerecord/test/fixtures/men.yml +5 -0
  1694. data/rails/activerecord/test/fixtures/minimalistics.yml +2 -0
  1695. data/rails/activerecord/test/fixtures/minivans.yml +5 -0
  1696. data/rails/activerecord/test/fixtures/mixed_case_monkeys.yml +6 -0
  1697. data/rails/activerecord/test/fixtures/mixins.yml +29 -0
  1698. data/rails/activerecord/test/fixtures/movies.yml +7 -0
  1699. data/rails/activerecord/test/fixtures/naked/csv/accounts.csv +1 -0
  1700. data/rails/activerecord/test/fixtures/naked/yml/accounts.yml +1 -0
  1701. data/rails/activerecord/test/fixtures/naked/yml/companies.yml +1 -0
  1702. data/rails/activerecord/test/fixtures/naked/yml/courses.yml +1 -0
  1703. data/rails/activerecord/test/fixtures/organizations.yml +5 -0
  1704. data/rails/activerecord/test/fixtures/other_topics.yml +42 -0
  1705. data/rails/activerecord/test/fixtures/owners.yml +9 -0
  1706. data/rails/activerecord/test/fixtures/parrots.yml +27 -0
  1707. data/rails/activerecord/test/fixtures/parrots_pirates.yml +7 -0
  1708. data/rails/activerecord/test/fixtures/people.yml +24 -0
  1709. data/rails/activerecord/test/fixtures/peoples_treasures.yml +3 -0
  1710. data/rails/activerecord/test/fixtures/pets.yml +19 -0
  1711. data/rails/activerecord/test/fixtures/pirates.yml +12 -0
  1712. data/rails/activerecord/test/fixtures/posts.yml +80 -0
  1713. data/rails/activerecord/test/fixtures/price_estimates.yml +7 -0
  1714. data/rails/activerecord/test/fixtures/products.yml +4 -0
  1715. data/rails/activerecord/test/fixtures/projects.yml +7 -0
  1716. data/rails/activerecord/test/fixtures/randomly_named_a9.yml +7 -0
  1717. data/rails/activerecord/test/fixtures/ratings.yml +14 -0
  1718. data/rails/activerecord/test/fixtures/readers.yml +11 -0
  1719. data/rails/activerecord/test/fixtures/references.yml +17 -0
  1720. data/rails/activerecord/test/fixtures/reserved_words/distinct.yml +5 -0
  1721. data/rails/activerecord/test/fixtures/reserved_words/distinct_select.yml +11 -0
  1722. data/rails/activerecord/test/fixtures/reserved_words/group.yml +14 -0
  1723. data/rails/activerecord/test/fixtures/reserved_words/select.yml +8 -0
  1724. data/rails/activerecord/test/fixtures/reserved_words/values.yml +7 -0
  1725. data/rails/activerecord/test/fixtures/ships.yml +6 -0
  1726. data/rails/activerecord/test/fixtures/speedometers.yml +8 -0
  1727. data/rails/activerecord/test/fixtures/sponsors.yml +12 -0
  1728. data/rails/activerecord/test/fixtures/string_key_objects.yml +7 -0
  1729. data/rails/activerecord/test/fixtures/subscribers.yml +11 -0
  1730. data/rails/activerecord/test/fixtures/subscriptions.yml +12 -0
  1731. data/rails/activerecord/test/fixtures/taggings.yml +78 -0
  1732. data/rails/activerecord/test/fixtures/tags.yml +11 -0
  1733. data/rails/activerecord/test/fixtures/tasks.yml +7 -0
  1734. data/rails/activerecord/test/fixtures/teapots.yml +3 -0
  1735. data/rails/activerecord/test/fixtures/to_be_linked/accounts.yml +2 -0
  1736. data/rails/activerecord/test/fixtures/to_be_linked/users.yml +10 -0
  1737. data/rails/activerecord/test/fixtures/topics.yml +49 -0
  1738. data/rails/activerecord/test/fixtures/toys.yml +14 -0
  1739. data/rails/activerecord/test/fixtures/traffic_lights.yml +10 -0
  1740. data/rails/activerecord/test/fixtures/treasures.yml +10 -0
  1741. data/rails/activerecord/test/fixtures/uuid_children.yml +3 -0
  1742. data/rails/activerecord/test/fixtures/uuid_parents.yml +2 -0
  1743. data/rails/activerecord/test/fixtures/variants.yml +4 -0
  1744. data/rails/activerecord/test/fixtures/vegetables.yml +20 -0
  1745. data/rails/activerecord/test/fixtures/vertices.yml +4 -0
  1746. data/rails/activerecord/test/fixtures/warehouse-things.yml +3 -0
  1747. data/rails/activerecord/test/fixtures/zines.yml +5 -0
  1748. data/rails/activerecord/test/migrations/10_urban/9_add_expressions.rb +11 -0
  1749. data/rails/activerecord/test/migrations/decimal/1_give_me_big_numbers.rb +15 -0
  1750. data/rails/activerecord/test/migrations/empty/.gitkeep +0 -0
  1751. data/rails/activerecord/test/migrations/magic/1_currencies_have_symbols.rb +12 -0
  1752. data/rails/activerecord/test/migrations/missing/1000_people_have_middle_names.rb +9 -0
  1753. data/rails/activerecord/test/migrations/missing/1_people_have_last_names.rb +9 -0
  1754. data/rails/activerecord/test/migrations/missing/3_we_need_reminders.rb +12 -0
  1755. data/rails/activerecord/test/migrations/missing/4_innocent_jointable.rb +12 -0
  1756. data/rails/activerecord/test/migrations/rename/1_we_need_things.rb +11 -0
  1757. data/rails/activerecord/test/migrations/rename/2_rename_things.rb +9 -0
  1758. data/rails/activerecord/test/migrations/to_copy/1_people_have_hobbies.rb +9 -0
  1759. data/rails/activerecord/test/migrations/to_copy/2_people_have_descriptions.rb +9 -0
  1760. data/rails/activerecord/test/migrations/to_copy2/1_create_articles.rb +7 -0
  1761. data/rails/activerecord/test/migrations/to_copy2/2_create_comments.rb +7 -0
  1762. data/rails/activerecord/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -0
  1763. data/rails/activerecord/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -0
  1764. data/rails/activerecord/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -0
  1765. data/rails/activerecord/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -0
  1766. data/rails/activerecord/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -0
  1767. data/rails/activerecord/test/migrations/valid/1_valid_people_have_last_names.rb +9 -0
  1768. data/rails/activerecord/test/migrations/valid/2_we_need_reminders.rb +12 -0
  1769. data/rails/activerecord/test/migrations/valid/3_innocent_jointable.rb +12 -0
  1770. data/rails/activerecord/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -0
  1771. data/rails/activerecord/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -0
  1772. data/rails/activerecord/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -0
  1773. data/rails/activerecord/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -0
  1774. data/rails/activerecord/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -0
  1775. data/rails/activerecord/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -0
  1776. data/rails/activerecord/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -0
  1777. data/rails/activerecord/test/models/admin/account.rb +3 -0
  1778. data/rails/activerecord/test/models/admin/randomly_named_c1.rb +3 -0
  1779. data/rails/activerecord/test/models/admin/user.rb +40 -0
  1780. data/rails/activerecord/test/models/admin.rb +5 -0
  1781. data/rails/activerecord/test/models/aircraft.rb +4 -0
  1782. data/rails/activerecord/test/models/arunit2_model.rb +3 -0
  1783. data/rails/activerecord/test/models/author.rb +212 -0
  1784. data/rails/activerecord/test/models/auto_id.rb +4 -0
  1785. data/rails/activerecord/test/models/autoloadable/extra_firm.rb +2 -0
  1786. data/rails/activerecord/test/models/binary.rb +2 -0
  1787. data/rails/activerecord/test/models/bird.rb +12 -0
  1788. data/rails/activerecord/test/models/book.rb +18 -0
  1789. data/rails/activerecord/test/models/boolean.rb +2 -0
  1790. data/rails/activerecord/test/models/bulb.rb +51 -0
  1791. data/rails/activerecord/test/models/cake_designer.rb +3 -0
  1792. data/rails/activerecord/test/models/car.rb +26 -0
  1793. data/rails/activerecord/test/models/categorization.rb +19 -0
  1794. data/rails/activerecord/test/models/category.rb +35 -0
  1795. data/rails/activerecord/test/models/chef.rb +3 -0
  1796. data/rails/activerecord/test/models/citation.rb +3 -0
  1797. data/rails/activerecord/test/models/club.rb +23 -0
  1798. data/rails/activerecord/test/models/college.rb +10 -0
  1799. data/rails/activerecord/test/models/column.rb +3 -0
  1800. data/rails/activerecord/test/models/column_name.rb +3 -0
  1801. data/rails/activerecord/test/models/comment.rb +59 -0
  1802. data/rails/activerecord/test/models/company.rb +225 -0
  1803. data/rails/activerecord/test/models/company_in_module.rb +98 -0
  1804. data/rails/activerecord/test/models/computer.rb +3 -0
  1805. data/rails/activerecord/test/models/contact.rb +41 -0
  1806. data/rails/activerecord/test/models/contract.rb +20 -0
  1807. data/rails/activerecord/test/models/country.rb +7 -0
  1808. data/rails/activerecord/test/models/course.rb +6 -0
  1809. data/rails/activerecord/test/models/customer.rb +77 -0
  1810. data/rails/activerecord/test/models/dashboard.rb +3 -0
  1811. data/rails/activerecord/test/models/default.rb +2 -0
  1812. data/rails/activerecord/test/models/department.rb +4 -0
  1813. data/rails/activerecord/test/models/developer.rb +252 -0
  1814. data/rails/activerecord/test/models/dog.rb +5 -0
  1815. data/rails/activerecord/test/models/dog_lover.rb +5 -0
  1816. data/rails/activerecord/test/models/drink_designer.rb +3 -0
  1817. data/rails/activerecord/test/models/edge.rb +5 -0
  1818. data/rails/activerecord/test/models/electron.rb +5 -0
  1819. data/rails/activerecord/test/models/engine.rb +4 -0
  1820. data/rails/activerecord/test/models/entrant.rb +3 -0
  1821. data/rails/activerecord/test/models/essay.rb +5 -0
  1822. data/rails/activerecord/test/models/event.rb +3 -0
  1823. data/rails/activerecord/test/models/eye.rb +37 -0
  1824. data/rails/activerecord/test/models/face.rb +9 -0
  1825. data/rails/activerecord/test/models/friendship.rb +6 -0
  1826. data/rails/activerecord/test/models/guid.rb +2 -0
  1827. data/rails/activerecord/test/models/hotel.rb +6 -0
  1828. data/rails/activerecord/test/models/image.rb +3 -0
  1829. data/rails/activerecord/test/models/interest.rb +5 -0
  1830. data/rails/activerecord/test/models/invoice.rb +4 -0
  1831. data/rails/activerecord/test/models/item.rb +7 -0
  1832. data/rails/activerecord/test/models/job.rb +7 -0
  1833. data/rails/activerecord/test/models/joke.rb +7 -0
  1834. data/rails/activerecord/test/models/keyboard.rb +3 -0
  1835. data/rails/activerecord/test/models/legacy_thing.rb +3 -0
  1836. data/rails/activerecord/test/models/lesson.rb +11 -0
  1837. data/rails/activerecord/test/models/line_item.rb +3 -0
  1838. data/rails/activerecord/test/models/liquid.rb +4 -0
  1839. data/rails/activerecord/test/models/man.rb +11 -0
  1840. data/rails/activerecord/test/models/matey.rb +4 -0
  1841. data/rails/activerecord/test/models/member.rb +38 -0
  1842. data/rails/activerecord/test/models/member_detail.rb +7 -0
  1843. data/rails/activerecord/test/models/member_type.rb +3 -0
  1844. data/rails/activerecord/test/models/membership.rb +20 -0
  1845. data/rails/activerecord/test/models/minimalistic.rb +2 -0
  1846. data/rails/activerecord/test/models/minivan.rb +9 -0
  1847. data/rails/activerecord/test/models/mixed_case_monkey.rb +3 -0
  1848. data/rails/activerecord/test/models/molecule.rb +6 -0
  1849. data/rails/activerecord/test/models/movie.rb +5 -0
  1850. data/rails/activerecord/test/models/order.rb +4 -0
  1851. data/rails/activerecord/test/models/organization.rb +14 -0
  1852. data/rails/activerecord/test/models/owner.rb +34 -0
  1853. data/rails/activerecord/test/models/parrot.rb +29 -0
  1854. data/rails/activerecord/test/models/person.rb +143 -0
  1855. data/rails/activerecord/test/models/personal_legacy_thing.rb +4 -0
  1856. data/rails/activerecord/test/models/pet.rb +15 -0
  1857. data/rails/activerecord/test/models/pirate.rb +92 -0
  1858. data/rails/activerecord/test/models/possession.rb +3 -0
  1859. data/rails/activerecord/test/models/post.rb +243 -0
  1860. data/rails/activerecord/test/models/price_estimate.rb +4 -0
  1861. data/rails/activerecord/test/models/project.rb +29 -0
  1862. data/rails/activerecord/test/models/publisher/article.rb +4 -0
  1863. data/rails/activerecord/test/models/publisher/magazine.rb +3 -0
  1864. data/rails/activerecord/test/models/publisher.rb +2 -0
  1865. data/rails/activerecord/test/models/randomly_named_c1.rb +3 -0
  1866. data/rails/activerecord/test/models/rating.rb +4 -0
  1867. data/rails/activerecord/test/models/reader.rb +23 -0
  1868. data/rails/activerecord/test/models/record.rb +2 -0
  1869. data/rails/activerecord/test/models/reference.rb +22 -0
  1870. data/rails/activerecord/test/models/reply.rb +61 -0
  1871. data/rails/activerecord/test/models/ship.rb +26 -0
  1872. data/rails/activerecord/test/models/ship_part.rb +8 -0
  1873. data/rails/activerecord/test/models/shop.rb +17 -0
  1874. data/rails/activerecord/test/models/speedometer.rb +6 -0
  1875. data/rails/activerecord/test/models/sponsor.rb +7 -0
  1876. data/rails/activerecord/test/models/string_key_object.rb +3 -0
  1877. data/rails/activerecord/test/models/student.rb +4 -0
  1878. data/rails/activerecord/test/models/subject.rb +16 -0
  1879. data/rails/activerecord/test/models/subscriber.rb +8 -0
  1880. data/rails/activerecord/test/models/subscription.rb +4 -0
  1881. data/rails/activerecord/test/models/tag.rb +7 -0
  1882. data/rails/activerecord/test/models/tagging.rb +13 -0
  1883. data/rails/activerecord/test/models/task.rb +5 -0
  1884. data/rails/activerecord/test/models/topic.rb +124 -0
  1885. data/rails/activerecord/test/models/toy.rb +6 -0
  1886. data/rails/activerecord/test/models/traffic_light.rb +4 -0
  1887. data/rails/activerecord/test/models/treasure.rb +13 -0
  1888. data/rails/activerecord/test/models/treaty.rb +7 -0
  1889. data/rails/activerecord/test/models/tyre.rb +11 -0
  1890. data/rails/activerecord/test/models/uuid_child.rb +3 -0
  1891. data/rails/activerecord/test/models/uuid_parent.rb +3 -0
  1892. data/rails/activerecord/test/models/vegetables.rb +24 -0
  1893. data/rails/activerecord/test/models/vertex.rb +9 -0
  1894. data/rails/activerecord/test/models/warehouse_thing.rb +5 -0
  1895. data/rails/activerecord/test/models/wheel.rb +3 -0
  1896. data/rails/activerecord/test/models/without_table.rb +3 -0
  1897. data/rails/activerecord/test/models/zine.rb +3 -0
  1898. data/rails/activerecord/test/schema/mysql2_specific_schema.rb +58 -0
  1899. data/rails/activerecord/test/schema/mysql_specific_schema.rb +70 -0
  1900. data/rails/activerecord/test/schema/oracle_specific_schema.rb +43 -0
  1901. data/rails/activerecord/test/schema/postgresql_specific_schema.rb +198 -0
  1902. data/rails/activerecord/test/schema/schema.rb +905 -0
  1903. data/rails/activerecord/test/schema/sqlite_specific_schema.rb +22 -0
  1904. data/rails/activerecord/test/support/config.rb +43 -0
  1905. data/rails/activerecord/test/support/connection.rb +21 -0
  1906. data/rails/activerecord/test/support/connection_helper.rb +14 -0
  1907. data/rails/activerecord/test/support/ddl_helper.rb +8 -0
  1908. data/rails/activerecord/test/support/schema_dumping_helper.rb +20 -0
  1909. data/rails/activesupport/CHANGELOG.md +418 -0
  1910. data/rails/activesupport/MIT-LICENSE +20 -0
  1911. data/rails/activesupport/README.rdoc +40 -0
  1912. data/rails/activesupport/Rakefile +32 -0
  1913. data/rails/activesupport/activesupport.gemspec +28 -0
  1914. data/rails/activesupport/bin/generate_tables +144 -0
  1915. data/rails/activesupport/lib/active_support/all.rb +3 -0
  1916. data/rails/activesupport/lib/active_support/backtrace_cleaner.rb +103 -0
  1917. data/rails/activesupport/lib/active_support/benchmarkable.rb +49 -0
  1918. data/rails/activesupport/lib/active_support/builder.rb +6 -0
  1919. data/rails/activesupport/lib/active_support/cache/file_store.rb +190 -0
  1920. data/rails/activesupport/lib/active_support/cache/mem_cache_store.rb +198 -0
  1921. data/rails/activesupport/lib/active_support/cache/memory_store.rb +172 -0
  1922. data/rails/activesupport/lib/active_support/cache/null_store.rb +44 -0
  1923. data/rails/activesupport/lib/active_support/cache/strategy/local_cache.rb +161 -0
  1924. data/rails/activesupport/lib/active_support/cache/strategy/local_cache_middleware.rb +44 -0
  1925. data/rails/activesupport/lib/active_support/cache.rb +717 -0
  1926. data/rails/activesupport/lib/active_support/callbacks.rb +793 -0
  1927. data/rails/activesupport/lib/active_support/concern.rb +142 -0
  1928. data/rails/activesupport/lib/active_support/concurrency/latch.rb +27 -0
  1929. data/rails/activesupport/lib/active_support/configurable.rb +147 -0
  1930. data/rails/activesupport/lib/active_support/core_ext/array/access.rb +64 -0
  1931. data/rails/activesupport/lib/active_support/core_ext/array/conversions.rb +209 -0
  1932. data/rails/activesupport/lib/active_support/core_ext/array/extract_options.rb +29 -0
  1933. data/rails/activesupport/lib/active_support/core_ext/array/grouping.rb +116 -0
  1934. data/rails/activesupport/lib/active_support/core_ext/array/prepend_and_append.rb +7 -0
  1935. data/rails/activesupport/lib/active_support/core_ext/array/wrap.rb +45 -0
  1936. data/rails/activesupport/lib/active_support/core_ext/array.rb +6 -0
  1937. data/rails/activesupport/lib/active_support/core_ext/benchmark.rb +14 -0
  1938. data/rails/activesupport/lib/active_support/core_ext/big_decimal/conversions.rb +16 -0
  1939. data/rails/activesupport/lib/active_support/core_ext/big_decimal/yaml_conversions.rb +14 -0
  1940. data/rails/activesupport/lib/active_support/core_ext/big_decimal.rb +1 -0
  1941. data/rails/activesupport/lib/active_support/core_ext/class/attribute.rb +127 -0
  1942. data/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb +4 -0
  1943. data/rails/activesupport/lib/active_support/core_ext/class/delegating_attributes.rb +45 -0
  1944. data/rails/activesupport/lib/active_support/core_ext/class/subclasses.rb +42 -0
  1945. data/rails/activesupport/lib/active_support/core_ext/class.rb +3 -0
  1946. data/rails/activesupport/lib/active_support/core_ext/date/acts_like.rb +8 -0
  1947. data/rails/activesupport/lib/active_support/core_ext/date/calculations.rb +143 -0
  1948. data/rails/activesupport/lib/active_support/core_ext/date/conversions.rb +88 -0
  1949. data/rails/activesupport/lib/active_support/core_ext/date/zones.rb +6 -0
  1950. data/rails/activesupport/lib/active_support/core_ext/date.rb +5 -0
  1951. data/rails/activesupport/lib/active_support/core_ext/date_and_time/calculations.rb +251 -0
  1952. data/rails/activesupport/lib/active_support/core_ext/date_and_time/zones.rb +41 -0
  1953. data/rails/activesupport/lib/active_support/core_ext/date_time/acts_like.rb +14 -0
  1954. data/rails/activesupport/lib/active_support/core_ext/date_time/calculations.rb +173 -0
  1955. data/rails/activesupport/lib/active_support/core_ext/date_time/conversions.rb +103 -0
  1956. data/rails/activesupport/lib/active_support/core_ext/date_time/zones.rb +6 -0
  1957. data/rails/activesupport/lib/active_support/core_ext/date_time.rb +4 -0
  1958. data/rails/activesupport/lib/active_support/core_ext/digest/uuid.rb +51 -0
  1959. data/rails/activesupport/lib/active_support/core_ext/enumerable.rb +80 -0
  1960. data/rails/activesupport/lib/active_support/core_ext/file/atomic.rb +63 -0
  1961. data/rails/activesupport/lib/active_support/core_ext/file.rb +1 -0
  1962. data/rails/activesupport/lib/active_support/core_ext/hash/compact.rb +20 -0
  1963. data/rails/activesupport/lib/active_support/core_ext/hash/conversions.rb +243 -0
  1964. data/rails/activesupport/lib/active_support/core_ext/hash/deep_merge.rb +38 -0
  1965. data/rails/activesupport/lib/active_support/core_ext/hash/except.rb +21 -0
  1966. data/rails/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb +23 -0
  1967. data/rails/activesupport/lib/active_support/core_ext/hash/keys.rb +166 -0
  1968. data/rails/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb +22 -0
  1969. data/rails/activesupport/lib/active_support/core_ext/hash/slice.rb +48 -0
  1970. data/rails/activesupport/lib/active_support/core_ext/hash/transform_values.rb +23 -0
  1971. data/rails/activesupport/lib/active_support/core_ext/hash.rb +9 -0
  1972. data/rails/activesupport/lib/active_support/core_ext/integer/inflections.rb +29 -0
  1973. data/rails/activesupport/lib/active_support/core_ext/integer/multiple.rb +10 -0
  1974. data/rails/activesupport/lib/active_support/core_ext/integer/time.rb +44 -0
  1975. data/rails/activesupport/lib/active_support/core_ext/integer.rb +3 -0
  1976. data/rails/activesupport/lib/active_support/core_ext/kernel/agnostics.rb +11 -0
  1977. data/rails/activesupport/lib/active_support/core_ext/kernel/concern.rb +10 -0
  1978. data/rails/activesupport/lib/active_support/core_ext/kernel/debugger.rb +10 -0
  1979. data/rails/activesupport/lib/active_support/core_ext/kernel/reporting.rb +124 -0
  1980. data/rails/activesupport/lib/active_support/core_ext/kernel/singleton_class.rb +6 -0
  1981. data/rails/activesupport/lib/active_support/core_ext/kernel.rb +5 -0
  1982. data/rails/activesupport/lib/active_support/core_ext/load_error.rb +28 -0
  1983. data/rails/activesupport/lib/active_support/core_ext/marshal.rb +21 -0
  1984. data/rails/activesupport/lib/active_support/core_ext/module/aliasing.rb +69 -0
  1985. data/rails/activesupport/lib/active_support/core_ext/module/anonymous.rb +19 -0
  1986. data/rails/activesupport/lib/active_support/core_ext/module/attr_internal.rb +39 -0
  1987. data/rails/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +212 -0
  1988. data/rails/activesupport/lib/active_support/core_ext/module/concerning.rb +135 -0
  1989. data/rails/activesupport/lib/active_support/core_ext/module/delegation.rb +217 -0
  1990. data/rails/activesupport/lib/active_support/core_ext/module/deprecation.rb +23 -0
  1991. data/rails/activesupport/lib/active_support/core_ext/module/introspection.rb +62 -0
  1992. data/rails/activesupport/lib/active_support/core_ext/module/method_transplanting.rb +11 -0
  1993. data/rails/activesupport/lib/active_support/core_ext/module/qualified_const.rb +52 -0
  1994. data/rails/activesupport/lib/active_support/core_ext/module/reachable.rb +8 -0
  1995. data/rails/activesupport/lib/active_support/core_ext/module/remove_method.rb +12 -0
  1996. data/rails/activesupport/lib/active_support/core_ext/module.rb +11 -0
  1997. data/rails/activesupport/lib/active_support/core_ext/name_error.rb +18 -0
  1998. data/rails/activesupport/lib/active_support/core_ext/numeric/bytes.rb +44 -0
  1999. data/rails/activesupport/lib/active_support/core_ext/numeric/conversions.rb +135 -0
  2000. data/rails/activesupport/lib/active_support/core_ext/numeric/time.rb +69 -0
  2001. data/rails/activesupport/lib/active_support/core_ext/numeric.rb +3 -0
  2002. data/rails/activesupport/lib/active_support/core_ext/object/acts_like.rb +10 -0
  2003. data/rails/activesupport/lib/active_support/core_ext/object/blank.rb +131 -0
  2004. data/rails/activesupport/lib/active_support/core_ext/object/conversions.rb +4 -0
  2005. data/rails/activesupport/lib/active_support/core_ext/object/deep_dup.rb +46 -0
  2006. data/rails/activesupport/lib/active_support/core_ext/object/duplicable.rb +103 -0
  2007. data/rails/activesupport/lib/active_support/core_ext/object/inclusion.rb +27 -0
  2008. data/rails/activesupport/lib/active_support/core_ext/object/instance_variables.rb +28 -0
  2009. data/rails/activesupport/lib/active_support/core_ext/object/itself.rb +15 -0
  2010. data/rails/activesupport/lib/active_support/core_ext/object/json.rb +197 -0
  2011. data/rails/activesupport/lib/active_support/core_ext/object/to_param.rb +1 -0
  2012. data/rails/activesupport/lib/active_support/core_ext/object/to_query.rb +84 -0
  2013. data/rails/activesupport/lib/active_support/core_ext/object/try.rb +100 -0
  2014. data/rails/activesupport/lib/active_support/core_ext/object/with_options.rb +69 -0
  2015. data/rails/activesupport/lib/active_support/core_ext/object.rb +15 -0
  2016. data/rails/activesupport/lib/active_support/core_ext/range/conversions.rb +19 -0
  2017. data/rails/activesupport/lib/active_support/core_ext/range/each.rb +23 -0
  2018. data/rails/activesupport/lib/active_support/core_ext/range/include_range.rb +23 -0
  2019. data/rails/activesupport/lib/active_support/core_ext/range/overlaps.rb +8 -0
  2020. data/rails/activesupport/lib/active_support/core_ext/range.rb +4 -0
  2021. data/rails/activesupport/lib/active_support/core_ext/regexp.rb +5 -0
  2022. data/rails/activesupport/lib/active_support/core_ext/string/access.rb +104 -0
  2023. data/rails/activesupport/lib/active_support/core_ext/string/behavior.rb +6 -0
  2024. data/rails/activesupport/lib/active_support/core_ext/string/conversions.rb +56 -0
  2025. data/rails/activesupport/lib/active_support/core_ext/string/exclude.rb +11 -0
  2026. data/rails/activesupport/lib/active_support/core_ext/string/filters.rb +102 -0
  2027. data/rails/activesupport/lib/active_support/core_ext/string/indent.rb +43 -0
  2028. data/rails/activesupport/lib/active_support/core_ext/string/inflections.rb +217 -0
  2029. data/rails/activesupport/lib/active_support/core_ext/string/inquiry.rb +13 -0
  2030. data/rails/activesupport/lib/active_support/core_ext/string/multibyte.rb +49 -0
  2031. data/rails/activesupport/lib/active_support/core_ext/string/output_safety.rb +262 -0
  2032. data/rails/activesupport/lib/active_support/core_ext/string/starts_ends_with.rb +4 -0
  2033. data/rails/activesupport/lib/active_support/core_ext/string/strip.rb +26 -0
  2034. data/rails/activesupport/lib/active_support/core_ext/string/zones.rb +14 -0
  2035. data/rails/activesupport/lib/active_support/core_ext/string.rb +13 -0
  2036. data/rails/activesupport/lib/active_support/core_ext/struct.rb +6 -0
  2037. data/rails/activesupport/lib/active_support/core_ext/thread.rb +86 -0
  2038. data/rails/activesupport/lib/active_support/core_ext/time/acts_like.rb +8 -0
  2039. data/rails/activesupport/lib/active_support/core_ext/time/calculations.rb +265 -0
  2040. data/rails/activesupport/lib/active_support/core_ext/time/conversions.rb +65 -0
  2041. data/rails/activesupport/lib/active_support/core_ext/time/marshal.rb +30 -0
  2042. data/rails/activesupport/lib/active_support/core_ext/time/zones.rb +79 -0
  2043. data/rails/activesupport/lib/active_support/core_ext/time.rb +5 -0
  2044. data/rails/activesupport/lib/active_support/core_ext/uri.rb +26 -0
  2045. data/rails/activesupport/lib/active_support/core_ext.rb +3 -0
  2046. data/rails/activesupport/lib/active_support/dependencies/autoload.rb +77 -0
  2047. data/rails/activesupport/lib/active_support/dependencies.rb +762 -0
  2048. data/rails/activesupport/lib/active_support/deprecation/behaviors.rb +76 -0
  2049. data/rails/activesupport/lib/active_support/deprecation/instance_delegator.rb +24 -0
  2050. data/rails/activesupport/lib/active_support/deprecation/method_wrappers.rb +44 -0
  2051. data/rails/activesupport/lib/active_support/deprecation/proxy_wrappers.rb +126 -0
  2052. data/rails/activesupport/lib/active_support/deprecation/reporting.rb +94 -0
  2053. data/rails/activesupport/lib/active_support/deprecation.rb +43 -0
  2054. data/rails/activesupport/lib/active_support/descendants_tracker.rb +60 -0
  2055. data/rails/activesupport/lib/active_support/duration.rb +136 -0
  2056. data/rails/activesupport/lib/active_support/file_update_checker.rb +137 -0
  2057. data/rails/activesupport/lib/active_support/gem_version.rb +15 -0
  2058. data/rails/activesupport/lib/active_support/gzip.rb +36 -0
  2059. data/rails/activesupport/lib/active_support/hash_with_indifferent_access.rb +281 -0
  2060. data/rails/activesupport/lib/active_support/i18n.rb +13 -0
  2061. data/rails/activesupport/lib/active_support/i18n_railtie.rb +94 -0
  2062. data/rails/activesupport/lib/active_support/inflections.rb +70 -0
  2063. data/rails/activesupport/lib/active_support/inflector/inflections.rb +211 -0
  2064. data/rails/activesupport/lib/active_support/inflector/methods.rb +383 -0
  2065. data/rails/activesupport/lib/active_support/inflector/transliterate.rb +97 -0
  2066. data/rails/activesupport/lib/active_support/inflector.rb +7 -0
  2067. data/rails/activesupport/lib/active_support/json/decoding.rb +73 -0
  2068. data/rails/activesupport/lib/active_support/json/encoding.rb +172 -0
  2069. data/rails/activesupport/lib/active_support/json.rb +2 -0
  2070. data/rails/activesupport/lib/active_support/key_generator.rb +73 -0
  2071. data/rails/activesupport/lib/active_support/lazy_load_hooks.rb +48 -0
  2072. data/rails/activesupport/lib/active_support/locale/en.yml +133 -0
  2073. data/rails/activesupport/lib/active_support/log_subscriber/test_helper.rb +104 -0
  2074. data/rails/activesupport/lib/active_support/log_subscriber.rb +109 -0
  2075. data/rails/activesupport/lib/active_support/logger.rb +57 -0
  2076. data/rails/activesupport/lib/active_support/logger_silence.rb +24 -0
  2077. data/rails/activesupport/lib/active_support/message_encryptor.rb +107 -0
  2078. data/rails/activesupport/lib/active_support/message_verifier.rb +72 -0
  2079. data/rails/activesupport/lib/active_support/multibyte/chars.rb +222 -0
  2080. data/rails/activesupport/lib/active_support/multibyte/unicode.rb +390 -0
  2081. data/rails/activesupport/lib/active_support/multibyte.rb +21 -0
  2082. data/rails/activesupport/lib/active_support/notifications/fanout.rb +157 -0
  2083. data/rails/activesupport/lib/active_support/notifications/instrumenter.rb +73 -0
  2084. data/rails/activesupport/lib/active_support/notifications.rb +212 -0
  2085. data/rails/activesupport/lib/active_support/number_helper/number_converter.rb +182 -0
  2086. data/rails/activesupport/lib/active_support/number_helper/number_to_currency_converter.rb +46 -0
  2087. data/rails/activesupport/lib/active_support/number_helper/number_to_delimited_converter.rb +23 -0
  2088. data/rails/activesupport/lib/active_support/number_helper/number_to_human_converter.rb +66 -0
  2089. data/rails/activesupport/lib/active_support/number_helper/number_to_human_size_converter.rb +58 -0
  2090. data/rails/activesupport/lib/active_support/number_helper/number_to_percentage_converter.rb +12 -0
  2091. data/rails/activesupport/lib/active_support/number_helper/number_to_phone_converter.rb +49 -0
  2092. data/rails/activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb +87 -0
  2093. data/rails/activesupport/lib/active_support/number_helper.rb +345 -0
  2094. data/rails/activesupport/lib/active_support/option_merger.rb +25 -0
  2095. data/rails/activesupport/lib/active_support/ordered_hash.rb +48 -0
  2096. data/rails/activesupport/lib/active_support/ordered_options.rb +67 -0
  2097. data/rails/activesupport/lib/active_support/per_thread_registry.rb +53 -0
  2098. data/rails/activesupport/lib/active_support/proxy_object.rb +13 -0
  2099. data/rails/activesupport/lib/active_support/rails.rb +27 -0
  2100. data/rails/activesupport/lib/active_support/railtie.rb +46 -0
  2101. data/rails/activesupport/lib/active_support/rescuable.rb +119 -0
  2102. data/rails/activesupport/lib/active_support/security_utils.rb +20 -0
  2103. data/rails/activesupport/lib/active_support/string_inquirer.rb +26 -0
  2104. data/rails/activesupport/lib/active_support/subscriber.rb +125 -0
  2105. data/rails/activesupport/lib/active_support/tagged_logging.rb +76 -0
  2106. data/rails/activesupport/lib/active_support/test_case.rb +100 -0
  2107. data/rails/activesupport/lib/active_support/testing/assertions.rb +97 -0
  2108. data/rails/activesupport/lib/active_support/testing/autorun.rb +5 -0
  2109. data/rails/activesupport/lib/active_support/testing/constant_lookup.rb +50 -0
  2110. data/rails/activesupport/lib/active_support/testing/declarative.rb +26 -0
  2111. data/rails/activesupport/lib/active_support/testing/deprecation.rb +35 -0
  2112. data/rails/activesupport/lib/active_support/testing/isolation.rb +101 -0
  2113. data/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb +50 -0
  2114. data/rails/activesupport/lib/active_support/testing/tagged_logging.rb +25 -0
  2115. data/rails/activesupport/lib/active_support/testing/time_helpers.rb +131 -0
  2116. data/rails/activesupport/lib/active_support/time.rb +18 -0
  2117. data/rails/activesupport/lib/active_support/time_with_zone.rb +409 -0
  2118. data/rails/activesupport/lib/active_support/values/time_zone.rb +428 -0
  2119. data/rails/activesupport/lib/active_support/values/unicode_tables.dat +0 -0
  2120. data/rails/activesupport/lib/active_support/version.rb +8 -0
  2121. data/rails/activesupport/lib/active_support/xml_mini/jdom.rb +180 -0
  2122. data/rails/activesupport/lib/active_support/xml_mini/libxml.rb +79 -0
  2123. data/rails/activesupport/lib/active_support/xml_mini/libxmlsax.rb +85 -0
  2124. data/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb +83 -0
  2125. data/rails/activesupport/lib/active_support/xml_mini/nokogirisax.rb +87 -0
  2126. data/rails/activesupport/lib/active_support/xml_mini/rexml.rb +129 -0
  2127. data/rails/activesupport/lib/active_support/xml_mini.rb +191 -0
  2128. data/rails/activesupport/lib/active_support.rb +85 -0
  2129. data/rails/activesupport/test/abstract_unit.rb +45 -0
  2130. data/rails/activesupport/test/autoload_test.rb +81 -0
  2131. data/rails/activesupport/test/autoloading_fixtures/a/b.rb +2 -0
  2132. data/rails/activesupport/test/autoloading_fixtures/a/c/d.rb +2 -0
  2133. data/rails/activesupport/test/autoloading_fixtures/a/c/e/f.rb +2 -0
  2134. data/rails/activesupport/test/autoloading_fixtures/application.rb +1 -0
  2135. data/rails/activesupport/test/autoloading_fixtures/circular1.rb +6 -0
  2136. data/rails/activesupport/test/autoloading_fixtures/circular2.rb +4 -0
  2137. data/rails/activesupport/test/autoloading_fixtures/class_folder/class_folder_subclass.rb +3 -0
  2138. data/rails/activesupport/test/autoloading_fixtures/class_folder/inline_class.rb +2 -0
  2139. data/rails/activesupport/test/autoloading_fixtures/class_folder/nested_class.rb +7 -0
  2140. data/rails/activesupport/test/autoloading_fixtures/class_folder.rb +3 -0
  2141. data/rails/activesupport/test/autoloading_fixtures/conflict.rb +1 -0
  2142. data/rails/activesupport/test/autoloading_fixtures/counting_loader.rb +5 -0
  2143. data/rails/activesupport/test/autoloading_fixtures/cross_site_dependency.rb +2 -0
  2144. data/rails/activesupport/test/autoloading_fixtures/e.rb +2 -0
  2145. data/rails/activesupport/test/autoloading_fixtures/html/some_class.rb +4 -0
  2146. data/rails/activesupport/test/autoloading_fixtures/load_path/loaded_constant.rb +3 -0
  2147. data/rails/activesupport/test/autoloading_fixtures/loads_constant.rb +5 -0
  2148. data/rails/activesupport/test/autoloading_fixtures/module_folder/inline_class.rb +2 -0
  2149. data/rails/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb +4 -0
  2150. data/rails/activesupport/test/autoloading_fixtures/module_folder/nested_sibling.rb +2 -0
  2151. data/rails/activesupport/test/autoloading_fixtures/module_with_custom_const_missing/a/b.rb +1 -0
  2152. data/rails/activesupport/test/autoloading_fixtures/multiple_constant_file.rb +2 -0
  2153. data/rails/activesupport/test/autoloading_fixtures/raises_name_error.rb +3 -0
  2154. data/rails/activesupport/test/autoloading_fixtures/raises_no_method_error.rb +3 -0
  2155. data/rails/activesupport/test/autoloading_fixtures/requires_constant.rb +5 -0
  2156. data/rails/activesupport/test/autoloading_fixtures/should_not_be_required.rb +1 -0
  2157. data/rails/activesupport/test/autoloading_fixtures/typo.rb +2 -0
  2158. data/rails/activesupport/test/benchmarkable_test.rb +62 -0
  2159. data/rails/activesupport/test/broadcast_logger_test.rb +82 -0
  2160. data/rails/activesupport/test/caching_test.rb +1076 -0
  2161. data/rails/activesupport/test/callback_inheritance_test.rb +176 -0
  2162. data/rails/activesupport/test/callbacks_test.rb +1003 -0
  2163. data/rails/activesupport/test/class_cache_test.rb +78 -0
  2164. data/rails/activesupport/test/clean_backtrace_test.rb +75 -0
  2165. data/rails/activesupport/test/clean_logger_test.rb +29 -0
  2166. data/rails/activesupport/test/concern_test.rb +104 -0
  2167. data/rails/activesupport/test/configurable_test.rb +123 -0
  2168. data/rails/activesupport/test/constantize_test_cases.rb +116 -0
  2169. data/rails/activesupport/test/core_ext/array/access_test.rb +30 -0
  2170. data/rails/activesupport/test/core_ext/array/conversions_test.rb +197 -0
  2171. data/rails/activesupport/test/core_ext/array/extract_options_test.rb +45 -0
  2172. data/rails/activesupport/test/core_ext/array/grouping_test.rb +126 -0
  2173. data/rails/activesupport/test/core_ext/array/prepend_append_test.rb +12 -0
  2174. data/rails/activesupport/test/core_ext/array/wrap_test.rb +77 -0
  2175. data/rails/activesupport/test/core_ext/big_decimal/yaml_conversions_test.rb +11 -0
  2176. data/rails/activesupport/test/core_ext/bigdecimal_test.rb +9 -0
  2177. data/rails/activesupport/test/core_ext/class/attribute_test.rb +91 -0
  2178. data/rails/activesupport/test/core_ext/class/delegating_attributes_test.rb +122 -0
  2179. data/rails/activesupport/test/core_ext/class_test.rb +28 -0
  2180. data/rails/activesupport/test/core_ext/date_and_time_behavior.rb +241 -0
  2181. data/rails/activesupport/test/core_ext/date_ext_test.rb +373 -0
  2182. data/rails/activesupport/test/core_ext/date_time_ext_test.rb +358 -0
  2183. data/rails/activesupport/test/core_ext/digest/uuid_test.rb +24 -0
  2184. data/rails/activesupport/test/core_ext/duration_test.rb +223 -0
  2185. data/rails/activesupport/test/core_ext/enumerable_test.rb +106 -0
  2186. data/rails/activesupport/test/core_ext/file_test.rb +68 -0
  2187. data/rails/activesupport/test/core_ext/hash/transform_keys_test.rb +32 -0
  2188. data/rails/activesupport/test/core_ext/hash/transform_values_test.rb +61 -0
  2189. data/rails/activesupport/test/core_ext/hash_ext_test.rb +1688 -0
  2190. data/rails/activesupport/test/core_ext/integer_ext_test.rb +30 -0
  2191. data/rails/activesupport/test/core_ext/kernel/concern_test.rb +13 -0
  2192. data/rails/activesupport/test/core_ext/kernel_test.rb +138 -0
  2193. data/rails/activesupport/test/core_ext/load_error_test.rb +41 -0
  2194. data/rails/activesupport/test/core_ext/marshal_test.rb +124 -0
  2195. data/rails/activesupport/test/core_ext/module/anonymous_test.rb +14 -0
  2196. data/rails/activesupport/test/core_ext/module/attr_internal_test.rb +53 -0
  2197. data/rails/activesupport/test/core_ext/module/attribute_accessor_test.rb +79 -0
  2198. data/rails/activesupport/test/core_ext/module/attribute_aliasing_test.rb +59 -0
  2199. data/rails/activesupport/test/core_ext/module/concerning_test.rb +65 -0
  2200. data/rails/activesupport/test/core_ext/module/qualified_const_test.rb +108 -0
  2201. data/rails/activesupport/test/core_ext/module/reachable_test.rb +41 -0
  2202. data/rails/activesupport/test/core_ext/module/remove_method_test.rb +29 -0
  2203. data/rails/activesupport/test/core_ext/module_test.rb +509 -0
  2204. data/rails/activesupport/test/core_ext/name_error_test.rb +21 -0
  2205. data/rails/activesupport/test/core_ext/numeric_ext_test.rb +392 -0
  2206. data/rails/activesupport/test/core_ext/object/acts_like_test.rb +33 -0
  2207. data/rails/activesupport/test/core_ext/object/blank_test.rb +36 -0
  2208. data/rails/activesupport/test/core_ext/object/deep_dup_test.rb +53 -0
  2209. data/rails/activesupport/test/core_ext/object/duplicable_test.rb +31 -0
  2210. data/rails/activesupport/test/core_ext/object/inclusion_test.rb +59 -0
  2211. data/rails/activesupport/test/core_ext/object/instance_variables_test.rb +31 -0
  2212. data/rails/activesupport/test/core_ext/object/itself_test.rb +9 -0
  2213. data/rails/activesupport/test/core_ext/object/json_cherry_pick_test.rb +42 -0
  2214. data/rails/activesupport/test/core_ext/object/to_param_test.rb +37 -0
  2215. data/rails/activesupport/test/core_ext/object/to_query_test.rb +82 -0
  2216. data/rails/activesupport/test/core_ext/object/try_test.rb +99 -0
  2217. data/rails/activesupport/test/core_ext/range_ext_test.rb +125 -0
  2218. data/rails/activesupport/test/core_ext/regexp_ext_test.rb +10 -0
  2219. data/rails/activesupport/test/core_ext/string_ext_test.rb +864 -0
  2220. data/rails/activesupport/test/core_ext/struct_test.rb +10 -0
  2221. data/rails/activesupport/test/core_ext/thread_test.rb +75 -0
  2222. data/rails/activesupport/test/core_ext/time_ext_test.rb +901 -0
  2223. data/rails/activesupport/test/core_ext/time_with_zone_test.rb +1121 -0
  2224. data/rails/activesupport/test/core_ext/uri_ext_test.rb +13 -0
  2225. data/rails/activesupport/test/dependencies/check_warnings.rb +2 -0
  2226. data/rails/activesupport/test/dependencies/conflict.rb +1 -0
  2227. data/rails/activesupport/test/dependencies/cross_site_depender.rb +3 -0
  2228. data/rails/activesupport/test/dependencies/mutual_one.rb +4 -0
  2229. data/rails/activesupport/test/dependencies/mutual_two.rb +4 -0
  2230. data/rails/activesupport/test/dependencies/raises_exception.rb +3 -0
  2231. data/rails/activesupport/test/dependencies/raises_exception_without_blame_file.rb +5 -0
  2232. data/rails/activesupport/test/dependencies/requires_nonexistent0.rb +1 -0
  2233. data/rails/activesupport/test/dependencies/requires_nonexistent1.rb +1 -0
  2234. data/rails/activesupport/test/dependencies/service_one.rb +5 -0
  2235. data/rails/activesupport/test/dependencies/service_two.rb +2 -0
  2236. data/rails/activesupport/test/dependencies_test.rb +1059 -0
  2237. data/rails/activesupport/test/dependencies_test_helpers.rb +28 -0
  2238. data/rails/activesupport/test/deprecation/proxy_wrappers_test.rb +22 -0
  2239. data/rails/activesupport/test/deprecation_test.rb +375 -0
  2240. data/rails/activesupport/test/descendants_tracker_test_cases.rb +65 -0
  2241. data/rails/activesupport/test/descendants_tracker_with_autoloading_test.rb +34 -0
  2242. data/rails/activesupport/test/descendants_tracker_without_autoloading_test.rb +17 -0
  2243. data/rails/activesupport/test/file_update_checker_test.rb +112 -0
  2244. data/rails/activesupport/test/fixtures/autoload/another_class.rb +2 -0
  2245. data/rails/activesupport/test/fixtures/autoload/some_class.rb +2 -0
  2246. data/rails/activesupport/test/fixtures/xml/jdom_doctype.dtd +1 -0
  2247. data/rails/activesupport/test/fixtures/xml/jdom_entities.txt +1 -0
  2248. data/rails/activesupport/test/fixtures/xml/jdom_include.txt +1 -0
  2249. data/rails/activesupport/test/gzip_test.rb +33 -0
  2250. data/rails/activesupport/test/hash_with_indifferent_access_test.rb +10 -0
  2251. data/rails/activesupport/test/i18n_test.rb +104 -0
  2252. data/rails/activesupport/test/inflector_test.rb +537 -0
  2253. data/rails/activesupport/test/inflector_test_cases.rb +324 -0
  2254. data/rails/activesupport/test/json/decoding_test.rb +113 -0
  2255. data/rails/activesupport/test/json/encoding_test.rb +547 -0
  2256. data/rails/activesupport/test/key_generator_test.rb +62 -0
  2257. data/rails/activesupport/test/lazy_load_hooks_test.rb +96 -0
  2258. data/rails/activesupport/test/load_paths_test.rb +16 -0
  2259. data/rails/activesupport/test/log_subscriber_test.rb +123 -0
  2260. data/rails/activesupport/test/logger_test.rb +133 -0
  2261. data/rails/activesupport/test/message_encryptor_test.rb +101 -0
  2262. data/rails/activesupport/test/message_verifier_test.rb +86 -0
  2263. data/rails/activesupport/test/multibyte_chars_test.rb +714 -0
  2264. data/rails/activesupport/test/multibyte_conformance_test.rb +133 -0
  2265. data/rails/activesupport/test/multibyte_proxy_test.rb +34 -0
  2266. data/rails/activesupport/test/multibyte_test_helpers.rb +19 -0
  2267. data/rails/activesupport/test/multibyte_unicode_database_test.rb +26 -0
  2268. data/rails/activesupport/test/notifications/evented_notification_test.rb +87 -0
  2269. data/rails/activesupport/test/notifications/instrumenter_test.rb +58 -0
  2270. data/rails/activesupport/test/notifications_test.rb +266 -0
  2271. data/rails/activesupport/test/number_helper_i18n_test.rb +148 -0
  2272. data/rails/activesupport/test/number_helper_test.rb +396 -0
  2273. data/rails/activesupport/test/option_merger_test.rb +95 -0
  2274. data/rails/activesupport/test/ordered_hash_test.rb +322 -0
  2275. data/rails/activesupport/test/ordered_options_test.rb +88 -0
  2276. data/rails/activesupport/test/rescuable_test.rb +105 -0
  2277. data/rails/activesupport/test/safe_buffer_test.rb +180 -0
  2278. data/rails/activesupport/test/security_utils_test.rb +9 -0
  2279. data/rails/activesupport/test/string_inquirer_test.rb +23 -0
  2280. data/rails/activesupport/test/subscriber_test.rb +54 -0
  2281. data/rails/activesupport/test/tagged_logging_test.rb +102 -0
  2282. data/rails/activesupport/test/test_case_test.rb +221 -0
  2283. data/rails/activesupport/test/testing/constant_lookup_test.rb +76 -0
  2284. data/rails/activesupport/test/time_travel_test.rb +72 -0
  2285. data/rails/activesupport/test/time_zone_test.rb +422 -0
  2286. data/rails/activesupport/test/time_zone_test_helpers.rb +16 -0
  2287. data/rails/activesupport/test/transliterate_test.rb +35 -0
  2288. data/rails/activesupport/test/xml_mini/jdom_engine_test.rb +188 -0
  2289. data/rails/activesupport/test/xml_mini/libxml_engine_test.rb +204 -0
  2290. data/rails/activesupport/test/xml_mini/libxmlsax_engine_test.rb +195 -0
  2291. data/rails/activesupport/test/xml_mini/nokogiri_engine_test.rb +217 -0
  2292. data/rails/activesupport/test/xml_mini/nokogirisax_engine_test.rb +218 -0
  2293. data/rails/activesupport/test/xml_mini/rexml_engine_test.rb +37 -0
  2294. data/rails/activesupport/test/xml_mini_test.rb +353 -0
  2295. data/rails/ci/travis.rb +145 -0
  2296. data/rails/guides/.document +0 -0
  2297. data/rails/guides/CHANGELOG.md +31 -0
  2298. data/rails/guides/Rakefile +79 -0
  2299. data/rails/guides/assets/images/akshaysurve.jpg +0 -0
  2300. data/rails/guides/assets/images/belongs_to.png +0 -0
  2301. data/rails/guides/assets/images/book_icon.gif +0 -0
  2302. data/rails/guides/assets/images/bullet.gif +0 -0
  2303. data/rails/guides/assets/images/chapters_icon.gif +0 -0
  2304. data/rails/guides/assets/images/check_bullet.gif +0 -0
  2305. data/rails/guides/assets/images/credits_pic_blank.gif +0 -0
  2306. data/rails/guides/assets/images/csrf.png +0 -0
  2307. data/rails/guides/assets/images/edge_badge.png +0 -0
  2308. data/rails/guides/assets/images/favicon.ico +0 -0
  2309. data/rails/guides/assets/images/feature_tile.gif +0 -0
  2310. data/rails/guides/assets/images/footer_tile.gif +0 -0
  2311. data/rails/guides/assets/images/fxn.png +0 -0
  2312. data/rails/guides/assets/images/getting_started/article_with_comments.png +0 -0
  2313. data/rails/guides/assets/images/getting_started/challenge.png +0 -0
  2314. data/rails/guides/assets/images/getting_started/confirm_dialog.png +0 -0
  2315. data/rails/guides/assets/images/getting_started/forbidden_attributes_for_new_article.png +0 -0
  2316. data/rails/guides/assets/images/getting_started/form_with_errors.png +0 -0
  2317. data/rails/guides/assets/images/getting_started/index_action_with_edit_link.png +0 -0
  2318. data/rails/guides/assets/images/getting_started/new_article.png +0 -0
  2319. data/rails/guides/assets/images/getting_started/rails_welcome.png +0 -0
  2320. data/rails/guides/assets/images/getting_started/routing_error_no_controller.png +0 -0
  2321. data/rails/guides/assets/images/getting_started/routing_error_no_route_matches.png +0 -0
  2322. data/rails/guides/assets/images/getting_started/show_action_for_articles.png +0 -0
  2323. data/rails/guides/assets/images/getting_started/template_is_missing_articles_new.png +0 -0
  2324. data/rails/guides/assets/images/getting_started/unknown_action_create_for_articles.png +0 -0
  2325. data/rails/guides/assets/images/getting_started/unknown_action_new_for_articles.png +0 -0
  2326. data/rails/guides/assets/images/grey_bullet.gif +0 -0
  2327. data/rails/guides/assets/images/habtm.png +0 -0
  2328. data/rails/guides/assets/images/has_many.png +0 -0
  2329. data/rails/guides/assets/images/has_many_through.png +0 -0
  2330. data/rails/guides/assets/images/has_one.png +0 -0
  2331. data/rails/guides/assets/images/has_one_through.png +0 -0
  2332. data/rails/guides/assets/images/header_backdrop.png +0 -0
  2333. data/rails/guides/assets/images/header_tile.gif +0 -0
  2334. data/rails/guides/assets/images/i18n/demo_html_safe.png +0 -0
  2335. data/rails/guides/assets/images/i18n/demo_localized_pirate.png +0 -0
  2336. data/rails/guides/assets/images/i18n/demo_translated_en.png +0 -0
  2337. data/rails/guides/assets/images/i18n/demo_translated_pirate.png +0 -0
  2338. data/rails/guides/assets/images/i18n/demo_translation_missing.png +0 -0
  2339. data/rails/guides/assets/images/i18n/demo_untranslated.png +0 -0
  2340. data/rails/guides/assets/images/icons/README +5 -0
  2341. data/rails/guides/assets/images/icons/callouts/1.png +0 -0
  2342. data/rails/guides/assets/images/icons/callouts/10.png +0 -0
  2343. data/rails/guides/assets/images/icons/callouts/11.png +0 -0
  2344. data/rails/guides/assets/images/icons/callouts/12.png +0 -0
  2345. data/rails/guides/assets/images/icons/callouts/13.png +0 -0
  2346. data/rails/guides/assets/images/icons/callouts/14.png +0 -0
  2347. data/rails/guides/assets/images/icons/callouts/15.png +0 -0
  2348. data/rails/guides/assets/images/icons/callouts/2.png +0 -0
  2349. data/rails/guides/assets/images/icons/callouts/3.png +0 -0
  2350. data/rails/guides/assets/images/icons/callouts/4.png +0 -0
  2351. data/rails/guides/assets/images/icons/callouts/5.png +0 -0
  2352. data/rails/guides/assets/images/icons/callouts/6.png +0 -0
  2353. data/rails/guides/assets/images/icons/callouts/7.png +0 -0
  2354. data/rails/guides/assets/images/icons/callouts/8.png +0 -0
  2355. data/rails/guides/assets/images/icons/callouts/9.png +0 -0
  2356. data/rails/guides/assets/images/icons/caution.png +0 -0
  2357. data/rails/guides/assets/images/icons/example.png +0 -0
  2358. data/rails/guides/assets/images/icons/home.png +0 -0
  2359. data/rails/guides/assets/images/icons/important.png +0 -0
  2360. data/rails/guides/assets/images/icons/next.png +0 -0
  2361. data/rails/guides/assets/images/icons/note.png +0 -0
  2362. data/rails/guides/assets/images/icons/prev.png +0 -0
  2363. data/rails/guides/assets/images/icons/tip.png +0 -0
  2364. data/rails/guides/assets/images/icons/up.png +0 -0
  2365. data/rails/guides/assets/images/icons/warning.png +0 -0
  2366. data/rails/guides/assets/images/nav_arrow.gif +0 -0
  2367. data/rails/guides/assets/images/oscardelben.jpg +0 -0
  2368. data/rails/guides/assets/images/polymorphic.png +0 -0
  2369. data/rails/guides/assets/images/radar.png +0 -0
  2370. data/rails/guides/assets/images/rails4_features.png +0 -0
  2371. data/rails/guides/assets/images/rails_guides_kindle_cover.jpg +0 -0
  2372. data/rails/guides/assets/images/rails_guides_logo.gif +0 -0
  2373. data/rails/guides/assets/images/rails_logo_remix.gif +0 -0
  2374. data/rails/guides/assets/images/session_fixation.png +0 -0
  2375. data/rails/guides/assets/images/tab_grey.gif +0 -0
  2376. data/rails/guides/assets/images/tab_info.gif +0 -0
  2377. data/rails/guides/assets/images/tab_note.gif +0 -0
  2378. data/rails/guides/assets/images/tab_red.gif +0 -0
  2379. data/rails/guides/assets/images/tab_yellow.gif +0 -0
  2380. data/rails/guides/assets/images/tab_yellow.png +0 -0
  2381. data/rails/guides/assets/images/vijaydev.jpg +0 -0
  2382. data/rails/guides/assets/javascripts/guides.js +59 -0
  2383. data/rails/guides/assets/javascripts/jquery.min.js +4 -0
  2384. data/rails/guides/assets/javascripts/responsive-tables.js +43 -0
  2385. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
  2386. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
  2387. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
  2388. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
  2389. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
  2390. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
  2391. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
  2392. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
  2393. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
  2394. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
  2395. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
  2396. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
  2397. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
  2398. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
  2399. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
  2400. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
  2401. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
  2402. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
  2403. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
  2404. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
  2405. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
  2406. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
  2407. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
  2408. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
  2409. data/rails/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
  2410. data/rails/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
  2411. data/rails/guides/assets/stylesheets/fixes.css +16 -0
  2412. data/rails/guides/assets/stylesheets/kindle.css +11 -0
  2413. data/rails/guides/assets/stylesheets/main.css +713 -0
  2414. data/rails/guides/assets/stylesheets/print.css +52 -0
  2415. data/rails/guides/assets/stylesheets/reset.css +43 -0
  2416. data/rails/guides/assets/stylesheets/responsive-tables.css +50 -0
  2417. data/rails/guides/assets/stylesheets/style.css +13 -0
  2418. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
  2419. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
  2420. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
  2421. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
  2422. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
  2423. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
  2424. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
  2425. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
  2426. data/rails/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
  2427. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
  2428. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
  2429. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
  2430. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
  2431. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
  2432. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
  2433. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
  2434. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
  2435. data/rails/guides/assets/stylesheets/syntaxhighlighter/shThemeRailsGuides.css +116 -0
  2436. data/rails/guides/bug_report_templates/action_controller_gem.rb +47 -0
  2437. data/rails/guides/bug_report_templates/action_controller_master.rb +54 -0
  2438. data/rails/guides/bug_report_templates/active_record_gem.rb +40 -0
  2439. data/rails/guides/bug_report_templates/active_record_master.rb +49 -0
  2440. data/rails/guides/rails_guides/generator.rb +248 -0
  2441. data/rails/guides/rails_guides/helpers.rb +53 -0
  2442. data/rails/guides/rails_guides/indexer.rb +68 -0
  2443. data/rails/guides/rails_guides/kindle.rb +119 -0
  2444. data/rails/guides/rails_guides/levenshtein.rb +39 -0
  2445. data/rails/guides/rails_guides/markdown/renderer.rb +82 -0
  2446. data/rails/guides/rails_guides/markdown.rb +167 -0
  2447. data/rails/guides/rails_guides.rb +63 -0
  2448. data/rails/guides/source/2_2_release_notes.md +435 -0
  2449. data/rails/guides/source/2_3_release_notes.md +621 -0
  2450. data/rails/guides/source/3_0_release_notes.md +611 -0
  2451. data/rails/guides/source/3_1_release_notes.md +559 -0
  2452. data/rails/guides/source/3_2_release_notes.md +568 -0
  2453. data/rails/guides/source/4_0_release_notes.md +279 -0
  2454. data/rails/guides/source/4_1_release_notes.md +730 -0
  2455. data/rails/guides/source/4_2_release_notes.md +853 -0
  2456. data/rails/guides/source/_license.html.erb +2 -0
  2457. data/rails/guides/source/_welcome.html.erb +19 -0
  2458. data/rails/guides/source/action_controller_overview.md +1192 -0
  2459. data/rails/guides/source/action_mailer_basics.md +754 -0
  2460. data/rails/guides/source/action_view_overview.md +1620 -0
  2461. data/rails/guides/source/active_job_basics.md +318 -0
  2462. data/rails/guides/source/active_model_basics.md +554 -0
  2463. data/rails/guides/source/active_record_basics.md +374 -0
  2464. data/rails/guides/source/active_record_callbacks.md +413 -0
  2465. data/rails/guides/source/active_record_migrations.md +1018 -0
  2466. data/rails/guides/source/active_record_postgresql.md +433 -0
  2467. data/rails/guides/source/active_record_querying.md +1783 -0
  2468. data/rails/guides/source/active_record_validations.md +1178 -0
  2469. data/rails/guides/source/active_support_core_extensions.md +3904 -0
  2470. data/rails/guides/source/active_support_instrumentation.md +499 -0
  2471. data/rails/guides/source/api_documentation_guidelines.md +361 -0
  2472. data/rails/guides/source/asset_pipeline.md +1360 -0
  2473. data/rails/guides/source/association_basics.md +2235 -0
  2474. data/rails/guides/source/autoloading_and_reloading_constants.md +1310 -0
  2475. data/rails/guides/source/caching_with_rails.md +379 -0
  2476. data/rails/guides/source/command_line.md +625 -0
  2477. data/rails/guides/source/configuring.md +1045 -0
  2478. data/rails/guides/source/contributing_to_ruby_on_rails.md +628 -0
  2479. data/rails/guides/source/credits.html.erb +80 -0
  2480. data/rails/guides/source/debugging_rails_applications.md +861 -0
  2481. data/rails/guides/source/development_dependencies_install.md +289 -0
  2482. data/rails/guides/source/documents.yaml +205 -0
  2483. data/rails/guides/source/engines.md +1412 -0
  2484. data/rails/guides/source/form_helpers.md +1024 -0
  2485. data/rails/guides/source/generators.md +676 -0
  2486. data/rails/guides/source/getting_started.md +2091 -0
  2487. data/rails/guides/source/i18n.md +1087 -0
  2488. data/rails/guides/source/index.html.erb +28 -0
  2489. data/rails/guides/source/initialization.md +704 -0
  2490. data/rails/guides/source/kindle/copyright.html.erb +1 -0
  2491. data/rails/guides/source/kindle/layout.html.erb +27 -0
  2492. data/rails/guides/source/kindle/rails_guides.opf.erb +52 -0
  2493. data/rails/guides/source/kindle/toc.html.erb +24 -0
  2494. data/rails/guides/source/kindle/toc.ncx.erb +64 -0
  2495. data/rails/guides/source/kindle/welcome.html.erb +5 -0
  2496. data/rails/guides/source/layout.html.erb +143 -0
  2497. data/rails/guides/source/layouts_and_rendering.md +1227 -0
  2498. data/rails/guides/source/maintenance_policy.md +78 -0
  2499. data/rails/guides/source/nested_model_forms.md +228 -0
  2500. data/rails/guides/source/plugins.md +444 -0
  2501. data/rails/guides/source/rails_application_templates.md +266 -0
  2502. data/rails/guides/source/rails_on_rack.md +336 -0
  2503. data/rails/guides/source/routing.md +1141 -0
  2504. data/rails/guides/source/ruby_on_rails_guides_guidelines.md +127 -0
  2505. data/rails/guides/source/security.md +1024 -0
  2506. data/rails/guides/source/testing.md +1132 -0
  2507. data/rails/guides/source/upgrading_ruby_on_rails.md +1170 -0
  2508. data/rails/guides/source/working_with_javascript_in_rails.md +407 -0
  2509. data/rails/guides/w3c_validator.rb +97 -0
  2510. data/rails/install.rb +16 -0
  2511. data/rails/load_paths.rb +3 -0
  2512. data/rails/rails.gemspec +32 -0
  2513. data/rails/railties/.gitignore +1 -0
  2514. data/rails/railties/CHANGELOG.md +233 -0
  2515. data/rails/railties/MIT-LICENSE +20 -0
  2516. data/rails/railties/RDOC_MAIN.rdoc +73 -0
  2517. data/rails/railties/README.rdoc +41 -0
  2518. data/rails/railties/Rakefile +50 -0
  2519. data/rails/railties/bin/rails +9 -0
  2520. data/rails/railties/lib/rails/all.rb +16 -0
  2521. data/rails/railties/lib/rails/api/task.rb +170 -0
  2522. data/rails/railties/lib/rails/app_rails_loader.rb +63 -0
  2523. data/rails/railties/lib/rails/application/bootstrap.rb +94 -0
  2524. data/rails/railties/lib/rails/application/configuration.rb +208 -0
  2525. data/rails/railties/lib/rails/application/default_middleware_stack.rb +103 -0
  2526. data/rails/railties/lib/rails/application/finisher.rb +113 -0
  2527. data/rails/railties/lib/rails/application/routes_reloader.rb +56 -0
  2528. data/rails/railties/lib/rails/application.rb +539 -0
  2529. data/rails/railties/lib/rails/application_controller.rb +16 -0
  2530. data/rails/railties/lib/rails/backtrace_cleaner.rb +32 -0
  2531. data/rails/railties/lib/rails/cli.rb +15 -0
  2532. data/rails/railties/lib/rails/code_statistics.rb +104 -0
  2533. data/rails/railties/lib/rails/code_statistics_calculator.rb +79 -0
  2534. data/rails/railties/lib/rails/commands/application.rb +17 -0
  2535. data/rails/railties/lib/rails/commands/commands_tasks.rb +169 -0
  2536. data/rails/railties/lib/rails/commands/console.rb +113 -0
  2537. data/rails/railties/lib/rails/commands/dbconsole.rb +192 -0
  2538. data/rails/railties/lib/rails/commands/destroy.rb +11 -0
  2539. data/rails/railties/lib/rails/commands/generate.rb +13 -0
  2540. data/rails/railties/lib/rails/commands/plugin.rb +23 -0
  2541. data/rails/railties/lib/rails/commands/runner.rb +63 -0
  2542. data/rails/railties/lib/rails/commands/server.rb +148 -0
  2543. data/rails/railties/lib/rails/commands.rb +17 -0
  2544. data/rails/railties/lib/rails/configuration.rb +119 -0
  2545. data/rails/railties/lib/rails/console/app.rb +32 -0
  2546. data/rails/railties/lib/rails/console/helpers.rb +17 -0
  2547. data/rails/railties/lib/rails/deprecation.rb +19 -0
  2548. data/rails/railties/lib/rails/engine/commands.rb +41 -0
  2549. data/rails/railties/lib/rails/engine/configuration.rb +91 -0
  2550. data/rails/railties/lib/rails/engine/railties.rb +21 -0
  2551. data/rails/railties/lib/rails/engine.rb +694 -0
  2552. data/rails/railties/lib/rails/gem_version.rb +15 -0
  2553. data/rails/railties/lib/rails/generators/actions/create_migration.rb +69 -0
  2554. data/rails/railties/lib/rails/generators/actions.rb +282 -0
  2555. data/rails/railties/lib/rails/generators/active_model.rb +78 -0
  2556. data/rails/railties/lib/rails/generators/app_base.rb +354 -0
  2557. data/rails/railties/lib/rails/generators/base.rb +379 -0
  2558. data/rails/railties/lib/rails/generators/css/assets/assets_generator.rb +13 -0
  2559. data/rails/railties/lib/rails/generators/css/assets/templates/stylesheet.css +4 -0
  2560. data/rails/railties/lib/rails/generators/css/scaffold/scaffold_generator.rb +16 -0
  2561. data/rails/railties/lib/rails/generators/erb/controller/controller_generator.rb +22 -0
  2562. data/rails/railties/lib/rails/generators/erb/controller/templates/view.html.erb +2 -0
  2563. data/rails/railties/lib/rails/generators/erb/mailer/mailer_generator.rb +36 -0
  2564. data/rails/railties/lib/rails/generators/erb/mailer/templates/layout.html.erb +5 -0
  2565. data/rails/railties/lib/rails/generators/erb/mailer/templates/layout.text.erb +1 -0
  2566. data/rails/railties/lib/rails/generators/erb/mailer/templates/view.html.erb +5 -0
  2567. data/rails/railties/lib/rails/generators/erb/mailer/templates/view.text.erb +3 -0
  2568. data/rails/railties/lib/rails/generators/erb/scaffold/scaffold_generator.rb +31 -0
  2569. data/rails/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb +32 -0
  2570. data/rails/railties/lib/rails/generators/erb/scaffold/templates/edit.html.erb +6 -0
  2571. data/rails/railties/lib/rails/generators/erb/scaffold/templates/index.html.erb +31 -0
  2572. data/rails/railties/lib/rails/generators/erb/scaffold/templates/new.html.erb +5 -0
  2573. data/rails/railties/lib/rails/generators/erb/scaffold/templates/show.html.erb +11 -0
  2574. data/rails/railties/lib/rails/generators/erb.rb +25 -0
  2575. data/rails/railties/lib/rails/generators/generated_attribute.rb +170 -0
  2576. data/rails/railties/lib/rails/generators/js/assets/assets_generator.rb +13 -0
  2577. data/rails/railties/lib/rails/generators/js/assets/templates/javascript.js +2 -0
  2578. data/rails/railties/lib/rails/generators/migration.rb +69 -0
  2579. data/rails/railties/lib/rails/generators/model_helpers.rb +28 -0
  2580. data/rails/railties/lib/rails/generators/named_base.rb +205 -0
  2581. data/rails/railties/lib/rails/generators/rails/app/USAGE +15 -0
  2582. data/rails/railties/lib/rails/generators/rails/app/app_generator.rb +407 -0
  2583. data/rails/railties/lib/rails/generators/rails/app/templates/Gemfile +46 -0
  2584. data/rails/railties/lib/rails/generators/rails/app/templates/README.rdoc +28 -0
  2585. data/rails/railties/lib/rails/generators/rails/app/templates/Rakefile +6 -0
  2586. data/rails/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +20 -0
  2587. data/rails/railties/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css +15 -0
  2588. data/rails/railties/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb.tt +5 -0
  2589. data/rails/railties/lib/rails/generators/rails/app/templates/app/helpers/application_helper.rb +2 -0
  2590. data/rails/railties/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +23 -0
  2591. data/rails/railties/lib/rails/generators/rails/app/templates/bin/bundle +2 -0
  2592. data/rails/railties/lib/rails/generators/rails/app/templates/bin/rails +3 -0
  2593. data/rails/railties/lib/rails/generators/rails/app/templates/bin/rake +3 -0
  2594. data/rails/railties/lib/rails/generators/rails/app/templates/bin/setup +28 -0
  2595. data/rails/railties/lib/rails/generators/rails/app/templates/config/application.rb +41 -0
  2596. data/rails/railties/lib/rails/generators/rails/app/templates/config/boot.rb +3 -0
  2597. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml +49 -0
  2598. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml +85 -0
  2599. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml +68 -0
  2600. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml +52 -0
  2601. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml +68 -0
  2602. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml +23 -0
  2603. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml +58 -0
  2604. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/oracle.yml +58 -0
  2605. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml +85 -0
  2606. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml +25 -0
  2607. data/rails/railties/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml +68 -0
  2608. data/rails/railties/lib/rails/generators/rails/app/templates/config/environment.rb +5 -0
  2609. data/rails/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +45 -0
  2610. data/rails/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +83 -0
  2611. data/rails/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +42 -0
  2612. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +11 -0
  2613. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/backtrace_silencers.rb +7 -0
  2614. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb +3 -0
  2615. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb +4 -0
  2616. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb +16 -0
  2617. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/mime_types.rb +4 -0
  2618. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt +3 -0
  2619. data/rails/railties/lib/rails/generators/rails/app/templates/config/initializers/wrap_parameters.rb.tt +16 -0
  2620. data/rails/railties/lib/rails/generators/rails/app/templates/config/locales/en.yml +23 -0
  2621. data/rails/railties/lib/rails/generators/rails/app/templates/config/routes.rb +56 -0
  2622. data/rails/railties/lib/rails/generators/rails/app/templates/config/secrets.yml +22 -0
  2623. data/rails/railties/lib/rails/generators/rails/app/templates/config.ru +4 -0
  2624. data/rails/railties/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +7 -0
  2625. data/rails/railties/lib/rails/generators/rails/app/templates/gitignore +19 -0
  2626. data/rails/railties/lib/rails/generators/rails/app/templates/public/404.html +67 -0
  2627. data/rails/railties/lib/rails/generators/rails/app/templates/public/422.html +67 -0
  2628. data/rails/railties/lib/rails/generators/rails/app/templates/public/500.html +66 -0
  2629. data/rails/railties/lib/rails/generators/rails/app/templates/public/favicon.ico +0 -0
  2630. data/rails/railties/lib/rails/generators/rails/app/templates/public/robots.txt +5 -0
  2631. data/rails/railties/lib/rails/generators/rails/app/templates/test/test_helper.rb +12 -0
  2632. data/rails/railties/lib/rails/generators/rails/assets/USAGE +20 -0
  2633. data/rails/railties/lib/rails/generators/rails/assets/assets_generator.rb +25 -0
  2634. data/rails/railties/lib/rails/generators/rails/assets/templates/javascript.js +2 -0
  2635. data/rails/railties/lib/rails/generators/rails/assets/templates/stylesheet.css +4 -0
  2636. data/rails/railties/lib/rails/generators/rails/controller/USAGE +18 -0
  2637. data/rails/railties/lib/rails/generators/rails/controller/controller_generator.rb +58 -0
  2638. data/rails/railties/lib/rails/generators/rails/controller/templates/controller.rb +13 -0
  2639. data/rails/railties/lib/rails/generators/rails/generator/USAGE +13 -0
  2640. data/rails/railties/lib/rails/generators/rails/generator/generator_generator.rb +27 -0
  2641. data/rails/railties/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +3 -0
  2642. data/rails/railties/lib/rails/generators/rails/generator/templates/USAGE.tt +8 -0
  2643. data/rails/railties/lib/rails/generators/rails/generator/templates/templates/.empty_directory +0 -0
  2644. data/rails/railties/lib/rails/generators/rails/helper/USAGE +13 -0
  2645. data/rails/railties/lib/rails/generators/rails/helper/helper_generator.rb +13 -0
  2646. data/rails/railties/lib/rails/generators/rails/helper/templates/helper.rb +4 -0
  2647. data/rails/railties/lib/rails/generators/rails/integration_test/USAGE +10 -0
  2648. data/rails/railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb +7 -0
  2649. data/rails/railties/lib/rails/generators/rails/migration/USAGE +35 -0
  2650. data/rails/railties/lib/rails/generators/rails/migration/migration_generator.rb +8 -0
  2651. data/rails/railties/lib/rails/generators/rails/model/USAGE +109 -0
  2652. data/rails/railties/lib/rails/generators/rails/model/model_generator.rb +12 -0
  2653. data/rails/railties/lib/rails/generators/rails/plugin/USAGE +10 -0
  2654. data/rails/railties/lib/rails/generators/rails/plugin/plugin_generator.rb +393 -0
  2655. data/rails/railties/lib/rails/generators/rails/plugin/templates/%name%.gemspec +27 -0
  2656. data/rails/railties/lib/rails/generators/rails/plugin/templates/Gemfile +51 -0
  2657. data/rails/railties/lib/rails/generators/rails/plugin/templates/MIT-LICENSE +20 -0
  2658. data/rails/railties/lib/rails/generators/rails/plugin/templates/README.rdoc +3 -0
  2659. data/rails/railties/lib/rails/generators/rails/plugin/templates/Rakefile +29 -0
  2660. data/rails/railties/lib/rails/generators/rails/plugin/templates/app/controllers/%name%/application_controller.rb.tt +4 -0
  2661. data/rails/railties/lib/rails/generators/rails/plugin/templates/app/helpers/%name%/application_helper.rb.tt +4 -0
  2662. data/rails/railties/lib/rails/generators/rails/plugin/templates/app/mailers/.empty_directory +0 -0
  2663. data/rails/railties/lib/rails/generators/rails/plugin/templates/app/models/.empty_directory +0 -0
  2664. data/rails/railties/lib/rails/generators/rails/plugin/templates/app/views/layouts/%name%/application.html.erb.tt +14 -0
  2665. data/rails/railties/lib/rails/generators/rails/plugin/templates/bin/rails.tt +11 -0
  2666. data/rails/railties/lib/rails/generators/rails/plugin/templates/config/routes.rb +6 -0
  2667. data/rails/railties/lib/rails/generators/rails/plugin/templates/gitignore +10 -0
  2668. data/rails/railties/lib/rails/generators/rails/plugin/templates/lib/%name%/engine.rb +7 -0
  2669. data/rails/railties/lib/rails/generators/rails/plugin/templates/lib/%name%/version.rb +3 -0
  2670. data/rails/railties/lib/rails/generators/rails/plugin/templates/lib/%name%.rb +6 -0
  2671. data/rails/railties/lib/rails/generators/rails/plugin/templates/lib/tasks/%name%_tasks.rake +4 -0
  2672. data/rails/railties/lib/rails/generators/rails/plugin/templates/rails/application.rb +18 -0
  2673. data/rails/railties/lib/rails/generators/rails/plugin/templates/rails/boot.rb +5 -0
  2674. data/rails/railties/lib/rails/generators/rails/plugin/templates/rails/javascripts.js +13 -0
  2675. data/rails/railties/lib/rails/generators/rails/plugin/templates/rails/routes.rb +4 -0
  2676. data/rails/railties/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css +15 -0
  2677. data/rails/railties/lib/rails/generators/rails/plugin/templates/test/%name%_test.rb +7 -0
  2678. data/rails/railties/lib/rails/generators/rails/plugin/templates/test/integration/navigation_test.rb +12 -0
  2679. data/rails/railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb +24 -0
  2680. data/rails/railties/lib/rails/generators/rails/resource/USAGE +23 -0
  2681. data/rails/railties/lib/rails/generators/rails/resource/resource_generator.rb +20 -0
  2682. data/rails/railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb +50 -0
  2683. data/rails/railties/lib/rails/generators/rails/scaffold/USAGE +41 -0
  2684. data/rails/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb +32 -0
  2685. data/rails/railties/lib/rails/generators/rails/scaffold/templates/scaffold.css +56 -0
  2686. data/rails/railties/lib/rails/generators/rails/scaffold_controller/USAGE +19 -0
  2687. data/rails/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +28 -0
  2688. data/rails/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb +68 -0
  2689. data/rails/railties/lib/rails/generators/rails/task/USAGE +9 -0
  2690. data/rails/railties/lib/rails/generators/rails/task/task_generator.rb +12 -0
  2691. data/rails/railties/lib/rails/generators/rails/task/templates/task.rb +8 -0
  2692. data/rails/railties/lib/rails/generators/resource_helpers.rb +82 -0
  2693. data/rails/railties/lib/rails/generators/test_case.rb +36 -0
  2694. data/rails/railties/lib/rails/generators/test_unit/controller/controller_generator.rb +15 -0
  2695. data/rails/railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb +19 -0
  2696. data/rails/railties/lib/rails/generators/test_unit/generator/generator_generator.rb +26 -0
  2697. data/rails/railties/lib/rails/generators/test_unit/generator/templates/generator_test.rb +16 -0
  2698. data/rails/railties/lib/rails/generators/test_unit/helper/helper_generator.rb +9 -0
  2699. data/rails/railties/lib/rails/generators/test_unit/integration/integration_generator.rb +13 -0
  2700. data/rails/railties/lib/rails/generators/test_unit/integration/templates/integration_test.rb +7 -0
  2701. data/rails/railties/lib/rails/generators/test_unit/job/job_generator.rb +13 -0
  2702. data/rails/railties/lib/rails/generators/test_unit/job/templates/unit_test.rb.erb +9 -0
  2703. data/rails/railties/lib/rails/generators/test_unit/mailer/mailer_generator.rb +21 -0
  2704. data/rails/railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb +21 -0
  2705. data/rails/railties/lib/rails/generators/test_unit/mailer/templates/preview.rb +13 -0
  2706. data/rails/railties/lib/rails/generators/test_unit/model/model_generator.rb +36 -0
  2707. data/rails/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml +27 -0
  2708. data/rails/railties/lib/rails/generators/test_unit/model/templates/unit_test.rb +9 -0
  2709. data/rails/railties/lib/rails/generators/test_unit/plugin/plugin_generator.rb +13 -0
  2710. data/rails/railties/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +7 -0
  2711. data/rails/railties/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +2 -0
  2712. data/rails/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +33 -0
  2713. data/rails/railties/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb +51 -0
  2714. data/rails/railties/lib/rails/generators/test_unit.rb +8 -0
  2715. data/rails/railties/lib/rails/generators/testing/assertions.rb +123 -0
  2716. data/rails/railties/lib/rails/generators/testing/behaviour.rb +123 -0
  2717. data/rails/railties/lib/rails/generators/testing/setup_and_teardown.rb +18 -0
  2718. data/rails/railties/lib/rails/generators.rb +373 -0
  2719. data/rails/railties/lib/rails/info.rb +102 -0
  2720. data/rails/railties/lib/rails/info_controller.rb +23 -0
  2721. data/rails/railties/lib/rails/initializable.rb +89 -0
  2722. data/rails/railties/lib/rails/mailers_controller.rb +73 -0
  2723. data/rails/railties/lib/rails/paths.rb +211 -0
  2724. data/rails/railties/lib/rails/rack/debugger.rb +24 -0
  2725. data/rails/railties/lib/rails/rack/log_tailer.rb +38 -0
  2726. data/rails/railties/lib/rails/rack/logger.rb +86 -0
  2727. data/rails/railties/lib/rails/rack.rb +7 -0
  2728. data/rails/railties/lib/rails/railtie/configurable.rb +35 -0
  2729. data/rails/railties/lib/rails/railtie/configuration.rb +100 -0
  2730. data/rails/railties/lib/rails/railtie.rb +250 -0
  2731. data/rails/railties/lib/rails/ruby_version_check.rb +13 -0
  2732. data/rails/railties/lib/rails/source_annotation_extractor.rb +133 -0
  2733. data/rails/railties/lib/rails/tasks/annotations.rake +20 -0
  2734. data/rails/railties/lib/rails/tasks/documentation.rake +70 -0
  2735. data/rails/railties/lib/rails/tasks/engine.rake +72 -0
  2736. data/rails/railties/lib/rails/tasks/framework.rake +66 -0
  2737. data/rails/railties/lib/rails/tasks/log.rake +23 -0
  2738. data/rails/railties/lib/rails/tasks/middleware.rake +7 -0
  2739. data/rails/railties/lib/rails/tasks/misc.rake +60 -0
  2740. data/rails/railties/lib/rails/tasks/routes.rake +7 -0
  2741. data/rails/railties/lib/rails/tasks/statistics.rake +29 -0
  2742. data/rails/railties/lib/rails/tasks/tmp.rake +45 -0
  2743. data/rails/railties/lib/rails/tasks.rb +14 -0
  2744. data/rails/railties/lib/rails/templates/layouts/application.html.erb +36 -0
  2745. data/rails/railties/lib/rails/templates/rails/info/properties.html.erb +1 -0
  2746. data/rails/railties/lib/rails/templates/rails/info/routes.html.erb +9 -0
  2747. data/rails/railties/lib/rails/templates/rails/mailers/email.html.erb +105 -0
  2748. data/rails/railties/lib/rails/templates/rails/mailers/index.html.erb +8 -0
  2749. data/rails/railties/lib/rails/templates/rails/mailers/mailer.html.erb +6 -0
  2750. data/rails/railties/lib/rails/templates/rails/welcome/index.html.erb +261 -0
  2751. data/rails/railties/lib/rails/test_help.rb +43 -0
  2752. data/rails/railties/lib/rails/test_unit/railtie.rb +18 -0
  2753. data/rails/railties/lib/rails/test_unit/sub_test_task.rb +126 -0
  2754. data/rails/railties/lib/rails/test_unit/testing.rake +66 -0
  2755. data/rails/railties/lib/rails/version.rb +8 -0
  2756. data/rails/railties/lib/rails/welcome_controller.rb +8 -0
  2757. data/rails/railties/lib/rails.rb +93 -0
  2758. data/rails/railties/railties.gemspec +33 -0
  2759. data/rails/railties/test/abstract_unit.rb +53 -0
  2760. data/rails/railties/test/app_rails_loader_test.rb +89 -0
  2761. data/rails/railties/test/application/asset_debugging_test.rb +64 -0
  2762. data/rails/railties/test/application/assets_test.rb +493 -0
  2763. data/rails/railties/test/application/build_original_fullpath_test.rb +27 -0
  2764. data/rails/railties/test/application/configuration/base_test.rb +37 -0
  2765. data/rails/railties/test/application/configuration/custom_test.rb +22 -0
  2766. data/rails/railties/test/application/configuration_test.rb +1344 -0
  2767. data/rails/railties/test/application/console_test.rb +153 -0
  2768. data/rails/railties/test/application/generators_test.rb +129 -0
  2769. data/rails/railties/test/application/initializers/frameworks_test.rb +231 -0
  2770. data/rails/railties/test/application/initializers/hooks_test.rb +90 -0
  2771. data/rails/railties/test/application/initializers/i18n_test.rb +216 -0
  2772. data/rails/railties/test/application/initializers/load_path_test.rb +110 -0
  2773. data/rails/railties/test/application/initializers/notifications_test.rb +56 -0
  2774. data/rails/railties/test/application/loading_test.rb +341 -0
  2775. data/rails/railties/test/application/mailer_previews_test.rb +494 -0
  2776. data/rails/railties/test/application/middleware/cache_test.rb +180 -0
  2777. data/rails/railties/test/application/middleware/cookies_test.rb +47 -0
  2778. data/rails/railties/test/application/middleware/exceptions_test.rb +126 -0
  2779. data/rails/railties/test/application/middleware/remote_ip_test.rb +78 -0
  2780. data/rails/railties/test/application/middleware/sendfile_test.rb +74 -0
  2781. data/rails/railties/test/application/middleware/session_test.rb +343 -0
  2782. data/rails/railties/test/application/middleware/static_test.rb +31 -0
  2783. data/rails/railties/test/application/middleware_test.rb +240 -0
  2784. data/rails/railties/test/application/multiple_applications_test.rb +176 -0
  2785. data/rails/railties/test/application/paths_test.rb +83 -0
  2786. data/rails/railties/test/application/rack/logger_test.rb +56 -0
  2787. data/rails/railties/test/application/rackup_test.rb +43 -0
  2788. data/rails/railties/test/application/rake/dbs_test.rb +233 -0
  2789. data/rails/railties/test/application/rake/migrations_test.rb +204 -0
  2790. data/rails/railties/test/application/rake/notes_test.rb +156 -0
  2791. data/rails/railties/test/application/rake_test.rb +286 -0
  2792. data/rails/railties/test/application/rendering_test.rb +45 -0
  2793. data/rails/railties/test/application/routing_test.rb +468 -0
  2794. data/rails/railties/test/application/runner_test.rb +89 -0
  2795. data/rails/railties/test/application/test_runner_test.rb +331 -0
  2796. data/rails/railties/test/application/test_test.rb +322 -0
  2797. data/rails/railties/test/application/url_generation_test.rb +46 -0
  2798. data/rails/railties/test/backtrace_cleaner_test.rb +24 -0
  2799. data/rails/railties/test/code_statistics_calculator_test.rb +288 -0
  2800. data/rails/railties/test/commands/console_test.rb +176 -0
  2801. data/rails/railties/test/commands/dbconsole_test.rb +274 -0
  2802. data/rails/railties/test/commands/server_test.rb +88 -0
  2803. data/rails/railties/test/configuration/middleware_stack_proxy_test.rb +61 -0
  2804. data/rails/railties/test/engine_test.rb +25 -0
  2805. data/rails/railties/test/env_helpers.rb +30 -0
  2806. data/rails/railties/test/fixtures/about_yml_plugins/bad_about_yml/about.yml +1 -0
  2807. data/rails/railties/test/fixtures/about_yml_plugins/bad_about_yml/init.rb +1 -0
  2808. data/rails/railties/test/fixtures/about_yml_plugins/plugin_without_about_yml/init.rb +1 -0
  2809. data/rails/railties/test/fixtures/lib/create_test_dummy_template.rb +1 -0
  2810. data/rails/railties/test/fixtures/lib/generators/active_record/fixjour_generator.rb +8 -0
  2811. data/rails/railties/test/fixtures/lib/generators/fixjour_generator.rb +2 -0
  2812. data/rails/railties/test/fixtures/lib/generators/model_generator.rb +1 -0
  2813. data/rails/railties/test/fixtures/lib/generators/usage_template/USAGE +1 -0
  2814. data/rails/railties/test/fixtures/lib/generators/usage_template/usage_template_generator.rb +5 -0
  2815. data/rails/railties/test/fixtures/lib/rails/generators/foobar/foobar_generator.rb +4 -0
  2816. data/rails/railties/test/fixtures/lib/template.rb +1 -0
  2817. data/rails/railties/test/generators/actions_test.rb +259 -0
  2818. data/rails/railties/test/generators/app_generator_test.rb +528 -0
  2819. data/rails/railties/test/generators/argv_scrubber_test.rb +136 -0
  2820. data/rails/railties/test/generators/assets_generator_test.rb +19 -0
  2821. data/rails/railties/test/generators/controller_generator_test.rb +101 -0
  2822. data/rails/railties/test/generators/create_migration_test.rb +134 -0
  2823. data/rails/railties/test/generators/generated_attribute_test.rb +152 -0
  2824. data/rails/railties/test/generators/generator_generator_test.rb +71 -0
  2825. data/rails/railties/test/generators/generator_test.rb +85 -0
  2826. data/rails/railties/test/generators/generators_test_helper.rb +52 -0
  2827. data/rails/railties/test/generators/helper_generator_test.rb +39 -0
  2828. data/rails/railties/test/generators/integration_test_generator_test.rb +12 -0
  2829. data/rails/railties/test/generators/mailer_generator_test.rb +170 -0
  2830. data/rails/railties/test/generators/migration_generator_test.rb +288 -0
  2831. data/rails/railties/test/generators/model_generator_test.rb +446 -0
  2832. data/rails/railties/test/generators/named_base_test.rb +145 -0
  2833. data/rails/railties/test/generators/namespaced_generators_test.rb +398 -0
  2834. data/rails/railties/test/generators/orm_test.rb +38 -0
  2835. data/rails/railties/test/generators/plugin_generator_test.rb +442 -0
  2836. data/rails/railties/test/generators/resource_generator_test.rb +88 -0
  2837. data/rails/railties/test/generators/scaffold_controller_generator_test.rb +177 -0
  2838. data/rails/railties/test/generators/scaffold_generator_test.rb +386 -0
  2839. data/rails/railties/test/generators/shared_generator_tests.rb +144 -0
  2840. data/rails/railties/test/generators/task_generator_test.rb +24 -0
  2841. data/rails/railties/test/generators_test.rb +234 -0
  2842. data/rails/railties/test/initializable_test.rb +230 -0
  2843. data/rails/railties/test/isolation/abstract_unit.rb +359 -0
  2844. data/rails/railties/test/path_generation_test.rb +88 -0
  2845. data/rails/railties/test/paths_test.rb +234 -0
  2846. data/rails/railties/test/rack_logger_test.rb +75 -0
  2847. data/rails/railties/test/rails_info_controller_test.rb +57 -0
  2848. data/rails/railties/test/rails_info_test.rb +71 -0
  2849. data/rails/railties/test/railties/engine_test.rb +1317 -0
  2850. data/rails/railties/test/railties/generators_test.rb +126 -0
  2851. data/rails/railties/test/railties/mounted_engine_test.rb +274 -0
  2852. data/rails/railties/test/railties/railtie_test.rb +208 -0
  2853. data/rails/railties/test/test_info_test.rb +60 -0
  2854. data/rails/railties/test/version_test.rb +12 -0
  2855. data/rails/tasks/release.rb +128 -0
  2856. data/rails/tools/README.md +7 -0
  2857. data/rails/tools/console +7 -0
  2858. data/rails/tools/line_statistics +42 -0
  2859. data/rails/tools/profile +136 -0
  2860. data/rails/version.rb +15 -0
  2861. data/test/cases/lock_test.rb +29 -0
  2862. data/test/helper.rb +30 -0
  2863. data/test/integration/lock_queuing_test.rb +43 -0
  2864. metadata +3007 -0
@@ -0,0 +1,4475 @@
1
+ # encoding: UTF-8
2
+ require 'erb'
3
+ require 'abstract_unit'
4
+ require 'controller/fake_controllers'
5
+
6
+ class TestRoutingMapper < ActionDispatch::IntegrationTest
7
+ SprocketsApp = lambda { |env|
8
+ [200, {"Content-Type" => "text/html"}, ["javascripts"]]
9
+ }
10
+
11
+ class IpRestrictor
12
+ def self.matches?(request)
13
+ request.ip =~ /192\.168\.1\.1\d\d/
14
+ end
15
+ end
16
+
17
+ class GrumpyRestrictor
18
+ def self.matches?(request)
19
+ false
20
+ end
21
+ end
22
+
23
+ class YoutubeFavoritesRedirector
24
+ def self.call(params, request)
25
+ "http://www.youtube.com/watch?v=#{params[:youtube_id]}"
26
+ end
27
+ end
28
+
29
+ def test_logout
30
+ draw do
31
+ controller :sessions do
32
+ delete 'logout' => :destroy
33
+ end
34
+ end
35
+
36
+ delete '/logout'
37
+ assert_equal 'sessions#destroy', @response.body
38
+
39
+ assert_equal '/logout', logout_path
40
+ assert_equal '/logout', url_for(:controller => 'sessions', :action => 'destroy', :only_path => true)
41
+ end
42
+
43
+ def test_login
44
+ draw do
45
+ default_url_options :host => "rubyonrails.org"
46
+
47
+ controller :sessions do
48
+ get 'login' => :new
49
+ post 'login' => :create
50
+ end
51
+ end
52
+
53
+ get '/login'
54
+ assert_equal 'sessions#new', @response.body
55
+ assert_equal '/login', login_path
56
+
57
+ post '/login'
58
+ assert_equal 'sessions#create', @response.body
59
+
60
+ assert_equal '/login', url_for(:controller => 'sessions', :action => 'create', :only_path => true)
61
+ assert_equal '/login', url_for(:controller => 'sessions', :action => 'new', :only_path => true)
62
+
63
+ assert_equal 'http://rubyonrails.org/login', url_for(:controller => 'sessions', :action => 'create')
64
+ assert_equal 'http://rubyonrails.org/login', login_url
65
+ end
66
+
67
+ def test_login_redirect
68
+ draw do
69
+ get 'account/login', :to => redirect("/login")
70
+ end
71
+
72
+ get '/account/login'
73
+ verify_redirect 'http://www.example.com/login'
74
+ end
75
+
76
+ def test_logout_redirect_without_to
77
+ draw do
78
+ get 'account/logout' => redirect("/logout"), :as => :logout_redirect
79
+ end
80
+
81
+ assert_equal '/account/logout', logout_redirect_path
82
+ get '/account/logout'
83
+ verify_redirect 'http://www.example.com/logout'
84
+ end
85
+
86
+ def test_namespace_redirect
87
+ draw do
88
+ namespace :private do
89
+ root :to => redirect('/private/index')
90
+ get "index", :to => 'private#index'
91
+ end
92
+ end
93
+
94
+ get '/private'
95
+ verify_redirect 'http://www.example.com/private/index'
96
+ end
97
+
98
+ def test_redirect_with_failing_constraint
99
+ draw do
100
+ get 'hi', to: redirect("/foo"), constraints: ::TestRoutingMapper::GrumpyRestrictor
101
+ end
102
+
103
+ get '/hi'
104
+ assert_equal 404, status
105
+ end
106
+
107
+ def test_redirect_with_passing_constraint
108
+ draw do
109
+ get 'hi', to: redirect("/foo"), constraints: ->(req) { true }
110
+ end
111
+
112
+ get '/hi'
113
+ assert_equal 301, status
114
+ end
115
+
116
+ def test_namespace_with_controller_segment
117
+ assert_raise(ArgumentError) do
118
+ draw do
119
+ namespace :admin do
120
+ get '/:controller(/:action(/:id(.:format)))'
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+ def test_namespace_without_controller_segment
127
+ draw do
128
+ namespace :admin do
129
+ get 'hello/:controllers/:action'
130
+ end
131
+ end
132
+ get '/admin/hello/foo/new'
133
+ assert_equal 'foo', @request.params["controllers"]
134
+ end
135
+
136
+ def test_session_singleton_resource
137
+ draw do
138
+ resource :session do
139
+ get :create
140
+ post :reset
141
+ end
142
+ end
143
+
144
+ get '/session'
145
+ assert_equal 'sessions#create', @response.body
146
+ assert_equal '/session', session_path
147
+
148
+ post '/session'
149
+ assert_equal 'sessions#create', @response.body
150
+
151
+ put '/session'
152
+ assert_equal 'sessions#update', @response.body
153
+
154
+ delete '/session'
155
+ assert_equal 'sessions#destroy', @response.body
156
+
157
+ get '/session/new'
158
+ assert_equal 'sessions#new', @response.body
159
+ assert_equal '/session/new', new_session_path
160
+
161
+ get '/session/edit'
162
+ assert_equal 'sessions#edit', @response.body
163
+ assert_equal '/session/edit', edit_session_path
164
+
165
+ post '/session/reset'
166
+ assert_equal 'sessions#reset', @response.body
167
+ assert_equal '/session/reset', reset_session_path
168
+ end
169
+
170
+ def test_session_info_nested_singleton_resource
171
+ draw do
172
+ resource :session do
173
+ resource :info
174
+ end
175
+ end
176
+
177
+ get '/session/info'
178
+ assert_equal 'infos#show', @response.body
179
+ assert_equal '/session/info', session_info_path
180
+ end
181
+
182
+ def test_member_on_resource
183
+ draw do
184
+ resource :session do
185
+ member do
186
+ get :crush
187
+ end
188
+ end
189
+ end
190
+
191
+ get '/session/crush'
192
+ assert_equal 'sessions#crush', @response.body
193
+ assert_equal '/session/crush', crush_session_path
194
+ end
195
+
196
+ def test_redirect_modulo
197
+ draw do
198
+ get 'account/modulo/:name', :to => redirect("/%{name}s")
199
+ end
200
+
201
+ get '/account/modulo/name'
202
+ verify_redirect 'http://www.example.com/names'
203
+ end
204
+
205
+ def test_redirect_proc
206
+ draw do
207
+ get 'account/proc/:name', :to => redirect {|params, req| "/#{params[:name].pluralize}" }
208
+ end
209
+
210
+ get '/account/proc/person'
211
+ verify_redirect 'http://www.example.com/people'
212
+ end
213
+
214
+ def test_redirect_proc_with_request
215
+ draw do
216
+ get 'account/proc_req' => redirect {|params, req| "/#{req.method}" }
217
+ end
218
+
219
+ get '/account/proc_req'
220
+ verify_redirect 'http://www.example.com/GET'
221
+ end
222
+
223
+ def test_redirect_hash_with_subdomain
224
+ draw do
225
+ get 'mobile', :to => redirect(:subdomain => 'mobile')
226
+ end
227
+
228
+ get '/mobile'
229
+ verify_redirect 'http://mobile.example.com/mobile'
230
+ end
231
+
232
+ def test_redirect_hash_with_domain_and_path
233
+ draw do
234
+ get 'documentation', :to => redirect(:domain => 'example-documentation.com', :path => '')
235
+ end
236
+
237
+ get '/documentation'
238
+ verify_redirect 'http://www.example-documentation.com'
239
+ end
240
+
241
+ def test_redirect_hash_with_path
242
+ draw do
243
+ get 'new_documentation', :to => redirect(:path => '/documentation/new')
244
+ end
245
+
246
+ get '/new_documentation'
247
+ verify_redirect 'http://www.example.com/documentation/new'
248
+ end
249
+
250
+ def test_redirect_hash_with_host
251
+ draw do
252
+ get 'super_new_documentation', :to => redirect(:host => 'super-docs.com')
253
+ end
254
+
255
+ get '/super_new_documentation?section=top'
256
+ verify_redirect 'http://super-docs.com/super_new_documentation?section=top'
257
+ end
258
+
259
+ def test_redirect_hash_path_substitution
260
+ draw do
261
+ get 'stores/:name', :to => redirect(:subdomain => 'stores', :path => '/%{name}')
262
+ end
263
+
264
+ get '/stores/iernest'
265
+ verify_redirect 'http://stores.example.com/iernest'
266
+ end
267
+
268
+ def test_redirect_hash_path_substitution_with_catch_all
269
+ draw do
270
+ get 'stores/:name(*rest)', :to => redirect(:subdomain => 'stores', :path => '/%{name}%{rest}')
271
+ end
272
+
273
+ get '/stores/iernest/products'
274
+ verify_redirect 'http://stores.example.com/iernest/products'
275
+ end
276
+
277
+ def test_redirect_class
278
+ draw do
279
+ get 'youtube_favorites/:youtube_id/:name', :to => redirect(YoutubeFavoritesRedirector)
280
+ end
281
+
282
+ get '/youtube_favorites/oHg5SJYRHA0/rick-rolld'
283
+ verify_redirect 'http://www.youtube.com/watch?v=oHg5SJYRHA0'
284
+ end
285
+
286
+ def test_openid
287
+ draw do
288
+ match 'openid/login', :via => [:get, :post], :to => "openid#login"
289
+ end
290
+
291
+ get '/openid/login'
292
+ assert_equal 'openid#login', @response.body
293
+
294
+ post '/openid/login'
295
+ assert_equal 'openid#login', @response.body
296
+ end
297
+
298
+ def test_bookmarks
299
+ draw do
300
+ scope "bookmark", :controller => "bookmarks", :as => :bookmark do
301
+ get :new, :path => "build"
302
+ post :create, :path => "create", :as => ""
303
+ put :update
304
+ get :remove, :action => :destroy, :as => :remove
305
+ end
306
+ end
307
+
308
+ get '/bookmark/build'
309
+ assert_equal 'bookmarks#new', @response.body
310
+ assert_equal '/bookmark/build', bookmark_new_path
311
+
312
+ post '/bookmark/create'
313
+ assert_equal 'bookmarks#create', @response.body
314
+ assert_equal '/bookmark/create', bookmark_path
315
+
316
+ put '/bookmark/update'
317
+ assert_equal 'bookmarks#update', @response.body
318
+ assert_equal '/bookmark/update', bookmark_update_path
319
+
320
+ get '/bookmark/remove'
321
+ assert_equal 'bookmarks#destroy', @response.body
322
+ assert_equal '/bookmark/remove', bookmark_remove_path
323
+ end
324
+
325
+ def test_pagemarks
326
+ draw do
327
+ scope "pagemark", :controller => "pagemarks", :as => :pagemark do
328
+ get "new", :path => "build"
329
+ post "create", :as => ""
330
+ put "update"
331
+ get "remove", :action => :destroy, :as => :remove
332
+ end
333
+ end
334
+
335
+ get '/pagemark/build'
336
+ assert_equal 'pagemarks#new', @response.body
337
+ assert_equal '/pagemark/build', pagemark_new_path
338
+
339
+ post '/pagemark/create'
340
+ assert_equal 'pagemarks#create', @response.body
341
+ assert_equal '/pagemark/create', pagemark_path
342
+
343
+ put '/pagemark/update'
344
+ assert_equal 'pagemarks#update', @response.body
345
+ assert_equal '/pagemark/update', pagemark_update_path
346
+
347
+ get '/pagemark/remove'
348
+ assert_equal 'pagemarks#destroy', @response.body
349
+ assert_equal '/pagemark/remove', pagemark_remove_path
350
+ end
351
+
352
+ def test_admin
353
+ draw do
354
+ constraints(:ip => /192\.168\.1\.\d\d\d/) do
355
+ get 'admin' => "queenbee#index"
356
+ end
357
+
358
+ constraints ::TestRoutingMapper::IpRestrictor do
359
+ get 'admin/accounts' => "queenbee#accounts"
360
+ end
361
+
362
+ get 'admin/passwords' => "queenbee#passwords", :constraints => ::TestRoutingMapper::IpRestrictor
363
+ end
364
+
365
+ get '/admin', {}, {'REMOTE_ADDR' => '192.168.1.100'}
366
+ assert_equal 'queenbee#index', @response.body
367
+
368
+ get '/admin', {}, {'REMOTE_ADDR' => '10.0.0.100'}
369
+ assert_equal 'pass', @response.headers['X-Cascade']
370
+
371
+ get '/admin/accounts', {}, {'REMOTE_ADDR' => '192.168.1.100'}
372
+ assert_equal 'queenbee#accounts', @response.body
373
+
374
+ get '/admin/accounts', {}, {'REMOTE_ADDR' => '10.0.0.100'}
375
+ assert_equal 'pass', @response.headers['X-Cascade']
376
+
377
+ get '/admin/passwords', {}, {'REMOTE_ADDR' => '192.168.1.100'}
378
+ assert_equal 'queenbee#passwords', @response.body
379
+
380
+ get '/admin/passwords', {}, {'REMOTE_ADDR' => '10.0.0.100'}
381
+ assert_equal 'pass', @response.headers['X-Cascade']
382
+ end
383
+
384
+ def test_global
385
+ draw do
386
+ controller(:global) do
387
+ get 'global/hide_notice'
388
+ get 'global/export', :action => :export, :as => :export_request
389
+ get '/export/:id/:file', :action => :export, :as => :export_download, :constraints => { :file => /.*/ }
390
+ get 'global/:action'
391
+ end
392
+ end
393
+
394
+ get '/global/dashboard'
395
+ assert_equal 'global#dashboard', @response.body
396
+
397
+ get '/global/export'
398
+ assert_equal 'global#export', @response.body
399
+
400
+ get '/global/hide_notice'
401
+ assert_equal 'global#hide_notice', @response.body
402
+
403
+ get '/export/123/foo.txt'
404
+ assert_equal 'global#export', @response.body
405
+
406
+ assert_equal '/global/export', export_request_path
407
+ assert_equal '/global/hide_notice', global_hide_notice_path
408
+ assert_equal '/export/123/foo.txt', export_download_path(:id => 123, :file => 'foo.txt')
409
+ end
410
+
411
+ def test_local
412
+ draw do
413
+ get "/local/:action", :controller => "local"
414
+ end
415
+
416
+ get '/local/dashboard'
417
+ assert_equal 'local#dashboard', @response.body
418
+ end
419
+
420
+ # tests the use of dup in url_for
421
+ def test_url_for_with_no_side_effects
422
+ draw do
423
+ get "/projects/status(.:format)"
424
+ end
425
+
426
+ # without dup, additional (and possibly unwanted) values will be present in the options (eg. :host)
427
+ original_options = {:controller => 'projects', :action => 'status'}
428
+ options = original_options.dup
429
+
430
+ url_for options
431
+
432
+ # verify that the options passed in have not changed from the original ones
433
+ assert_equal original_options, options
434
+ end
435
+
436
+ def test_url_for_does_not_modify_controller
437
+ draw do
438
+ get "/projects/status(.:format)"
439
+ end
440
+
441
+ controller = '/projects'
442
+ options = {:controller => controller, :action => 'status', :only_path => true}
443
+ url = url_for(options)
444
+
445
+ assert_equal '/projects/status', url
446
+ assert_equal '/projects', controller
447
+ end
448
+
449
+ # tests the arguments modification free version of define_hash_access
450
+ def test_named_route_with_no_side_effects
451
+ draw do
452
+ resources :customers do
453
+ get "profile", :on => :member
454
+ end
455
+ end
456
+
457
+ original_options = { :host => 'test.host' }
458
+ options = original_options.dup
459
+
460
+ profile_customer_url("customer_model", options)
461
+
462
+ # verify that the options passed in have not changed from the original ones
463
+ assert_equal original_options, options
464
+ end
465
+
466
+ def test_projects_status
467
+ draw do
468
+ get "/projects/status(.:format)"
469
+ end
470
+
471
+ assert_equal '/projects/status', url_for(:controller => 'projects', :action => 'status', :only_path => true)
472
+ assert_equal '/projects/status.json', url_for(:controller => 'projects', :action => 'status', :format => 'json', :only_path => true)
473
+ end
474
+
475
+ def test_projects
476
+ draw do
477
+ resources :projects, :controller => :project
478
+ end
479
+
480
+ get '/projects'
481
+ assert_equal 'project#index', @response.body
482
+ assert_equal '/projects', projects_path
483
+
484
+ post '/projects'
485
+ assert_equal 'project#create', @response.body
486
+
487
+ get '/projects.xml'
488
+ assert_equal 'project#index', @response.body
489
+ assert_equal '/projects.xml', projects_path(:format => 'xml')
490
+
491
+ get '/projects/new'
492
+ assert_equal 'project#new', @response.body
493
+ assert_equal '/projects/new', new_project_path
494
+
495
+ get '/projects/new.xml'
496
+ assert_equal 'project#new', @response.body
497
+ assert_equal '/projects/new.xml', new_project_path(:format => 'xml')
498
+
499
+ get '/projects/1'
500
+ assert_equal 'project#show', @response.body
501
+ assert_equal '/projects/1', project_path(:id => '1')
502
+
503
+ get '/projects/1.xml'
504
+ assert_equal 'project#show', @response.body
505
+ assert_equal '/projects/1.xml', project_path(:id => '1', :format => 'xml')
506
+
507
+ get '/projects/1/edit'
508
+ assert_equal 'project#edit', @response.body
509
+ assert_equal '/projects/1/edit', edit_project_path(:id => '1')
510
+ end
511
+
512
+ def test_projects_with_post_action_and_new_path_on_collection
513
+ draw do
514
+ resources :projects, :controller => :project do
515
+ post 'new', :action => 'new', :on => :collection, :as => :new
516
+ end
517
+ end
518
+
519
+ post '/projects/new'
520
+ assert_equal "project#new", @response.body
521
+ assert_equal "/projects/new", new_projects_path
522
+ end
523
+
524
+ def test_projects_involvements
525
+ draw do
526
+ resources :projects, :controller => :project do
527
+ resources :involvements, :attachments
528
+ end
529
+ end
530
+
531
+ get '/projects/1/involvements'
532
+ assert_equal 'involvements#index', @response.body
533
+ assert_equal '/projects/1/involvements', project_involvements_path(:project_id => '1')
534
+
535
+ get '/projects/1/involvements/new'
536
+ assert_equal 'involvements#new', @response.body
537
+ assert_equal '/projects/1/involvements/new', new_project_involvement_path(:project_id => '1')
538
+
539
+ get '/projects/1/involvements/1'
540
+ assert_equal 'involvements#show', @response.body
541
+ assert_equal '/projects/1/involvements/1', project_involvement_path(:project_id => '1', :id => '1')
542
+
543
+ put '/projects/1/involvements/1'
544
+ assert_equal 'involvements#update', @response.body
545
+
546
+ delete '/projects/1/involvements/1'
547
+ assert_equal 'involvements#destroy', @response.body
548
+
549
+ get '/projects/1/involvements/1/edit'
550
+ assert_equal 'involvements#edit', @response.body
551
+ assert_equal '/projects/1/involvements/1/edit', edit_project_involvement_path(:project_id => '1', :id => '1')
552
+ end
553
+
554
+ def test_projects_attachments
555
+ draw do
556
+ resources :projects, :controller => :project do
557
+ resources :involvements, :attachments
558
+ end
559
+ end
560
+
561
+ get '/projects/1/attachments'
562
+ assert_equal 'attachments#index', @response.body
563
+ assert_equal '/projects/1/attachments', project_attachments_path(:project_id => '1')
564
+ end
565
+
566
+ def test_projects_participants
567
+ draw do
568
+ resources :projects, :controller => :project do
569
+ resources :participants do
570
+ put :update_all, :on => :collection
571
+ end
572
+ end
573
+ end
574
+
575
+ get '/projects/1/participants'
576
+ assert_equal 'participants#index', @response.body
577
+ assert_equal '/projects/1/participants', project_participants_path(:project_id => '1')
578
+
579
+ put '/projects/1/participants/update_all'
580
+ assert_equal 'participants#update_all', @response.body
581
+ assert_equal '/projects/1/participants/update_all', update_all_project_participants_path(:project_id => '1')
582
+ end
583
+
584
+ def test_projects_companies
585
+ draw do
586
+ resources :projects, :controller => :project do
587
+ resources :companies do
588
+ resources :people
589
+ resource :avatar, :controller => :avatar
590
+ end
591
+ end
592
+ end
593
+
594
+ get '/projects/1/companies'
595
+ assert_equal 'companies#index', @response.body
596
+ assert_equal '/projects/1/companies', project_companies_path(:project_id => '1')
597
+
598
+ get '/projects/1/companies/1/people'
599
+ assert_equal 'people#index', @response.body
600
+ assert_equal '/projects/1/companies/1/people', project_company_people_path(:project_id => '1', :company_id => '1')
601
+
602
+ get '/projects/1/companies/1/avatar'
603
+ assert_equal 'avatar#show', @response.body
604
+ assert_equal '/projects/1/companies/1/avatar', project_company_avatar_path(:project_id => '1', :company_id => '1')
605
+ end
606
+
607
+ def test_project_manager
608
+ draw do
609
+ resources :projects do
610
+ resource :manager, :as => :super_manager do
611
+ post :fire
612
+ end
613
+ end
614
+ end
615
+
616
+ get '/projects/1/manager'
617
+ assert_equal 'managers#show', @response.body
618
+ assert_equal '/projects/1/manager', project_super_manager_path(:project_id => '1')
619
+
620
+ get '/projects/1/manager/new'
621
+ assert_equal 'managers#new', @response.body
622
+ assert_equal '/projects/1/manager/new', new_project_super_manager_path(:project_id => '1')
623
+
624
+ post '/projects/1/manager/fire'
625
+ assert_equal 'managers#fire', @response.body
626
+ assert_equal '/projects/1/manager/fire', fire_project_super_manager_path(:project_id => '1')
627
+ end
628
+
629
+ def test_project_images
630
+ draw do
631
+ resources :projects do
632
+ resources :images, :as => :funny_images do
633
+ post :revise, :on => :member
634
+ end
635
+ end
636
+ end
637
+
638
+ get '/projects/1/images'
639
+ assert_equal 'images#index', @response.body
640
+ assert_equal '/projects/1/images', project_funny_images_path(:project_id => '1')
641
+
642
+ get '/projects/1/images/new'
643
+ assert_equal 'images#new', @response.body
644
+ assert_equal '/projects/1/images/new', new_project_funny_image_path(:project_id => '1')
645
+
646
+ post '/projects/1/images/1/revise'
647
+ assert_equal 'images#revise', @response.body
648
+ assert_equal '/projects/1/images/1/revise', revise_project_funny_image_path(:project_id => '1', :id => '1')
649
+ end
650
+
651
+ def test_projects_people
652
+ draw do
653
+ resources :projects do
654
+ resources :people do
655
+ nested do
656
+ scope "/:access_token" do
657
+ resource :avatar
658
+ end
659
+ end
660
+
661
+ member do
662
+ put :accessible_projects
663
+ post :resend, :generate_new_password
664
+ end
665
+ end
666
+ end
667
+ end
668
+
669
+ get '/projects/1/people'
670
+ assert_equal 'people#index', @response.body
671
+ assert_equal '/projects/1/people', project_people_path(:project_id => '1')
672
+
673
+ get '/projects/1/people/1'
674
+ assert_equal 'people#show', @response.body
675
+ assert_equal '/projects/1/people/1', project_person_path(:project_id => '1', :id => '1')
676
+
677
+ get '/projects/1/people/1/7a2dec8/avatar'
678
+ assert_equal 'avatars#show', @response.body
679
+ assert_equal '/projects/1/people/1/7a2dec8/avatar', project_person_avatar_path(:project_id => '1', :person_id => '1', :access_token => '7a2dec8')
680
+
681
+ put '/projects/1/people/1/accessible_projects'
682
+ assert_equal 'people#accessible_projects', @response.body
683
+ assert_equal '/projects/1/people/1/accessible_projects', accessible_projects_project_person_path(:project_id => '1', :id => '1')
684
+
685
+ post '/projects/1/people/1/resend'
686
+ assert_equal 'people#resend', @response.body
687
+ assert_equal '/projects/1/people/1/resend', resend_project_person_path(:project_id => '1', :id => '1')
688
+
689
+ post '/projects/1/people/1/generate_new_password'
690
+ assert_equal 'people#generate_new_password', @response.body
691
+ assert_equal '/projects/1/people/1/generate_new_password', generate_new_password_project_person_path(:project_id => '1', :id => '1')
692
+ end
693
+
694
+ def test_projects_with_resources_path_names
695
+ draw do
696
+ resources_path_names :correlation_indexes => "info_about_correlation_indexes"
697
+
698
+ resources :projects do
699
+ get :correlation_indexes, :on => :collection
700
+ end
701
+ end
702
+
703
+ get '/projects/info_about_correlation_indexes'
704
+ assert_equal 'projects#correlation_indexes', @response.body
705
+ assert_equal '/projects/info_about_correlation_indexes', correlation_indexes_projects_path
706
+ end
707
+
708
+ def test_projects_posts
709
+ draw do
710
+ resources :projects do
711
+ resources :posts do
712
+ get :archive, :toggle_view, :on => :collection
713
+ post :preview, :on => :member
714
+
715
+ resource :subscription
716
+
717
+ resources :comments do
718
+ post :preview, :on => :collection
719
+ end
720
+ end
721
+ end
722
+ end
723
+
724
+ get '/projects/1/posts'
725
+ assert_equal 'posts#index', @response.body
726
+ assert_equal '/projects/1/posts', project_posts_path(:project_id => '1')
727
+
728
+ get '/projects/1/posts/archive'
729
+ assert_equal 'posts#archive', @response.body
730
+ assert_equal '/projects/1/posts/archive', archive_project_posts_path(:project_id => '1')
731
+
732
+ get '/projects/1/posts/toggle_view'
733
+ assert_equal 'posts#toggle_view', @response.body
734
+ assert_equal '/projects/1/posts/toggle_view', toggle_view_project_posts_path(:project_id => '1')
735
+
736
+ post '/projects/1/posts/1/preview'
737
+ assert_equal 'posts#preview', @response.body
738
+ assert_equal '/projects/1/posts/1/preview', preview_project_post_path(:project_id => '1', :id => '1')
739
+
740
+ get '/projects/1/posts/1/subscription'
741
+ assert_equal 'subscriptions#show', @response.body
742
+ assert_equal '/projects/1/posts/1/subscription', project_post_subscription_path(:project_id => '1', :post_id => '1')
743
+
744
+ get '/projects/1/posts/1/comments'
745
+ assert_equal 'comments#index', @response.body
746
+ assert_equal '/projects/1/posts/1/comments', project_post_comments_path(:project_id => '1', :post_id => '1')
747
+
748
+ post '/projects/1/posts/1/comments/preview'
749
+ assert_equal 'comments#preview', @response.body
750
+ assert_equal '/projects/1/posts/1/comments/preview', preview_project_post_comments_path(:project_id => '1', :post_id => '1')
751
+ end
752
+
753
+ def test_replies
754
+ draw do
755
+ resources :replies do
756
+ member do
757
+ put :answer, :action => :mark_as_answer
758
+ delete :answer, :action => :unmark_as_answer
759
+ end
760
+ end
761
+ end
762
+
763
+ put '/replies/1/answer'
764
+ assert_equal 'replies#mark_as_answer', @response.body
765
+
766
+ delete '/replies/1/answer'
767
+ assert_equal 'replies#unmark_as_answer', @response.body
768
+ end
769
+
770
+ def test_resource_routes_with_only_and_except
771
+ draw do
772
+ resources :posts, :only => [:index, :show] do
773
+ resources :comments, :except => :destroy
774
+ end
775
+ end
776
+
777
+ get '/posts'
778
+ assert_equal 'posts#index', @response.body
779
+ assert_equal '/posts', posts_path
780
+
781
+ get '/posts/1'
782
+ assert_equal 'posts#show', @response.body
783
+ assert_equal '/posts/1', post_path(:id => 1)
784
+
785
+ get '/posts/1/comments'
786
+ assert_equal 'comments#index', @response.body
787
+ assert_equal '/posts/1/comments', post_comments_path(:post_id => 1)
788
+
789
+ post '/posts'
790
+ assert_equal 'pass', @response.headers['X-Cascade']
791
+ put '/posts/1'
792
+ assert_equal 'pass', @response.headers['X-Cascade']
793
+ delete '/posts/1'
794
+ assert_equal 'pass', @response.headers['X-Cascade']
795
+ delete '/posts/1/comments'
796
+ assert_equal 'pass', @response.headers['X-Cascade']
797
+ end
798
+
799
+ def test_resource_routes_only_create_update_destroy
800
+ draw do
801
+ resource :past, :only => :destroy
802
+ resource :present, :only => :update
803
+ resource :future, :only => :create
804
+ end
805
+
806
+ delete '/past'
807
+ assert_equal 'pasts#destroy', @response.body
808
+ assert_equal '/past', past_path
809
+
810
+ patch '/present'
811
+ assert_equal 'presents#update', @response.body
812
+ assert_equal '/present', present_path
813
+
814
+ put '/present'
815
+ assert_equal 'presents#update', @response.body
816
+ assert_equal '/present', present_path
817
+
818
+ post '/future'
819
+ assert_equal 'futures#create', @response.body
820
+ assert_equal '/future', future_path
821
+ end
822
+
823
+ def test_resources_routes_only_create_update_destroy
824
+ draw do
825
+ resources :relationships, :only => [:create, :destroy]
826
+ resources :friendships, :only => [:update]
827
+ end
828
+
829
+ post '/relationships'
830
+ assert_equal 'relationships#create', @response.body
831
+ assert_equal '/relationships', relationships_path
832
+
833
+ delete '/relationships/1'
834
+ assert_equal 'relationships#destroy', @response.body
835
+ assert_equal '/relationships/1', relationship_path(1)
836
+
837
+ patch '/friendships/1'
838
+ assert_equal 'friendships#update', @response.body
839
+ assert_equal '/friendships/1', friendship_path(1)
840
+
841
+ put '/friendships/1'
842
+ assert_equal 'friendships#update', @response.body
843
+ assert_equal '/friendships/1', friendship_path(1)
844
+ end
845
+
846
+ def test_resource_with_slugs_in_ids
847
+ draw do
848
+ resources :posts
849
+ end
850
+
851
+ get '/posts/rails-rocks'
852
+ assert_equal 'posts#show', @response.body
853
+ assert_equal '/posts/rails-rocks', post_path(:id => 'rails-rocks')
854
+ end
855
+
856
+ def test_resources_for_uncountable_names
857
+ draw do
858
+ resources :sheep do
859
+ get "_it", :on => :member
860
+ end
861
+ end
862
+
863
+ assert_equal '/sheep', sheep_index_path
864
+ assert_equal '/sheep/1', sheep_path(1)
865
+ assert_equal '/sheep/new', new_sheep_path
866
+ assert_equal '/sheep/1/edit', edit_sheep_path(1)
867
+ assert_equal '/sheep/1/_it', _it_sheep_path(1)
868
+ end
869
+
870
+ def test_resource_does_not_modify_passed_options
871
+ options = {:id => /.+?/, :format => /json|xml/}
872
+ draw { resource :user, options }
873
+ assert_equal({:id => /.+?/, :format => /json|xml/}, options)
874
+ end
875
+
876
+ def test_resources_does_not_modify_passed_options
877
+ options = {:id => /.+?/, :format => /json|xml/}
878
+ draw { resources :users, options }
879
+ assert_equal({:id => /.+?/, :format => /json|xml/}, options)
880
+ end
881
+
882
+ def test_path_names
883
+ draw do
884
+ scope 'pt', :as => 'pt' do
885
+ resources :projects, :path_names => { :edit => 'editar', :new => 'novo' }, :path => 'projetos'
886
+ resource :admin, :path_names => { :new => 'novo', :activate => 'ativar' }, :path => 'administrador' do
887
+ put :activate, :on => :member
888
+ end
889
+ end
890
+ end
891
+
892
+ get '/pt/projetos'
893
+ assert_equal 'projects#index', @response.body
894
+ assert_equal '/pt/projetos', pt_projects_path
895
+
896
+ get '/pt/projetos/1/editar'
897
+ assert_equal 'projects#edit', @response.body
898
+ assert_equal '/pt/projetos/1/editar', edit_pt_project_path(1)
899
+
900
+ get '/pt/administrador'
901
+ assert_equal 'admins#show', @response.body
902
+ assert_equal '/pt/administrador', pt_admin_path
903
+
904
+ get '/pt/administrador/novo'
905
+ assert_equal 'admins#new', @response.body
906
+ assert_equal '/pt/administrador/novo', new_pt_admin_path
907
+
908
+ put '/pt/administrador/ativar'
909
+ assert_equal 'admins#activate', @response.body
910
+ assert_equal '/pt/administrador/ativar', activate_pt_admin_path
911
+ end
912
+
913
+ def test_path_option_override
914
+ draw do
915
+ scope 'pt', :as => 'pt' do
916
+ resources :projects, :path_names => { :new => 'novo' }, :path => 'projetos' do
917
+ put :close, :on => :member, :path => 'fechar'
918
+ get :open, :on => :new, :path => 'abrir'
919
+ end
920
+ end
921
+ end
922
+
923
+ get '/pt/projetos/novo/abrir'
924
+ assert_equal 'projects#open', @response.body
925
+ assert_equal '/pt/projetos/novo/abrir', open_new_pt_project_path
926
+
927
+ put '/pt/projetos/1/fechar'
928
+ assert_equal 'projects#close', @response.body
929
+ assert_equal '/pt/projetos/1/fechar', close_pt_project_path(1)
930
+ end
931
+
932
+ def test_sprockets
933
+ draw do
934
+ get 'sprockets.js' => ::TestRoutingMapper::SprocketsApp
935
+ end
936
+
937
+ get '/sprockets.js'
938
+ assert_equal 'javascripts', @response.body
939
+ end
940
+
941
+ def test_update_person_route
942
+ draw do
943
+ get 'people/:id/update', :to => 'people#update', :as => :update_person
944
+ end
945
+
946
+ get '/people/1/update'
947
+ assert_equal 'people#update', @response.body
948
+
949
+ assert_equal '/people/1/update', update_person_path(:id => 1)
950
+ end
951
+
952
+ def test_update_project_person
953
+ draw do
954
+ get '/projects/:project_id/people/:id/update', :to => 'people#update', :as => :update_project_person
955
+ end
956
+
957
+ get '/projects/1/people/2/update'
958
+ assert_equal 'people#update', @response.body
959
+
960
+ assert_equal '/projects/1/people/2/update', update_project_person_path(:project_id => 1, :id => 2)
961
+ end
962
+
963
+ def test_forum_products
964
+ draw do
965
+ namespace :forum do
966
+ resources :products, :path => '' do
967
+ resources :questions
968
+ end
969
+ end
970
+ end
971
+
972
+ get '/forum'
973
+ assert_equal 'forum/products#index', @response.body
974
+ assert_equal '/forum', forum_products_path
975
+
976
+ get '/forum/basecamp'
977
+ assert_equal 'forum/products#show', @response.body
978
+ assert_equal '/forum/basecamp', forum_product_path(:id => 'basecamp')
979
+
980
+ get '/forum/basecamp/questions'
981
+ assert_equal 'forum/questions#index', @response.body
982
+ assert_equal '/forum/basecamp/questions', forum_product_questions_path(:product_id => 'basecamp')
983
+
984
+ get '/forum/basecamp/questions/1'
985
+ assert_equal 'forum/questions#show', @response.body
986
+ assert_equal '/forum/basecamp/questions/1', forum_product_question_path(:product_id => 'basecamp', :id => 1)
987
+ end
988
+
989
+ def test_articles_perma
990
+ draw do
991
+ get 'articles/:year/:month/:day/:title', :to => "articles#show", :as => :article
992
+ end
993
+
994
+ get '/articles/2009/08/18/rails-3'
995
+ assert_equal 'articles#show', @response.body
996
+
997
+ assert_equal '/articles/2009/8/18/rails-3', article_path(:year => 2009, :month => 8, :day => 18, :title => 'rails-3')
998
+ end
999
+
1000
+ def test_account_namespace
1001
+ draw do
1002
+ namespace :account do
1003
+ resource :subscription, :credit, :credit_card
1004
+ end
1005
+ end
1006
+
1007
+ get '/account/subscription'
1008
+ assert_equal 'account/subscriptions#show', @response.body
1009
+ assert_equal '/account/subscription', account_subscription_path
1010
+
1011
+ get '/account/credit'
1012
+ assert_equal 'account/credits#show', @response.body
1013
+ assert_equal '/account/credit', account_credit_path
1014
+
1015
+ get '/account/credit_card'
1016
+ assert_equal 'account/credit_cards#show', @response.body
1017
+ assert_equal '/account/credit_card', account_credit_card_path
1018
+ end
1019
+
1020
+ def test_nested_namespace
1021
+ draw do
1022
+ namespace :account do
1023
+ namespace :admin do
1024
+ resource :subscription
1025
+ end
1026
+ end
1027
+ end
1028
+
1029
+ get '/account/admin/subscription'
1030
+ assert_equal 'account/admin/subscriptions#show', @response.body
1031
+ assert_equal '/account/admin/subscription', account_admin_subscription_path
1032
+ end
1033
+
1034
+ def test_namespace_nested_in_resources
1035
+ draw do
1036
+ resources :clients do
1037
+ namespace :google do
1038
+ resource :account do
1039
+ namespace :secret do
1040
+ resource :info
1041
+ end
1042
+ end
1043
+ end
1044
+ end
1045
+ end
1046
+
1047
+ get '/clients/1/google/account'
1048
+ assert_equal '/clients/1/google/account', client_google_account_path(1)
1049
+ assert_equal 'google/accounts#show', @response.body
1050
+
1051
+ get '/clients/1/google/account/secret/info'
1052
+ assert_equal '/clients/1/google/account/secret/info', client_google_account_secret_info_path(1)
1053
+ assert_equal 'google/secret/infos#show', @response.body
1054
+ end
1055
+
1056
+ def test_namespace_with_options
1057
+ draw do
1058
+ namespace :users, :path => 'usuarios' do
1059
+ root :to => 'home#index'
1060
+ end
1061
+ end
1062
+
1063
+ get '/usuarios'
1064
+ assert_equal '/usuarios', users_root_path
1065
+ assert_equal 'users/home#index', @response.body
1066
+ end
1067
+
1068
+ def test_namespaced_shallow_routes_with_module_option
1069
+ draw do
1070
+ namespace :foo, module: 'bar' do
1071
+ resources :posts, only: [:index, :show] do
1072
+ resources :comments, only: [:index, :show], shallow: true
1073
+ end
1074
+ end
1075
+ end
1076
+
1077
+ get '/foo/posts'
1078
+ assert_equal '/foo/posts', foo_posts_path
1079
+ assert_equal 'bar/posts#index', @response.body
1080
+
1081
+ get '/foo/posts/1'
1082
+ assert_equal '/foo/posts/1', foo_post_path('1')
1083
+ assert_equal 'bar/posts#show', @response.body
1084
+
1085
+ get '/foo/posts/1/comments'
1086
+ assert_equal '/foo/posts/1/comments', foo_post_comments_path('1')
1087
+ assert_equal 'bar/comments#index', @response.body
1088
+
1089
+ get '/foo/comments/2'
1090
+ assert_equal '/foo/comments/2', foo_comment_path('2')
1091
+ assert_equal 'bar/comments#show', @response.body
1092
+ end
1093
+
1094
+ def test_namespaced_shallow_routes_with_path_option
1095
+ draw do
1096
+ namespace :foo, path: 'bar' do
1097
+ resources :posts, only: [:index, :show] do
1098
+ resources :comments, only: [:index, :show], shallow: true
1099
+ end
1100
+ end
1101
+ end
1102
+
1103
+ get '/bar/posts'
1104
+ assert_equal '/bar/posts', foo_posts_path
1105
+ assert_equal 'foo/posts#index', @response.body
1106
+
1107
+ get '/bar/posts/1'
1108
+ assert_equal '/bar/posts/1', foo_post_path('1')
1109
+ assert_equal 'foo/posts#show', @response.body
1110
+
1111
+ get '/bar/posts/1/comments'
1112
+ assert_equal '/bar/posts/1/comments', foo_post_comments_path('1')
1113
+ assert_equal 'foo/comments#index', @response.body
1114
+
1115
+ get '/bar/comments/2'
1116
+ assert_equal '/bar/comments/2', foo_comment_path('2')
1117
+ assert_equal 'foo/comments#show', @response.body
1118
+ end
1119
+
1120
+ def test_namespaced_shallow_routes_with_as_option
1121
+ draw do
1122
+ namespace :foo, as: 'bar' do
1123
+ resources :posts, only: [:index, :show] do
1124
+ resources :comments, only: [:index, :show], shallow: true
1125
+ end
1126
+ end
1127
+ end
1128
+
1129
+ get '/foo/posts'
1130
+ assert_equal '/foo/posts', bar_posts_path
1131
+ assert_equal 'foo/posts#index', @response.body
1132
+
1133
+ get '/foo/posts/1'
1134
+ assert_equal '/foo/posts/1', bar_post_path('1')
1135
+ assert_equal 'foo/posts#show', @response.body
1136
+
1137
+ get '/foo/posts/1/comments'
1138
+ assert_equal '/foo/posts/1/comments', bar_post_comments_path('1')
1139
+ assert_equal 'foo/comments#index', @response.body
1140
+
1141
+ get '/foo/comments/2'
1142
+ assert_equal '/foo/comments/2', bar_comment_path('2')
1143
+ assert_equal 'foo/comments#show', @response.body
1144
+ end
1145
+
1146
+ def test_namespaced_shallow_routes_with_shallow_path_option
1147
+ draw do
1148
+ namespace :foo, shallow_path: 'bar' do
1149
+ resources :posts, only: [:index, :show] do
1150
+ resources :comments, only: [:index, :show], shallow: true
1151
+ end
1152
+ end
1153
+ end
1154
+
1155
+ get '/foo/posts'
1156
+ assert_equal '/foo/posts', foo_posts_path
1157
+ assert_equal 'foo/posts#index', @response.body
1158
+
1159
+ get '/foo/posts/1'
1160
+ assert_equal '/foo/posts/1', foo_post_path('1')
1161
+ assert_equal 'foo/posts#show', @response.body
1162
+
1163
+ get '/foo/posts/1/comments'
1164
+ assert_equal '/foo/posts/1/comments', foo_post_comments_path('1')
1165
+ assert_equal 'foo/comments#index', @response.body
1166
+
1167
+ get '/bar/comments/2'
1168
+ assert_equal '/bar/comments/2', foo_comment_path('2')
1169
+ assert_equal 'foo/comments#show', @response.body
1170
+ end
1171
+
1172
+ def test_namespaced_shallow_routes_with_shallow_prefix_option
1173
+ draw do
1174
+ namespace :foo, shallow_prefix: 'bar' do
1175
+ resources :posts, only: [:index, :show] do
1176
+ resources :comments, only: [:index, :show], shallow: true
1177
+ end
1178
+ end
1179
+ end
1180
+
1181
+ get '/foo/posts'
1182
+ assert_equal '/foo/posts', foo_posts_path
1183
+ assert_equal 'foo/posts#index', @response.body
1184
+
1185
+ get '/foo/posts/1'
1186
+ assert_equal '/foo/posts/1', foo_post_path('1')
1187
+ assert_equal 'foo/posts#show', @response.body
1188
+
1189
+ get '/foo/posts/1/comments'
1190
+ assert_equal '/foo/posts/1/comments', foo_post_comments_path('1')
1191
+ assert_equal 'foo/comments#index', @response.body
1192
+
1193
+ get '/foo/comments/2'
1194
+ assert_equal '/foo/comments/2', bar_comment_path('2')
1195
+ assert_equal 'foo/comments#show', @response.body
1196
+ end
1197
+
1198
+ def test_namespace_containing_numbers
1199
+ draw do
1200
+ namespace :v2 do
1201
+ resources :subscriptions
1202
+ end
1203
+ end
1204
+
1205
+ get '/v2/subscriptions'
1206
+ assert_equal 'v2/subscriptions#index', @response.body
1207
+ assert_equal '/v2/subscriptions', v2_subscriptions_path
1208
+ end
1209
+
1210
+ def test_articles_with_id
1211
+ draw do
1212
+ controller :articles do
1213
+ scope '/articles', :as => 'article' do
1214
+ scope :path => '/:title', :title => /[a-z]+/, :as => :with_title do
1215
+ get '/:id', :action => :with_id, :as => ""
1216
+ end
1217
+ end
1218
+ end
1219
+ end
1220
+
1221
+ get '/articles/rails/1'
1222
+ assert_equal 'articles#with_id', @response.body
1223
+
1224
+ get '/articles/123/1'
1225
+ assert_equal 'pass', @response.headers['X-Cascade']
1226
+
1227
+ assert_equal '/articles/rails/1', article_with_title_path(:title => 'rails', :id => 1)
1228
+ end
1229
+
1230
+ def test_access_token_rooms
1231
+ draw do
1232
+ scope ':access_token', :constraints => { :access_token => /\w{5,5}/ } do
1233
+ resources :rooms
1234
+ end
1235
+ end
1236
+
1237
+ get '/12345/rooms'
1238
+ assert_equal 'rooms#index', @response.body
1239
+
1240
+ get '/12345/rooms/1'
1241
+ assert_equal 'rooms#show', @response.body
1242
+
1243
+ get '/12345/rooms/1/edit'
1244
+ assert_equal 'rooms#edit', @response.body
1245
+ end
1246
+
1247
+ def test_root
1248
+ draw do
1249
+ root :to => 'projects#index'
1250
+ end
1251
+
1252
+ assert_equal '/', root_path
1253
+ get '/'
1254
+ assert_equal 'projects#index', @response.body
1255
+ end
1256
+
1257
+ def test_scoped_root
1258
+ draw do
1259
+ scope '(:locale)', :locale => /en|pl/ do
1260
+ root :to => 'projects#index'
1261
+ end
1262
+ end
1263
+
1264
+ assert_equal '/en', root_path(:locale => 'en')
1265
+ get '/en'
1266
+ assert_equal 'projects#index', @response.body
1267
+ end
1268
+
1269
+ def test_scoped_root_as_name
1270
+ draw do
1271
+ scope '(:locale)', :locale => /en|pl/ do
1272
+ root :to => 'projects#index', :as => 'projects'
1273
+ end
1274
+ end
1275
+
1276
+ assert_equal '/en', projects_path(:locale => 'en')
1277
+ assert_equal '/', projects_path
1278
+ get '/en'
1279
+ assert_equal 'projects#index', @response.body
1280
+ end
1281
+
1282
+ def test_scope_with_format_option
1283
+ draw do
1284
+ get "direct/index", as: :no_format_direct, format: false
1285
+
1286
+ scope format: false do
1287
+ get "scoped/index", as: :no_format_scoped
1288
+ end
1289
+ end
1290
+
1291
+ assert_equal "/direct/index", no_format_direct_path
1292
+ assert_equal "/direct/index?format=html", no_format_direct_path(format: "html")
1293
+
1294
+ assert_equal "/scoped/index", no_format_scoped_path
1295
+ assert_equal "/scoped/index?format=html", no_format_scoped_path(format: "html")
1296
+
1297
+ get '/scoped/index'
1298
+ assert_equal "scoped#index", @response.body
1299
+
1300
+ get '/scoped/index.html'
1301
+ assert_equal "Not Found", @response.body
1302
+ end
1303
+
1304
+ def test_resources_with_format_false_from_scope
1305
+ draw do
1306
+ scope format: false do
1307
+ resources :posts
1308
+ resource :user
1309
+ end
1310
+ end
1311
+
1312
+ get "/posts"
1313
+ assert_response :success
1314
+ assert_equal "posts#index", @response.body
1315
+ assert_equal "/posts", posts_path
1316
+
1317
+ get "/posts.html"
1318
+ assert_response :not_found
1319
+ assert_equal "Not Found", @response.body
1320
+ assert_equal "/posts?format=html", posts_path(format: "html")
1321
+
1322
+ get "/user"
1323
+ assert_response :success
1324
+ assert_equal "users#show", @response.body
1325
+ assert_equal "/user", user_path
1326
+
1327
+ get "/user.html"
1328
+ assert_response :not_found
1329
+ assert_equal "Not Found", @response.body
1330
+ assert_equal "/user?format=html", user_path(format: "html")
1331
+ end
1332
+
1333
+ def test_index
1334
+ draw do
1335
+ get '/info' => 'projects#info', :as => 'info'
1336
+ end
1337
+
1338
+ assert_equal '/info', info_path
1339
+ get '/info'
1340
+ assert_equal 'projects#info', @response.body
1341
+ end
1342
+
1343
+ def test_match_with_many_paths_containing_a_slash
1344
+ draw do
1345
+ get 'get/first', 'get/second', 'get/third', :to => 'get#show'
1346
+ end
1347
+
1348
+ get '/get/first'
1349
+ assert_equal 'get#show', @response.body
1350
+
1351
+ get '/get/second'
1352
+ assert_equal 'get#show', @response.body
1353
+
1354
+ get '/get/third'
1355
+ assert_equal 'get#show', @response.body
1356
+ end
1357
+
1358
+ def test_match_shorthand_with_no_scope
1359
+ draw do
1360
+ get 'account/overview'
1361
+ end
1362
+
1363
+ assert_equal '/account/overview', account_overview_path
1364
+ get '/account/overview'
1365
+ assert_equal 'account#overview', @response.body
1366
+ end
1367
+
1368
+ def test_match_shorthand_inside_namespace
1369
+ draw do
1370
+ namespace :account do
1371
+ get 'shorthand'
1372
+ end
1373
+ end
1374
+
1375
+ assert_equal '/account/shorthand', account_shorthand_path
1376
+ get '/account/shorthand'
1377
+ assert_equal 'account#shorthand', @response.body
1378
+ end
1379
+
1380
+ def test_match_shorthand_with_multiple_paths_inside_namespace
1381
+ draw do
1382
+ namespace :proposals do
1383
+ put 'activate', 'inactivate'
1384
+ end
1385
+ end
1386
+
1387
+ put '/proposals/activate'
1388
+ assert_equal 'proposals#activate', @response.body
1389
+
1390
+ put '/proposals/inactivate'
1391
+ assert_equal 'proposals#inactivate', @response.body
1392
+ end
1393
+
1394
+ def test_match_shorthand_inside_namespace_with_controller
1395
+ draw do
1396
+ namespace :api do
1397
+ get "products/list"
1398
+ end
1399
+ end
1400
+
1401
+ assert_equal '/api/products/list', api_products_list_path
1402
+ get '/api/products/list'
1403
+ assert_equal 'api/products#list', @response.body
1404
+ end
1405
+
1406
+ def test_match_shorthand_inside_scope_with_variables_with_controller
1407
+ draw do
1408
+ scope ':locale' do
1409
+ match 'questions/new', via: [:get]
1410
+ end
1411
+ end
1412
+
1413
+ get '/de/questions/new'
1414
+ assert_equal 'questions#new', @response.body
1415
+ assert_equal 'de', @request.params[:locale]
1416
+ end
1417
+
1418
+ def test_match_shorthand_inside_nested_namespaces_and_scopes_with_controller
1419
+ draw do
1420
+ namespace :api do
1421
+ namespace :v3 do
1422
+ scope ':locale' do
1423
+ get "products/list"
1424
+ end
1425
+ end
1426
+ end
1427
+ end
1428
+
1429
+ get '/api/v3/en/products/list'
1430
+ assert_equal 'api/v3/products#list', @response.body
1431
+ end
1432
+
1433
+ def test_controller_option_with_nesting_and_leading_slash
1434
+ draw do
1435
+ scope '/job', controller: 'job' do
1436
+ scope ':id', action: 'manage_applicant' do
1437
+ get "/active"
1438
+ end
1439
+ end
1440
+ end
1441
+
1442
+ get '/job/5/active'
1443
+ assert_equal 'job#manage_applicant', @response.body
1444
+ end
1445
+
1446
+ def test_dynamically_generated_helpers_on_collection_do_not_clobber_resources_url_helper
1447
+ draw do
1448
+ resources :replies do
1449
+ collection do
1450
+ get 'page/:page' => 'replies#index', :page => %r{\d+}
1451
+ get ':page' => 'replies#index', :page => %r{\d+}
1452
+ end
1453
+ end
1454
+ end
1455
+
1456
+ assert_equal '/replies', replies_path
1457
+ end
1458
+
1459
+ def test_scoped_controller_with_namespace_and_action
1460
+ draw do
1461
+ namespace :account do
1462
+ get ':action/callback', :action => /twitter|github/, :controller => "callbacks", :as => :callback
1463
+ end
1464
+ end
1465
+
1466
+ assert_equal '/account/twitter/callback', account_callback_path("twitter")
1467
+ get '/account/twitter/callback'
1468
+ assert_equal 'account/callbacks#twitter', @response.body
1469
+
1470
+ get '/account/whatever/callback'
1471
+ assert_equal 'Not Found', @response.body
1472
+ end
1473
+
1474
+ def test_convention_match_nested_and_with_leading_slash
1475
+ draw do
1476
+ get '/account/nested/overview'
1477
+ end
1478
+
1479
+ assert_equal '/account/nested/overview', account_nested_overview_path
1480
+ get '/account/nested/overview'
1481
+ assert_equal 'account/nested#overview', @response.body
1482
+ end
1483
+
1484
+ def test_convention_with_explicit_end
1485
+ draw do
1486
+ get 'sign_in' => "sessions#new"
1487
+ end
1488
+
1489
+ get '/sign_in'
1490
+ assert_equal 'sessions#new', @response.body
1491
+ assert_equal '/sign_in', sign_in_path
1492
+ end
1493
+
1494
+ def test_redirect_with_complete_url_and_status
1495
+ draw do
1496
+ get 'account/google' => redirect('http://www.google.com/', :status => 302)
1497
+ end
1498
+
1499
+ get '/account/google'
1500
+ verify_redirect 'http://www.google.com/', 302
1501
+ end
1502
+
1503
+ def test_redirect_with_port
1504
+ draw do
1505
+ get 'account/login', :to => redirect("/login")
1506
+ end
1507
+
1508
+ previous_host, self.host = self.host, 'www.example.com:3000'
1509
+
1510
+ get '/account/login'
1511
+ verify_redirect 'http://www.example.com:3000/login'
1512
+ ensure
1513
+ self.host = previous_host
1514
+ end
1515
+
1516
+ def test_normalize_namespaced_matches
1517
+ draw do
1518
+ namespace :account do
1519
+ get 'description', :action => :description, :as => "description"
1520
+ end
1521
+ end
1522
+
1523
+ assert_equal '/account/description', account_description_path
1524
+
1525
+ get '/account/description'
1526
+ assert_equal 'account#description', @response.body
1527
+ end
1528
+
1529
+ def test_namespaced_roots
1530
+ draw do
1531
+ namespace :account do
1532
+ root :to => "account#index"
1533
+ end
1534
+ end
1535
+
1536
+ assert_equal '/account', account_root_path
1537
+ get '/account'
1538
+ assert_equal 'account/account#index', @response.body
1539
+ end
1540
+
1541
+ def test_optional_scoped_root
1542
+ draw do
1543
+ scope '(:locale)', :locale => /en|pl/ do
1544
+ root :to => 'projects#index'
1545
+ end
1546
+ end
1547
+
1548
+ assert_equal '/en', root_path("en")
1549
+ get '/en'
1550
+ assert_equal 'projects#index', @response.body
1551
+ end
1552
+
1553
+ def test_optional_scoped_path
1554
+ draw do
1555
+ scope '(:locale)', :locale => /en|pl/ do
1556
+ resources :descriptions
1557
+ end
1558
+ end
1559
+
1560
+ assert_equal '/en/descriptions', descriptions_path("en")
1561
+ assert_equal '/descriptions', descriptions_path(nil)
1562
+ assert_equal '/en/descriptions/1', description_path("en", 1)
1563
+ assert_equal '/descriptions/1', description_path(nil, 1)
1564
+
1565
+ get '/en/descriptions'
1566
+ assert_equal 'descriptions#index', @response.body
1567
+
1568
+ get '/descriptions'
1569
+ assert_equal 'descriptions#index', @response.body
1570
+
1571
+ get '/en/descriptions/1'
1572
+ assert_equal 'descriptions#show', @response.body
1573
+
1574
+ get '/descriptions/1'
1575
+ assert_equal 'descriptions#show', @response.body
1576
+ end
1577
+
1578
+ def test_nested_optional_scoped_path
1579
+ draw do
1580
+ namespace :admin do
1581
+ scope '(:locale)', :locale => /en|pl/ do
1582
+ resources :descriptions
1583
+ end
1584
+ end
1585
+ end
1586
+
1587
+ assert_equal '/admin/en/descriptions', admin_descriptions_path("en")
1588
+ assert_equal '/admin/descriptions', admin_descriptions_path(nil)
1589
+ assert_equal '/admin/en/descriptions/1', admin_description_path("en", 1)
1590
+ assert_equal '/admin/descriptions/1', admin_description_path(nil, 1)
1591
+
1592
+ get '/admin/en/descriptions'
1593
+ assert_equal 'admin/descriptions#index', @response.body
1594
+
1595
+ get '/admin/descriptions'
1596
+ assert_equal 'admin/descriptions#index', @response.body
1597
+
1598
+ get '/admin/en/descriptions/1'
1599
+ assert_equal 'admin/descriptions#show', @response.body
1600
+
1601
+ get '/admin/descriptions/1'
1602
+ assert_equal 'admin/descriptions#show', @response.body
1603
+ end
1604
+
1605
+ def test_nested_optional_path_shorthand
1606
+ draw do
1607
+ scope '(:locale)', :locale => /en|pl/ do
1608
+ get "registrations/new"
1609
+ end
1610
+ end
1611
+
1612
+ get '/registrations/new'
1613
+ assert_nil @request.params[:locale]
1614
+
1615
+ get '/en/registrations/new'
1616
+ assert_equal 'en', @request.params[:locale]
1617
+ end
1618
+
1619
+ def test_default_string_params
1620
+ draw do
1621
+ get 'inline_pages/(:id)', :to => 'pages#show', :id => 'home'
1622
+ get 'default_pages/(:id)', :to => 'pages#show', :defaults => { :id => 'home' }
1623
+
1624
+ defaults :id => 'home' do
1625
+ get 'scoped_pages/(:id)', :to => 'pages#show'
1626
+ end
1627
+ end
1628
+
1629
+ get '/inline_pages'
1630
+ assert_equal 'home', @request.params[:id]
1631
+
1632
+ get '/default_pages'
1633
+ assert_equal 'home', @request.params[:id]
1634
+
1635
+ get '/scoped_pages'
1636
+ assert_equal 'home', @request.params[:id]
1637
+ end
1638
+
1639
+ def test_default_integer_params
1640
+ draw do
1641
+ get 'inline_pages/(:page)', to: 'pages#show', page: 1
1642
+ get 'default_pages/(:page)', to: 'pages#show', defaults: { page: 1 }
1643
+
1644
+ defaults page: 1 do
1645
+ get 'scoped_pages/(:page)', to: 'pages#show'
1646
+ end
1647
+ end
1648
+
1649
+ get '/inline_pages'
1650
+ assert_equal 1, @request.params[:page]
1651
+
1652
+ get '/default_pages'
1653
+ assert_equal 1, @request.params[:page]
1654
+
1655
+ get '/scoped_pages'
1656
+ assert_equal 1, @request.params[:page]
1657
+ end
1658
+
1659
+ def test_resource_constraints
1660
+ draw do
1661
+ resources :products, :constraints => { :id => /\d{4}/ } do
1662
+ root :to => "products#root"
1663
+ get :favorite, :on => :collection
1664
+ resources :images
1665
+ end
1666
+
1667
+ resource :dashboard, :constraints => { :ip => /192\.168\.1\.\d{1,3}/ }
1668
+ end
1669
+
1670
+ get '/products/1'
1671
+ assert_equal 'pass', @response.headers['X-Cascade']
1672
+ get '/products'
1673
+ assert_equal 'products#root', @response.body
1674
+ get '/products/favorite'
1675
+ assert_equal 'products#favorite', @response.body
1676
+ get '/products/0001'
1677
+ assert_equal 'products#show', @response.body
1678
+
1679
+ get '/products/1/images'
1680
+ assert_equal 'pass', @response.headers['X-Cascade']
1681
+ get '/products/0001/images'
1682
+ assert_equal 'images#index', @response.body
1683
+ get '/products/0001/images/0001'
1684
+ assert_equal 'images#show', @response.body
1685
+
1686
+ get '/dashboard', {}, {'REMOTE_ADDR' => '10.0.0.100'}
1687
+ assert_equal 'pass', @response.headers['X-Cascade']
1688
+ get '/dashboard', {}, {'REMOTE_ADDR' => '192.168.1.100'}
1689
+ assert_equal 'dashboards#show', @response.body
1690
+ end
1691
+
1692
+ def test_root_works_in_the_resources_scope
1693
+ draw do
1694
+ resources :products do
1695
+ root :to => "products#root"
1696
+ end
1697
+ end
1698
+
1699
+ get '/products'
1700
+ assert_equal 'products#root', @response.body
1701
+ assert_equal '/products', products_root_path
1702
+ end
1703
+
1704
+ def test_module_scope
1705
+ draw do
1706
+ resource :token, :module => :api
1707
+ end
1708
+
1709
+ get '/token'
1710
+ assert_equal 'api/tokens#show', @response.body
1711
+ assert_equal '/token', token_path
1712
+ end
1713
+
1714
+ def test_path_scope
1715
+ draw do
1716
+ scope :path => 'api' do
1717
+ resource :me
1718
+ get '/' => 'mes#index'
1719
+ end
1720
+ end
1721
+
1722
+ get '/api/me'
1723
+ assert_equal 'mes#show', @response.body
1724
+ assert_equal '/api/me', me_path
1725
+
1726
+ get '/api'
1727
+ assert_equal 'mes#index', @response.body
1728
+ end
1729
+
1730
+ def test_symbol_scope
1731
+ draw do
1732
+ scope :path => 'api' do
1733
+ scope :v2 do
1734
+ resource :me, as: 'v2_me'
1735
+ get '/' => 'mes#index'
1736
+ end
1737
+
1738
+ scope :v3, :admin do
1739
+ resource :me, as: 'v3_me'
1740
+ end
1741
+ end
1742
+ end
1743
+
1744
+ get '/api/v2/me'
1745
+ assert_equal 'mes#show', @response.body
1746
+ assert_equal '/api/v2/me', v2_me_path
1747
+
1748
+ get '/api/v2'
1749
+ assert_equal 'mes#index', @response.body
1750
+
1751
+ get '/api/v3/admin/me'
1752
+ assert_equal 'mes#show', @response.body
1753
+ end
1754
+
1755
+ def test_url_generator_for_generic_route
1756
+ draw do
1757
+ get "whatever/:controller(/:action(/:id))"
1758
+ end
1759
+
1760
+ get '/whatever/foo/bar'
1761
+ assert_equal 'foo#bar', @response.body
1762
+
1763
+ assert_equal 'http://www.example.com/whatever/foo/bar/1',
1764
+ url_for(:controller => "foo", :action => "bar", :id => 1)
1765
+ end
1766
+
1767
+ def test_url_generator_for_namespaced_generic_route
1768
+ draw do
1769
+ get "whatever/:controller(/:action(/:id))", :id => /\d+/
1770
+ end
1771
+
1772
+ get '/whatever/foo/bar/show'
1773
+ assert_equal 'foo/bar#show', @response.body
1774
+
1775
+ get '/whatever/foo/bar/show/1'
1776
+ assert_equal 'foo/bar#show', @response.body
1777
+
1778
+ assert_equal 'http://www.example.com/whatever/foo/bar/show',
1779
+ url_for(:controller => "foo/bar", :action => "show")
1780
+
1781
+ assert_equal 'http://www.example.com/whatever/foo/bar/show/1',
1782
+ url_for(:controller => "foo/bar", :action => "show", :id => '1')
1783
+ end
1784
+
1785
+ def test_resource_new_actions
1786
+ draw do
1787
+ resources :replies do
1788
+ new do
1789
+ post :preview
1790
+ end
1791
+ end
1792
+
1793
+ scope 'pt', :as => 'pt' do
1794
+ resources :projects, :path_names => { :new => 'novo' }, :path => 'projetos' do
1795
+ post :preview, :on => :new
1796
+ end
1797
+
1798
+ resource :admin, :path_names => { :new => 'novo' }, :path => 'administrador' do
1799
+ post :preview, :on => :new
1800
+ end
1801
+
1802
+ resources :products, :path_names => { :new => 'novo' } do
1803
+ new do
1804
+ post :preview
1805
+ end
1806
+ end
1807
+ end
1808
+
1809
+ resource :profile do
1810
+ new do
1811
+ post :preview
1812
+ end
1813
+ end
1814
+ end
1815
+
1816
+ assert_equal '/replies/new/preview', preview_new_reply_path
1817
+ assert_equal '/pt/projetos/novo/preview', preview_new_pt_project_path
1818
+ assert_equal '/pt/administrador/novo/preview', preview_new_pt_admin_path
1819
+ assert_equal '/pt/products/novo/preview', preview_new_pt_product_path
1820
+ assert_equal '/profile/new/preview', preview_new_profile_path
1821
+
1822
+ post '/replies/new/preview'
1823
+ assert_equal 'replies#preview', @response.body
1824
+
1825
+ post '/pt/projetos/novo/preview'
1826
+ assert_equal 'projects#preview', @response.body
1827
+
1828
+ post '/pt/administrador/novo/preview'
1829
+ assert_equal 'admins#preview', @response.body
1830
+
1831
+ post '/pt/products/novo/preview'
1832
+ assert_equal 'products#preview', @response.body
1833
+
1834
+ post '/profile/new/preview'
1835
+ assert_equal 'profiles#preview', @response.body
1836
+ end
1837
+
1838
+ def test_resource_merges_options_from_scope
1839
+ draw do
1840
+ scope :only => :show do
1841
+ resource :account
1842
+ end
1843
+ end
1844
+
1845
+ assert_raise(NoMethodError) { new_account_path }
1846
+
1847
+ get '/account/new'
1848
+ assert_equal 404, status
1849
+ end
1850
+
1851
+ def test_resources_merges_options_from_scope
1852
+ draw do
1853
+ scope :only => [:index, :show] do
1854
+ resources :products do
1855
+ resources :images
1856
+ end
1857
+ end
1858
+ end
1859
+
1860
+ assert_raise(NoMethodError) { edit_product_path('1') }
1861
+
1862
+ get '/products/1/edit'
1863
+ assert_equal 404, status
1864
+
1865
+ assert_raise(NoMethodError) { edit_product_image_path('1', '2') }
1866
+
1867
+ post '/products/1/images/2/edit'
1868
+ assert_equal 404, status
1869
+ end
1870
+
1871
+ def test_shallow_nested_resources
1872
+ draw do
1873
+ shallow do
1874
+ namespace :api do
1875
+ resources :teams do
1876
+ resources :players
1877
+ resource :captain
1878
+ end
1879
+ end
1880
+ end
1881
+
1882
+ resources :threads, :shallow => true do
1883
+ resource :owner
1884
+ resources :messages do
1885
+ resources :comments do
1886
+ member do
1887
+ post :preview
1888
+ end
1889
+ end
1890
+ end
1891
+ end
1892
+ end
1893
+
1894
+ get '/api/teams'
1895
+ assert_equal 'api/teams#index', @response.body
1896
+ assert_equal '/api/teams', api_teams_path
1897
+
1898
+ get '/api/teams/new'
1899
+ assert_equal 'api/teams#new', @response.body
1900
+ assert_equal '/api/teams/new', new_api_team_path
1901
+
1902
+ get '/api/teams/1'
1903
+ assert_equal 'api/teams#show', @response.body
1904
+ assert_equal '/api/teams/1', api_team_path(:id => '1')
1905
+
1906
+ get '/api/teams/1/edit'
1907
+ assert_equal 'api/teams#edit', @response.body
1908
+ assert_equal '/api/teams/1/edit', edit_api_team_path(:id => '1')
1909
+
1910
+ get '/api/teams/1/players'
1911
+ assert_equal 'api/players#index', @response.body
1912
+ assert_equal '/api/teams/1/players', api_team_players_path(:team_id => '1')
1913
+
1914
+ get '/api/teams/1/players/new'
1915
+ assert_equal 'api/players#new', @response.body
1916
+ assert_equal '/api/teams/1/players/new', new_api_team_player_path(:team_id => '1')
1917
+
1918
+ get '/api/players/2'
1919
+ assert_equal 'api/players#show', @response.body
1920
+ assert_equal '/api/players/2', api_player_path(:id => '2')
1921
+
1922
+ get '/api/players/2/edit'
1923
+ assert_equal 'api/players#edit', @response.body
1924
+ assert_equal '/api/players/2/edit', edit_api_player_path(:id => '2')
1925
+
1926
+ get '/api/teams/1/captain'
1927
+ assert_equal 'api/captains#show', @response.body
1928
+ assert_equal '/api/teams/1/captain', api_team_captain_path(:team_id => '1')
1929
+
1930
+ get '/api/teams/1/captain/new'
1931
+ assert_equal 'api/captains#new', @response.body
1932
+ assert_equal '/api/teams/1/captain/new', new_api_team_captain_path(:team_id => '1')
1933
+
1934
+ get '/api/teams/1/captain/edit'
1935
+ assert_equal 'api/captains#edit', @response.body
1936
+ assert_equal '/api/teams/1/captain/edit', edit_api_team_captain_path(:team_id => '1')
1937
+
1938
+ get '/threads'
1939
+ assert_equal 'threads#index', @response.body
1940
+ assert_equal '/threads', threads_path
1941
+
1942
+ get '/threads/new'
1943
+ assert_equal 'threads#new', @response.body
1944
+ assert_equal '/threads/new', new_thread_path
1945
+
1946
+ get '/threads/1'
1947
+ assert_equal 'threads#show', @response.body
1948
+ assert_equal '/threads/1', thread_path(:id => '1')
1949
+
1950
+ get '/threads/1/edit'
1951
+ assert_equal 'threads#edit', @response.body
1952
+ assert_equal '/threads/1/edit', edit_thread_path(:id => '1')
1953
+
1954
+ get '/threads/1/owner'
1955
+ assert_equal 'owners#show', @response.body
1956
+ assert_equal '/threads/1/owner', thread_owner_path(:thread_id => '1')
1957
+
1958
+ get '/threads/1/messages'
1959
+ assert_equal 'messages#index', @response.body
1960
+ assert_equal '/threads/1/messages', thread_messages_path(:thread_id => '1')
1961
+
1962
+ get '/threads/1/messages/new'
1963
+ assert_equal 'messages#new', @response.body
1964
+ assert_equal '/threads/1/messages/new', new_thread_message_path(:thread_id => '1')
1965
+
1966
+ get '/messages/2'
1967
+ assert_equal 'messages#show', @response.body
1968
+ assert_equal '/messages/2', message_path(:id => '2')
1969
+
1970
+ get '/messages/2/edit'
1971
+ assert_equal 'messages#edit', @response.body
1972
+ assert_equal '/messages/2/edit', edit_message_path(:id => '2')
1973
+
1974
+ get '/messages/2/comments'
1975
+ assert_equal 'comments#index', @response.body
1976
+ assert_equal '/messages/2/comments', message_comments_path(:message_id => '2')
1977
+
1978
+ get '/messages/2/comments/new'
1979
+ assert_equal 'comments#new', @response.body
1980
+ assert_equal '/messages/2/comments/new', new_message_comment_path(:message_id => '2')
1981
+
1982
+ get '/comments/3'
1983
+ assert_equal 'comments#show', @response.body
1984
+ assert_equal '/comments/3', comment_path(:id => '3')
1985
+
1986
+ get '/comments/3/edit'
1987
+ assert_equal 'comments#edit', @response.body
1988
+ assert_equal '/comments/3/edit', edit_comment_path(:id => '3')
1989
+
1990
+ post '/comments/3/preview'
1991
+ assert_equal 'comments#preview', @response.body
1992
+ assert_equal '/comments/3/preview', preview_comment_path(:id => '3')
1993
+ end
1994
+
1995
+ def test_shallow_nested_resources_inside_resource
1996
+ draw do
1997
+ resource :membership, shallow: true do
1998
+ resources :cards
1999
+ end
2000
+ end
2001
+
2002
+ get '/membership/cards'
2003
+ assert_equal 'cards#index', @response.body
2004
+ assert_equal '/membership/cards', membership_cards_path
2005
+
2006
+ get '/membership/cards/new'
2007
+ assert_equal 'cards#new', @response.body
2008
+ assert_equal '/membership/cards/new', new_membership_card_path
2009
+
2010
+ post '/membership/cards'
2011
+ assert_equal 'cards#create', @response.body
2012
+
2013
+ get '/cards/1'
2014
+ assert_equal 'cards#show', @response.body
2015
+ assert_equal '/cards/1', card_path('1')
2016
+
2017
+ get '/cards/1/edit'
2018
+ assert_equal 'cards#edit', @response.body
2019
+ assert_equal '/cards/1/edit', edit_card_path('1')
2020
+
2021
+ put '/cards/1'
2022
+ assert_equal 'cards#update', @response.body
2023
+
2024
+ patch '/cards/1'
2025
+ assert_equal 'cards#update', @response.body
2026
+
2027
+ delete '/cards/1'
2028
+ assert_equal 'cards#destroy', @response.body
2029
+ end
2030
+
2031
+ def test_shallow_deeply_nested_resources
2032
+ draw do
2033
+ resources :blogs do
2034
+ resources :posts do
2035
+ resources :comments, shallow: true
2036
+ end
2037
+ end
2038
+ end
2039
+
2040
+ get '/comments/1'
2041
+ assert_equal 'comments#show', @response.body
2042
+
2043
+ assert_equal '/comments/1', comment_path('1')
2044
+ assert_equal '/blogs/new', new_blog_path
2045
+ assert_equal '/blogs/1/posts/new', new_blog_post_path(:blog_id => 1)
2046
+ assert_equal '/blogs/1/posts/2/comments/new', new_blog_post_comment_path(:blog_id => 1, :post_id => 2)
2047
+ end
2048
+
2049
+ def test_direct_children_of_shallow_resources
2050
+ draw do
2051
+ resources :blogs do
2052
+ resources :posts, shallow: true do
2053
+ resources :comments
2054
+ end
2055
+ end
2056
+ end
2057
+
2058
+ post '/posts/1/comments'
2059
+ assert_equal 'comments#create', @response.body
2060
+ assert_equal '/posts/1/comments', post_comments_path('1')
2061
+
2062
+ get '/posts/2/comments/new'
2063
+ assert_equal 'comments#new', @response.body
2064
+ assert_equal '/posts/2/comments/new', new_post_comment_path('2')
2065
+
2066
+ get '/posts/1/comments'
2067
+ assert_equal 'comments#index', @response.body
2068
+ assert_equal '/posts/1/comments', post_comments_path('1')
2069
+ end
2070
+
2071
+ def test_shallow_nested_resources_within_scope
2072
+ draw do
2073
+ scope '/hello' do
2074
+ shallow do
2075
+ resources :notes do
2076
+ resources :trackbacks
2077
+ end
2078
+ end
2079
+ end
2080
+ end
2081
+
2082
+ get '/hello/notes/1/trackbacks'
2083
+ assert_equal 'trackbacks#index', @response.body
2084
+ assert_equal '/hello/notes/1/trackbacks', note_trackbacks_path(:note_id => 1)
2085
+
2086
+ get '/hello/notes/1/edit'
2087
+ assert_equal 'notes#edit', @response.body
2088
+ assert_equal '/hello/notes/1/edit', edit_note_path(:id => '1')
2089
+
2090
+ get '/hello/notes/1/trackbacks/new'
2091
+ assert_equal 'trackbacks#new', @response.body
2092
+ assert_equal '/hello/notes/1/trackbacks/new', new_note_trackback_path(:note_id => 1)
2093
+
2094
+ get '/hello/trackbacks/1'
2095
+ assert_equal 'trackbacks#show', @response.body
2096
+ assert_equal '/hello/trackbacks/1', trackback_path(:id => '1')
2097
+
2098
+ get '/hello/trackbacks/1/edit'
2099
+ assert_equal 'trackbacks#edit', @response.body
2100
+ assert_equal '/hello/trackbacks/1/edit', edit_trackback_path(:id => '1')
2101
+
2102
+ put '/hello/trackbacks/1'
2103
+ assert_equal 'trackbacks#update', @response.body
2104
+
2105
+ post '/hello/notes/1/trackbacks'
2106
+ assert_equal 'trackbacks#create', @response.body
2107
+
2108
+ delete '/hello/trackbacks/1'
2109
+ assert_equal 'trackbacks#destroy', @response.body
2110
+
2111
+ get '/hello/notes'
2112
+ assert_equal 'notes#index', @response.body
2113
+
2114
+ post '/hello/notes'
2115
+ assert_equal 'notes#create', @response.body
2116
+
2117
+ get '/hello/notes/new'
2118
+ assert_equal 'notes#new', @response.body
2119
+ assert_equal '/hello/notes/new', new_note_path
2120
+
2121
+ get '/hello/notes/1'
2122
+ assert_equal 'notes#show', @response.body
2123
+ assert_equal '/hello/notes/1', note_path(:id => 1)
2124
+
2125
+ put '/hello/notes/1'
2126
+ assert_equal 'notes#update', @response.body
2127
+
2128
+ delete '/hello/notes/1'
2129
+ assert_equal 'notes#destroy', @response.body
2130
+ end
2131
+
2132
+ def test_shallow_option_nested_resources_within_scope
2133
+ draw do
2134
+ scope '/hello' do
2135
+ resources :notes, :shallow => true do
2136
+ resources :trackbacks
2137
+ end
2138
+ end
2139
+ end
2140
+
2141
+ get '/hello/notes/1/trackbacks'
2142
+ assert_equal 'trackbacks#index', @response.body
2143
+ assert_equal '/hello/notes/1/trackbacks', note_trackbacks_path(:note_id => 1)
2144
+
2145
+ get '/hello/notes/1/edit'
2146
+ assert_equal 'notes#edit', @response.body
2147
+ assert_equal '/hello/notes/1/edit', edit_note_path(:id => '1')
2148
+
2149
+ get '/hello/notes/1/trackbacks/new'
2150
+ assert_equal 'trackbacks#new', @response.body
2151
+ assert_equal '/hello/notes/1/trackbacks/new', new_note_trackback_path(:note_id => 1)
2152
+
2153
+ get '/hello/trackbacks/1'
2154
+ assert_equal 'trackbacks#show', @response.body
2155
+ assert_equal '/hello/trackbacks/1', trackback_path(:id => '1')
2156
+
2157
+ get '/hello/trackbacks/1/edit'
2158
+ assert_equal 'trackbacks#edit', @response.body
2159
+ assert_equal '/hello/trackbacks/1/edit', edit_trackback_path(:id => '1')
2160
+
2161
+ put '/hello/trackbacks/1'
2162
+ assert_equal 'trackbacks#update', @response.body
2163
+
2164
+ post '/hello/notes/1/trackbacks'
2165
+ assert_equal 'trackbacks#create', @response.body
2166
+
2167
+ delete '/hello/trackbacks/1'
2168
+ assert_equal 'trackbacks#destroy', @response.body
2169
+
2170
+ get '/hello/notes'
2171
+ assert_equal 'notes#index', @response.body
2172
+
2173
+ post '/hello/notes'
2174
+ assert_equal 'notes#create', @response.body
2175
+
2176
+ get '/hello/notes/new'
2177
+ assert_equal 'notes#new', @response.body
2178
+ assert_equal '/hello/notes/new', new_note_path
2179
+
2180
+ get '/hello/notes/1'
2181
+ assert_equal 'notes#show', @response.body
2182
+ assert_equal '/hello/notes/1', note_path(:id => 1)
2183
+
2184
+ put '/hello/notes/1'
2185
+ assert_equal 'notes#update', @response.body
2186
+
2187
+ delete '/hello/notes/1'
2188
+ assert_equal 'notes#destroy', @response.body
2189
+ end
2190
+
2191
+ def test_custom_resource_routes_are_scoped
2192
+ draw do
2193
+ resources :customers do
2194
+ get :recent, :on => :collection
2195
+ get "profile", :on => :member
2196
+ get "secret/profile" => "customers#secret", :on => :member
2197
+ post "preview" => "customers#preview", :as => :another_preview, :on => :new
2198
+ resource :avatar do
2199
+ get "thumbnail" => "avatars#thumbnail", :as => :thumbnail, :on => :member
2200
+ end
2201
+ resources :invoices do
2202
+ get "outstanding" => "invoices#outstanding", :on => :collection
2203
+ get "overdue", :action => :overdue, :on => :collection
2204
+ get "print" => "invoices#print", :as => :print, :on => :member
2205
+ post "preview" => "invoices#preview", :as => :preview, :on => :new
2206
+ end
2207
+ resources :notes, :shallow => true do
2208
+ get "preview" => "notes#preview", :as => :preview, :on => :new
2209
+ get "print" => "notes#print", :as => :print, :on => :member
2210
+ end
2211
+ end
2212
+
2213
+ namespace :api do
2214
+ resources :customers do
2215
+ get "recent" => "customers#recent", :as => :recent, :on => :collection
2216
+ get "profile" => "customers#profile", :as => :profile, :on => :member
2217
+ post "preview" => "customers#preview", :as => :preview, :on => :new
2218
+ end
2219
+ end
2220
+ end
2221
+
2222
+ assert_equal '/customers/recent', recent_customers_path
2223
+ assert_equal '/customers/1/profile', profile_customer_path(:id => '1')
2224
+ assert_equal '/customers/1/secret/profile', secret_profile_customer_path(:id => '1')
2225
+ assert_equal '/customers/new/preview', another_preview_new_customer_path
2226
+ assert_equal '/customers/1/avatar/thumbnail.jpg', thumbnail_customer_avatar_path(:customer_id => '1', :format => :jpg)
2227
+ assert_equal '/customers/1/invoices/outstanding', outstanding_customer_invoices_path(:customer_id => '1')
2228
+ assert_equal '/customers/1/invoices/2/print', print_customer_invoice_path(:customer_id => '1', :id => '2')
2229
+ assert_equal '/customers/1/invoices/new/preview', preview_new_customer_invoice_path(:customer_id => '1')
2230
+ assert_equal '/customers/1/notes/new/preview', preview_new_customer_note_path(:customer_id => '1')
2231
+ assert_equal '/notes/1/print', print_note_path(:id => '1')
2232
+ assert_equal '/api/customers/recent', recent_api_customers_path
2233
+ assert_equal '/api/customers/1/profile', profile_api_customer_path(:id => '1')
2234
+ assert_equal '/api/customers/new/preview', preview_new_api_customer_path
2235
+
2236
+ get '/customers/1/invoices/overdue'
2237
+ assert_equal 'invoices#overdue', @response.body
2238
+
2239
+ get '/customers/1/secret/profile'
2240
+ assert_equal 'customers#secret', @response.body
2241
+ end
2242
+
2243
+ def test_shallow_nested_routes_ignore_module
2244
+ draw do
2245
+ scope :module => :api do
2246
+ resources :errors, :shallow => true do
2247
+ resources :notices
2248
+ end
2249
+ end
2250
+ end
2251
+
2252
+ get '/errors/1/notices'
2253
+ assert_equal 'api/notices#index', @response.body
2254
+ assert_equal '/errors/1/notices', error_notices_path(:error_id => '1')
2255
+
2256
+ get '/notices/1'
2257
+ assert_equal 'api/notices#show', @response.body
2258
+ assert_equal '/notices/1', notice_path(:id => '1')
2259
+ end
2260
+
2261
+ def test_non_greedy_regexp
2262
+ draw do
2263
+ namespace :api do
2264
+ scope(':version', :version => /.+/) do
2265
+ resources :users, :id => /.+?/, :format => /json|xml/
2266
+ end
2267
+ end
2268
+ end
2269
+
2270
+ get '/api/1.0/users'
2271
+ assert_equal 'api/users#index', @response.body
2272
+ assert_equal '/api/1.0/users', api_users_path(:version => '1.0')
2273
+
2274
+ get '/api/1.0/users.json'
2275
+ assert_equal 'api/users#index', @response.body
2276
+ assert_equal true, @request.format.json?
2277
+ assert_equal '/api/1.0/users.json', api_users_path(:version => '1.0', :format => :json)
2278
+
2279
+ get '/api/1.0/users/first.last'
2280
+ assert_equal 'api/users#show', @response.body
2281
+ assert_equal 'first.last', @request.params[:id]
2282
+ assert_equal '/api/1.0/users/first.last', api_user_path(:version => '1.0', :id => 'first.last')
2283
+
2284
+ get '/api/1.0/users/first.last.xml'
2285
+ assert_equal 'api/users#show', @response.body
2286
+ assert_equal 'first.last', @request.params[:id]
2287
+ assert_equal true, @request.format.xml?
2288
+ assert_equal '/api/1.0/users/first.last.xml', api_user_path(:version => '1.0', :id => 'first.last', :format => :xml)
2289
+ end
2290
+
2291
+ def test_match_without_via
2292
+ assert_raises(ArgumentError) do
2293
+ draw do
2294
+ match '/foo/bar', :to => 'files#show'
2295
+ end
2296
+ end
2297
+ end
2298
+
2299
+ def test_match_with_empty_via
2300
+ assert_raises(ArgumentError) do
2301
+ draw do
2302
+ match '/foo/bar', :to => 'files#show', :via => []
2303
+ end
2304
+ end
2305
+ end
2306
+
2307
+ def test_glob_parameter_accepts_regexp
2308
+ draw do
2309
+ get '/:locale/*file.:format', :to => 'files#show', :file => /path\/to\/existing\/file/
2310
+ end
2311
+
2312
+ get '/en/path/to/existing/file.html'
2313
+ assert_equal 200, @response.status
2314
+ end
2315
+
2316
+ def test_resources_controller_name_is_not_pluralized
2317
+ draw do
2318
+ resources :content
2319
+ end
2320
+
2321
+ get '/content'
2322
+ assert_equal 'content#index', @response.body
2323
+ end
2324
+
2325
+ def test_url_generator_for_optional_prefix_dynamic_segment
2326
+ draw do
2327
+ get "(/:username)/followers" => "followers#index"
2328
+ end
2329
+
2330
+ get '/bob/followers'
2331
+ assert_equal 'followers#index', @response.body
2332
+ assert_equal 'http://www.example.com/bob/followers',
2333
+ url_for(:controller => "followers", :action => "index", :username => "bob")
2334
+
2335
+ get '/followers'
2336
+ assert_equal 'followers#index', @response.body
2337
+ assert_equal 'http://www.example.com/followers',
2338
+ url_for(:controller => "followers", :action => "index", :username => nil)
2339
+ end
2340
+
2341
+ def test_url_generator_for_optional_suffix_static_and_dynamic_segment
2342
+ draw do
2343
+ get "/groups(/user/:username)" => "groups#index"
2344
+ end
2345
+
2346
+ get '/groups/user/bob'
2347
+ assert_equal 'groups#index', @response.body
2348
+ assert_equal 'http://www.example.com/groups/user/bob',
2349
+ url_for(:controller => "groups", :action => "index", :username => "bob")
2350
+
2351
+ get '/groups'
2352
+ assert_equal 'groups#index', @response.body
2353
+ assert_equal 'http://www.example.com/groups',
2354
+ url_for(:controller => "groups", :action => "index", :username => nil)
2355
+ end
2356
+
2357
+ def test_url_generator_for_optional_prefix_static_and_dynamic_segment
2358
+ draw do
2359
+ get "(/user/:username)/photos" => "photos#index"
2360
+ end
2361
+
2362
+ get '/user/bob/photos'
2363
+ assert_equal 'photos#index', @response.body
2364
+ assert_equal 'http://www.example.com/user/bob/photos',
2365
+ url_for(:controller => "photos", :action => "index", :username => "bob")
2366
+
2367
+ get '/photos'
2368
+ assert_equal 'photos#index', @response.body
2369
+ assert_equal 'http://www.example.com/photos',
2370
+ url_for(:controller => "photos", :action => "index", :username => nil)
2371
+ end
2372
+
2373
+ def test_url_recognition_for_optional_static_segments
2374
+ draw do
2375
+ scope '(groups)' do
2376
+ scope '(discussions)' do
2377
+ resources :messages
2378
+ end
2379
+ end
2380
+ end
2381
+
2382
+ get '/groups/discussions/messages'
2383
+ assert_equal 'messages#index', @response.body
2384
+
2385
+ get '/groups/discussions/messages/1'
2386
+ assert_equal 'messages#show', @response.body
2387
+
2388
+ get '/groups/messages'
2389
+ assert_equal 'messages#index', @response.body
2390
+
2391
+ get '/groups/messages/1'
2392
+ assert_equal 'messages#show', @response.body
2393
+
2394
+ get '/discussions/messages'
2395
+ assert_equal 'messages#index', @response.body
2396
+
2397
+ get '/discussions/messages/1'
2398
+ assert_equal 'messages#show', @response.body
2399
+
2400
+ get '/messages'
2401
+ assert_equal 'messages#index', @response.body
2402
+
2403
+ get '/messages/1'
2404
+ assert_equal 'messages#show', @response.body
2405
+ end
2406
+
2407
+ def test_router_removes_invalid_conditions
2408
+ draw do
2409
+ scope :constraints => { :id => /\d+/ } do
2410
+ get '/tickets', :to => 'tickets#index', :as => :tickets
2411
+ end
2412
+ end
2413
+
2414
+ get '/tickets'
2415
+ assert_equal 'tickets#index', @response.body
2416
+ assert_equal '/tickets', tickets_path
2417
+ end
2418
+
2419
+ def test_constraints_are_merged_from_scope
2420
+ draw do
2421
+ scope :constraints => { :id => /\d{4}/ } do
2422
+ resources :movies do
2423
+ resources :reviews
2424
+ resource :trailer
2425
+ end
2426
+ end
2427
+ end
2428
+
2429
+ get '/movies/0001'
2430
+ assert_equal 'movies#show', @response.body
2431
+ assert_equal '/movies/0001', movie_path(:id => '0001')
2432
+
2433
+ get '/movies/00001'
2434
+ assert_equal 'Not Found', @response.body
2435
+ assert_raises(ActionController::UrlGenerationError){ movie_path(:id => '00001') }
2436
+
2437
+ get '/movies/0001/reviews'
2438
+ assert_equal 'reviews#index', @response.body
2439
+ assert_equal '/movies/0001/reviews', movie_reviews_path(:movie_id => '0001')
2440
+
2441
+ get '/movies/00001/reviews'
2442
+ assert_equal 'Not Found', @response.body
2443
+ assert_raises(ActionController::UrlGenerationError){ movie_reviews_path(:movie_id => '00001') }
2444
+
2445
+ get '/movies/0001/reviews/0001'
2446
+ assert_equal 'reviews#show', @response.body
2447
+ assert_equal '/movies/0001/reviews/0001', movie_review_path(:movie_id => '0001', :id => '0001')
2448
+
2449
+ get '/movies/00001/reviews/0001'
2450
+ assert_equal 'Not Found', @response.body
2451
+ assert_raises(ActionController::UrlGenerationError){ movie_path(:movie_id => '00001', :id => '00001') }
2452
+
2453
+ get '/movies/0001/trailer'
2454
+ assert_equal 'trailers#show', @response.body
2455
+ assert_equal '/movies/0001/trailer', movie_trailer_path(:movie_id => '0001')
2456
+
2457
+ get '/movies/00001/trailer'
2458
+ assert_equal 'Not Found', @response.body
2459
+ assert_raises(ActionController::UrlGenerationError){ movie_trailer_path(:movie_id => '00001') }
2460
+ end
2461
+
2462
+ def test_only_should_be_read_from_scope
2463
+ draw do
2464
+ scope :only => [:index, :show] do
2465
+ namespace :only do
2466
+ resources :clubs do
2467
+ resources :players
2468
+ resource :chairman
2469
+ end
2470
+ end
2471
+ end
2472
+ end
2473
+
2474
+ get '/only/clubs'
2475
+ assert_equal 'only/clubs#index', @response.body
2476
+ assert_equal '/only/clubs', only_clubs_path
2477
+
2478
+ get '/only/clubs/1/edit'
2479
+ assert_equal 'Not Found', @response.body
2480
+ assert_raise(NoMethodError) { edit_only_club_path(:id => '1') }
2481
+
2482
+ get '/only/clubs/1/players'
2483
+ assert_equal 'only/players#index', @response.body
2484
+ assert_equal '/only/clubs/1/players', only_club_players_path(:club_id => '1')
2485
+
2486
+ get '/only/clubs/1/players/2/edit'
2487
+ assert_equal 'Not Found', @response.body
2488
+ assert_raise(NoMethodError) { edit_only_club_player_path(:club_id => '1', :id => '2') }
2489
+
2490
+ get '/only/clubs/1/chairman'
2491
+ assert_equal 'only/chairmen#show', @response.body
2492
+ assert_equal '/only/clubs/1/chairman', only_club_chairman_path(:club_id => '1')
2493
+
2494
+ get '/only/clubs/1/chairman/edit'
2495
+ assert_equal 'Not Found', @response.body
2496
+ assert_raise(NoMethodError) { edit_only_club_chairman_path(:club_id => '1') }
2497
+ end
2498
+
2499
+ def test_except_should_be_read_from_scope
2500
+ draw do
2501
+ scope :except => [:new, :create, :edit, :update, :destroy] do
2502
+ namespace :except do
2503
+ resources :clubs do
2504
+ resources :players
2505
+ resource :chairman
2506
+ end
2507
+ end
2508
+ end
2509
+ end
2510
+
2511
+ get '/except/clubs'
2512
+ assert_equal 'except/clubs#index', @response.body
2513
+ assert_equal '/except/clubs', except_clubs_path
2514
+
2515
+ get '/except/clubs/1/edit'
2516
+ assert_equal 'Not Found', @response.body
2517
+ assert_raise(NoMethodError) { edit_except_club_path(:id => '1') }
2518
+
2519
+ get '/except/clubs/1/players'
2520
+ assert_equal 'except/players#index', @response.body
2521
+ assert_equal '/except/clubs/1/players', except_club_players_path(:club_id => '1')
2522
+
2523
+ get '/except/clubs/1/players/2/edit'
2524
+ assert_equal 'Not Found', @response.body
2525
+ assert_raise(NoMethodError) { edit_except_club_player_path(:club_id => '1', :id => '2') }
2526
+
2527
+ get '/except/clubs/1/chairman'
2528
+ assert_equal 'except/chairmen#show', @response.body
2529
+ assert_equal '/except/clubs/1/chairman', except_club_chairman_path(:club_id => '1')
2530
+
2531
+ get '/except/clubs/1/chairman/edit'
2532
+ assert_equal 'Not Found', @response.body
2533
+ assert_raise(NoMethodError) { edit_except_club_chairman_path(:club_id => '1') }
2534
+ end
2535
+
2536
+ def test_only_option_should_override_scope
2537
+ draw do
2538
+ scope :only => :show do
2539
+ namespace :only do
2540
+ resources :sectors, :only => :index
2541
+ end
2542
+ end
2543
+ end
2544
+
2545
+ get '/only/sectors'
2546
+ assert_equal 'only/sectors#index', @response.body
2547
+ assert_equal '/only/sectors', only_sectors_path
2548
+
2549
+ get '/only/sectors/1'
2550
+ assert_equal 'Not Found', @response.body
2551
+ assert_raise(NoMethodError) { only_sector_path(:id => '1') }
2552
+ end
2553
+
2554
+ def test_only_option_should_not_inherit
2555
+ draw do
2556
+ scope :only => :show do
2557
+ namespace :only do
2558
+ resources :sectors, :only => :index do
2559
+ resources :companies
2560
+ resource :leader
2561
+ end
2562
+ end
2563
+ end
2564
+ end
2565
+
2566
+ get '/only/sectors/1/companies/2'
2567
+ assert_equal 'only/companies#show', @response.body
2568
+ assert_equal '/only/sectors/1/companies/2', only_sector_company_path(:sector_id => '1', :id => '2')
2569
+
2570
+ get '/only/sectors/1/leader'
2571
+ assert_equal 'only/leaders#show', @response.body
2572
+ assert_equal '/only/sectors/1/leader', only_sector_leader_path(:sector_id => '1')
2573
+ end
2574
+
2575
+ def test_except_option_should_override_scope
2576
+ draw do
2577
+ scope :except => :index do
2578
+ namespace :except do
2579
+ resources :sectors, :except => [:show, :update, :destroy]
2580
+ end
2581
+ end
2582
+ end
2583
+
2584
+ get '/except/sectors'
2585
+ assert_equal 'except/sectors#index', @response.body
2586
+ assert_equal '/except/sectors', except_sectors_path
2587
+
2588
+ get '/except/sectors/1'
2589
+ assert_equal 'Not Found', @response.body
2590
+ assert_raise(NoMethodError) { except_sector_path(:id => '1') }
2591
+ end
2592
+
2593
+ def test_except_option_should_not_inherit
2594
+ draw do
2595
+ scope :except => :index do
2596
+ namespace :except do
2597
+ resources :sectors, :except => [:show, :update, :destroy] do
2598
+ resources :companies
2599
+ resource :leader
2600
+ end
2601
+ end
2602
+ end
2603
+ end
2604
+
2605
+ get '/except/sectors/1/companies/2'
2606
+ assert_equal 'except/companies#show', @response.body
2607
+ assert_equal '/except/sectors/1/companies/2', except_sector_company_path(:sector_id => '1', :id => '2')
2608
+
2609
+ get '/except/sectors/1/leader'
2610
+ assert_equal 'except/leaders#show', @response.body
2611
+ assert_equal '/except/sectors/1/leader', except_sector_leader_path(:sector_id => '1')
2612
+ end
2613
+
2614
+ def test_except_option_should_override_scoped_only
2615
+ draw do
2616
+ scope :only => :show do
2617
+ namespace :only do
2618
+ resources :sectors, :only => :index do
2619
+ resources :managers, :except => [:show, :update, :destroy]
2620
+ end
2621
+ end
2622
+ end
2623
+ end
2624
+
2625
+ get '/only/sectors/1/managers'
2626
+ assert_equal 'only/managers#index', @response.body
2627
+ assert_equal '/only/sectors/1/managers', only_sector_managers_path(:sector_id => '1')
2628
+
2629
+ get '/only/sectors/1/managers/2'
2630
+ assert_equal 'Not Found', @response.body
2631
+ assert_raise(NoMethodError) { only_sector_manager_path(:sector_id => '1', :id => '2') }
2632
+ end
2633
+
2634
+ def test_only_option_should_override_scoped_except
2635
+ draw do
2636
+ scope :except => :index do
2637
+ namespace :except do
2638
+ resources :sectors, :except => [:show, :update, :destroy] do
2639
+ resources :managers, :only => :index
2640
+ end
2641
+ end
2642
+ end
2643
+ end
2644
+
2645
+ get '/except/sectors/1/managers'
2646
+ assert_equal 'except/managers#index', @response.body
2647
+ assert_equal '/except/sectors/1/managers', except_sector_managers_path(:sector_id => '1')
2648
+
2649
+ get '/except/sectors/1/managers/2'
2650
+ assert_equal 'Not Found', @response.body
2651
+ assert_raise(NoMethodError) { except_sector_manager_path(:sector_id => '1', :id => '2') }
2652
+ end
2653
+
2654
+ def test_only_scope_should_override_parent_scope
2655
+ draw do
2656
+ scope :only => :show do
2657
+ namespace :only do
2658
+ resources :sectors, :only => :index do
2659
+ resources :companies do
2660
+ scope :only => :index do
2661
+ resources :divisions
2662
+ end
2663
+ end
2664
+ end
2665
+ end
2666
+ end
2667
+ end
2668
+
2669
+ get '/only/sectors/1/companies/2/divisions'
2670
+ assert_equal 'only/divisions#index', @response.body
2671
+ assert_equal '/only/sectors/1/companies/2/divisions', only_sector_company_divisions_path(:sector_id => '1', :company_id => '2')
2672
+
2673
+ get '/only/sectors/1/companies/2/divisions/3'
2674
+ assert_equal 'Not Found', @response.body
2675
+ assert_raise(NoMethodError) { only_sector_company_division_path(:sector_id => '1', :company_id => '2', :id => '3') }
2676
+ end
2677
+
2678
+ def test_except_scope_should_override_parent_scope
2679
+ draw do
2680
+ scope :except => :index do
2681
+ namespace :except do
2682
+ resources :sectors, :except => [:show, :update, :destroy] do
2683
+ resources :companies do
2684
+ scope :except => [:show, :update, :destroy] do
2685
+ resources :divisions
2686
+ end
2687
+ end
2688
+ end
2689
+ end
2690
+ end
2691
+ end
2692
+
2693
+ get '/except/sectors/1/companies/2/divisions'
2694
+ assert_equal 'except/divisions#index', @response.body
2695
+ assert_equal '/except/sectors/1/companies/2/divisions', except_sector_company_divisions_path(:sector_id => '1', :company_id => '2')
2696
+
2697
+ get '/except/sectors/1/companies/2/divisions/3'
2698
+ assert_equal 'Not Found', @response.body
2699
+ assert_raise(NoMethodError) { except_sector_company_division_path(:sector_id => '1', :company_id => '2', :id => '3') }
2700
+ end
2701
+
2702
+ def test_except_scope_should_override_parent_only_scope
2703
+ draw do
2704
+ scope :only => :show do
2705
+ namespace :only do
2706
+ resources :sectors, :only => :index do
2707
+ resources :companies do
2708
+ scope :except => [:show, :update, :destroy] do
2709
+ resources :departments
2710
+ end
2711
+ end
2712
+ end
2713
+ end
2714
+ end
2715
+ end
2716
+
2717
+ get '/only/sectors/1/companies/2/departments'
2718
+ assert_equal 'only/departments#index', @response.body
2719
+ assert_equal '/only/sectors/1/companies/2/departments', only_sector_company_departments_path(:sector_id => '1', :company_id => '2')
2720
+
2721
+ get '/only/sectors/1/companies/2/departments/3'
2722
+ assert_equal 'Not Found', @response.body
2723
+ assert_raise(NoMethodError) { only_sector_company_department_path(:sector_id => '1', :company_id => '2', :id => '3') }
2724
+ end
2725
+
2726
+ def test_only_scope_should_override_parent_except_scope
2727
+ draw do
2728
+ scope :except => :index do
2729
+ namespace :except do
2730
+ resources :sectors, :except => [:show, :update, :destroy] do
2731
+ resources :companies do
2732
+ scope :only => :index do
2733
+ resources :departments
2734
+ end
2735
+ end
2736
+ end
2737
+ end
2738
+ end
2739
+ end
2740
+
2741
+ get '/except/sectors/1/companies/2/departments'
2742
+ assert_equal 'except/departments#index', @response.body
2743
+ assert_equal '/except/sectors/1/companies/2/departments', except_sector_company_departments_path(:sector_id => '1', :company_id => '2')
2744
+
2745
+ get '/except/sectors/1/companies/2/departments/3'
2746
+ assert_equal 'Not Found', @response.body
2747
+ assert_raise(NoMethodError) { except_sector_company_department_path(:sector_id => '1', :company_id => '2', :id => '3') }
2748
+ end
2749
+
2750
+ def test_resources_are_not_pluralized
2751
+ draw do
2752
+ namespace :transport do
2753
+ resources :taxis
2754
+ end
2755
+ end
2756
+
2757
+ get '/transport/taxis'
2758
+ assert_equal 'transport/taxis#index', @response.body
2759
+ assert_equal '/transport/taxis', transport_taxis_path
2760
+
2761
+ get '/transport/taxis/new'
2762
+ assert_equal 'transport/taxis#new', @response.body
2763
+ assert_equal '/transport/taxis/new', new_transport_taxi_path
2764
+
2765
+ post '/transport/taxis'
2766
+ assert_equal 'transport/taxis#create', @response.body
2767
+
2768
+ get '/transport/taxis/1'
2769
+ assert_equal 'transport/taxis#show', @response.body
2770
+ assert_equal '/transport/taxis/1', transport_taxi_path(:id => '1')
2771
+
2772
+ get '/transport/taxis/1/edit'
2773
+ assert_equal 'transport/taxis#edit', @response.body
2774
+ assert_equal '/transport/taxis/1/edit', edit_transport_taxi_path(:id => '1')
2775
+
2776
+ put '/transport/taxis/1'
2777
+ assert_equal 'transport/taxis#update', @response.body
2778
+
2779
+ delete '/transport/taxis/1'
2780
+ assert_equal 'transport/taxis#destroy', @response.body
2781
+ end
2782
+
2783
+ def test_singleton_resources_are_not_singularized
2784
+ draw do
2785
+ namespace :medical do
2786
+ resource :taxis
2787
+ end
2788
+ end
2789
+
2790
+ get '/medical/taxis/new'
2791
+ assert_equal 'medical/taxis#new', @response.body
2792
+ assert_equal '/medical/taxis/new', new_medical_taxis_path
2793
+
2794
+ post '/medical/taxis'
2795
+ assert_equal 'medical/taxis#create', @response.body
2796
+
2797
+ get '/medical/taxis'
2798
+ assert_equal 'medical/taxis#show', @response.body
2799
+ assert_equal '/medical/taxis', medical_taxis_path
2800
+
2801
+ get '/medical/taxis/edit'
2802
+ assert_equal 'medical/taxis#edit', @response.body
2803
+ assert_equal '/medical/taxis/edit', edit_medical_taxis_path
2804
+
2805
+ put '/medical/taxis'
2806
+ assert_equal 'medical/taxis#update', @response.body
2807
+
2808
+ delete '/medical/taxis'
2809
+ assert_equal 'medical/taxis#destroy', @response.body
2810
+ end
2811
+
2812
+ def test_greedy_resource_id_regexp_doesnt_match_edit_and_custom_action
2813
+ draw do
2814
+ resources :sections, :id => /.+/ do
2815
+ get :preview, :on => :member
2816
+ end
2817
+ end
2818
+
2819
+ get '/sections/1/edit'
2820
+ assert_equal 'sections#edit', @response.body
2821
+ assert_equal '/sections/1/edit', edit_section_path(:id => '1')
2822
+
2823
+ get '/sections/1/preview'
2824
+ assert_equal 'sections#preview', @response.body
2825
+ assert_equal '/sections/1/preview', preview_section_path(:id => '1')
2826
+ end
2827
+
2828
+ def test_resource_constraints_are_pushed_to_scope
2829
+ draw do
2830
+ namespace :wiki do
2831
+ resources :articles, :id => /[^\/]+/ do
2832
+ resources :comments, :only => [:create, :new]
2833
+ end
2834
+ end
2835
+ end
2836
+
2837
+ get '/wiki/articles/Ruby_on_Rails_3.0'
2838
+ assert_equal 'wiki/articles#show', @response.body
2839
+ assert_equal '/wiki/articles/Ruby_on_Rails_3.0', wiki_article_path(:id => 'Ruby_on_Rails_3.0')
2840
+
2841
+ get '/wiki/articles/Ruby_on_Rails_3.0/comments/new'
2842
+ assert_equal 'wiki/comments#new', @response.body
2843
+ assert_equal '/wiki/articles/Ruby_on_Rails_3.0/comments/new', new_wiki_article_comment_path(:article_id => 'Ruby_on_Rails_3.0')
2844
+
2845
+ post '/wiki/articles/Ruby_on_Rails_3.0/comments'
2846
+ assert_equal 'wiki/comments#create', @response.body
2847
+ assert_equal '/wiki/articles/Ruby_on_Rails_3.0/comments', wiki_article_comments_path(:article_id => 'Ruby_on_Rails_3.0')
2848
+ end
2849
+
2850
+ def test_resources_path_can_be_a_symbol
2851
+ draw do
2852
+ resources :wiki_pages, :path => :pages
2853
+ resource :wiki_account, :path => :my_account
2854
+ end
2855
+
2856
+ get '/pages'
2857
+ assert_equal 'wiki_pages#index', @response.body
2858
+ assert_equal '/pages', wiki_pages_path
2859
+
2860
+ get '/pages/Ruby_on_Rails'
2861
+ assert_equal 'wiki_pages#show', @response.body
2862
+ assert_equal '/pages/Ruby_on_Rails', wiki_page_path(:id => 'Ruby_on_Rails')
2863
+
2864
+ get '/my_account'
2865
+ assert_equal 'wiki_accounts#show', @response.body
2866
+ assert_equal '/my_account', wiki_account_path
2867
+ end
2868
+
2869
+ def test_redirect_https
2870
+ draw do
2871
+ get 'secure', :to => redirect("/secure/login")
2872
+ end
2873
+
2874
+ with_https do
2875
+ get '/secure'
2876
+ verify_redirect 'https://www.example.com/secure/login'
2877
+ end
2878
+ end
2879
+
2880
+ def test_path_parameters_is_not_stale
2881
+ draw do
2882
+ scope '/countries/:country', :constraints => lambda { |params, req| %w(all France).include?(params[:country]) } do
2883
+ get '/', :to => 'countries#index'
2884
+ get '/cities', :to => 'countries#cities'
2885
+ end
2886
+
2887
+ get '/countries/:country/(*other)', :to => redirect{ |params, req| params[:other] ? "/countries/all/#{params[:other]}" : '/countries/all' }
2888
+ end
2889
+
2890
+ get '/countries/France'
2891
+ assert_equal 'countries#index', @response.body
2892
+
2893
+ get '/countries/France/cities'
2894
+ assert_equal 'countries#cities', @response.body
2895
+
2896
+ get '/countries/UK'
2897
+ verify_redirect 'http://www.example.com/countries/all'
2898
+
2899
+ get '/countries/UK/cities'
2900
+ verify_redirect 'http://www.example.com/countries/all/cities'
2901
+ end
2902
+
2903
+ def test_constraints_block_not_carried_to_following_routes
2904
+ draw do
2905
+ scope '/italians' do
2906
+ get '/writers', :to => 'italians#writers', :constraints => ::TestRoutingMapper::IpRestrictor
2907
+ get '/sculptors', :to => 'italians#sculptors'
2908
+ get '/painters/:painter', :to => 'italians#painters', :constraints => {:painter => /michelangelo/}
2909
+ end
2910
+ end
2911
+
2912
+ get '/italians/writers'
2913
+ assert_equal 'Not Found', @response.body
2914
+
2915
+ get '/italians/sculptors'
2916
+ assert_equal 'italians#sculptors', @response.body
2917
+
2918
+ get '/italians/painters/botticelli'
2919
+ assert_equal 'Not Found', @response.body
2920
+
2921
+ get '/italians/painters/michelangelo'
2922
+ assert_equal 'italians#painters', @response.body
2923
+ end
2924
+
2925
+ def test_custom_resource_actions_defined_using_string
2926
+ draw do
2927
+ resources :customers do
2928
+ resources :invoices do
2929
+ get "aged/:months", :on => :collection, :action => :aged, :as => :aged
2930
+ end
2931
+
2932
+ get "inactive", :on => :collection
2933
+ post "deactivate", :on => :member
2934
+ get "old", :on => :collection, :as => :stale
2935
+ end
2936
+ end
2937
+
2938
+ get '/customers/inactive'
2939
+ assert_equal 'customers#inactive', @response.body
2940
+ assert_equal '/customers/inactive', inactive_customers_path
2941
+
2942
+ post '/customers/1/deactivate'
2943
+ assert_equal 'customers#deactivate', @response.body
2944
+ assert_equal '/customers/1/deactivate', deactivate_customer_path(:id => '1')
2945
+
2946
+ get '/customers/old'
2947
+ assert_equal 'customers#old', @response.body
2948
+ assert_equal '/customers/old', stale_customers_path
2949
+
2950
+ get '/customers/1/invoices/aged/3'
2951
+ assert_equal 'invoices#aged', @response.body
2952
+ assert_equal '/customers/1/invoices/aged/3', aged_customer_invoices_path(:customer_id => '1', :months => '3')
2953
+ end
2954
+
2955
+ def test_route_defined_in_resources_scope_level
2956
+ draw do
2957
+ resources :customers do
2958
+ get "export"
2959
+ end
2960
+ end
2961
+
2962
+ get '/customers/1/export'
2963
+ assert_equal 'customers#export', @response.body
2964
+ assert_equal '/customers/1/export', customer_export_path(:customer_id => '1')
2965
+ end
2966
+
2967
+ def test_named_character_classes_in_regexp_constraints
2968
+ draw do
2969
+ get '/purchases/:token/:filename',
2970
+ :to => 'purchases#fetch',
2971
+ :token => /[[:alnum:]]{10}/,
2972
+ :filename => /(.+)/,
2973
+ :as => :purchase
2974
+ end
2975
+
2976
+ get '/purchases/315004be7e/Ruby_on_Rails_3.pdf'
2977
+ assert_equal 'purchases#fetch', @response.body
2978
+ assert_equal '/purchases/315004be7e/Ruby_on_Rails_3.pdf', purchase_path(:token => '315004be7e', :filename => 'Ruby_on_Rails_3.pdf')
2979
+ end
2980
+
2981
+ def test_nested_resource_constraints
2982
+ draw do
2983
+ resources :lists, :id => /([A-Za-z0-9]{25})|default/ do
2984
+ resources :todos, :id => /\d+/
2985
+ end
2986
+ end
2987
+
2988
+ get '/lists/01234012340123401234fffff'
2989
+ assert_equal 'lists#show', @response.body
2990
+ assert_equal '/lists/01234012340123401234fffff', list_path(:id => '01234012340123401234fffff')
2991
+
2992
+ get '/lists/01234012340123401234fffff/todos/1'
2993
+ assert_equal 'todos#show', @response.body
2994
+ assert_equal '/lists/01234012340123401234fffff/todos/1', list_todo_path(:list_id => '01234012340123401234fffff', :id => '1')
2995
+
2996
+ get '/lists/2/todos/1'
2997
+ assert_equal 'Not Found', @response.body
2998
+ assert_raises(ActionController::UrlGenerationError){ list_todo_path(:list_id => '2', :id => '1') }
2999
+ end
3000
+
3001
+ def test_redirect_argument_error
3002
+ routes = Class.new { include ActionDispatch::Routing::Redirection }.new
3003
+ assert_raises(ArgumentError) { routes.redirect Object.new }
3004
+ end
3005
+
3006
+ def test_named_route_check
3007
+ before, after = nil
3008
+
3009
+ draw do
3010
+ before = has_named_route?(:hello)
3011
+ get "/hello", as: :hello, to: "hello#world"
3012
+ after = has_named_route?(:hello)
3013
+ end
3014
+
3015
+ assert !before, "expected to not have named route :hello before route definition"
3016
+ assert after, "expected to have named route :hello after route definition"
3017
+ end
3018
+
3019
+ def test_explicitly_avoiding_the_named_route
3020
+ draw do
3021
+ scope :as => "routes" do
3022
+ get "/c/:id", :as => :collision, :to => "collision#show"
3023
+ get "/collision", :to => "collision#show"
3024
+ get "/no_collision", :to => "collision#show", :as => nil
3025
+ end
3026
+ end
3027
+
3028
+ assert !respond_to?(:routes_no_collision_path)
3029
+ end
3030
+
3031
+ def test_controller_name_with_leading_slash_raise_error
3032
+ assert_raise(ArgumentError) do
3033
+ draw { get '/feeds/:service', :to => '/feeds#show' }
3034
+ end
3035
+
3036
+ assert_raise(ArgumentError) do
3037
+ draw { get '/feeds/:service', :controller => '/feeds', :action => 'show' }
3038
+ end
3039
+
3040
+ assert_raise(ArgumentError) do
3041
+ draw { get '/api/feeds/:service', :to => '/api/feeds#show' }
3042
+ end
3043
+
3044
+ assert_raise(ArgumentError) do
3045
+ assert_deprecated do
3046
+ draw { controller("/feeds") { get '/feeds/:service', :to => :show } }
3047
+ end
3048
+ end
3049
+
3050
+ assert_raise(ArgumentError) do
3051
+ draw { resources :feeds, :controller => '/feeds' }
3052
+ end
3053
+ end
3054
+
3055
+ def test_invalid_route_name_raises_error
3056
+ assert_raise(ArgumentError) do
3057
+ draw { get '/products', :to => 'products#index', :as => 'products ' }
3058
+ end
3059
+
3060
+ assert_raise(ArgumentError) do
3061
+ draw { get '/products', :to => 'products#index', :as => ' products' }
3062
+ end
3063
+
3064
+ assert_raise(ArgumentError) do
3065
+ draw { get '/products', :to => 'products#index', :as => 'products!' }
3066
+ end
3067
+
3068
+ assert_raise(ArgumentError) do
3069
+ draw { get '/products', :to => 'products#index', :as => 'products index' }
3070
+ end
3071
+
3072
+ assert_raise(ArgumentError) do
3073
+ draw { get '/products', :to => 'products#index', :as => '1products' }
3074
+ end
3075
+ end
3076
+
3077
+ def test_duplicate_route_name_raises_error
3078
+ assert_raise(ArgumentError) do
3079
+ draw do
3080
+ get '/collision', :to => 'collision#show', :as => 'collision'
3081
+ get '/duplicate', :to => 'duplicate#show', :as => 'collision'
3082
+ end
3083
+ end
3084
+ end
3085
+
3086
+ def test_duplicate_route_name_via_resources_raises_error
3087
+ assert_raise(ArgumentError) do
3088
+ draw do
3089
+ resources :collisions
3090
+ get '/collision', :to => 'collision#show', :as => 'collision'
3091
+ end
3092
+ end
3093
+ end
3094
+
3095
+ def test_nested_route_in_nested_resource
3096
+ draw do
3097
+ resources :posts, :only => [:index, :show] do
3098
+ resources :comments, :except => :destroy do
3099
+ get "views" => "comments#views", :as => :views
3100
+ end
3101
+ end
3102
+ end
3103
+
3104
+ get "/posts/1/comments/2/views"
3105
+ assert_equal "comments#views", @response.body
3106
+ assert_equal "/posts/1/comments/2/views", post_comment_views_path(:post_id => '1', :comment_id => '2')
3107
+ end
3108
+
3109
+ def test_root_in_deeply_nested_scope
3110
+ draw do
3111
+ resources :posts, :only => [:index, :show] do
3112
+ namespace :admin do
3113
+ root :to => "index#index"
3114
+ end
3115
+ end
3116
+ end
3117
+
3118
+ get "/posts/1/admin"
3119
+ assert_equal "admin/index#index", @response.body
3120
+ assert_equal "/posts/1/admin", post_admin_root_path(:post_id => '1')
3121
+ end
3122
+
3123
+ def test_custom_param
3124
+ draw do
3125
+ resources :profiles, :param => :username do
3126
+ get :details, :on => :member
3127
+ resources :messages
3128
+ end
3129
+ end
3130
+
3131
+ get '/profiles/bob'
3132
+ assert_equal 'profiles#show', @response.body
3133
+ assert_equal 'bob', @request.params[:username]
3134
+
3135
+ get '/profiles/bob/details'
3136
+ assert_equal 'bob', @request.params[:username]
3137
+
3138
+ get '/profiles/bob/messages/34'
3139
+ assert_equal 'bob', @request.params[:profile_username]
3140
+ assert_equal '34', @request.params[:id]
3141
+ end
3142
+
3143
+ def test_custom_param_constraint
3144
+ draw do
3145
+ resources :profiles, :param => :username, :username => /[a-z]+/ do
3146
+ get :details, :on => :member
3147
+ resources :messages
3148
+ end
3149
+ end
3150
+
3151
+ get '/profiles/bob1'
3152
+ assert_equal 404, @response.status
3153
+
3154
+ get '/profiles/bob1/details'
3155
+ assert_equal 404, @response.status
3156
+
3157
+ get '/profiles/bob1/messages/34'
3158
+ assert_equal 404, @response.status
3159
+ end
3160
+
3161
+ def test_shallow_custom_param
3162
+ draw do
3163
+ resources :orders do
3164
+ constraints :download => /[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}/ do
3165
+ resources :downloads, :param => :download, :shallow => true
3166
+ end
3167
+ end
3168
+ end
3169
+
3170
+ get '/downloads/0c0c0b68-d24b-11e1-a861-001ff3fffe6f.zip'
3171
+ assert_equal 'downloads#show', @response.body
3172
+ assert_equal '0c0c0b68-d24b-11e1-a861-001ff3fffe6f', @request.params[:download]
3173
+ end
3174
+
3175
+ def test_action_from_path_is_not_frozen
3176
+ draw do
3177
+ get 'search' => 'search'
3178
+ end
3179
+
3180
+ get '/search'
3181
+ assert !@request.params[:action].frozen?
3182
+ end
3183
+
3184
+ def test_multiple_positional_args_with_the_same_name
3185
+ draw do
3186
+ get '/downloads/:id/:id.tar' => 'downloads#show', as: :download, format: false
3187
+ end
3188
+
3189
+ expected_params = {
3190
+ controller: 'downloads',
3191
+ action: 'show',
3192
+ id: '1'
3193
+ }
3194
+
3195
+ get '/downloads/1/1.tar'
3196
+ assert_equal 'downloads#show', @response.body
3197
+ assert_equal expected_params, @request.path_parameters
3198
+ assert_equal '/downloads/1/1.tar', download_path('1')
3199
+ assert_equal '/downloads/1/1.tar', download_path('1', '1')
3200
+ end
3201
+
3202
+ def test_absolute_controller_namespace
3203
+ draw do
3204
+ namespace :foo do
3205
+ get '/', to: '/bar#index', as: 'root'
3206
+ end
3207
+ end
3208
+
3209
+ get '/foo'
3210
+ assert_equal 'bar#index', @response.body
3211
+ assert_equal '/foo', foo_root_path
3212
+ end
3213
+
3214
+ def test_namespace_as_controller
3215
+ draw do
3216
+ namespace :foo do
3217
+ get '/', to: '/bar#index', as: 'root'
3218
+ end
3219
+ end
3220
+
3221
+ get '/foo'
3222
+ assert_equal 'bar#index', @response.body
3223
+ assert_equal '/foo', foo_root_path
3224
+ end
3225
+
3226
+ def test_trailing_slash
3227
+ draw do
3228
+ resources :streams
3229
+ end
3230
+
3231
+ get '/streams'
3232
+ assert @response.ok?, 'route without trailing slash should work'
3233
+
3234
+ get '/streams/'
3235
+ assert @response.ok?, 'route with trailing slash should work'
3236
+
3237
+ get '/streams?foobar'
3238
+ assert @response.ok?, 'route without trailing slash and with QUERY_STRING should work'
3239
+
3240
+ get '/streams/?foobar'
3241
+ assert @response.ok?, 'route with trailing slash and with QUERY_STRING should work'
3242
+ end
3243
+
3244
+ def test_route_with_dashes_in_path
3245
+ draw do
3246
+ get '/contact-us', to: 'pages#contact_us'
3247
+ end
3248
+
3249
+ get '/contact-us'
3250
+ assert_equal 'pages#contact_us', @response.body
3251
+ assert_equal '/contact-us', contact_us_path
3252
+ end
3253
+
3254
+ def test_shorthand_route_with_dashes_in_path
3255
+ draw do
3256
+ get '/about-us/index'
3257
+ end
3258
+
3259
+ get '/about-us/index'
3260
+ assert_equal 'about_us#index', @response.body
3261
+ assert_equal '/about-us/index', about_us_index_path
3262
+ end
3263
+
3264
+ def test_resource_routes_with_dashes_in_path
3265
+ draw do
3266
+ resources :photos, only: [:show] do
3267
+ get 'user-favorites', on: :collection
3268
+ get 'preview-photo', on: :member
3269
+ get 'summary-text'
3270
+ end
3271
+ end
3272
+
3273
+ get '/photos/user-favorites'
3274
+ assert_equal 'photos#user_favorites', @response.body
3275
+ assert_equal '/photos/user-favorites', user_favorites_photos_path
3276
+
3277
+ get '/photos/1/preview-photo'
3278
+ assert_equal 'photos#preview_photo', @response.body
3279
+ assert_equal '/photos/1/preview-photo', preview_photo_photo_path('1')
3280
+
3281
+ get '/photos/1/summary-text'
3282
+ assert_equal 'photos#summary_text', @response.body
3283
+ assert_equal '/photos/1/summary-text', photo_summary_text_path('1')
3284
+
3285
+ get '/photos/1'
3286
+ assert_equal 'photos#show', @response.body
3287
+ assert_equal '/photos/1', photo_path('1')
3288
+ end
3289
+
3290
+ def test_shallow_path_inside_namespace_is_not_added_twice
3291
+ draw do
3292
+ namespace :admin do
3293
+ shallow do
3294
+ resources :posts do
3295
+ resources :comments
3296
+ end
3297
+ end
3298
+ end
3299
+ end
3300
+
3301
+ get '/admin/posts/1/comments'
3302
+ assert_equal 'admin/comments#index', @response.body
3303
+ assert_equal '/admin/posts/1/comments', admin_post_comments_path('1')
3304
+ end
3305
+
3306
+ def test_mix_string_to_controller_action
3307
+ draw do
3308
+ get '/projects', controller: 'project_files',
3309
+ action: 'index',
3310
+ to: 'comments#index'
3311
+ end
3312
+ get '/projects'
3313
+ assert_equal 'comments#index', @response.body
3314
+ end
3315
+
3316
+ def test_mix_string_to_controller
3317
+ draw do
3318
+ get '/projects', controller: 'project_files',
3319
+ to: 'comments#index'
3320
+ end
3321
+ get '/projects'
3322
+ assert_equal 'comments#index', @response.body
3323
+ end
3324
+
3325
+ def test_mix_string_to_action
3326
+ draw do
3327
+ get '/projects', action: 'index',
3328
+ to: 'comments#index'
3329
+ end
3330
+ get '/projects'
3331
+ assert_equal 'comments#index', @response.body
3332
+ end
3333
+
3334
+ def test_mix_symbol_to_controller_action
3335
+ assert_deprecated do
3336
+ draw do
3337
+ get '/projects', controller: 'project_files',
3338
+ action: 'index',
3339
+ to: :show
3340
+ end
3341
+ end
3342
+ get '/projects'
3343
+ assert_equal 'project_files#show', @response.body
3344
+ end
3345
+
3346
+ def test_mix_string_to_controller_action_no_hash
3347
+ assert_deprecated do
3348
+ draw do
3349
+ get '/projects', controller: 'project_files',
3350
+ action: 'index',
3351
+ to: 'show'
3352
+ end
3353
+ end
3354
+ get '/projects'
3355
+ assert_equal 'show#index', @response.body
3356
+ end
3357
+
3358
+ def test_shallow_path_and_prefix_are_not_added_to_non_shallow_routes
3359
+ draw do
3360
+ scope shallow_path: 'projects', shallow_prefix: 'project' do
3361
+ resources :projects do
3362
+ resources :files, controller: 'project_files', shallow: true
3363
+ end
3364
+ end
3365
+ end
3366
+
3367
+ get '/projects'
3368
+ assert_equal 'projects#index', @response.body
3369
+ assert_equal '/projects', projects_path
3370
+
3371
+ get '/projects/new'
3372
+ assert_equal 'projects#new', @response.body
3373
+ assert_equal '/projects/new', new_project_path
3374
+
3375
+ post '/projects'
3376
+ assert_equal 'projects#create', @response.body
3377
+
3378
+ get '/projects/1'
3379
+ assert_equal 'projects#show', @response.body
3380
+ assert_equal '/projects/1', project_path('1')
3381
+
3382
+ get '/projects/1/edit'
3383
+ assert_equal 'projects#edit', @response.body
3384
+ assert_equal '/projects/1/edit', edit_project_path('1')
3385
+
3386
+ patch '/projects/1'
3387
+ assert_equal 'projects#update', @response.body
3388
+
3389
+ delete '/projects/1'
3390
+ assert_equal 'projects#destroy', @response.body
3391
+
3392
+ get '/projects/1/files'
3393
+ assert_equal 'project_files#index', @response.body
3394
+ assert_equal '/projects/1/files', project_files_path('1')
3395
+
3396
+ get '/projects/1/files/new'
3397
+ assert_equal 'project_files#new', @response.body
3398
+ assert_equal '/projects/1/files/new', new_project_file_path('1')
3399
+
3400
+ post '/projects/1/files'
3401
+ assert_equal 'project_files#create', @response.body
3402
+
3403
+ get '/projects/files/2'
3404
+ assert_equal 'project_files#show', @response.body
3405
+ assert_equal '/projects/files/2', project_file_path('2')
3406
+
3407
+ get '/projects/files/2/edit'
3408
+ assert_equal 'project_files#edit', @response.body
3409
+ assert_equal '/projects/files/2/edit', edit_project_file_path('2')
3410
+
3411
+ patch '/projects/files/2'
3412
+ assert_equal 'project_files#update', @response.body
3413
+
3414
+ delete '/projects/files/2'
3415
+ assert_equal 'project_files#destroy', @response.body
3416
+ end
3417
+
3418
+ def test_scope_path_is_copied_to_shallow_path
3419
+ draw do
3420
+ scope path: 'foo' do
3421
+ resources :posts do
3422
+ resources :comments, shallow: true
3423
+ end
3424
+ end
3425
+ end
3426
+
3427
+ assert_equal '/foo/comments/1', comment_path('1')
3428
+ end
3429
+
3430
+ def test_scope_as_is_copied_to_shallow_prefix
3431
+ draw do
3432
+ scope as: 'foo' do
3433
+ resources :posts do
3434
+ resources :comments, shallow: true
3435
+ end
3436
+ end
3437
+ end
3438
+
3439
+ assert_equal '/comments/1', foo_comment_path('1')
3440
+ end
3441
+
3442
+ def test_scope_shallow_prefix_is_not_overwritten_by_as
3443
+ draw do
3444
+ scope as: 'foo', shallow_prefix: 'bar' do
3445
+ resources :posts do
3446
+ resources :comments, shallow: true
3447
+ end
3448
+ end
3449
+ end
3450
+
3451
+ assert_equal '/comments/1', bar_comment_path('1')
3452
+ end
3453
+
3454
+ def test_scope_shallow_path_is_not_overwritten_by_path
3455
+ draw do
3456
+ scope path: 'foo', shallow_path: 'bar' do
3457
+ resources :posts do
3458
+ resources :comments, shallow: true
3459
+ end
3460
+ end
3461
+ end
3462
+
3463
+ assert_equal '/bar/comments/1', comment_path('1')
3464
+ end
3465
+
3466
+ def test_head_fetch_with_mount_on_root
3467
+ draw do
3468
+ get '/home' => 'test#index'
3469
+ mount lambda { |env| [404, {"Content-Type" => "text/html"}, ["testing"]] }, at: '/'
3470
+ end
3471
+ head '/home'
3472
+ assert_response :success
3473
+
3474
+ head '/'
3475
+ assert_response :not_found
3476
+ end
3477
+
3478
+ private
3479
+
3480
+ def draw(&block)
3481
+ self.class.stub_controllers do |routes|
3482
+ routes.default_url_options = { host: 'www.example.com' }
3483
+ routes.draw(&block)
3484
+ @app = RoutedRackApp.new routes
3485
+ end
3486
+ end
3487
+
3488
+ def url_for(options = {})
3489
+ @app.routes.url_helpers.url_for(options)
3490
+ end
3491
+
3492
+ def method_missing(method, *args, &block)
3493
+ if method.to_s =~ /_(path|url)$/
3494
+ @app.routes.url_helpers.send(method, *args, &block)
3495
+ else
3496
+ super
3497
+ end
3498
+ end
3499
+
3500
+ def with_https
3501
+ old_https = https?
3502
+ https!
3503
+ yield
3504
+ ensure
3505
+ https!(old_https)
3506
+ end
3507
+
3508
+ def verify_redirect(url, status=301)
3509
+ assert_equal status, @response.status
3510
+ assert_equal url, @response.headers['Location']
3511
+ assert_equal expected_redirect_body(url), @response.body
3512
+ end
3513
+
3514
+ def expected_redirect_body(url)
3515
+ %(<html><body>You are being <a href="#{ERB::Util.h(url)}">redirected</a>.</body></html>)
3516
+ end
3517
+ end
3518
+
3519
+ class TestAltApp < ActionDispatch::IntegrationTest
3520
+ class AltRequest
3521
+ attr_accessor :path_parameters, :path_info, :script_name
3522
+ attr_reader :env
3523
+
3524
+ def initialize(env)
3525
+ @path_parameters = {}
3526
+ @env = env
3527
+ @path_info = "/"
3528
+ @script_name = ""
3529
+ end
3530
+
3531
+ def request_method
3532
+ "GET"
3533
+ end
3534
+
3535
+ def ip
3536
+ "127.0.0.1"
3537
+ end
3538
+
3539
+ def x_header
3540
+ @env["HTTP_X_HEADER"] || ""
3541
+ end
3542
+ end
3543
+
3544
+ class XHeader
3545
+ def call(env)
3546
+ [200, {"Content-Type" => "text/html"}, ["XHeader"]]
3547
+ end
3548
+ end
3549
+
3550
+ class AltApp
3551
+ def call(env)
3552
+ [200, {"Content-Type" => "text/html"}, ["Alternative App"]]
3553
+ end
3554
+ end
3555
+
3556
+ AltRoutes = ActionDispatch::Routing::RouteSet.new(AltRequest)
3557
+ AltRoutes.draw do
3558
+ get "/" => TestAltApp::XHeader.new, :constraints => {:x_header => /HEADER/}
3559
+ get "/" => TestAltApp::AltApp.new
3560
+ end
3561
+
3562
+ APP = build_app AltRoutes
3563
+
3564
+ def app
3565
+ APP
3566
+ end
3567
+
3568
+ def test_alt_request_without_header
3569
+ get "/"
3570
+ assert_equal "Alternative App", @response.body
3571
+ end
3572
+
3573
+ def test_alt_request_with_matched_header
3574
+ get "/", {}, "HTTP_X_HEADER" => "HEADER"
3575
+ assert_equal "XHeader", @response.body
3576
+ end
3577
+
3578
+ def test_alt_request_with_unmatched_header
3579
+ get "/", {}, "HTTP_X_HEADER" => "NON_MATCH"
3580
+ assert_equal "Alternative App", @response.body
3581
+ end
3582
+ end
3583
+
3584
+ class TestAppendingRoutes < ActionDispatch::IntegrationTest
3585
+ def simple_app(resp)
3586
+ lambda { |e| [ 200, { 'Content-Type' => 'text/plain' }, [resp] ] }
3587
+ end
3588
+
3589
+ def setup
3590
+ super
3591
+ s = self
3592
+ routes = ActionDispatch::Routing::RouteSet.new
3593
+ routes.append do
3594
+ get '/hello' => s.simple_app('fail')
3595
+ get '/goodbye' => s.simple_app('goodbye')
3596
+ end
3597
+
3598
+ routes.draw do
3599
+ get '/hello' => s.simple_app('hello')
3600
+ end
3601
+ @app = self.class.build_app routes
3602
+ end
3603
+
3604
+ def test_goodbye_should_be_available
3605
+ get '/goodbye'
3606
+ assert_equal 'goodbye', @response.body
3607
+ end
3608
+
3609
+ def test_hello_should_not_be_overwritten
3610
+ get '/hello'
3611
+ assert_equal 'hello', @response.body
3612
+ end
3613
+
3614
+ def test_missing_routes_are_still_missing
3615
+ get '/random'
3616
+ assert_equal 404, @response.status
3617
+ end
3618
+ end
3619
+
3620
+ class TestNamespaceWithControllerOption < ActionDispatch::IntegrationTest
3621
+ module ::Admin
3622
+ class StorageFilesController < ActionController::Base
3623
+ def index
3624
+ render :text => "admin/storage_files#index"
3625
+ end
3626
+ end
3627
+ end
3628
+
3629
+ def draw(&block)
3630
+ routes = ActionDispatch::Routing::RouteSet.new
3631
+ routes.draw(&block)
3632
+ @app = self.class.build_app routes
3633
+ end
3634
+
3635
+ def test_missing_controller
3636
+ ex = assert_raises(ArgumentError) {
3637
+ draw do
3638
+ get '/foo/bar', :action => :index
3639
+ end
3640
+ }
3641
+ assert_match(/Missing :controller/, ex.message)
3642
+ end
3643
+
3644
+ def test_missing_action
3645
+ ex = assert_raises(ArgumentError) {
3646
+ assert_deprecated do
3647
+ draw do
3648
+ get '/foo/bar', :to => 'foo'
3649
+ end
3650
+ end
3651
+ }
3652
+ assert_match(/Missing :action/, ex.message)
3653
+ end
3654
+
3655
+ def test_missing_action_on_hash
3656
+ ex = assert_raises(ArgumentError) {
3657
+ draw do
3658
+ get '/foo/bar', :to => 'foo#'
3659
+ end
3660
+ }
3661
+ assert_match(/Missing :action/, ex.message)
3662
+ end
3663
+
3664
+ def test_valid_controller_options_inside_namespace
3665
+ draw do
3666
+ namespace :admin do
3667
+ resources :storage_files, :controller => "storage_files"
3668
+ end
3669
+ end
3670
+
3671
+ get '/admin/storage_files'
3672
+ assert_equal "admin/storage_files#index", @response.body
3673
+ end
3674
+
3675
+ def test_resources_with_valid_namespaced_controller_option
3676
+ draw do
3677
+ resources :storage_files, :controller => 'admin/storage_files'
3678
+ end
3679
+
3680
+ get '/storage_files'
3681
+ assert_equal "admin/storage_files#index", @response.body
3682
+ end
3683
+
3684
+ def test_warn_with_ruby_constant_syntax_controller_option
3685
+ e = assert_raise(ArgumentError) do
3686
+ draw do
3687
+ namespace :admin do
3688
+ resources :storage_files, :controller => "StorageFiles"
3689
+ end
3690
+ end
3691
+ end
3692
+
3693
+ assert_match "'admin/StorageFiles' is not a supported controller name", e.message
3694
+ end
3695
+
3696
+ def test_warn_with_ruby_constant_syntax_namespaced_controller_option
3697
+ e = assert_raise(ArgumentError) do
3698
+ draw do
3699
+ resources :storage_files, :controller => 'Admin::StorageFiles'
3700
+ end
3701
+ end
3702
+
3703
+ assert_match "'Admin::StorageFiles' is not a supported controller name", e.message
3704
+ end
3705
+
3706
+ def test_warn_with_ruby_constant_syntax_no_colons
3707
+ e = assert_raise(ArgumentError) do
3708
+ draw do
3709
+ resources :storage_files, :controller => 'Admin'
3710
+ end
3711
+ end
3712
+
3713
+ assert_match "'Admin' is not a supported controller name", e.message
3714
+ end
3715
+ end
3716
+
3717
+ class TestDefaultScope < ActionDispatch::IntegrationTest
3718
+ module ::Blog
3719
+ class PostsController < ActionController::Base
3720
+ def index
3721
+ render :text => "blog/posts#index"
3722
+ end
3723
+ end
3724
+ end
3725
+
3726
+ DefaultScopeRoutes = ActionDispatch::Routing::RouteSet.new
3727
+ DefaultScopeRoutes.default_scope = {:module => :blog}
3728
+ DefaultScopeRoutes.draw do
3729
+ resources :posts
3730
+ end
3731
+
3732
+ APP = build_app DefaultScopeRoutes
3733
+
3734
+ def app
3735
+ APP
3736
+ end
3737
+
3738
+ include DefaultScopeRoutes.url_helpers
3739
+
3740
+ def test_default_scope
3741
+ get '/posts'
3742
+ assert_equal "blog/posts#index", @response.body
3743
+ end
3744
+ end
3745
+
3746
+ class TestHttpMethods < ActionDispatch::IntegrationTest
3747
+ RFC2616 = %w(OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT)
3748
+ RFC2518 = %w(PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK)
3749
+ RFC3253 = %w(VERSION-CONTROL REPORT CHECKOUT CHECKIN UNCHECKOUT MKWORKSPACE UPDATE LABEL MERGE BASELINE-CONTROL MKACTIVITY)
3750
+ RFC3648 = %w(ORDERPATCH)
3751
+ RFC3744 = %w(ACL)
3752
+ RFC5323 = %w(SEARCH)
3753
+ RFC4791 = %w(MKCALENDAR)
3754
+ RFC5789 = %w(PATCH)
3755
+
3756
+ def simple_app(response)
3757
+ lambda { |env| [ 200, { 'Content-Type' => 'text/plain' }, [response] ] }
3758
+ end
3759
+
3760
+ attr_reader :app
3761
+
3762
+ def setup
3763
+ s = self
3764
+ routes = ActionDispatch::Routing::RouteSet.new
3765
+ @app = RoutedRackApp.new routes
3766
+
3767
+ routes.draw do
3768
+ (RFC2616 + RFC2518 + RFC3253 + RFC3648 + RFC3744 + RFC5323 + RFC4791 + RFC5789).each do |method|
3769
+ match '/' => s.simple_app(method), :via => method.underscore.to_sym
3770
+ end
3771
+ end
3772
+ end
3773
+
3774
+ (RFC2616 + RFC2518 + RFC3253 + RFC3648 + RFC3744 + RFC5323 + RFC4791 + RFC5789).each do |method|
3775
+ test "request method #{method.underscore} can be matched" do
3776
+ get '/', nil, 'REQUEST_METHOD' => method
3777
+ assert_equal method, @response.body
3778
+ end
3779
+ end
3780
+ end
3781
+
3782
+ class TestUriPathEscaping < ActionDispatch::IntegrationTest
3783
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3784
+ app.draw do
3785
+ get '/:segment' => lambda { |env|
3786
+ path_params = env['action_dispatch.request.path_parameters']
3787
+ [200, { 'Content-Type' => 'text/plain' }, [path_params[:segment]]]
3788
+ }, :as => :segment
3789
+
3790
+ get '/*splat' => lambda { |env|
3791
+ path_params = env['action_dispatch.request.path_parameters']
3792
+ [200, { 'Content-Type' => 'text/plain' }, [path_params[:splat]]]
3793
+ }, :as => :splat
3794
+ end
3795
+ end
3796
+
3797
+ include Routes.url_helpers
3798
+ APP = build_app Routes
3799
+ def app; APP end
3800
+
3801
+ test 'escapes slash in generated path segment' do
3802
+ assert_equal '/a%20b%2Fc+d', segment_path(:segment => 'a b/c+d')
3803
+ end
3804
+
3805
+ test 'unescapes recognized path segment' do
3806
+ get '/a%20b%2Fc+d'
3807
+ assert_equal 'a b/c+d', @response.body
3808
+ end
3809
+
3810
+ test 'does not escape slash in generated path splat' do
3811
+ assert_equal '/a%20b/c+d', splat_path(:splat => 'a b/c+d')
3812
+ end
3813
+
3814
+ test 'unescapes recognized path splat' do
3815
+ get '/a%20b/c+d'
3816
+ assert_equal 'a b/c+d', @response.body
3817
+ end
3818
+ end
3819
+
3820
+ class TestUnicodePaths < ActionDispatch::IntegrationTest
3821
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3822
+ app.draw do
3823
+ get "/ほげ" => lambda { |env|
3824
+ [200, { 'Content-Type' => 'text/plain' }, []]
3825
+ }, :as => :unicode_path
3826
+ end
3827
+ end
3828
+
3829
+ include Routes.url_helpers
3830
+ APP = build_app Routes
3831
+ def app; APP end
3832
+
3833
+ test 'recognizes unicode path' do
3834
+ get "/#{Rack::Utils.escape("ほげ")}"
3835
+ assert_equal "200", @response.code
3836
+ end
3837
+ end
3838
+
3839
+ class TestMultipleNestedController < ActionDispatch::IntegrationTest
3840
+ module ::Foo
3841
+ module Bar
3842
+ class BazController < ActionController::Base
3843
+ def index
3844
+ render :inline => "<%= url_for :controller => '/pooh', :action => 'index' %>"
3845
+ end
3846
+ end
3847
+ end
3848
+ end
3849
+
3850
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3851
+ app.draw do
3852
+ namespace :foo do
3853
+ namespace :bar do
3854
+ get "baz" => "baz#index"
3855
+ end
3856
+ end
3857
+ get "pooh" => "pooh#index"
3858
+ end
3859
+ end
3860
+
3861
+ include Routes.url_helpers
3862
+ APP = build_app Routes
3863
+ def app; APP end
3864
+
3865
+ test "controller option which starts with '/' from multiple nested controller" do
3866
+ get "/foo/bar/baz"
3867
+ assert_equal "/pooh", @response.body
3868
+ end
3869
+ end
3870
+
3871
+ class TestTildeAndMinusPaths < ActionDispatch::IntegrationTest
3872
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3873
+ app.draw do
3874
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
3875
+
3876
+ get "/~user" => ok
3877
+ get "/young-and-fine" => ok
3878
+ end
3879
+ end
3880
+
3881
+ include Routes.url_helpers
3882
+ APP = build_app Routes
3883
+ def app; APP end
3884
+
3885
+ test 'recognizes tilde path' do
3886
+ get "/~user"
3887
+ assert_equal "200", @response.code
3888
+ end
3889
+
3890
+ test 'recognizes minus path' do
3891
+ get "/young-and-fine"
3892
+ assert_equal "200", @response.code
3893
+ end
3894
+
3895
+ end
3896
+
3897
+ class TestRedirectInterpolation < ActionDispatch::IntegrationTest
3898
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3899
+ app.draw do
3900
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
3901
+
3902
+ get "/foo/:id" => redirect("/foo/bar/%{id}")
3903
+ get "/bar/:id" => redirect(:path => "/foo/bar/%{id}")
3904
+ get "/baz/:id" => redirect("/baz?id=%{id}&foo=?&bar=1#id-%{id}")
3905
+ get "/foo/bar/:id" => ok
3906
+ get "/baz" => ok
3907
+ end
3908
+ end
3909
+
3910
+ APP = build_app Routes
3911
+ def app; APP end
3912
+
3913
+ test "redirect escapes interpolated parameters with redirect proc" do
3914
+ get "/foo/1%3E"
3915
+ verify_redirect "http://www.example.com/foo/bar/1%3E"
3916
+ end
3917
+
3918
+ test "redirect escapes interpolated parameters with option proc" do
3919
+ get "/bar/1%3E"
3920
+ verify_redirect "http://www.example.com/foo/bar/1%3E"
3921
+ end
3922
+
3923
+ test "path redirect escapes interpolated parameters correctly" do
3924
+ get "/foo/1%201"
3925
+ verify_redirect "http://www.example.com/foo/bar/1%201"
3926
+
3927
+ get "/baz/1%201"
3928
+ verify_redirect "http://www.example.com/baz?id=1+1&foo=?&bar=1#id-1%201"
3929
+ end
3930
+
3931
+ private
3932
+ def verify_redirect(url, status=301)
3933
+ assert_equal status, @response.status
3934
+ assert_equal url, @response.headers['Location']
3935
+ assert_equal expected_redirect_body(url), @response.body
3936
+ end
3937
+
3938
+ def expected_redirect_body(url)
3939
+ %(<html><body>You are being <a href="#{ERB::Util.h(url)}">redirected</a>.</body></html>)
3940
+ end
3941
+ end
3942
+
3943
+ class TestConstraintsAccessingParameters < ActionDispatch::IntegrationTest
3944
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3945
+ app.draw do
3946
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
3947
+
3948
+ get "/:foo" => ok, :constraints => lambda { |r| r.params[:foo] == 'foo' }
3949
+ get "/:bar" => ok
3950
+ end
3951
+ end
3952
+
3953
+ APP = build_app Routes
3954
+ def app; APP end
3955
+
3956
+ test "parameters are reset between constraint checks" do
3957
+ get "/bar"
3958
+ assert_equal nil, @request.params[:foo]
3959
+ assert_equal "bar", @request.params[:bar]
3960
+ end
3961
+ end
3962
+
3963
+ class TestGlobRoutingMapper < ActionDispatch::IntegrationTest
3964
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3965
+ app.draw do
3966
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
3967
+
3968
+ get "/*id" => redirect("/not_cars"), :constraints => {id: /dummy/}
3969
+ get "/cars" => ok
3970
+ end
3971
+ end
3972
+
3973
+ #include Routes.url_helpers
3974
+ APP = build_app Routes
3975
+ def app; APP end
3976
+
3977
+ def test_glob_constraint
3978
+ get "/dummy"
3979
+ assert_equal "301", @response.code
3980
+ assert_equal "/not_cars", @response.header['Location'].match('/[^/]+$')[0]
3981
+ end
3982
+
3983
+ def test_glob_constraint_skip_route
3984
+ get "/cars"
3985
+ assert_equal "200", @response.code
3986
+ end
3987
+ def test_glob_constraint_skip_all
3988
+ get "/missing"
3989
+ assert_equal "404", @response.code
3990
+ end
3991
+ end
3992
+
3993
+ class TestOptimizedNamedRoutes < ActionDispatch::IntegrationTest
3994
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
3995
+ app.draw do
3996
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
3997
+ get '/foo' => ok, as: :foo
3998
+ get '/post(/:action(/:id))' => ok, as: :posts
3999
+ get '/:foo/:foo_type/bars/:id' => ok, as: :bar
4000
+ get '/projects/:id.:format' => ok, as: :project
4001
+ get '/pages/:id' => ok, as: :page
4002
+ get '/wiki/*page' => ok, as: :wiki
4003
+ end
4004
+ end
4005
+
4006
+ include Routes.url_helpers
4007
+ APP = build_app Routes
4008
+ def app; APP end
4009
+
4010
+ test 'enabled when not mounted and default_url_options is empty' do
4011
+ assert Routes.url_helpers.optimize_routes_generation?
4012
+ end
4013
+
4014
+ test 'named route called as singleton method' do
4015
+ assert_equal '/foo', Routes.url_helpers.foo_path
4016
+ end
4017
+
4018
+ test 'named route called on included module' do
4019
+ assert_equal '/foo', foo_path
4020
+ end
4021
+
4022
+ test 'nested optional segments are removed' do
4023
+ assert_equal '/post', Routes.url_helpers.posts_path
4024
+ assert_equal '/post', posts_path
4025
+ end
4026
+
4027
+ test 'segments with same prefix are replaced correctly' do
4028
+ assert_equal '/foo/baz/bars/1', Routes.url_helpers.bar_path('foo', 'baz', '1')
4029
+ assert_equal '/foo/baz/bars/1', bar_path('foo', 'baz', '1')
4030
+ end
4031
+
4032
+ test 'segments separated with a period are replaced correctly' do
4033
+ assert_equal '/projects/1.json', Routes.url_helpers.project_path(1, :json)
4034
+ assert_equal '/projects/1.json', project_path(1, :json)
4035
+ end
4036
+
4037
+ test 'segments with question marks are escaped' do
4038
+ assert_equal '/pages/foo%3Fbar', Routes.url_helpers.page_path('foo?bar')
4039
+ assert_equal '/pages/foo%3Fbar', page_path('foo?bar')
4040
+ end
4041
+
4042
+ test 'segments with slashes are escaped' do
4043
+ assert_equal '/pages/foo%2Fbar', Routes.url_helpers.page_path('foo/bar')
4044
+ assert_equal '/pages/foo%2Fbar', page_path('foo/bar')
4045
+ end
4046
+
4047
+ test 'glob segments with question marks are escaped' do
4048
+ assert_equal '/wiki/foo%3Fbar', Routes.url_helpers.wiki_path('foo?bar')
4049
+ assert_equal '/wiki/foo%3Fbar', wiki_path('foo?bar')
4050
+ end
4051
+
4052
+ test 'glob segments with slashes are not escaped' do
4053
+ assert_equal '/wiki/foo/bar', Routes.url_helpers.wiki_path('foo/bar')
4054
+ assert_equal '/wiki/foo/bar', wiki_path('foo/bar')
4055
+ end
4056
+ end
4057
+
4058
+ class TestNamedRouteUrlHelpers < ActionDispatch::IntegrationTest
4059
+ class CategoriesController < ActionController::Base
4060
+ def show
4061
+ render :text => "categories#show"
4062
+ end
4063
+ end
4064
+
4065
+ class ProductsController < ActionController::Base
4066
+ def show
4067
+ render :text => "products#show"
4068
+ end
4069
+ end
4070
+
4071
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
4072
+ app.draw do
4073
+ scope :module => "test_named_route_url_helpers" do
4074
+ get "/categories/:id" => 'categories#show', :as => :category
4075
+ get "/products/:id" => 'products#show', :as => :product
4076
+ end
4077
+ end
4078
+ end
4079
+
4080
+ APP = build_app Routes
4081
+ def app; APP end
4082
+
4083
+ include Routes.url_helpers
4084
+
4085
+ test "url helpers do not ignore nil parameters when using non-optimized routes" do
4086
+ Routes.stubs(:optimize_routes_generation?).returns(false)
4087
+
4088
+ get "/categories/1"
4089
+ assert_response :success
4090
+ assert_raises(ActionController::UrlGenerationError) { product_path(nil) }
4091
+ end
4092
+ end
4093
+
4094
+ class TestUrlConstraints < ActionDispatch::IntegrationTest
4095
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
4096
+ app.draw do
4097
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
4098
+
4099
+ constraints :subdomain => 'admin' do
4100
+ get '/' => ok, :as => :admin_root
4101
+ end
4102
+
4103
+ scope :constraints => { :protocol => 'https://' } do
4104
+ get '/' => ok, :as => :secure_root
4105
+ end
4106
+
4107
+ get '/' => ok, :as => :alternate_root, :constraints => { :port => 8080 }
4108
+
4109
+ get '/search' => ok, :constraints => { :subdomain => false }
4110
+
4111
+ get '/logs' => ok, :constraints => { :subdomain => true }
4112
+ end
4113
+ end
4114
+
4115
+ include Routes.url_helpers
4116
+ APP = build_app Routes
4117
+ def app; APP end
4118
+
4119
+ test "constraints are copied to defaults when using constraints method" do
4120
+ assert_equal 'http://admin.example.com/', admin_root_url
4121
+
4122
+ get 'http://admin.example.com/'
4123
+ assert_response :success
4124
+ end
4125
+
4126
+ test "constraints are copied to defaults when using scope constraints hash" do
4127
+ assert_equal 'https://www.example.com/', secure_root_url
4128
+
4129
+ get 'https://www.example.com/'
4130
+ assert_response :success
4131
+ end
4132
+
4133
+ test "constraints are copied to defaults when using route constraints hash" do
4134
+ assert_equal 'http://www.example.com:8080/', alternate_root_url
4135
+
4136
+ get 'http://www.example.com:8080/'
4137
+ assert_response :success
4138
+ end
4139
+
4140
+ test "false constraint expressions check for absence of values" do
4141
+ get 'http://example.com/search'
4142
+ assert_response :success
4143
+ assert_equal 'http://example.com/search', search_url
4144
+
4145
+ get 'http://api.example.com/search'
4146
+ assert_response :not_found
4147
+ end
4148
+
4149
+ test "true constraint expressions check for presence of values" do
4150
+ get 'http://api.example.com/logs'
4151
+ assert_response :success
4152
+ assert_equal 'http://api.example.com/logs', logs_url
4153
+
4154
+ get 'http://example.com/logs'
4155
+ assert_response :not_found
4156
+ end
4157
+ end
4158
+
4159
+ class TestInvalidUrls < ActionDispatch::IntegrationTest
4160
+ class FooController < ActionController::Base
4161
+ def show
4162
+ render :text => "foo#show"
4163
+ end
4164
+ end
4165
+
4166
+ test "invalid UTF-8 encoding returns a 400 Bad Request" do
4167
+ with_routing do |set|
4168
+ set.draw do
4169
+ get "/bar/:id", :to => redirect("/foo/show/%{id}")
4170
+ get "/foo/show(/:id)", :to => "test_invalid_urls/foo#show"
4171
+ get "/foo(/:action(/:id))", :controller => "test_invalid_urls/foo"
4172
+ get "/:controller(/:action(/:id))"
4173
+ end
4174
+
4175
+ get "/%E2%EF%BF%BD%A6"
4176
+ assert_response :bad_request
4177
+
4178
+ get "/foo/%E2%EF%BF%BD%A6"
4179
+ assert_response :bad_request
4180
+
4181
+ get "/foo/show/%E2%EF%BF%BD%A6"
4182
+ assert_response :bad_request
4183
+
4184
+ get "/bar/%E2%EF%BF%BD%A6"
4185
+ assert_response :bad_request
4186
+ end
4187
+ end
4188
+ end
4189
+
4190
+ class TestOptionalRootSegments < ActionDispatch::IntegrationTest
4191
+ stub_controllers do |routes|
4192
+ Routes = routes
4193
+ Routes.draw do
4194
+ get '/(page/:page)', :to => 'pages#index', :as => :root
4195
+ end
4196
+ end
4197
+
4198
+ APP = build_app Routes
4199
+ def app
4200
+ APP
4201
+ end
4202
+
4203
+ include Routes.url_helpers
4204
+
4205
+ def test_optional_root_segments
4206
+ get '/'
4207
+ assert_equal 'pages#index', @response.body
4208
+ assert_equal '/', root_path
4209
+
4210
+ get '/page/1'
4211
+ assert_equal 'pages#index', @response.body
4212
+ assert_equal '1', @request.params[:page]
4213
+ assert_equal '/page/1', root_path('1')
4214
+ assert_equal '/page/1', root_path(:page => '1')
4215
+ end
4216
+ end
4217
+
4218
+ class TestPortConstraints < ActionDispatch::IntegrationTest
4219
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
4220
+ app.draw do
4221
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
4222
+
4223
+ get '/integer', to: ok, constraints: { :port => 8080 }
4224
+ get '/string', to: ok, constraints: { :port => '8080' }
4225
+ get '/array', to: ok, constraints: { :port => [8080] }
4226
+ get '/regexp', to: ok, constraints: { :port => /8080/ }
4227
+ end
4228
+ end
4229
+
4230
+ include Routes.url_helpers
4231
+ APP = build_app Routes
4232
+ def app; APP end
4233
+
4234
+ def test_integer_port_constraints
4235
+ get 'http://www.example.com/integer'
4236
+ assert_response :not_found
4237
+
4238
+ get 'http://www.example.com:8080/integer'
4239
+ assert_response :success
4240
+ end
4241
+
4242
+ def test_string_port_constraints
4243
+ get 'http://www.example.com/string'
4244
+ assert_response :not_found
4245
+
4246
+ get 'http://www.example.com:8080/string'
4247
+ assert_response :success
4248
+ end
4249
+
4250
+ def test_array_port_constraints
4251
+ get 'http://www.example.com/array'
4252
+ assert_response :not_found
4253
+
4254
+ get 'http://www.example.com:8080/array'
4255
+ assert_response :success
4256
+ end
4257
+
4258
+ def test_regexp_port_constraints
4259
+ get 'http://www.example.com/regexp'
4260
+ assert_response :not_found
4261
+
4262
+ get 'http://www.example.com:8080/regexp'
4263
+ assert_response :success
4264
+ end
4265
+ end
4266
+
4267
+ class TestFormatConstraints < ActionDispatch::IntegrationTest
4268
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
4269
+ app.draw do
4270
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
4271
+
4272
+ get '/string', to: ok, constraints: { format: 'json' }
4273
+ get '/regexp', to: ok, constraints: { format: /json/ }
4274
+ get '/json_only', to: ok, format: true, constraints: { format: /json/ }
4275
+ get '/xml_only', to: ok, format: 'xml'
4276
+ end
4277
+ end
4278
+
4279
+ include Routes.url_helpers
4280
+ APP = build_app Routes
4281
+ def app; APP end
4282
+
4283
+ def test_string_format_constraints
4284
+ get 'http://www.example.com/string'
4285
+ assert_response :success
4286
+
4287
+ get 'http://www.example.com/string.json'
4288
+ assert_response :success
4289
+
4290
+ get 'http://www.example.com/string.html'
4291
+ assert_response :not_found
4292
+ end
4293
+
4294
+ def test_regexp_format_constraints
4295
+ get 'http://www.example.com/regexp'
4296
+ assert_response :success
4297
+
4298
+ get 'http://www.example.com/regexp.json'
4299
+ assert_response :success
4300
+
4301
+ get 'http://www.example.com/regexp.html'
4302
+ assert_response :not_found
4303
+ end
4304
+
4305
+ def test_enforce_with_format_true_with_constraint
4306
+ get 'http://www.example.com/json_only.json'
4307
+ assert_response :success
4308
+
4309
+ get 'http://www.example.com/json_only.html'
4310
+ assert_response :not_found
4311
+
4312
+ get 'http://www.example.com/json_only'
4313
+ assert_response :not_found
4314
+ end
4315
+
4316
+ def test_enforce_with_string
4317
+ get 'http://www.example.com/xml_only.xml'
4318
+ assert_response :success
4319
+
4320
+ get 'http://www.example.com/xml_only'
4321
+ assert_response :success
4322
+
4323
+ get 'http://www.example.com/xml_only.json'
4324
+ assert_response :not_found
4325
+ end
4326
+ end
4327
+
4328
+ class TestCallableConstraintValidation < ActionDispatch::IntegrationTest
4329
+ def test_constraint_with_object_not_callable
4330
+ assert_raises(ArgumentError) do
4331
+ ActionDispatch::Routing::RouteSet.new.draw do
4332
+ ok = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
4333
+ get '/test', to: ok, constraints: Object.new
4334
+ end
4335
+ end
4336
+ end
4337
+ end
4338
+
4339
+ class TestRouteDefaults < ActionDispatch::IntegrationTest
4340
+ stub_controllers do |routes|
4341
+ Routes = routes
4342
+ Routes.draw do
4343
+ resources :posts, bucket_type: 'post'
4344
+ resources :projects, defaults: { bucket_type: 'project' }
4345
+ end
4346
+ end
4347
+
4348
+ APP = build_app Routes
4349
+ def app
4350
+ APP
4351
+ end
4352
+
4353
+ include Routes.url_helpers
4354
+
4355
+ def test_route_options_are_required_for_url_for
4356
+ assert_raises(ActionController::UrlGenerationError) do
4357
+ assert_equal '/posts/1', url_for(controller: 'posts', action: 'show', id: 1, only_path: true)
4358
+ end
4359
+
4360
+ assert_equal '/posts/1', url_for(controller: 'posts', action: 'show', id: 1, bucket_type: 'post', only_path: true)
4361
+ end
4362
+
4363
+ def test_route_defaults_are_not_required_for_url_for
4364
+ assert_equal '/projects/1', url_for(controller: 'projects', action: 'show', id: 1, only_path: true)
4365
+ end
4366
+ end
4367
+
4368
+ class TestRackAppRouteGeneration < ActionDispatch::IntegrationTest
4369
+ stub_controllers do |routes|
4370
+ Routes = routes
4371
+ Routes.draw do
4372
+ rack_app = lambda { |env| [200, { 'Content-Type' => 'text/plain' }, []] }
4373
+ mount rack_app, at: '/account', as: 'account'
4374
+ mount rack_app, at: '/:locale/account', as: 'localized_account'
4375
+ end
4376
+ end
4377
+
4378
+ APP = build_app Routes
4379
+ def app
4380
+ APP
4381
+ end
4382
+
4383
+ include Routes.url_helpers
4384
+
4385
+ def test_mounted_application_doesnt_match_unnamed_route
4386
+ assert_raise(ActionController::UrlGenerationError) do
4387
+ assert_equal '/account?controller=products', url_for(controller: 'products', action: 'index', only_path: true)
4388
+ end
4389
+
4390
+ assert_raise(ActionController::UrlGenerationError) do
4391
+ assert_equal '/de/account?controller=products', url_for(controller: 'products', action: 'index', :locale => 'de', only_path: true)
4392
+ end
4393
+ end
4394
+ end
4395
+
4396
+ class TestRedirectRouteGeneration < ActionDispatch::IntegrationTest
4397
+ stub_controllers do |routes|
4398
+ Routes = routes
4399
+ Routes.draw do
4400
+ get '/account', to: redirect('/myaccount'), as: 'account'
4401
+ get '/:locale/account', to: redirect('/%{locale}/myaccount'), as: 'localized_account'
4402
+ end
4403
+ end
4404
+
4405
+ APP = build_app Routes
4406
+ def app
4407
+ APP
4408
+ end
4409
+
4410
+ include Routes.url_helpers
4411
+
4412
+ def test_redirect_doesnt_match_unnamed_route
4413
+ assert_raise(ActionController::UrlGenerationError) do
4414
+ assert_equal '/account?controller=products', url_for(controller: 'products', action: 'index', only_path: true)
4415
+ end
4416
+
4417
+ assert_raise(ActionController::UrlGenerationError) do
4418
+ assert_equal '/de/account?controller=products', url_for(controller: 'products', action: 'index', :locale => 'de', only_path: true)
4419
+ end
4420
+ end
4421
+ end
4422
+
4423
+ class TestUrlGenerationErrors < ActionDispatch::IntegrationTest
4424
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
4425
+ app.draw do
4426
+ get "/products/:id" => 'products#show', :as => :product
4427
+ end
4428
+ end
4429
+
4430
+ APP = build_app Routes
4431
+ def app; APP end
4432
+
4433
+ include Routes.url_helpers
4434
+
4435
+ test "url helpers raise a helpful error message when generation fails" do
4436
+ url, missing = { action: 'show', controller: 'products', id: nil }, [:id]
4437
+ message = "No route matches #{url.inspect} missing required keys: #{missing.inspect}"
4438
+
4439
+ # Optimized url helper
4440
+ error = assert_raises(ActionController::UrlGenerationError){ product_path(nil) }
4441
+ assert_equal message, error.message
4442
+
4443
+ # Non-optimized url helper
4444
+ error = assert_raises(ActionController::UrlGenerationError, message){ product_path(id: nil) }
4445
+ assert_equal message, error.message
4446
+ end
4447
+ end
4448
+
4449
+ class TestDefaultUrlOptions < ActionDispatch::IntegrationTest
4450
+ class PostsController < ActionController::Base
4451
+ def archive
4452
+ render :text => "posts#archive"
4453
+ end
4454
+ end
4455
+
4456
+ Routes = ActionDispatch::Routing::RouteSet.new
4457
+ Routes.draw do
4458
+ default_url_options locale: 'en'
4459
+ scope ':locale', format: false do
4460
+ get '/posts/:year/:month/:day', to: 'posts#archive', as: 'archived_posts'
4461
+ end
4462
+ end
4463
+
4464
+ APP = build_app Routes
4465
+
4466
+ def app
4467
+ APP
4468
+ end
4469
+
4470
+ include Routes.url_helpers
4471
+
4472
+ def test_positional_args_with_format_false
4473
+ assert_equal '/en/posts/2014/12/13', archived_posts_path(2014, 12, 13)
4474
+ end
4475
+ end