activejob-lock 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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