radiant 0.7.2 → 0.8.0

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

Potentially problematic release.


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

Files changed (2324) hide show
  1. data/CHANGELOG +295 -195
  2. data/CONTRIBUTORS +14 -2
  3. data/INSTALL +0 -0
  4. data/LICENSE +0 -0
  5. data/README +0 -0
  6. data/Rakefile +0 -0
  7. data/app/controllers/admin/export_controller.rb +0 -0
  8. data/app/controllers/admin/extensions_controller.rb +6 -0
  9. data/app/controllers/admin/layouts_controller.rb +4 -0
  10. data/app/controllers/admin/page_parts_controller.rb +1 -1
  11. data/app/controllers/admin/pages_controller.rb +13 -5
  12. data/app/controllers/admin/preferences_controller.rb +1 -1
  13. data/app/controllers/admin/references_controller.rb +0 -0
  14. data/app/controllers/admin/resource_controller.rb +12 -14
  15. data/app/controllers/admin/snippets_controller.rb +3 -0
  16. data/app/controllers/admin/users_controller.rb +4 -0
  17. data/app/controllers/admin/welcome_controller.rb +2 -2
  18. data/app/controllers/{application.rb → application_controller.rb} +13 -1
  19. data/app/controllers/site_controller.rb +21 -21
  20. data/app/helpers/admin/abstract_model_helper.rb +0 -0
  21. data/app/helpers/admin/export_helper.rb +0 -0
  22. data/app/helpers/admin/extensions_helper.rb +0 -0
  23. data/app/helpers/admin/layouts_helper.rb +0 -0
  24. data/app/helpers/admin/node_helper.rb +0 -0
  25. data/app/helpers/admin/pages_helper.rb +1 -1
  26. data/app/helpers/admin/preferences_helper.rb +0 -0
  27. data/app/helpers/admin/references_helper.rb +1 -1
  28. data/app/helpers/admin/regions_helper.rb +8 -8
  29. data/app/helpers/admin/snippets_helper.rb +0 -0
  30. data/app/helpers/admin/users_helper.rb +0 -0
  31. data/app/helpers/admin/welcome_helper.rb +0 -0
  32. data/app/helpers/application_helper.rb +1 -1
  33. data/app/helpers/site_helper.rb +0 -0
  34. data/app/models/env_dump_page.rb +0 -0
  35. data/app/models/file_not_found_page.rb +3 -3
  36. data/app/models/layout.rb +2 -2
  37. data/app/models/page.rb +59 -78
  38. data/app/models/page_context.rb +0 -0
  39. data/app/models/page_part.rb +3 -3
  40. data/app/models/radiant/config.rb +23 -23
  41. data/app/models/radiant/exporter.rb +0 -0
  42. data/app/models/snippet.rb +3 -3
  43. data/app/models/standard_tags.rb +11 -2
  44. data/app/models/status.rb +0 -0
  45. data/app/models/text_filter.rb +0 -0
  46. data/app/models/user.rb +14 -5
  47. data/app/models/user_action_observer.rb +0 -0
  48. data/app/views/admin/extensions/index.html.haml +0 -0
  49. data/app/views/admin/layouts/_form.html.haml +0 -0
  50. data/app/views/admin/layouts/edit.html.haml +0 -0
  51. data/app/views/admin/layouts/index.html.haml +0 -0
  52. data/app/views/admin/layouts/new.html.haml +0 -0
  53. data/app/views/admin/layouts/remove.html.haml +0 -0
  54. data/app/views/admin/page_parts/_page_part.html.haml +5 -3
  55. data/app/views/admin/pages/_edit_styles.html.haml +0 -0
  56. data/app/views/admin/pages/_fields.html.haml +0 -0
  57. data/app/views/admin/pages/_meta_row.html.haml +0 -0
  58. data/app/views/admin/pages/_node.html.haml +0 -0
  59. data/app/views/admin/pages/_popups.html.haml +2 -1
  60. data/app/views/admin/pages/children.html.haml +0 -0
  61. data/app/views/admin/pages/edit.html.haml +0 -0
  62. data/app/views/admin/pages/index.html.haml +0 -0
  63. data/app/views/admin/pages/new.html.haml +0 -0
  64. data/app/views/admin/pages/remove.html.haml +0 -0
  65. data/app/views/admin/preferences/edit.html.haml +0 -0
  66. data/app/views/admin/references/_tag_reference.haml +0 -0
  67. data/app/views/admin/references/filters.js.erb +0 -0
  68. data/app/views/admin/references/tags.js.erb +0 -0
  69. data/app/views/admin/snippets/_form.html.haml +0 -0
  70. data/app/views/admin/snippets/edit.html.haml +0 -0
  71. data/app/views/admin/snippets/index.html.haml +0 -0
  72. data/app/views/admin/snippets/new.html.haml +0 -0
  73. data/app/views/admin/snippets/remove.html.haml +0 -0
  74. data/app/views/admin/users/_form.html.haml +0 -0
  75. data/app/views/admin/users/edit.html.haml +0 -0
  76. data/app/views/admin/users/index.html.haml +0 -0
  77. data/app/views/admin/users/new.html.haml +0 -0
  78. data/app/views/admin/users/remove.html.haml +0 -0
  79. data/app/views/admin/welcome/login.html.haml +0 -0
  80. data/app/views/layouts/application.html.haml +0 -0
  81. data/app/views/site/not_found.html.haml +0 -0
  82. data/config/boot.rb +5 -4
  83. data/config/database.mysql.yml +0 -0
  84. data/config/database.postgresql.yml +0 -0
  85. data/config/database.sqlite.yml +1 -1
  86. data/config/database.sqlserver.yml +0 -0
  87. data/config/environment.rb +30 -43
  88. data/config/environments/development.rb +1 -2
  89. data/config/environments/production.rb +0 -1
  90. data/config/environments/test.rb +6 -2
  91. data/config/routes.rb +0 -0
  92. data/db/migrate/001_create_radiant_tables.rb +0 -0
  93. data/db/migrate/002_insert_initial_data.rb +0 -0
  94. data/db/migrate/003_rename_behavior_column.rb +0 -0
  95. data/db/migrate/004_rename_filter_column.rb +0 -0
  96. data/db/migrate/005_add_virtual_column_to_page.rb +0 -0
  97. data/db/migrate/006_integer_columns_to_boolean.rb +0 -0
  98. data/db/migrate/007_remove_virtual_column_from_page.rb +0 -0
  99. data/db/migrate/008_add_virtual_column_to_page_again.rb +0 -0
  100. data/db/migrate/009_add_content_type_field_to_layout.rb +0 -0
  101. data/db/migrate/010_merge_behaviors_and_pages.rb +0 -0
  102. data/db/migrate/011_rename_type_column_on_page_to_class_name.rb +0 -0
  103. data/db/migrate/012_create_extension_meta.rb +0 -0
  104. data/db/migrate/013_add_notes_field_to_user.rb +0 -0
  105. data/db/migrate/014_rename_config_default_parts_key.rb +0 -0
  106. data/db/migrate/015_add_optimistic_locking.rb +0 -0
  107. data/db/migrate/016_add_sessions.rb +0 -0
  108. data/db/migrate/017_rename_created_by_updated_by_columns.rb +0 -0
  109. data/db/migrate/018_add_description_and_keywords_to_pages.rb +0 -0
  110. data/db/migrate/019_add_salt_to_users.rb +0 -0
  111. data/db/migrate/020_add_session_info_to_users.rb +0 -0
  112. data/db/migrate/021_remove_session_expire_from_users.rb +0 -0
  113. data/db/migrate/20081203140407_add_indexes.rb +0 -0
  114. data/db/schema.rb +1 -1
  115. data/db/templates/empty.yml +0 -0
  116. data/db/templates/roasters.yml +0 -0
  117. data/db/templates/simple-blog.yml +0 -0
  118. data/db/templates/styled-blog.yml +0 -0
  119. data/features/admin/content_negotiation.feature +24 -0
  120. data/features/admin/layouts_management.feature +10 -0
  121. data/features/admin/pages_management.feature +71 -0
  122. data/features/admin/snippets_management.feature +54 -0
  123. data/features/admin/user_permissions.feature +149 -0
  124. data/features/admin/user_preferences.feature +18 -0
  125. data/features/admin/users_management.feature +63 -0
  126. data/features/page_serving.feature +42 -0
  127. data/features/step_definitions/admin/admin_steps.rb +31 -0
  128. data/features/step_definitions/admin/content_negotiation_steps.rb +37 -0
  129. data/features/step_definitions/admin/pages_management_steps.rb +14 -0
  130. data/features/step_definitions/admin/users_management_steps.rb +12 -0
  131. data/features/step_definitions/page_serving_steps.rb +65 -0
  132. data/features/step_definitions/webrat_steps.rb +117 -0
  133. data/features/support/env.rb +23 -0
  134. data/features/support/paths.rb +14 -0
  135. data/lib/annotatable.rb +0 -0
  136. data/lib/autotest/discover.rb +0 -0
  137. data/lib/autotest/radiant_rails_rspec.rb +0 -0
  138. data/lib/generators/extension/USAGE +0 -0
  139. data/lib/generators/extension/extension_generator.rb +0 -0
  140. data/lib/generators/extension/templates/README +0 -0
  141. data/lib/generators/extension/templates/RSpecRakefile +0 -0
  142. data/lib/generators/extension/templates/extension.rb +0 -0
  143. data/lib/generators/extension/templates/functional_test.rb +0 -0
  144. data/lib/generators/extension/templates/migration.rb +0 -0
  145. data/lib/generators/extension/templates/spec.opts +0 -0
  146. data/lib/generators/extension/templates/spec_helper.rb +0 -0
  147. data/lib/generators/extension/templates/tasks.rake +2 -2
  148. data/lib/generators/extension/templates/test_helper.rb +0 -0
  149. data/lib/generators/extension_controller/USAGE +0 -0
  150. data/lib/generators/extension_controller/extension_controller_generator.rb +0 -0
  151. data/lib/generators/extension_controller/templates/controller.rb +0 -0
  152. data/lib/generators/extension_controller/templates/controller_spec.rb +0 -0
  153. data/lib/generators/extension_controller/templates/functional_test.rb +0 -0
  154. data/lib/generators/extension_controller/templates/helper.rb +0 -0
  155. data/lib/generators/extension_controller/templates/helper_spec.rb +0 -0
  156. data/lib/generators/extension_controller/templates/helper_test.rb +4 -0
  157. data/lib/generators/extension_controller/templates/view.html.erb +0 -0
  158. data/lib/generators/extension_controller/templates/view_spec.rb +0 -0
  159. data/lib/generators/extension_mailer/USAGE +0 -0
  160. data/lib/generators/extension_mailer/extension_mailer_generator.rb +0 -0
  161. data/lib/generators/extension_mailer/templates/fixture.erb +0 -0
  162. data/lib/generators/extension_mailer/templates/mailer.rb +0 -0
  163. data/lib/generators/extension_mailer/templates/unit_test.rb +0 -0
  164. data/lib/generators/extension_mailer/templates/view.erb +0 -0
  165. data/lib/generators/extension_migration/USAGE +0 -0
  166. data/lib/generators/extension_migration/extension_migration_generator.rb +0 -0
  167. data/lib/generators/extension_migration/templates/migration.rb +0 -0
  168. data/lib/generators/extension_model/USAGE +0 -0
  169. data/lib/generators/extension_model/extension_model_generator.rb +0 -0
  170. data/lib/generators/extension_model/templates/fixtures.yml +0 -0
  171. data/lib/generators/extension_model/templates/migration.rb +0 -0
  172. data/lib/generators/extension_model/templates/model.rb +0 -0
  173. data/lib/generators/extension_model/templates/model_spec.rb +0 -0
  174. data/lib/generators/extension_model/templates/unit_test.rb +0 -0
  175. data/lib/generators/generator_base_extension.rb +0 -0
  176. data/lib/generators/instance/instance_generator.rb +0 -0
  177. data/lib/generators/instance/templates/databases/mysql.yml +0 -0
  178. data/lib/generators/instance/templates/databases/postgresql.yml +0 -0
  179. data/lib/generators/instance/templates/databases/sqlite3.yml +0 -0
  180. data/lib/generators/instance/templates/databases/sqlserver.yml +0 -0
  181. data/lib/generators/instance/templates/instance_boot.rb +1 -4
  182. data/lib/generators/instance/templates/instance_environment.rb +36 -44
  183. data/lib/generators/instance/templates/instance_generate +0 -0
  184. data/lib/generators/instance/templates/instance_rakefile +0 -0
  185. data/lib/generators/instance/templates/instance_routes.rb +0 -0
  186. data/lib/inheritable_class_attributes.rb +0 -0
  187. data/lib/local_time.rb +0 -0
  188. data/lib/login_system.rb +59 -40
  189. data/lib/method_observer.rb +0 -0
  190. data/lib/plugins/active_record_extensions/init.rb +0 -0
  191. data/lib/plugins/active_record_extensions/lib/active_record_extensions.rb +0 -0
  192. data/lib/plugins/extension_patches/init.rb +1 -3
  193. data/lib/plugins/extension_patches/lib/routing_extension.rb +0 -0
  194. data/lib/plugins/object_extensions/init.rb +0 -0
  195. data/lib/plugins/object_extensions/lib/object_extensions.rb +0 -0
  196. data/lib/plugins/response_cache_timeout/init.rb +1 -1
  197. data/lib/plugins/string_extensions/init.rb +0 -0
  198. data/lib/plugins/string_extensions/lib/string_extensions.rb +10 -9
  199. data/lib/plugins/symbol_extensions/init.rb +0 -0
  200. data/lib/plugins/symbol_extensions/lib/symbol_extensions.rb +2 -4
  201. data/lib/radiant.rb +2 -2
  202. data/lib/radiant/admin_ui.rb +0 -0
  203. data/lib/radiant/admin_ui/region_partials.rb +0 -0
  204. data/lib/radiant/admin_ui/region_set.rb +0 -0
  205. data/lib/radiant/cache.rb +84 -0
  206. data/lib/radiant/extension.rb +0 -0
  207. data/lib/radiant/extension/script.rb +0 -0
  208. data/lib/radiant/extension_loader.rb +1 -1
  209. data/lib/radiant/extension_migrator.rb +0 -0
  210. data/lib/radiant/initializer.rb +33 -8
  211. data/lib/radiant/legacy_routes.rb +0 -0
  212. data/lib/radiant/resource_responses.rb +0 -0
  213. data/lib/radiant/setup.rb +1 -1
  214. data/lib/radiant/taggable.rb +0 -0
  215. data/lib/simpleton.rb +0 -0
  216. data/lib/tasks/cucumber.rake +17 -0
  217. data/lib/tasks/database.rake +0 -0
  218. data/lib/tasks/environments.rake +0 -0
  219. data/lib/tasks/extensions.rake +0 -0
  220. data/lib/tasks/framework.rake +49 -16
  221. data/lib/tasks/instance.rake +0 -0
  222. data/lib/tasks/release.rake +8 -3
  223. data/lib/tasks/rspec.rake +178 -130
  224. data/lib/tasks/undefine.rake +0 -0
  225. data/log/.keep +0 -0
  226. data/public/.htaccess +0 -0
  227. data/public/404.html +0 -0
  228. data/public/500.html +0 -0
  229. data/public/favicon.ico +0 -0
  230. data/public/images/admin/add-child.png +0 -0
  231. data/public/images/admin/clear-page-cache.png +0 -0
  232. data/public/images/admin/collapse.png +0 -0
  233. data/public/images/admin/expand.png +0 -0
  234. data/public/images/admin/layout.png +0 -0
  235. data/public/images/admin/minus.png +0 -0
  236. data/public/images/admin/new-homepage.png +0 -0
  237. data/public/images/admin/new-layout.png +0 -0
  238. data/public/images/admin/new-snippet.png +0 -0
  239. data/public/images/admin/new-user.png +0 -0
  240. data/public/images/admin/page.png +0 -0
  241. data/public/images/admin/plus.png +0 -0
  242. data/public/images/admin/remove-disabled.png +0 -0
  243. data/public/images/admin/remove.png +0 -0
  244. data/public/images/admin/snippet.png +0 -0
  245. data/public/images/admin/spinner.gif +0 -0
  246. data/public/images/admin/virtual-page.png +0 -0
  247. data/public/javascripts/admin/admin.js +1 -0
  248. data/public/javascripts/admin/ruledtable.js +0 -0
  249. data/public/javascripts/admin/sitemap.js +0 -0
  250. data/public/javascripts/admin/tabcontrol.js +6 -0
  251. data/public/javascripts/application.js +0 -0
  252. data/public/javascripts/controls.js +72 -72
  253. data/public/javascripts/dragdrop.js +165 -164
  254. data/public/javascripts/effects.js +173 -165
  255. data/public/javascripts/pngfix.js +0 -0
  256. data/public/javascripts/prototype.js +362 -267
  257. data/public/javascripts/string.js +0 -0
  258. data/public/robots.txt +0 -0
  259. data/public/stylesheets/admin/main.css +0 -0
  260. data/script/cucumber +8 -0
  261. data/spec/controllers/admin/export_controller_spec.rb +0 -0
  262. data/spec/controllers/admin/extensions_controller_spec.rb +23 -8
  263. data/spec/controllers/admin/layouts_controller_spec.rb +41 -1
  264. data/spec/controllers/admin/pages_controller_spec.rb +73 -25
  265. data/spec/controllers/admin/preferences_controller_spec.rb +6 -0
  266. data/spec/controllers/admin/references_controller_spec.rb +0 -0
  267. data/spec/controllers/admin/snippets_controller_spec.rb +71 -18
  268. data/spec/controllers/admin/users_controller_spec.rb +44 -0
  269. data/spec/controllers/admin/welcome_controller_spec.rb +10 -1
  270. data/spec/controllers/application_controller_spec.rb +25 -4
  271. data/spec/controllers/site_controller_spec.rb +49 -12
  272. data/spec/datasets/config_dataset.rb +11 -0
  273. data/spec/datasets/file_not_found_dataset.rb +0 -0
  274. data/spec/datasets/home_page_dataset.rb +0 -0
  275. data/spec/datasets/layouts_dataset.rb +0 -0
  276. data/spec/datasets/markup_pages_dataset.rb +0 -0
  277. data/spec/datasets/pages_dataset.rb +5 -0
  278. data/spec/datasets/pages_with_layouts_dataset.rb +0 -0
  279. data/spec/datasets/snippets_dataset.rb +0 -0
  280. data/spec/datasets/users_and_pages_dataset.rb +0 -0
  281. data/spec/datasets/users_dataset.rb +0 -0
  282. data/spec/fixtures/example_extension/README +0 -0
  283. data/spec/fixtures/example_extension/Rakefile +0 -0
  284. data/spec/fixtures/example_extension/example_extension.rb +0 -0
  285. data/spec/fixtures/example_extension/lib/tasks/example_extension_tasks.rake +0 -0
  286. data/spec/fixtures/example_extension/spec/spec.opts +0 -0
  287. data/spec/fixtures/example_extension/spec/spec_helper.rb +0 -0
  288. data/spec/fixtures/sample.txt +0 -0
  289. data/spec/generators/extension_controller_generator_spec.rb +0 -0
  290. data/spec/generators/extension_generator_spec.rb +0 -0
  291. data/spec/generators/extension_generators_spec_helper.rb +0 -0
  292. data/spec/generators/extension_mailer_generator_spec.rb +0 -0
  293. data/spec/generators/extension_migration_generator_spec.rb +0 -0
  294. data/spec/generators/extension_model_generator_spec.rb +0 -0
  295. data/spec/helpers/admin/abstract_model_helper_spec.rb +0 -0
  296. data/spec/helpers/admin/export_helper_spec.rb +0 -0
  297. data/spec/helpers/admin/extensions_helper_spec.rb +0 -0
  298. data/spec/helpers/admin/layouts_helper_spec.rb +0 -0
  299. data/spec/helpers/admin/node_helper_spec.rb +0 -0
  300. data/spec/helpers/admin/pages_helper_spec.rb +0 -0
  301. data/spec/helpers/admin/preferences_helper_spec.rb +0 -0
  302. data/spec/helpers/admin/references_helper_spec.rb +0 -0
  303. data/spec/helpers/admin/regions_helper_spec.rb +6 -9
  304. data/spec/helpers/admin/snippets_helper_spec.rb +0 -0
  305. data/spec/helpers/admin/users_helper_spec.rb +0 -0
  306. data/spec/helpers/admin/welcome_helper_spec.rb +0 -0
  307. data/spec/helpers/application_helper_spec.rb +0 -0
  308. data/spec/helpers/site_helper_spec.rb +0 -0
  309. data/spec/lib/annotatable_spec.rb +0 -0
  310. data/spec/lib/autotest_spec.rb +0 -0
  311. data/spec/lib/core_ext/string_ext_spec.rb +5 -4
  312. data/spec/lib/inheritable_class_attributes_spec.rb +0 -0
  313. data/spec/lib/local_time_spec.rb +0 -0
  314. data/spec/lib/login_system_spec.rb +29 -35
  315. data/spec/lib/method_observer_spec.rb +0 -0
  316. data/spec/lib/radiant/admin_ui/region_partials_spec.rb +0 -0
  317. data/spec/lib/radiant/admin_ui/region_set_spec.rb +0 -0
  318. data/spec/lib/radiant/admin_ui_spec.rb +0 -0
  319. data/spec/lib/radiant/extension/script_spec.rb +0 -0
  320. data/spec/lib/radiant/extension_loader_spec.rb +32 -23
  321. data/spec/lib/radiant/extension_migrator_spec.rb +0 -0
  322. data/spec/lib/radiant/extension_spec.rb +0 -0
  323. data/spec/lib/radiant/initializer_spec.rb +17 -0
  324. data/spec/lib/radiant/legacy_routes_spec.rb +0 -0
  325. data/spec/lib/radiant/resource_responses_spec.rb +0 -0
  326. data/spec/lib/radiant/taggable_spec.rb +0 -0
  327. data/spec/lib/radiant_spec.rb +0 -0
  328. data/spec/lib/simpleton_spec.rb +0 -0
  329. data/spec/matchers/autotest_matchers.rb +0 -0
  330. data/spec/matchers/generator_matchers.rb +0 -0
  331. data/spec/matchers/login_system_matcher.rb +0 -0
  332. data/spec/matchers/render_form_errors_matcher.rb +0 -0
  333. data/spec/matchers/render_matcher.rb +9 -4
  334. data/spec/models/env_dump_page_spec.rb +0 -0
  335. data/spec/models/file_not_found_page_spec.rb +2 -2
  336. data/spec/models/layout_spec.rb +0 -0
  337. data/spec/models/page_context_spec.rb +0 -0
  338. data/spec/models/page_part_spec.rb +0 -0
  339. data/spec/models/page_spec.rb +23 -30
  340. data/spec/models/radiant/config_spec.rb +17 -1
  341. data/spec/models/radiant/exporter_spec.rb +0 -0
  342. data/spec/models/snippet_spec.rb +0 -0
  343. data/spec/models/standard_tags_spec.rb +17 -3
  344. data/spec/models/status_spec.rb +0 -0
  345. data/spec/models/text_filter_spec.rb +0 -0
  346. data/spec/models/user_action_observer_spec.rb +0 -0
  347. data/spec/models/user_spec.rb +15 -0
  348. data/spec/rcov.opts +0 -0
  349. data/spec/spec.opts +1 -1
  350. data/spec/spec_helper.rb +12 -45
  351. data/test/fixtures/extensions/01_basic/app/controllers/basic_extension_controller.rb +0 -0
  352. data/test/fixtures/extensions/01_basic/app/models/basic_extension_mailer.rb +0 -0
  353. data/test/fixtures/extensions/01_basic/app/models/basic_extension_model.rb +0 -0
  354. data/test/fixtures/extensions/01_basic/app/views/basic_extension/index.html.erb +0 -0
  355. data/test/fixtures/extensions/01_basic/app/views/basic_extension/override.html.erb +0 -0
  356. data/test/fixtures/extensions/01_basic/app/views/basic_extension_mailer/message.text.html.erb +0 -0
  357. data/test/fixtures/extensions/01_basic/basic_extension.rb +0 -0
  358. data/test/fixtures/extensions/01_basic/db/migrate/200812131420_create_initial_schema.rb +0 -0
  359. data/test/fixtures/extensions/01_basic/db/migrate/200812131421_modify_initial_schema.rb +0 -0
  360. data/test/fixtures/extensions/01_basic/lib/new_module.rb +0 -0
  361. data/test/fixtures/extensions/01_basic/vendor/plugins/multiple/init.rb +0 -0
  362. data/test/fixtures/extensions/01_basic/vendor/plugins/multiple/lib/multiple.rb +0 -0
  363. data/test/fixtures/extensions/01_basic/vendor/plugins/plugin_normal/init.rb +0 -0
  364. data/test/fixtures/extensions/01_basic/vendor/plugins/plugin_normal/lib/normal_plugin.rb +0 -0
  365. data/test/fixtures/extensions/02_overriding/app/views/basic_extension/override.html.erb +0 -0
  366. data/test/fixtures/extensions/02_overriding/overriding_extension.rb +0 -0
  367. data/test/fixtures/extensions/02_overriding/vendor/plugins/multiple/init.rb +0 -0
  368. data/test/fixtures/extensions/02_overriding/vendor/plugins/multiple/lib/multiple.rb +0 -0
  369. data/test/fixtures/extensions/03_upgrading/db/migrate/01_first.rb +0 -0
  370. data/test/fixtures/extensions/03_upgrading/db/migrate/02_second.rb +0 -0
  371. data/test/fixtures/extensions/03_upgrading/db/migrate/03_pending.rb +0 -0
  372. data/test/fixtures/extensions/03_upgrading/db/migrate/04_dont_run.rb +0 -0
  373. data/test/fixtures/extensions/03_upgrading/upgrading_extension.rb +0 -0
  374. data/test/fixtures/extensions/load_order_blue/load_order_blue_extension.rb +0 -0
  375. data/test/fixtures/extensions/load_order_green/load_order_green_extension.rb +0 -0
  376. data/test/fixtures/extensions/load_order_red/load_order_red_extension.rb +0 -0
  377. data/test/fixtures/extensions/special_characters/db/migrate/001_create_initial_schema.rb +0 -0
  378. data/test/fixtures/extensions/special_characters/special_characters_extension.rb +0 -0
  379. data/test/helpers/page_test_helper.rb +0 -0
  380. data/test/helpers/render_test_helper.rb +0 -0
  381. data/test/helpers/user_test_helper.rb +0 -0
  382. data/test/test_helper.rb +0 -0
  383. data/vendor/extensions/archive/README +0 -0
  384. data/vendor/extensions/archive/Rakefile +0 -0
  385. data/vendor/extensions/archive/app/models/archive_finder.rb +0 -0
  386. data/vendor/extensions/archive/archive_extension.rb +0 -0
  387. data/vendor/extensions/archive/lib/tasks/archive_extension_tasks.rake +0 -0
  388. data/vendor/extensions/archive/spec/datasets/archive_dataset.rb +0 -0
  389. data/vendor/extensions/archive/spec/models/archive_day_index_page_spec.rb +0 -0
  390. data/vendor/extensions/archive/spec/models/archive_month_index_page_spec.rb +0 -0
  391. data/vendor/extensions/archive/spec/models/archive_page_spec.rb +0 -0
  392. data/vendor/extensions/archive/spec/models/archive_year_index_page_spec.rb +0 -0
  393. data/vendor/extensions/archive/spec/spec.opts +0 -0
  394. data/vendor/extensions/archive/spec/spec_helper.rb +0 -0
  395. data/vendor/extensions/archive/test/fixtures/pages.yml +0 -0
  396. data/vendor/extensions/archive/test/functional/archive_extension_test.rb +0 -0
  397. data/vendor/extensions/archive/test/test_helper.rb +0 -0
  398. data/vendor/extensions/markdown_filter/README +0 -0
  399. data/vendor/extensions/markdown_filter/Rakefile +0 -0
  400. data/vendor/extensions/markdown_filter/lib/markdown_filter.rb +0 -0
  401. data/vendor/extensions/markdown_filter/lib/markdown_tags.rb +0 -0
  402. data/vendor/extensions/markdown_filter/lib/smarty_pants_filter.rb +0 -0
  403. data/vendor/extensions/markdown_filter/lib/tasks/markdown_filter_extension_tasks.rake +0 -0
  404. data/vendor/extensions/markdown_filter/lib/tasks/textile_filter_extension_tasks.rake +0 -0
  405. data/vendor/extensions/markdown_filter/markdown.html +0 -0
  406. data/vendor/extensions/markdown_filter/markdown_filter_extension.rb +0 -0
  407. data/vendor/extensions/markdown_filter/smartypants.html +0 -0
  408. data/vendor/extensions/markdown_filter/spec/models/markdown_filter_spec.rb +0 -0
  409. data/vendor/extensions/markdown_filter/spec/models/smarty_pants_filter_spec.rb +0 -0
  410. data/vendor/extensions/markdown_filter/spec/spec.opts +0 -0
  411. data/vendor/extensions/markdown_filter/spec/spec_helper.rb +0 -0
  412. data/vendor/extensions/markdown_filter/test/test_helper.rb +0 -0
  413. data/vendor/extensions/markdown_filter/test/unit/markdown_filter_test.rb +0 -0
  414. data/vendor/extensions/markdown_filter/test/unit/smarty_pants_filter_test.rb +0 -0
  415. data/vendor/extensions/markdown_filter/vendor/bluecloth/CHANGES +0 -0
  416. data/vendor/extensions/markdown_filter/vendor/bluecloth/LICENSE +0 -0
  417. data/vendor/extensions/markdown_filter/vendor/bluecloth/README +0 -0
  418. data/vendor/extensions/markdown_filter/vendor/bluecloth/bin/bluecloth +0 -0
  419. data/vendor/extensions/markdown_filter/vendor/bluecloth/install.rb +0 -0
  420. data/vendor/extensions/markdown_filter/vendor/bluecloth/lib/bluecloth.rb +0 -0
  421. data/vendor/extensions/markdown_filter/vendor/bluecloth/test.rb +0 -0
  422. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/00_Class.tests.rb +0 -0
  423. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/05_Markdown.tests.rb +0 -0
  424. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/10_Bug.tests.rb +0 -0
  425. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/15_Contrib.tests.rb +0 -0
  426. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/bctestcase.rb +0 -0
  427. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/data/antsugar.txt +0 -0
  428. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/data/ml-announce.txt +0 -0
  429. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/data/re-overflow.txt +0 -0
  430. data/vendor/extensions/markdown_filter/vendor/bluecloth/tests/data/re-overflow2.txt +0 -0
  431. data/vendor/extensions/markdown_filter/vendor/bluecloth/utils.rb +0 -0
  432. data/vendor/extensions/markdown_filter/vendor/rubypants/README +0 -0
  433. data/vendor/extensions/markdown_filter/vendor/rubypants/Rakefile +0 -0
  434. data/vendor/extensions/markdown_filter/vendor/rubypants/install.rb +0 -0
  435. data/vendor/extensions/markdown_filter/vendor/rubypants/rubypants.rb +0 -0
  436. data/vendor/extensions/markdown_filter/vendor/rubypants/test_rubypants.rb +0 -0
  437. data/vendor/extensions/textile_filter/README +0 -0
  438. data/vendor/extensions/textile_filter/Rakefile +0 -0
  439. data/vendor/extensions/textile_filter/lib/tasks/textile_filter_extension_tasks.rake +0 -0
  440. data/vendor/extensions/textile_filter/lib/textile_filter.rb +0 -0
  441. data/vendor/extensions/textile_filter/lib/textile_tags.rb +0 -0
  442. data/vendor/extensions/textile_filter/spec/models/textile_filter_spec.rb +0 -0
  443. data/vendor/extensions/textile_filter/spec/spec.opts +0 -0
  444. data/vendor/extensions/textile_filter/spec/spec_helper.rb +0 -0
  445. data/vendor/extensions/textile_filter/test/test_helper.rb +0 -0
  446. data/vendor/extensions/textile_filter/test/unit/textile_filter_test.rb +0 -0
  447. data/vendor/extensions/textile_filter/textile.html +0 -0
  448. data/vendor/extensions/textile_filter/textile_filter_extension.rb +0 -0
  449. data/vendor/highline/CHANGELOG +39 -0
  450. data/vendor/highline/INSTALL +0 -0
  451. data/vendor/highline/LICENSE +1 -1
  452. data/vendor/highline/README +0 -0
  453. data/vendor/highline/Rakefile +1 -1
  454. data/vendor/highline/TODO +0 -0
  455. data/vendor/highline/examples/ansi_colors.rb +0 -0
  456. data/vendor/highline/examples/asking_for_arrays.rb +0 -0
  457. data/vendor/highline/examples/basic_usage.rb +0 -0
  458. data/vendor/highline/examples/color_scheme.rb +0 -0
  459. data/vendor/highline/examples/limit.rb +12 -0
  460. data/vendor/highline/examples/menus.rb +0 -0
  461. data/vendor/highline/examples/overwrite.rb +0 -0
  462. data/vendor/highline/examples/page_and_wrap.rb +0 -0
  463. data/vendor/highline/examples/password.rb +0 -0
  464. data/vendor/highline/examples/trapping_eof.rb +0 -0
  465. data/vendor/highline/examples/using_readline.rb +1 -1
  466. data/vendor/highline/lib/highline.rb +86 -32
  467. data/vendor/highline/lib/highline/color_scheme.rb +0 -0
  468. data/vendor/highline/lib/highline/compatibility.rb +17 -0
  469. data/vendor/highline/lib/highline/import.rb +0 -0
  470. data/vendor/highline/lib/highline/menu.rb +0 -0
  471. data/vendor/highline/lib/highline/question.rb +3 -2
  472. data/vendor/highline/lib/highline/system_extensions.rb +93 -25
  473. data/vendor/highline/setup.rb +0 -0
  474. data/vendor/highline/test/tc_color_scheme.rb +0 -0
  475. data/vendor/highline/test/tc_highline.rb +46 -3
  476. data/vendor/highline/test/tc_import.rb +0 -0
  477. data/vendor/highline/test/tc_menu.rb +0 -0
  478. data/vendor/highline/test/ts_all.rb +0 -0
  479. data/vendor/plugins/acts_as_tree/README +0 -0
  480. data/vendor/plugins/acts_as_tree/Rakefile +0 -0
  481. data/vendor/plugins/acts_as_tree/init.rb +0 -0
  482. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +0 -0
  483. data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
  484. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +0 -0
  485. data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  486. data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  487. data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  488. data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  489. data/vendor/plugins/dataset/CHANGELOG +58 -0
  490. data/vendor/plugins/dataset/LICENSE +1 -1
  491. data/vendor/plugins/dataset/{README.txt → README} +0 -0
  492. data/vendor/plugins/dataset/Rakefile +16 -8
  493. data/vendor/plugins/dataset/TODO +2 -6
  494. data/vendor/plugins/dataset/VERSION.yml +4 -0
  495. data/vendor/plugins/dataset/dataset.gemspec +27 -0
  496. data/vendor/plugins/dataset/lib/dataset.rb +3 -1
  497. data/vendor/plugins/dataset/lib/dataset/base.rb +0 -0
  498. data/vendor/plugins/dataset/lib/dataset/collection.rb +0 -0
  499. data/vendor/plugins/dataset/lib/dataset/database/base.rb +1 -1
  500. data/vendor/plugins/dataset/lib/dataset/database/mysql.rb +0 -0
  501. data/vendor/plugins/dataset/lib/dataset/database/postgresql.rb +0 -0
  502. data/vendor/plugins/dataset/lib/dataset/database/sqlite3.rb +0 -0
  503. data/vendor/plugins/dataset/lib/dataset/extensions/cucumber.rb +20 -0
  504. data/vendor/plugins/dataset/lib/dataset/extensions/rspec.rb +0 -0
  505. data/vendor/plugins/dataset/lib/dataset/extensions/test_unit.rb +0 -0
  506. data/vendor/plugins/dataset/lib/dataset/instance_methods.rb +0 -0
  507. data/vendor/plugins/dataset/lib/dataset/load.rb +0 -0
  508. data/vendor/plugins/dataset/lib/dataset/record/fixture.rb +28 -9
  509. data/vendor/plugins/dataset/lib/dataset/record/meta.rb +31 -7
  510. data/vendor/plugins/dataset/lib/dataset/record/model.rb +15 -6
  511. data/vendor/plugins/dataset/lib/dataset/resolver.rb +0 -0
  512. data/vendor/plugins/dataset/lib/dataset/session.rb +0 -0
  513. data/vendor/plugins/dataset/lib/dataset/session_binding.rb +56 -38
  514. data/vendor/plugins/dataset/lib/dataset/version.rb +0 -0
  515. data/vendor/plugins/dataset/spec/dataset/cucumber_spec.rb +54 -0
  516. data/vendor/plugins/dataset/spec/dataset/database/base_spec.rb +3 -3
  517. data/vendor/plugins/dataset/spec/dataset/record/meta_spec.rb +14 -0
  518. data/vendor/plugins/dataset/spec/dataset/resolver_spec.rb +1 -1
  519. data/vendor/plugins/dataset/spec/dataset/rspec_spec.rb +107 -111
  520. data/vendor/plugins/dataset/spec/dataset/session_binding_spec.rb +42 -4
  521. data/vendor/plugins/dataset/spec/dataset/session_spec.rb +1 -1
  522. data/vendor/plugins/dataset/spec/dataset/test_unit_spec.rb +2 -1
  523. data/vendor/plugins/dataset/spec/fixtures/datasets/constant_not_defined.rb +0 -0
  524. data/vendor/plugins/dataset/spec/fixtures/datasets/ending_with_dataset.rb +0 -0
  525. data/vendor/plugins/dataset/spec/fixtures/datasets/exact_name.rb +0 -0
  526. data/vendor/plugins/dataset/spec/fixtures/datasets/not_a_dataset_base.rb +0 -0
  527. data/vendor/plugins/dataset/spec/fixtures/more_datasets/in_another_directory.rb +0 -0
  528. data/vendor/plugins/dataset/spec/models.rb +14 -2
  529. data/vendor/plugins/dataset/spec/schema.rb +3 -1
  530. data/vendor/plugins/dataset/spec/spec.opts +0 -0
  531. data/vendor/plugins/dataset/spec/spec_helper.rb +7 -9
  532. data/vendor/plugins/dataset/spec/stubs/mini_rails.rb +18 -0
  533. data/vendor/plugins/dataset/spec/stubs/test_help.rb +1 -0
  534. data/vendor/plugins/dataset/tasks/dataset.rake +0 -0
  535. data/vendor/plugins/haml/FAQ +0 -0
  536. data/vendor/plugins/haml/MIT-LICENSE +0 -0
  537. data/vendor/plugins/haml/README.rdoc +4 -4
  538. data/vendor/plugins/haml/REVISION +0 -0
  539. data/vendor/plugins/haml/Rakefile +35 -1
  540. data/vendor/plugins/haml/VERSION +1 -1
  541. data/vendor/plugins/haml/bin/haml +2 -1
  542. data/vendor/plugins/haml/extra/haml-mode.el +331 -0
  543. data/vendor/plugins/haml/extra/sass-mode.el +89 -0
  544. data/vendor/plugins/haml/init.rb +1 -0
  545. data/vendor/plugins/haml/lib/haml.rb +58 -77
  546. data/vendor/plugins/haml/lib/haml/buffer.rb +12 -8
  547. data/vendor/plugins/haml/lib/haml/engine.rb +3 -2
  548. data/vendor/plugins/haml/lib/haml/error.rb +1 -1
  549. data/vendor/plugins/haml/lib/haml/exec.rb +33 -8
  550. data/vendor/plugins/haml/lib/haml/filters.rb +41 -29
  551. data/vendor/plugins/haml/lib/haml/helpers.rb +69 -36
  552. data/vendor/plugins/haml/lib/haml/helpers/action_view_extensions.rb +0 -0
  553. data/vendor/plugins/haml/lib/haml/helpers/action_view_mods.rb +30 -20
  554. data/vendor/plugins/haml/lib/haml/html.rb +53 -19
  555. data/vendor/plugins/haml/lib/haml/precompiler.rb +38 -25
  556. data/vendor/plugins/haml/lib/haml/template.rb +0 -0
  557. data/vendor/plugins/haml/lib/haml/template/patch.rb +0 -0
  558. data/vendor/plugins/haml/lib/haml/template/plugin.rb +0 -0
  559. data/vendor/plugins/haml/lib/haml/util.rb +23 -0
  560. data/vendor/plugins/haml/lib/haml/version.rb +47 -0
  561. data/vendor/plugins/haml/lib/sass.rb +25 -8
  562. data/vendor/plugins/haml/lib/sass/constant.rb +3 -1
  563. data/vendor/plugins/haml/lib/sass/constant/color.rb +0 -0
  564. data/vendor/plugins/haml/lib/sass/constant/literal.rb +0 -0
  565. data/vendor/plugins/haml/lib/sass/constant/nil.rb +0 -0
  566. data/vendor/plugins/haml/lib/sass/constant/number.rb +1 -1
  567. data/vendor/plugins/haml/lib/sass/constant/operation.rb +0 -0
  568. data/vendor/plugins/haml/lib/sass/constant/string.rb +0 -0
  569. data/vendor/plugins/haml/lib/sass/css.rb +31 -30
  570. data/vendor/plugins/haml/lib/sass/engine.rb +13 -12
  571. data/vendor/plugins/haml/lib/sass/error.rb +1 -1
  572. data/vendor/plugins/haml/lib/sass/plugin.rb +11 -7
  573. data/vendor/plugins/haml/lib/sass/plugin/merb.rb +1 -1
  574. data/vendor/plugins/haml/lib/sass/plugin/rails.rb +0 -0
  575. data/vendor/plugins/haml/lib/sass/tree/attr_node.rb +4 -0
  576. data/vendor/plugins/haml/lib/sass/tree/comment_node.rb +0 -0
  577. data/vendor/plugins/haml/lib/sass/tree/directive_node.rb +0 -0
  578. data/vendor/plugins/haml/lib/sass/tree/node.rb +4 -0
  579. data/vendor/plugins/haml/lib/sass/tree/rule_node.rb +4 -0
  580. data/vendor/plugins/haml/lib/sass/tree/value_node.rb +4 -0
  581. data/vendor/plugins/haml/rails/init.rb +1 -0
  582. data/vendor/plugins/haml/test/benchmark.rb +49 -32
  583. data/vendor/plugins/haml/test/haml/engine_test.rb +165 -113
  584. data/vendor/plugins/haml/test/haml/helper_test.rb +29 -8
  585. data/vendor/plugins/haml/test/haml/html2haml_test.rb +50 -16
  586. data/vendor/plugins/haml/test/haml/markaby/standard.mab +0 -0
  587. data/vendor/plugins/haml/test/haml/mocks/article.rb +0 -0
  588. data/vendor/plugins/haml/test/haml/results/content_for_layout.xhtml +0 -0
  589. data/vendor/plugins/haml/test/haml/results/eval_suppressed.xhtml +0 -0
  590. data/vendor/plugins/haml/test/haml/results/filters.xhtml +2 -28
  591. data/vendor/plugins/haml/test/haml/results/helpers.xhtml +20 -18
  592. data/vendor/plugins/haml/test/haml/results/helpful.xhtml +0 -0
  593. data/vendor/plugins/haml/test/haml/results/just_stuff.xhtml +6 -0
  594. data/vendor/plugins/haml/test/haml/results/list.xhtml +0 -0
  595. data/vendor/plugins/haml/test/haml/results/nuke_inner_whitespace.xhtml +0 -0
  596. data/vendor/plugins/haml/test/haml/results/nuke_outer_whitespace.xhtml +0 -0
  597. data/vendor/plugins/haml/test/haml/results/original_engine.xhtml +0 -0
  598. data/vendor/plugins/haml/test/haml/results/partial_layout.xhtml +5 -0
  599. data/vendor/plugins/haml/test/haml/results/partials.xhtml +0 -0
  600. data/vendor/plugins/haml/test/haml/results/render_layout.xhtml +3 -0
  601. data/vendor/plugins/haml/test/haml/results/silent_script.xhtml +0 -0
  602. data/vendor/plugins/haml/test/haml/results/standard.xhtml +1 -1
  603. data/vendor/plugins/haml/test/haml/results/tag_parsing.xhtml +0 -0
  604. data/vendor/plugins/haml/test/haml/results/very_basic.xhtml +0 -0
  605. data/vendor/plugins/haml/test/haml/results/whitespace_handling.xhtml +4 -1
  606. data/vendor/plugins/haml/test/haml/rhtml/_av_partial_1.rhtml +0 -0
  607. data/vendor/plugins/haml/test/haml/rhtml/_av_partial_2.rhtml +0 -0
  608. data/vendor/plugins/haml/test/haml/rhtml/action_view.rhtml +0 -0
  609. data/vendor/plugins/haml/test/haml/rhtml/standard.rhtml +3 -3
  610. data/vendor/plugins/haml/test/haml/template_test.rb +58 -5
  611. data/vendor/plugins/haml/test/haml/templates/_av_partial_1.haml +0 -0
  612. data/vendor/plugins/haml/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  613. data/vendor/plugins/haml/test/haml/templates/_av_partial_2.haml +0 -0
  614. data/vendor/plugins/haml/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  615. data/vendor/plugins/haml/test/haml/templates/_layout.erb +3 -0
  616. data/vendor/plugins/haml/test/haml/templates/_layout_for_partial.haml +3 -0
  617. data/vendor/plugins/haml/test/haml/templates/_partial.haml +0 -0
  618. data/vendor/plugins/haml/test/haml/templates/_text_area.haml +0 -0
  619. data/vendor/plugins/haml/test/haml/templates/action_view.haml +0 -0
  620. data/vendor/plugins/haml/test/haml/templates/action_view_ugly.haml +47 -0
  621. data/vendor/plugins/haml/test/haml/templates/breakage.haml +0 -0
  622. data/vendor/plugins/haml/test/haml/templates/content_for_layout.haml +0 -0
  623. data/vendor/plugins/haml/test/haml/templates/eval_suppressed.haml +1 -1
  624. data/vendor/plugins/haml/test/haml/templates/filters.haml +0 -28
  625. data/vendor/plugins/haml/test/haml/templates/helpers.haml +46 -20
  626. data/vendor/plugins/haml/test/haml/templates/helpful.haml +0 -0
  627. data/vendor/plugins/haml/test/haml/templates/just_stuff.haml +7 -0
  628. data/vendor/plugins/haml/test/haml/templates/list.haml +0 -0
  629. data/vendor/plugins/haml/test/haml/templates/nuke_inner_whitespace.haml +0 -0
  630. data/vendor/plugins/haml/test/haml/templates/nuke_outer_whitespace.haml +0 -0
  631. data/vendor/plugins/haml/test/haml/templates/original_engine.haml +0 -0
  632. data/vendor/plugins/haml/test/haml/templates/partial_layout.haml +3 -0
  633. data/vendor/plugins/haml/test/haml/templates/partialize.haml +0 -0
  634. data/vendor/plugins/haml/test/haml/templates/partials.haml +0 -0
  635. data/vendor/plugins/haml/test/haml/templates/render_layout.haml +2 -0
  636. data/vendor/plugins/haml/test/haml/templates/silent_script.haml +0 -0
  637. data/vendor/plugins/haml/test/haml/templates/standard.haml +3 -3
  638. data/vendor/plugins/haml/test/haml/templates/standard_ugly.haml +42 -0
  639. data/vendor/plugins/haml/test/haml/templates/tag_parsing.haml +0 -0
  640. data/vendor/plugins/haml/test/haml/templates/very_basic.haml +0 -0
  641. data/vendor/plugins/haml/test/haml/templates/whitespace_handling.haml +2 -2
  642. data/vendor/plugins/haml/test/linked_rails.rb +12 -0
  643. data/vendor/plugins/haml/test/sass/css2sass_test.rb +193 -0
  644. data/vendor/plugins/haml/test/sass/engine_test.rb +14 -2
  645. data/vendor/plugins/haml/test/sass/plugin_test.rb +12 -6
  646. data/vendor/plugins/haml/test/sass/results/alt.css +0 -0
  647. data/vendor/plugins/haml/test/sass/results/basic.css +0 -0
  648. data/vendor/plugins/haml/test/sass/results/compact.css +0 -0
  649. data/vendor/plugins/haml/test/sass/results/complex.css +0 -0
  650. data/vendor/plugins/haml/test/sass/results/compressed.css +0 -0
  651. data/vendor/plugins/haml/test/sass/results/constants.css +0 -0
  652. data/vendor/plugins/haml/test/sass/results/expanded.css +0 -0
  653. data/vendor/plugins/haml/test/sass/results/import.css +0 -0
  654. data/vendor/plugins/haml/test/sass/results/mixins.css +0 -0
  655. data/vendor/plugins/haml/test/sass/results/multiline.css +0 -0
  656. data/vendor/plugins/haml/test/sass/results/nested.css +0 -0
  657. data/vendor/plugins/haml/test/sass/results/parent_ref.css +0 -0
  658. data/vendor/plugins/haml/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -0
  659. data/vendor/plugins/haml/test/sass/results/subdir/subdir.css +0 -0
  660. data/vendor/plugins/haml/test/sass/templates/_partial.sass +0 -0
  661. data/vendor/plugins/haml/test/sass/templates/alt.sass +0 -0
  662. data/vendor/plugins/haml/test/sass/templates/basic.sass +0 -0
  663. data/vendor/plugins/haml/test/sass/templates/bork.sass +0 -0
  664. data/vendor/plugins/haml/test/sass/templates/bork2.sass +0 -0
  665. data/vendor/plugins/haml/test/sass/templates/compact.sass +0 -0
  666. data/vendor/plugins/haml/test/sass/templates/complex.sass +0 -0
  667. data/vendor/plugins/haml/test/sass/templates/compressed.sass +0 -0
  668. data/vendor/plugins/haml/test/sass/templates/constants.sass +0 -0
  669. data/vendor/plugins/haml/test/sass/templates/expanded.sass +0 -0
  670. data/vendor/plugins/haml/test/sass/templates/import.sass +0 -0
  671. data/vendor/plugins/haml/test/sass/templates/importee.sass +0 -0
  672. data/vendor/plugins/haml/test/sass/templates/mixins.sass +0 -0
  673. data/vendor/plugins/haml/test/sass/templates/multiline.sass +0 -0
  674. data/vendor/plugins/haml/test/sass/templates/nested.sass +0 -0
  675. data/vendor/plugins/haml/test/sass/templates/parent_ref.sass +0 -0
  676. data/vendor/plugins/haml/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -0
  677. data/vendor/plugins/haml/test/sass/templates/subdir/subdir.sass +0 -0
  678. data/vendor/plugins/haml/test/test_helper.rb +11 -14
  679. data/vendor/rack-cache/CHANGES +128 -0
  680. data/vendor/rack-cache/COPYING +18 -0
  681. data/vendor/rack-cache/README +110 -0
  682. data/vendor/rack-cache/Rakefile +137 -0
  683. data/vendor/rack-cache/TODO +31 -0
  684. data/vendor/rack-cache/doc/configuration.markdown +86 -0
  685. data/vendor/rack-cache/doc/faq.markdown +141 -0
  686. data/vendor/rack-cache/doc/index.markdown +118 -0
  687. data/vendor/rack-cache/doc/layout.html.erb +34 -0
  688. data/vendor/rack-cache/doc/license.markdown +24 -0
  689. data/vendor/rack-cache/doc/rack-cache.css +362 -0
  690. data/vendor/rack-cache/doc/server.ru +34 -0
  691. data/vendor/rack-cache/doc/storage.markdown +162 -0
  692. data/vendor/rack-cache/example/sinatra/app.rb +25 -0
  693. data/vendor/rack-cache/example/sinatra/views/index.erb +44 -0
  694. data/vendor/rack-cache/lib/rack/cache.rb +45 -0
  695. data/vendor/rack-cache/lib/rack/cache/cachecontrol.rb +193 -0
  696. data/vendor/rack-cache/lib/rack/cache/context.rb +233 -0
  697. data/vendor/rack-cache/lib/rack/cache/entitystore.rb +253 -0
  698. data/vendor/rack-cache/lib/rack/cache/key.rb +52 -0
  699. data/vendor/rack-cache/lib/rack/cache/metastore.rb +328 -0
  700. data/vendor/rack-cache/lib/rack/cache/options.rb +150 -0
  701. data/vendor/rack-cache/lib/rack/cache/request.rb +33 -0
  702. data/vendor/rack-cache/lib/rack/cache/response.rb +267 -0
  703. data/vendor/rack-cache/lib/rack/cache/storage.rb +49 -0
  704. data/vendor/rack-cache/rack-cache.gemspec +69 -0
  705. data/vendor/rack-cache/test/cache_test.rb +38 -0
  706. data/vendor/rack-cache/test/cachecontrol_test.rb +139 -0
  707. data/vendor/rack-cache/test/context_test.rb +727 -0
  708. data/vendor/rack-cache/test/entitystore_test.rb +189 -0
  709. data/vendor/rack-cache/test/key_test.rb +50 -0
  710. data/vendor/rack-cache/test/metastore_test.rb +263 -0
  711. data/vendor/rack-cache/test/options_test.rb +78 -0
  712. data/vendor/rack-cache/test/pony.jpg +0 -0
  713. data/vendor/rack-cache/test/request_test.rb +19 -0
  714. data/vendor/rack-cache/test/response_test.rb +178 -0
  715. data/vendor/rack-cache/test/spec_setup.rb +202 -0
  716. data/vendor/rack-cache/test/storage_test.rb +94 -0
  717. data/vendor/radius/CHANGELOG +0 -0
  718. data/vendor/radius/QUICKSTART +0 -0
  719. data/vendor/radius/README +0 -0
  720. data/vendor/radius/ROADMAP +0 -0
  721. data/vendor/radius/Rakefile +0 -0
  722. data/vendor/radius/lib/radius.rb +0 -0
  723. data/vendor/radius/test/radius_test.rb +0 -0
  724. data/vendor/rails/actionmailer/CHANGELOG +23 -11
  725. data/vendor/rails/actionmailer/MIT-LICENSE +1 -1
  726. data/vendor/rails/actionmailer/README +0 -0
  727. data/vendor/rails/actionmailer/Rakefile +3 -5
  728. data/vendor/rails/actionmailer/install.rb +0 -0
  729. data/vendor/rails/actionmailer/lib/action_mailer.rb +30 -20
  730. data/vendor/rails/actionmailer/lib/action_mailer/adv_attr_accessor.rb +0 -0
  731. data/vendor/rails/actionmailer/lib/action_mailer/base.rb +118 -60
  732. data/vendor/rails/actionmailer/lib/action_mailer/helpers.rb +4 -2
  733. data/vendor/rails/actionmailer/lib/action_mailer/mail_helper.rb +0 -2
  734. data/vendor/rails/actionmailer/lib/action_mailer/part.rb +6 -9
  735. data/vendor/rails/actionmailer/lib/action_mailer/part_container.rb +5 -1
  736. data/vendor/rails/actionmailer/lib/action_mailer/quoting.rb +1 -1
  737. data/vendor/rails/actionmailer/lib/action_mailer/test_case.rb +1 -1
  738. data/vendor/rails/actionmailer/lib/action_mailer/test_helper.rb +1 -0
  739. data/vendor/rails/actionmailer/lib/action_mailer/utils.rb +0 -1
  740. data/vendor/rails/actionmailer/lib/action_mailer/vendor/text-format-0.6.3/text/format.rb +1 -1
  741. data/vendor/rails/actionmailer/lib/action_mailer/vendor/text_format.rb +10 -0
  742. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail.rb +0 -0
  743. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/address.rb +2 -2
  744. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/attachments.rb +0 -0
  745. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/base64.rb +0 -0
  746. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/compat.rb +0 -0
  747. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/config.rb +0 -0
  748. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/core_extensions.rb +0 -0
  749. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/encode.rb +0 -0
  750. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/header.rb +1 -1
  751. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/index.rb +0 -0
  752. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/interface.rb +1 -1
  753. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/loader.rb +0 -0
  754. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb +2 -2
  755. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mailbox.rb +0 -0
  756. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/main.rb +0 -0
  757. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mbox.rb +0 -0
  758. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb +0 -0
  759. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/obsolete.rb +0 -0
  760. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/parser.rb +0 -0
  761. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/port.rb +0 -0
  762. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/quoting.rb +0 -0
  763. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/require_arch.rb +0 -0
  764. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/scanner.rb +0 -0
  765. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/scanner_r.rb +0 -0
  766. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/stringio.rb +0 -0
  767. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/utils.rb +0 -0
  768. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/version.rb +0 -0
  769. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail.rb +17 -0
  770. data/vendor/rails/actionmailer/lib/action_mailer/version.rb +1 -1
  771. data/vendor/rails/actionmailer/lib/actionmailer.rb +0 -0
  772. data/vendor/rails/actionmailer/test/abstract_unit.rb +20 -11
  773. data/vendor/rails/actionmailer/test/asset_host_test.rb +54 -0
  774. data/vendor/rails/actionmailer/test/delivery_method_test.rb +0 -0
  775. data/vendor/rails/actionmailer/test/fixtures/asset_host_mailer/email_with_asset.html.erb +1 -0
  776. data/vendor/rails/actionmailer/test/fixtures/auto_layout_mailer/hello.html.erb +1 -0
  777. data/vendor/rails/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.html.erb +1 -0
  778. data/vendor/rails/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.plain.erb +1 -0
  779. data/vendor/rails/actionmailer/test/fixtures/explicit_layout_mailer/logout.html.erb +1 -0
  780. data/vendor/rails/actionmailer/test/fixtures/explicit_layout_mailer/signup.html.erb +1 -0
  781. data/vendor/rails/actionmailer/test/fixtures/first_mailer/share.erb +0 -0
  782. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_example_helper.erb +0 -0
  783. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_helper.erb +0 -0
  784. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_helper_method.erb +0 -0
  785. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_mail_helper.erb +0 -0
  786. data/vendor/rails/actionmailer/test/fixtures/helpers/example_helper.rb +0 -0
  787. data/vendor/rails/actionmailer/test/fixtures/layouts/auto_layout_mailer.html.erb +1 -0
  788. data/vendor/rails/actionmailer/test/fixtures/layouts/auto_layout_mailer.text.erb +1 -0
  789. data/vendor/rails/actionmailer/test/fixtures/layouts/spam.html.erb +1 -0
  790. data/vendor/rails/actionmailer/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.erb +0 -0
  791. data/vendor/rails/actionmailer/test/fixtures/raw_email +0 -0
  792. data/vendor/rails/actionmailer/test/fixtures/raw_email10 +0 -0
  793. data/vendor/rails/actionmailer/test/fixtures/raw_email12 +0 -0
  794. data/vendor/rails/actionmailer/test/fixtures/raw_email13 +0 -0
  795. data/vendor/rails/actionmailer/test/fixtures/raw_email2 +0 -0
  796. data/vendor/rails/actionmailer/test/fixtures/raw_email3 +0 -0
  797. data/vendor/rails/actionmailer/test/fixtures/raw_email4 +0 -0
  798. data/vendor/rails/actionmailer/test/fixtures/raw_email5 +0 -0
  799. data/vendor/rails/actionmailer/test/fixtures/raw_email6 +0 -0
  800. data/vendor/rails/actionmailer/test/fixtures/raw_email7 +0 -0
  801. data/vendor/rails/actionmailer/test/fixtures/raw_email8 +0 -0
  802. data/vendor/rails/actionmailer/test/fixtures/raw_email9 +0 -0
  803. data/vendor/rails/actionmailer/test/fixtures/raw_email_quoted_with_0d0a +0 -0
  804. data/vendor/rails/actionmailer/test/fixtures/raw_email_with_invalid_characters_in_content_type +0 -0
  805. data/vendor/rails/actionmailer/test/fixtures/raw_email_with_nested_attachment +0 -0
  806. data/vendor/rails/actionmailer/test/fixtures/raw_email_with_partially_quoted_subject +0 -0
  807. data/vendor/rails/actionmailer/test/fixtures/second_mailer/share.erb +0 -0
  808. data/vendor/rails/actionmailer/test/fixtures/templates/signed_up.erb +0 -0
  809. data/vendor/rails/actionmailer/test/fixtures/test_mailer/_subtemplate.text.plain.erb +0 -0
  810. data/vendor/rails/actionmailer/test/fixtures/test_mailer/body_ivar.erb +2 -0
  811. data/vendor/rails/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.html.haml +0 -0
  812. data/vendor/rails/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.plain.haml +0 -0
  813. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.erb +0 -0
  814. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb +0 -0
  815. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.erb +0 -0
  816. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.erb +0 -0
  817. data/vendor/rails/actionmailer/test/fixtures/test_mailer/included_subtemplate.text.plain.erb +0 -0
  818. data/vendor/rails/actionmailer/test/fixtures/test_mailer/rxml_template.builder +0 -0
  819. data/vendor/rails/actionmailer/test/fixtures/test_mailer/rxml_template.rxml +0 -0
  820. data/vendor/rails/actionmailer/test/fixtures/test_mailer/{signed_up.erb → signed_up.html.erb} +0 -0
  821. data/vendor/rails/actionmailer/test/fixtures/test_mailer/signed_up_with_url.erb +0 -0
  822. data/vendor/rails/actionmailer/test/mail_helper_test.rb +0 -0
  823. data/vendor/rails/actionmailer/test/mail_layout_test.rb +123 -0
  824. data/vendor/rails/actionmailer/test/mail_render_test.rb +3 -9
  825. data/vendor/rails/actionmailer/test/mail_service_test.rb +126 -27
  826. data/vendor/rails/actionmailer/test/quoting_test.rb +4 -3
  827. data/vendor/rails/actionmailer/test/test_helper_test.rb +5 -5
  828. data/vendor/rails/actionmailer/test/tmail_test.rb +0 -0
  829. data/vendor/rails/actionmailer/test/url_test.rb +0 -0
  830. data/vendor/rails/actionpack/CHANGELOG +698 -364
  831. data/vendor/rails/actionpack/MIT-LICENSE +1 -1
  832. data/vendor/rails/actionpack/README +26 -86
  833. data/vendor/rails/actionpack/RUNNING_UNIT_TESTS +0 -0
  834. data/vendor/rails/actionpack/Rakefile +11 -11
  835. data/vendor/rails/actionpack/install.rb +0 -0
  836. data/vendor/rails/actionpack/lib/action_controller.rb +86 -49
  837. data/vendor/rails/actionpack/lib/action_controller/assertions/dom_assertions.rb +0 -0
  838. data/vendor/rails/actionpack/lib/action_controller/assertions/model_assertions.rb +1 -0
  839. data/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb +65 -87
  840. data/vendor/rails/actionpack/lib/action_controller/assertions/routing_assertions.rb +34 -34
  841. data/vendor/rails/actionpack/lib/action_controller/assertions/selector_assertions.rb +26 -17
  842. data/vendor/rails/actionpack/lib/action_controller/assertions/tag_assertions.rb +1 -4
  843. data/vendor/rails/actionpack/lib/action_controller/base.rb +350 -210
  844. data/vendor/rails/actionpack/lib/action_controller/benchmarking.rb +39 -26
  845. data/vendor/rails/actionpack/lib/action_controller/caching.rb +9 -11
  846. data/vendor/rails/actionpack/lib/action_controller/caching/actions.rb +45 -20
  847. data/vendor/rails/actionpack/lib/action_controller/caching/fragments.rb +38 -56
  848. data/vendor/rails/actionpack/lib/action_controller/caching/pages.rb +13 -15
  849. data/vendor/rails/actionpack/lib/action_controller/caching/sweeping.rb +4 -4
  850. data/vendor/rails/actionpack/lib/action_controller/cgi_ext.rb +0 -1
  851. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/cookie.rb +2 -0
  852. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/query_extension.rb +0 -0
  853. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/stdinput.rb +0 -0
  854. data/vendor/rails/actionpack/lib/action_controller/cgi_process.rb +54 -200
  855. data/vendor/rails/actionpack/lib/action_controller/cookies.rb +23 -25
  856. data/vendor/rails/actionpack/lib/action_controller/dispatcher.rb +57 -101
  857. data/vendor/rails/actionpack/lib/action_controller/failsafe.rb +52 -0
  858. data/vendor/rails/actionpack/lib/action_controller/filters.rb +48 -10
  859. data/vendor/rails/actionpack/lib/action_controller/flash.rb +38 -47
  860. data/vendor/rails/actionpack/lib/action_controller/headers.rb +16 -14
  861. data/vendor/rails/actionpack/lib/action_controller/helpers.rb +15 -11
  862. data/vendor/rails/actionpack/lib/action_controller/http_authentication.rb +204 -24
  863. data/vendor/rails/actionpack/lib/action_controller/integration.rb +150 -97
  864. data/vendor/rails/actionpack/lib/action_controller/layout.rb +52 -81
  865. data/vendor/rails/actionpack/lib/action_controller/middleware_stack.rb +119 -0
  866. data/vendor/rails/actionpack/lib/action_controller/middlewares.rb +13 -0
  867. data/vendor/rails/actionpack/lib/action_controller/mime_responds.rb +24 -5
  868. data/vendor/rails/actionpack/lib/action_controller/mime_type.rb +72 -42
  869. data/vendor/rails/actionpack/lib/action_controller/mime_types.rb +2 -1
  870. data/vendor/rails/actionpack/lib/action_controller/params_parser.rb +71 -0
  871. data/vendor/rails/actionpack/lib/action_controller/performance_test.rb +15 -0
  872. data/vendor/rails/actionpack/lib/action_controller/polymorphic_routes.rb +44 -31
  873. data/vendor/rails/actionpack/lib/action_controller/record_identifier.rb +0 -0
  874. data/vendor/rails/actionpack/lib/action_controller/reloader.rb +14 -0
  875. data/vendor/rails/actionpack/lib/action_controller/request.rb +237 -512
  876. data/vendor/rails/actionpack/lib/action_controller/request_forgery_protection.rb +9 -41
  877. data/vendor/rails/actionpack/lib/action_controller/rescue.rb +72 -147
  878. data/vendor/rails/actionpack/lib/action_controller/resources.rb +196 -90
  879. data/vendor/rails/actionpack/lib/action_controller/response.rb +190 -34
  880. data/vendor/rails/actionpack/lib/action_controller/rewindable_input.rb +28 -0
  881. data/vendor/rails/actionpack/lib/action_controller/routing.rb +35 -37
  882. data/vendor/rails/actionpack/lib/action_controller/routing/builder.rb +49 -55
  883. data/vendor/rails/actionpack/lib/action_controller/routing/optimisations.rb +32 -22
  884. data/vendor/rails/actionpack/lib/action_controller/routing/recognition_optimisation.rb +34 -29
  885. data/vendor/rails/actionpack/lib/action_controller/routing/route.rb +171 -146
  886. data/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb +95 -43
  887. data/vendor/rails/actionpack/lib/action_controller/routing/routing_ext.rb +4 -1
  888. data/vendor/rails/actionpack/lib/action_controller/routing/segments.rb +91 -31
  889. data/vendor/rails/actionpack/lib/action_controller/session/abstract_store.rb +181 -0
  890. data/vendor/rails/actionpack/lib/action_controller/session/cookie_store.rb +198 -143
  891. data/vendor/rails/actionpack/lib/action_controller/session/mem_cache_store.rb +36 -83
  892. data/vendor/rails/actionpack/lib/action_controller/session_management.rb +26 -130
  893. data/vendor/rails/actionpack/lib/action_controller/status_codes.rb +0 -0
  894. data/vendor/rails/actionpack/lib/action_controller/streaming.rb +37 -13
  895. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/_request_and_response.erb +0 -0
  896. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/_trace.erb +0 -0
  897. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/diagnostics.erb +2 -2
  898. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/layout.erb +0 -0
  899. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/missing_template.erb +0 -0
  900. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/routing_error.erb +0 -0
  901. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/template_error.erb +2 -2
  902. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/unknown_action.erb +0 -0
  903. data/vendor/rails/actionpack/lib/action_controller/test_case.rb +148 -27
  904. data/vendor/rails/actionpack/lib/action_controller/test_process.rb +190 -144
  905. data/vendor/rails/actionpack/lib/action_controller/translation.rb +13 -0
  906. data/vendor/rails/actionpack/lib/action_controller/uploaded_file.rb +44 -0
  907. data/vendor/rails/actionpack/lib/action_controller/url_rewriter.rb +93 -19
  908. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner.rb +16 -0
  909. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/document.rb +0 -0
  910. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/node.rb +9 -2
  911. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +1 -1
  912. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/selector.rb +3 -3
  913. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +0 -0
  914. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/version.rb +0 -0
  915. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack.rb +89 -0
  916. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/adapter/camping.rb +22 -0
  917. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/abstract/handler.rb +37 -0
  918. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/abstract/request.rb +37 -0
  919. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/basic.rb +58 -0
  920. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/md5.rb +124 -0
  921. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/nonce.rb +51 -0
  922. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/params.rb +55 -0
  923. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/request.rb +40 -0
  924. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/openid.rb +480 -0
  925. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/builder.rb +63 -0
  926. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/cascade.rb +36 -0
  927. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/chunked.rb +49 -0
  928. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/commonlogger.rb +61 -0
  929. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/conditionalget.rb +45 -0
  930. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/content_length.rb +29 -0
  931. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/content_type.rb +23 -0
  932. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/deflater.rb +85 -0
  933. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/directory.rb +153 -0
  934. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/file.rb +88 -0
  935. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler.rb +48 -0
  936. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/cgi.rb +61 -0
  937. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/evented_mongrel.rb +8 -0
  938. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/fastcgi.rb +89 -0
  939. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/lsws.rb +55 -0
  940. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb +84 -0
  941. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/scgi.rb +59 -0
  942. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/swiftiplied_mongrel.rb +8 -0
  943. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/thin.rb +18 -0
  944. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/webrick.rb +67 -0
  945. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/head.rb +19 -0
  946. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/lint.rb +462 -0
  947. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/lobster.rb +65 -0
  948. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/lock.rb +16 -0
  949. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/methodoverride.rb +27 -0
  950. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/mime.rb +204 -0
  951. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/mock.rb +160 -0
  952. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/recursive.rb +57 -0
  953. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/reloader.rb +64 -0
  954. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/request.rb +241 -0
  955. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/response.rb +179 -0
  956. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/abstract/id.rb +142 -0
  957. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/cookie.rb +91 -0
  958. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/memcache.rb +109 -0
  959. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/pool.rb +100 -0
  960. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/showexceptions.rb +349 -0
  961. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/showstatus.rb +106 -0
  962. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/static.rb +38 -0
  963. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/urlmap.rb +55 -0
  964. data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb +392 -0
  965. data/vendor/rails/actionpack/lib/action_controller/verification.rb +3 -3
  966. data/vendor/rails/actionpack/lib/action_pack.rb +1 -1
  967. data/vendor/rails/actionpack/lib/action_pack/version.rb +1 -1
  968. data/vendor/rails/actionpack/lib/action_view.rb +32 -19
  969. data/vendor/rails/actionpack/lib/action_view/base.rb +164 -154
  970. data/vendor/rails/actionpack/lib/action_view/erb/util.rb +38 -0
  971. data/vendor/rails/actionpack/lib/action_view/helpers.rb +57 -0
  972. data/vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb +56 -27
  973. data/vendor/rails/actionpack/lib/action_view/helpers/asset_tag_helper.rb +194 -126
  974. data/vendor/rails/actionpack/lib/action_view/helpers/atom_feed_helper.rb +75 -20
  975. data/vendor/rails/actionpack/lib/action_view/helpers/benchmark_helper.rb +27 -6
  976. data/vendor/rails/actionpack/lib/action_view/helpers/cache_helper.rb +1 -2
  977. data/vendor/rails/actionpack/lib/action_view/helpers/capture_helper.rb +19 -44
  978. data/vendor/rails/actionpack/lib/action_view/helpers/date_helper.rb +564 -299
  979. data/vendor/rails/actionpack/lib/action_view/helpers/debug_helper.rb +20 -13
  980. data/vendor/rails/actionpack/lib/action_view/helpers/form_helper.rb +365 -93
  981. data/vendor/rails/actionpack/lib/action_view/helpers/form_options_helper.rb +168 -96
  982. data/vendor/rails/actionpack/lib/action_view/helpers/form_tag_helper.rb +63 -40
  983. data/vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb +80 -89
  984. data/vendor/rails/actionpack/lib/action_view/helpers/number_helper.rb +192 -75
  985. data/vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb +218 -213
  986. data/vendor/rails/actionpack/lib/action_view/helpers/record_identification_helper.rb +0 -0
  987. data/vendor/rails/actionpack/lib/action_view/helpers/record_tag_helper.rb +4 -5
  988. data/vendor/rails/actionpack/lib/action_view/helpers/sanitize_helper.rb +55 -33
  989. data/vendor/rails/actionpack/lib/action_view/helpers/scriptaculous_helper.rb +3 -2
  990. data/vendor/rails/actionpack/lib/action_view/helpers/tag_helper.rb +41 -25
  991. data/vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb +294 -223
  992. data/vendor/rails/actionpack/lib/action_view/helpers/translation_helper.rb +39 -0
  993. data/vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb +124 -59
  994. data/vendor/rails/actionpack/lib/action_view/inline_template.rb +13 -14
  995. data/vendor/rails/actionpack/lib/action_view/locale/en.yml +110 -0
  996. data/vendor/rails/actionpack/lib/action_view/partials.rb +137 -55
  997. data/vendor/rails/actionpack/lib/action_view/paths.rb +69 -0
  998. data/vendor/rails/actionpack/lib/action_view/reloadable_template.rb +117 -0
  999. data/vendor/rails/actionpack/lib/action_view/renderable.rb +95 -0
  1000. data/vendor/rails/actionpack/lib/action_view/renderable_partial.rb +47 -0
  1001. data/vendor/rails/actionpack/lib/action_view/template.rb +223 -93
  1002. data/vendor/rails/actionpack/lib/action_view/template_error.rb +18 -29
  1003. data/vendor/rails/actionpack/lib/action_view/template_handler.rb +23 -23
  1004. data/vendor/rails/actionpack/lib/action_view/template_handlers.rb +48 -0
  1005. data/vendor/rails/actionpack/lib/action_view/template_handlers/builder.rb +5 -15
  1006. data/vendor/rails/actionpack/lib/action_view/template_handlers/erb.rb +11 -45
  1007. data/vendor/rails/actionpack/lib/action_view/template_handlers/rjs.rb +3 -17
  1008. data/vendor/rails/actionpack/lib/action_view/test_case.rb +34 -5
  1009. data/vendor/rails/actionpack/lib/actionpack.rb +0 -0
  1010. data/vendor/rails/actionpack/test/abstract_unit.rb +25 -16
  1011. data/vendor/rails/actionpack/test/active_record_unit.rb +32 -33
  1012. data/vendor/rails/actionpack/test/activerecord/active_record_store_test.rb +139 -106
  1013. data/vendor/rails/actionpack/test/activerecord/render_partial_with_record_identification_test.rb +27 -30
  1014. data/vendor/rails/actionpack/test/adv_attr_test.rb +0 -0
  1015. data/vendor/rails/actionpack/test/controller/action_pack_assertions_test.rb +30 -57
  1016. data/vendor/rails/actionpack/test/controller/addresses_render_test.rb +2 -8
  1017. data/vendor/rails/actionpack/test/controller/assert_select_test.rb +125 -85
  1018. data/vendor/rails/actionpack/test/controller/base_test.rb +15 -17
  1019. data/vendor/rails/actionpack/test/controller/benchmark_test.rb +3 -3
  1020. data/vendor/rails/actionpack/test/controller/caching_test.rb +161 -81
  1021. data/vendor/rails/actionpack/test/controller/capture_test.rb +3 -26
  1022. data/vendor/rails/actionpack/test/controller/content_type_test.rb +51 -22
  1023. data/vendor/rails/actionpack/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  1024. data/vendor/rails/actionpack/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  1025. data/vendor/rails/actionpack/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  1026. data/vendor/rails/actionpack/test/controller/cookie_test.rb +32 -67
  1027. data/vendor/rails/actionpack/test/controller/deprecation/deprecated_base_methods_test.rb +9 -14
  1028. data/vendor/rails/actionpack/test/controller/dispatcher_test.rb +26 -28
  1029. data/vendor/rails/actionpack/test/controller/fake_controllers.rb +0 -0
  1030. data/vendor/rails/actionpack/test/controller/fake_models.rb +8 -0
  1031. data/vendor/rails/actionpack/test/controller/filter_params_test.rb +2 -2
  1032. data/vendor/rails/actionpack/test/controller/filters_test.rb +19 -15
  1033. data/vendor/rails/actionpack/test/controller/flash_test.rb +2 -6
  1034. data/vendor/rails/actionpack/test/controller/header_test.rb +0 -0
  1035. data/vendor/rails/actionpack/test/controller/helper_test.rb +15 -1
  1036. data/vendor/rails/actionpack/test/controller/html-scanner/cdata_node_test.rb +15 -0
  1037. data/vendor/rails/actionpack/test/controller/html-scanner/document_test.rb +1 -1
  1038. data/vendor/rails/actionpack/test/controller/html-scanner/node_test.rb +21 -0
  1039. data/vendor/rails/actionpack/test/controller/html-scanner/sanitizer_test.rb +15 -1
  1040. data/vendor/rails/actionpack/test/controller/html-scanner/tag_node_test.rb +0 -0
  1041. data/vendor/rails/actionpack/test/controller/html-scanner/text_node_test.rb +0 -0
  1042. data/vendor/rails/actionpack/test/controller/html-scanner/tokenizer_test.rb +0 -0
  1043. data/vendor/rails/actionpack/test/controller/http_basic_authentication_test.rb +88 -0
  1044. data/vendor/rails/actionpack/test/controller/http_digest_authentication_test.rb +178 -0
  1045. data/vendor/rails/actionpack/test/controller/integration_test.rb +198 -33
  1046. data/vendor/rails/actionpack/test/controller/layout_test.rb +53 -108
  1047. data/vendor/rails/actionpack/test/controller/logging_test.rb +46 -0
  1048. data/vendor/rails/actionpack/test/controller/middleware_stack_test.rb +90 -0
  1049. data/vendor/rails/actionpack/test/controller/mime_responds_test.rb +67 -69
  1050. data/vendor/rails/actionpack/test/controller/mime_type_test.rb +14 -5
  1051. data/vendor/rails/actionpack/test/controller/polymorphic_routes_test.rb +241 -122
  1052. data/vendor/rails/actionpack/test/controller/rack_test.rb +294 -0
  1053. data/vendor/rails/actionpack/test/controller/record_identifier_test.rb +0 -0
  1054. data/vendor/rails/actionpack/test/controller/redirect_test.rb +78 -85
  1055. data/vendor/rails/actionpack/test/controller/render_test.rb +1459 -234
  1056. data/vendor/rails/actionpack/test/controller/request/json_params_parsing_test.rb +45 -0
  1057. data/vendor/rails/actionpack/test/controller/request/multipart_params_parsing_test.rb +223 -0
  1058. data/vendor/rails/actionpack/test/controller/request/query_string_parsing_test.rb +120 -0
  1059. data/vendor/rails/actionpack/test/controller/request/url_encoded_params_parsing_test.rb +184 -0
  1060. data/vendor/rails/actionpack/test/controller/request/xml_params_parsing_test.rb +88 -0
  1061. data/vendor/rails/actionpack/test/controller/request_forgery_protection_test.rb +63 -130
  1062. data/vendor/rails/actionpack/test/controller/request_test.rb +65 -586
  1063. data/vendor/rails/actionpack/test/controller/rescue_test.rb +63 -44
  1064. data/vendor/rails/actionpack/test/controller/resources_test.rb +505 -37
  1065. data/vendor/rails/actionpack/test/controller/routing_test.rb +1570 -1477
  1066. data/vendor/rails/actionpack/test/controller/selector_test.rb +3 -3
  1067. data/vendor/rails/actionpack/test/controller/send_file_test.rb +30 -7
  1068. data/vendor/rails/actionpack/test/controller/session/cookie_store_test.rb +171 -190
  1069. data/vendor/rails/actionpack/test/controller/session/mem_cache_store_test.rb +94 -148
  1070. data/vendor/rails/actionpack/test/controller/session/test_session_test.rb +58 -0
  1071. data/vendor/rails/actionpack/test/controller/test_test.rb +47 -50
  1072. data/vendor/rails/actionpack/test/controller/translation_test.rb +26 -0
  1073. data/vendor/rails/actionpack/test/controller/url_rewriter_test.rb +80 -31
  1074. data/vendor/rails/actionpack/test/controller/verification_test.rb +1 -1
  1075. data/vendor/rails/actionpack/test/controller/view_paths_test.rb +49 -48
  1076. data/vendor/rails/actionpack/test/controller/webservice_test.rb +178 -147
  1077. data/vendor/rails/actionpack/test/fixtures/_top_level_partial.html.erb +1 -0
  1078. data/vendor/rails/actionpack/test/fixtures/_top_level_partial_only.erb +1 -0
  1079. data/vendor/rails/actionpack/test/fixtures/addresses/list.erb +0 -0
  1080. data/vendor/rails/actionpack/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  1081. data/vendor/rails/actionpack/test/fixtures/bad_customers/_bad_customer.html.erb +0 -0
  1082. data/vendor/rails/actionpack/test/fixtures/companies.yml +0 -0
  1083. data/vendor/rails/actionpack/test/fixtures/company.rb +0 -0
  1084. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -0
  1085. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -0
  1086. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_for_rjs.rjs +0 -0
  1087. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_for_rxml.rxml +0 -0
  1088. data/vendor/rails/actionpack/test/fixtures/customers/_customer.html.erb +0 -0
  1089. data/vendor/rails/actionpack/test/fixtures/db_definitions/sqlite.sql +0 -0
  1090. data/vendor/rails/actionpack/test/fixtures/developer.rb +0 -0
  1091. data/vendor/rails/actionpack/test/fixtures/developers.yml +0 -0
  1092. data/vendor/rails/actionpack/test/fixtures/developers/_developer.erb +1 -0
  1093. data/vendor/rails/actionpack/test/fixtures/developers_projects.yml +0 -0
  1094. data/vendor/rails/actionpack/test/fixtures/fun/games/_game.erb +1 -0
  1095. data/vendor/rails/actionpack/test/fixtures/fun/games/hello_world.erb +0 -0
  1096. data/vendor/rails/actionpack/test/fixtures/fun/serious/games/_game.erb +1 -0
  1097. data/vendor/rails/actionpack/test/fixtures/functional_caching/_partial.erb +0 -0
  1098. data/vendor/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  1099. data/vendor/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  1100. data/vendor/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  1101. data/vendor/rails/actionpack/test/fixtures/functional_caching/fragment_cached.html.erb +0 -0
  1102. data/vendor/rails/actionpack/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -0
  1103. data/vendor/rails/actionpack/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  1104. data/vendor/rails/actionpack/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -0
  1105. data/vendor/rails/actionpack/test/fixtures/good_customers/_good_customer.html.erb +0 -0
  1106. data/vendor/rails/actionpack/test/fixtures/helpers/abc_helper.rb +0 -0
  1107. data/vendor/rails/actionpack/test/fixtures/helpers/fun/games_helper.rb +0 -0
  1108. data/vendor/rails/actionpack/test/fixtures/helpers/fun/pdf_helper.rb +0 -0
  1109. data/vendor/rails/actionpack/test/fixtures/layout_tests/alt/hello.rhtml +0 -0
  1110. data/vendor/rails/actionpack/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  1111. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -0
  1112. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/item.rhtml +0 -0
  1113. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -0
  1114. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -0
  1115. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -0
  1116. data/vendor/rails/actionpack/test/fixtures/layout_tests/views/hello.rhtml +0 -0
  1117. data/vendor/rails/actionpack/test/fixtures/layouts/_column.html.erb +2 -0
  1118. data/vendor/rails/actionpack/test/fixtures/layouts/block_with_layout.erb +0 -0
  1119. data/vendor/rails/actionpack/test/fixtures/layouts/builder.builder +0 -0
  1120. data/vendor/rails/actionpack/test/fixtures/layouts/default_html.html.erb +1 -0
  1121. data/vendor/rails/actionpack/test/fixtures/layouts/partial_with_layout.erb +0 -0
  1122. data/vendor/rails/actionpack/test/fixtures/layouts/standard.erb +0 -0
  1123. data/vendor/rails/actionpack/test/fixtures/layouts/talk_from_action.erb +0 -0
  1124. data/vendor/rails/actionpack/test/fixtures/layouts/xhr.html.erb +2 -0
  1125. data/vendor/rails/actionpack/test/fixtures/layouts/yield.erb +0 -0
  1126. data/vendor/rails/actionpack/test/fixtures/mascot.rb +0 -0
  1127. data/vendor/rails/actionpack/test/fixtures/mascots.yml +0 -0
  1128. data/vendor/rails/actionpack/test/fixtures/mascots/_mascot.html.erb +0 -0
  1129. data/vendor/rails/actionpack/test/fixtures/multipart/binary_file +0 -0
  1130. data/vendor/rails/actionpack/test/fixtures/multipart/boundary_problem_file +0 -0
  1131. data/vendor/rails/actionpack/test/fixtures/multipart/bracketed_param +0 -0
  1132. data/vendor/rails/actionpack/test/fixtures/multipart/empty +10 -0
  1133. data/vendor/rails/actionpack/test/fixtures/multipart/hello.txt +1 -0
  1134. data/vendor/rails/actionpack/test/fixtures/multipart/large_text_file +0 -0
  1135. data/vendor/rails/actionpack/test/fixtures/multipart/mixed_files +0 -0
  1136. data/vendor/rails/actionpack/test/fixtures/multipart/mona_lisa.jpg +0 -0
  1137. data/vendor/rails/actionpack/test/fixtures/multipart/none +9 -0
  1138. data/vendor/rails/actionpack/test/fixtures/multipart/single_parameter +0 -0
  1139. data/vendor/rails/actionpack/test/fixtures/multipart/text_file +0 -0
  1140. data/vendor/rails/actionpack/test/fixtures/override/test/hello_world.erb +0 -0
  1141. data/vendor/rails/actionpack/test/fixtures/override2/layouts/test/sub.erb +0 -0
  1142. data/vendor/rails/actionpack/test/fixtures/post_test/layouts/post.html.erb +0 -0
  1143. data/vendor/rails/actionpack/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -0
  1144. data/vendor/rails/actionpack/test/fixtures/post_test/post/index.html.erb +0 -0
  1145. data/vendor/rails/actionpack/test/fixtures/post_test/post/index.iphone.erb +0 -0
  1146. data/vendor/rails/actionpack/test/fixtures/post_test/super_post/index.html.erb +0 -0
  1147. data/vendor/rails/actionpack/test/fixtures/post_test/super_post/index.iphone.erb +0 -0
  1148. data/vendor/rails/actionpack/test/fixtures/project.rb +0 -0
  1149. data/vendor/rails/actionpack/test/fixtures/projects.yml +0 -0
  1150. data/vendor/rails/actionpack/test/fixtures/projects/_project.erb +1 -0
  1151. data/vendor/rails/actionpack/test/fixtures/public/404.html +0 -0
  1152. data/vendor/rails/actionpack/test/fixtures/public/500.da.html +1 -0
  1153. data/vendor/rails/actionpack/test/fixtures/public/500.html +0 -0
  1154. data/vendor/rails/actionpack/test/fixtures/public/images/rails.png +0 -0
  1155. data/vendor/rails/actionpack/test/fixtures/public/javascripts/application.js +0 -0
  1156. data/vendor/rails/actionpack/test/fixtures/public/javascripts/bank.js +0 -0
  1157. data/vendor/rails/actionpack/test/fixtures/public/javascripts/controls.js +0 -0
  1158. data/vendor/rails/actionpack/test/fixtures/public/javascripts/dragdrop.js +0 -0
  1159. data/vendor/rails/actionpack/test/fixtures/public/javascripts/effects.js +0 -0
  1160. data/vendor/rails/actionpack/test/fixtures/public/javascripts/prototype.js +0 -0
  1161. data/vendor/rails/actionpack/test/fixtures/public/javascripts/robber.js +0 -0
  1162. data/vendor/rails/actionpack/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  1163. data/vendor/rails/actionpack/test/fixtures/public/javascripts/version.1.0.js +0 -0
  1164. data/vendor/rails/actionpack/test/fixtures/public/stylesheets/bank.css +0 -0
  1165. data/vendor/rails/actionpack/test/fixtures/public/stylesheets/robber.css +0 -0
  1166. data/vendor/rails/actionpack/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  1167. data/vendor/rails/actionpack/test/fixtures/public/stylesheets/version.1.0.css +0 -0
  1168. data/vendor/rails/actionpack/test/fixtures/quiz/questions/_question.html.erb +1 -0
  1169. data/vendor/rails/actionpack/test/fixtures/replies.yml +1 -1
  1170. data/vendor/rails/actionpack/test/fixtures/replies/_reply.erb +1 -0
  1171. data/vendor/rails/actionpack/test/fixtures/reply.rb +0 -0
  1172. data/vendor/rails/actionpack/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -0
  1173. data/vendor/rails/actionpack/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -0
  1174. data/vendor/rails/actionpack/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -0
  1175. data/vendor/rails/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -0
  1176. data/vendor/rails/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -0
  1177. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/missing.html.erb +0 -0
  1178. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/standard.html.erb +0 -0
  1179. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -0
  1180. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.html.erb +0 -0
  1181. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.js.rjs +0 -0
  1182. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.xml.builder +0 -0
  1183. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -0
  1184. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -0
  1185. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -0
  1186. data/vendor/rails/actionpack/test/fixtures/scope/test/modgreet.erb +0 -0
  1187. data/vendor/rails/actionpack/test/fixtures/shared.html.erb +0 -0
  1188. data/vendor/rails/actionpack/test/fixtures/symlink_parent/symlinked_layout.erb +0 -0
  1189. data/vendor/rails/actionpack/test/fixtures/test/_counter.html.erb +1 -0
  1190. data/vendor/rails/actionpack/test/fixtures/test/_customer.erb +1 -1
  1191. data/vendor/rails/actionpack/test/fixtures/test/_customer_counter.erb +0 -0
  1192. data/vendor/rails/actionpack/test/fixtures/test/_customer_greeting.erb +0 -0
  1193. data/vendor/rails/actionpack/test/fixtures/test/_customer_with_var.erb +1 -0
  1194. data/vendor/rails/actionpack/test/fixtures/test/_form.erb +0 -0
  1195. data/vendor/rails/actionpack/test/fixtures/test/_hash_greeting.erb +0 -0
  1196. data/vendor/rails/actionpack/test/fixtures/test/_hash_object.erb +0 -0
  1197. data/vendor/rails/actionpack/test/fixtures/test/_hello.builder +0 -0
  1198. data/vendor/rails/actionpack/test/fixtures/test/_labelling_form.erb +0 -0
  1199. data/vendor/rails/actionpack/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  1200. data/vendor/rails/actionpack/test/fixtures/test/_layout_for_partial.html.erb +0 -0
  1201. data/vendor/rails/actionpack/test/fixtures/test/_local_inspector.html.erb +1 -0
  1202. data/vendor/rails/actionpack/test/fixtures/test/_one.html.erb +1 -0
  1203. data/vendor/rails/actionpack/test/fixtures/test/_partial.erb +0 -0
  1204. data/vendor/rails/actionpack/test/fixtures/test/_partial.html.erb +0 -0
  1205. data/vendor/rails/actionpack/test/fixtures/test/_partial.js.erb +0 -0
  1206. data/vendor/rails/actionpack/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -0
  1207. data/vendor/rails/actionpack/test/fixtures/test/_partial_only.erb +0 -0
  1208. data/vendor/rails/actionpack/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  1209. data/vendor/rails/actionpack/test/fixtures/test/_person.erb +0 -0
  1210. data/vendor/rails/actionpack/test/fixtures/test/_raise.html.erb +0 -0
  1211. data/vendor/rails/actionpack/test/fixtures/test/_two.html.erb +1 -0
  1212. data/vendor/rails/actionpack/test/fixtures/test/action_talk_to_layout.erb +0 -0
  1213. data/vendor/rails/actionpack/test/fixtures/test/calling_partial_with_layout.html.erb +0 -0
  1214. data/vendor/rails/actionpack/test/fixtures/test/capturing.erb +0 -0
  1215. data/vendor/rails/actionpack/test/fixtures/test/content_for.erb +0 -0
  1216. data/vendor/rails/actionpack/test/fixtures/test/content_for_concatenated.erb +0 -0
  1217. data/vendor/rails/actionpack/test/fixtures/test/content_for_with_parameter.erb +0 -0
  1218. data/vendor/rails/actionpack/test/fixtures/test/delete_with_js.rjs +0 -0
  1219. data/vendor/rails/actionpack/test/fixtures/test/dont_pick_me +1 -0
  1220. data/vendor/rails/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -0
  1221. data/vendor/rails/actionpack/test/fixtures/test/enum_rjs_test.rjs +0 -0
  1222. data/vendor/rails/actionpack/test/fixtures/test/formatted_html_erb.html.erb +0 -0
  1223. data/vendor/rails/actionpack/test/fixtures/test/formatted_xml_erb.builder +0 -0
  1224. data/vendor/rails/actionpack/test/fixtures/test/formatted_xml_erb.html.erb +0 -0
  1225. data/vendor/rails/actionpack/test/fixtures/test/formatted_xml_erb.xml.erb +0 -0
  1226. data/vendor/rails/actionpack/test/fixtures/test/greeting.erb +0 -0
  1227. data/vendor/rails/actionpack/test/fixtures/test/greeting.js.rjs +0 -0
  1228. data/vendor/rails/actionpack/test/fixtures/test/hello.builder +1 -1
  1229. data/vendor/rails/actionpack/test/fixtures/test/hello_world.da.html.erb +1 -0
  1230. data/vendor/rails/actionpack/test/fixtures/test/hello_world.erb +0 -0
  1231. data/vendor/rails/actionpack/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  1232. data/vendor/rails/actionpack/test/fixtures/test/hello_world_container.builder +0 -0
  1233. data/vendor/rails/actionpack/test/fixtures/test/hello_world_from_rxml.builder +0 -0
  1234. data/vendor/rails/actionpack/test/fixtures/test/hello_world_with_layout_false.erb +0 -0
  1235. data/vendor/rails/actionpack/test/fixtures/test/hello_xml_world.builder +0 -0
  1236. data/vendor/rails/actionpack/test/fixtures/test/hyphen-ated.erb +1 -0
  1237. data/vendor/rails/actionpack/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  1238. data/vendor/rails/actionpack/test/fixtures/test/list.erb +0 -0
  1239. data/vendor/rails/actionpack/test/fixtures/test/nested_layout.erb +3 -0
  1240. data/vendor/rails/actionpack/test/fixtures/test/non_erb_block_content_for.builder +1 -1
  1241. data/vendor/rails/actionpack/test/fixtures/test/potential_conflicts.erb +0 -0
  1242. data/vendor/rails/actionpack/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  1243. data/vendor/rails/actionpack/test/fixtures/test/render_file_from_template.html.erb +0 -0
  1244. data/vendor/rails/actionpack/test/fixtures/test/render_file_with_ivar.erb +0 -0
  1245. data/vendor/rails/actionpack/test/fixtures/test/render_file_with_locals.erb +0 -0
  1246. data/vendor/rails/actionpack/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  1247. data/vendor/rails/actionpack/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  1248. data/vendor/rails/actionpack/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  1249. data/vendor/rails/actionpack/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  1250. data/vendor/rails/actionpack/test/fixtures/test/render_to_string_test.erb +0 -0
  1251. data/vendor/rails/actionpack/test/fixtures/test/sub_template_raise.html.erb +1 -0
  1252. data/vendor/rails/actionpack/test/fixtures/test/template.erb +1 -0
  1253. data/vendor/rails/actionpack/test/fixtures/test/update_element_with_capture.erb +0 -0
  1254. data/vendor/rails/actionpack/test/fixtures/test/using_layout_around_block.html.erb +0 -0
  1255. data/vendor/rails/actionpack/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  1256. data/vendor/rails/actionpack/test/fixtures/test/utf8.html.erb +2 -0
  1257. data/vendor/rails/actionpack/test/fixtures/topic.rb +0 -0
  1258. data/vendor/rails/actionpack/test/fixtures/topics.yml +0 -0
  1259. data/vendor/rails/actionpack/test/fixtures/topics/_topic.html.erb +0 -0
  1260. data/vendor/rails/actionpack/test/template/active_record_helper_i18n_test.rb +44 -0
  1261. data/vendor/rails/actionpack/test/template/active_record_helper_test.rb +58 -24
  1262. data/vendor/rails/actionpack/test/template/asset_tag_helper_test.rb +217 -29
  1263. data/vendor/rails/actionpack/test/template/atom_feed_helper_test.rb +117 -10
  1264. data/vendor/rails/actionpack/test/template/benchmark_helper_test.rb +50 -24
  1265. data/vendor/rails/actionpack/test/template/compiled_templates_test.rb +203 -0
  1266. data/vendor/rails/actionpack/test/template/date_helper_i18n_test.rb +120 -0
  1267. data/vendor/rails/actionpack/test/template/date_helper_test.rb +822 -144
  1268. data/vendor/rails/actionpack/test/template/erb_util_test.rb +0 -0
  1269. data/vendor/rails/actionpack/test/template/form_helper_test.rb +454 -196
  1270. data/vendor/rails/actionpack/test/template/form_options_helper_test.rb +653 -1235
  1271. data/vendor/rails/actionpack/test/template/form_tag_helper_test.rb +89 -34
  1272. data/vendor/rails/actionpack/test/template/javascript_helper_test.rb +16 -22
  1273. data/vendor/rails/actionpack/test/template/number_helper_i18n_test.rb +69 -0
  1274. data/vendor/rails/actionpack/test/template/number_helper_test.rb +44 -13
  1275. data/vendor/rails/actionpack/test/template/prototype_helper_test.rb +101 -84
  1276. data/vendor/rails/actionpack/test/template/record_tag_helper_test.rb +24 -20
  1277. data/vendor/rails/actionpack/test/template/render_test.rb +290 -0
  1278. data/vendor/rails/actionpack/test/template/sanitize_helper_test.rb +3 -3
  1279. data/vendor/rails/actionpack/test/template/scriptaculous_helper_test.rb +0 -0
  1280. data/vendor/rails/actionpack/test/template/tag_helper_test.rb +34 -14
  1281. data/vendor/rails/actionpack/test/template/test_test.rb +4 -6
  1282. data/vendor/rails/actionpack/test/template/text_helper_test.rb +210 -57
  1283. data/vendor/rails/actionpack/test/template/translation_helper_test.rb +32 -0
  1284. data/vendor/rails/actionpack/test/template/url_helper_test.rb +88 -18
  1285. data/vendor/rails/actionpack/test/testing_sandbox.rb +0 -0
  1286. data/vendor/rails/actionpack/test/view/test_case_test.rb +8 -0
  1287. data/vendor/rails/activerecord/CHANGELOG +466 -394
  1288. data/vendor/rails/activerecord/README +0 -0
  1289. data/vendor/rails/activerecord/RUNNING_UNIT_TESTS +0 -0
  1290. data/vendor/rails/activerecord/Rakefile +12 -7
  1291. data/vendor/rails/activerecord/examples/associations.png +0 -0
  1292. data/vendor/rails/activerecord/install.rb +0 -0
  1293. data/vendor/rails/activerecord/lib/active_record.rb +56 -52
  1294. data/vendor/rails/activerecord/lib/active_record/aggregations.rb +110 -38
  1295. data/vendor/rails/activerecord/lib/active_record/association_preload.rb +135 -31
  1296. data/vendor/rails/activerecord/lib/active_record/associations.rb +578 -421
  1297. data/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb +136 -34
  1298. data/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb +73 -14
  1299. data/vendor/rails/activerecord/lib/active_record/associations/belongs_to_association.rb +2 -2
  1300. data/vendor/rails/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb +0 -0
  1301. data/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb +24 -8
  1302. data/vendor/rails/activerecord/lib/active_record/associations/has_many_association.rb +30 -30
  1303. data/vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb +29 -27
  1304. data/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb +35 -9
  1305. data/vendor/rails/activerecord/lib/active_record/associations/has_one_through_association.rb +3 -4
  1306. data/vendor/rails/activerecord/lib/active_record/attribute_methods.rb +14 -5
  1307. data/vendor/rails/activerecord/lib/active_record/autosave_association.rb +349 -0
  1308. data/vendor/rails/activerecord/lib/active_record/base.rb +692 -281
  1309. data/vendor/rails/activerecord/lib/active_record/batches.rb +73 -0
  1310. data/vendor/rails/activerecord/lib/active_record/calculations.rb +46 -21
  1311. data/vendor/rails/activerecord/lib/active_record/callbacks.rb +65 -17
  1312. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +371 -0
  1313. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +45 -215
  1314. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +133 -20
  1315. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb +8 -7
  1316. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +0 -0
  1317. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +75 -31
  1318. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +10 -4
  1319. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +94 -29
  1320. data/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +124 -66
  1321. data/vendor/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +147 -91
  1322. data/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
  1323. data/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +41 -21
  1324. data/vendor/rails/activerecord/lib/active_record/dirty.rb +28 -10
  1325. data/vendor/rails/activerecord/lib/active_record/dynamic_finder_match.rb +41 -0
  1326. data/vendor/rails/activerecord/lib/active_record/dynamic_scope_match.rb +25 -0
  1327. data/vendor/rails/activerecord/lib/active_record/fixtures.rb +196 -200
  1328. data/vendor/rails/activerecord/lib/active_record/i18n_interpolation_deprecation.rb +26 -0
  1329. data/vendor/rails/activerecord/lib/active_record/locale/en.yml +54 -0
  1330. data/vendor/rails/activerecord/lib/active_record/locking/optimistic.rb +33 -0
  1331. data/vendor/rails/activerecord/lib/active_record/locking/pessimistic.rb +0 -0
  1332. data/vendor/rails/activerecord/lib/active_record/migration.rb +55 -12
  1333. data/vendor/rails/activerecord/lib/active_record/named_scope.rb +49 -20
  1334. data/vendor/rails/activerecord/lib/active_record/nested_attributes.rb +329 -0
  1335. data/vendor/rails/activerecord/lib/active_record/observer.rb +0 -0
  1336. data/vendor/rails/activerecord/lib/active_record/query_cache.rb +25 -13
  1337. data/vendor/rails/activerecord/lib/active_record/reflection.rb +132 -55
  1338. data/vendor/rails/activerecord/lib/active_record/schema.rb +0 -0
  1339. data/vendor/rails/activerecord/lib/active_record/schema_dumper.rb +15 -7
  1340. data/vendor/rails/activerecord/lib/active_record/serialization.rb +3 -1
  1341. data/vendor/rails/activerecord/lib/active_record/serializers/json_serializer.rb +19 -0
  1342. data/vendor/rails/activerecord/lib/active_record/serializers/xml_serializer.rb +28 -13
  1343. data/vendor/rails/activerecord/lib/active_record/session_store.rb +318 -0
  1344. data/vendor/rails/activerecord/lib/active_record/test_case.rb +33 -14
  1345. data/vendor/rails/activerecord/lib/active_record/timestamp.rb +2 -2
  1346. data/vendor/rails/activerecord/lib/active_record/transactions.rb +145 -40
  1347. data/vendor/rails/activerecord/lib/active_record/validations.rb +290 -195
  1348. data/vendor/rails/activerecord/lib/active_record/version.rb +1 -1
  1349. data/vendor/rails/activerecord/lib/activerecord.rb +0 -0
  1350. data/vendor/rails/activerecord/test/assets/example.log +0 -0
  1351. data/vendor/rails/activerecord/test/assets/flowers.jpg +0 -0
  1352. data/vendor/rails/activerecord/test/cases/aaa_create_tables_test.rb +0 -0
  1353. data/vendor/rails/activerecord/test/cases/active_schema_test_mysql.rb +5 -0
  1354. data/vendor/rails/activerecord/test/cases/active_schema_test_postgresql.rb +0 -0
  1355. data/vendor/rails/activerecord/test/cases/adapter_test.rb +6 -0
  1356. data/vendor/rails/activerecord/test/cases/aggregations_test.rb +39 -0
  1357. data/vendor/rails/activerecord/test/cases/ar_schema_test.rb +0 -1
  1358. data/vendor/rails/activerecord/test/cases/associations/belongs_to_associations_test.rb +37 -123
  1359. data/vendor/rails/activerecord/test/cases/associations/callbacks_test.rb +0 -0
  1360. data/vendor/rails/activerecord/test/cases/associations/cascaded_eager_loading_test.rb +8 -0
  1361. data/vendor/rails/activerecord/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -0
  1362. data/vendor/rails/activerecord/test/cases/associations/eager_load_nested_include_test.rb +59 -12
  1363. data/vendor/rails/activerecord/test/cases/associations/eager_singularization_test.rb +0 -0
  1364. data/vendor/rails/activerecord/test/cases/associations/eager_test.rb +190 -11
  1365. data/vendor/rails/activerecord/test/cases/associations/extension_test.rb +0 -0
  1366. data/vendor/rails/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb +127 -11
  1367. data/vendor/rails/activerecord/test/cases/associations/has_many_associations_test.rb +175 -147
  1368. data/vendor/rails/activerecord/test/cases/associations/has_many_through_associations_test.rb +82 -3
  1369. data/vendor/rails/activerecord/test/cases/associations/has_one_associations_test.rb +54 -90
  1370. data/vendor/rails/activerecord/test/cases/associations/has_one_through_associations_test.rb +80 -1
  1371. data/vendor/rails/activerecord/test/cases/associations/inner_join_association_test.rb +0 -0
  1372. data/vendor/rails/activerecord/test/cases/associations/join_model_test.rb +5 -7
  1373. data/vendor/rails/activerecord/test/cases/associations_test.rb +0 -0
  1374. data/vendor/rails/activerecord/test/cases/attribute_methods_test.rb +72 -5
  1375. data/vendor/rails/activerecord/test/cases/autosave_association_test.rb +901 -0
  1376. data/vendor/rails/activerecord/test/cases/base_test.rb +120 -28
  1377. data/vendor/rails/activerecord/test/cases/batches_test.rb +61 -0
  1378. data/vendor/rails/activerecord/test/cases/binary_test.rb +1 -5
  1379. data/vendor/rails/activerecord/test/cases/calculations_test.rb +42 -17
  1380. data/vendor/rails/activerecord/test/cases/callbacks_observers_test.rb +38 -0
  1381. data/vendor/rails/activerecord/test/cases/callbacks_test.rb +43 -5
  1382. data/vendor/rails/activerecord/test/cases/class_inheritable_attributes_test.rb +0 -0
  1383. data/vendor/rails/activerecord/test/cases/column_alias_test.rb +0 -0
  1384. data/vendor/rails/activerecord/test/cases/column_definition_test.rb +0 -0
  1385. data/vendor/rails/activerecord/test/cases/connection_pool_test.rb +25 -0
  1386. data/vendor/rails/activerecord/test/cases/connection_test_firebird.rb +0 -0
  1387. data/vendor/rails/activerecord/test/cases/connection_test_mysql.rb +27 -1
  1388. data/vendor/rails/activerecord/test/cases/copy_table_test_sqlite.rb +11 -0
  1389. data/vendor/rails/activerecord/test/cases/database_statements_test.rb +0 -0
  1390. data/vendor/rails/activerecord/test/cases/datatype_test_postgresql.rb +1 -0
  1391. data/vendor/rails/activerecord/test/cases/date_time_test.rb +0 -0
  1392. data/vendor/rails/activerecord/test/cases/default_test_firebird.rb +0 -0
  1393. data/vendor/rails/activerecord/test/cases/defaults_test.rb +63 -21
  1394. data/vendor/rails/activerecord/test/cases/deprecated_finder_test.rb +0 -0
  1395. data/vendor/rails/activerecord/test/cases/dirty_test.rb +52 -3
  1396. data/vendor/rails/activerecord/test/cases/finder_respond_to_test.rb +0 -0
  1397. data/vendor/rails/activerecord/test/cases/finder_test.rb +224 -39
  1398. data/vendor/rails/activerecord/test/cases/fixtures_test.rb +47 -22
  1399. data/vendor/rails/activerecord/test/cases/helper.rb +32 -10
  1400. data/vendor/rails/activerecord/test/cases/i18n_test.rb +41 -0
  1401. data/vendor/rails/activerecord/test/cases/inheritance_test.rb +4 -4
  1402. data/vendor/rails/activerecord/test/cases/invalid_date_test.rb +0 -0
  1403. data/vendor/rails/activerecord/test/cases/json_serialization_test.rb +1 -1
  1404. data/vendor/rails/activerecord/test/cases/lifecycle_test.rb +0 -0
  1405. data/vendor/rails/activerecord/test/cases/locking_test.rb +27 -14
  1406. data/vendor/rails/activerecord/test/cases/method_scoping_test.rb +239 -7
  1407. data/vendor/rails/activerecord/test/cases/migration_test.rb +294 -243
  1408. data/vendor/rails/activerecord/test/cases/migration_test_firebird.rb +0 -0
  1409. data/vendor/rails/activerecord/test/cases/mixin_test.rb +0 -0
  1410. data/vendor/rails/activerecord/test/cases/modules_test.rb +0 -0
  1411. data/vendor/rails/activerecord/test/cases/multiple_db_test.rb +25 -0
  1412. data/vendor/rails/activerecord/test/cases/named_scope_test.rb +155 -2
  1413. data/vendor/rails/activerecord/test/cases/nested_attributes_test.rb +509 -0
  1414. data/vendor/rails/activerecord/test/cases/pk_test.rb +0 -0
  1415. data/vendor/rails/activerecord/test/cases/pooled_connections_test.rb +103 -0
  1416. data/vendor/rails/activerecord/test/cases/query_cache_test.rb +0 -4
  1417. data/vendor/rails/activerecord/test/cases/readonly_test.rb +0 -0
  1418. data/vendor/rails/activerecord/test/cases/reflection_test.rb +21 -3
  1419. data/vendor/rails/activerecord/test/cases/reload_models_test.rb +22 -0
  1420. data/vendor/rails/activerecord/test/cases/repair_helper.rb +50 -0
  1421. data/vendor/rails/activerecord/test/cases/reserved_word_test_mysql.rb +0 -0
  1422. data/vendor/rails/activerecord/test/cases/sanitize_test.rb +25 -0
  1423. data/vendor/rails/activerecord/test/cases/schema_authorization_test_postgresql.rb +2 -2
  1424. data/vendor/rails/activerecord/test/cases/schema_dumper_test.rb +0 -1
  1425. data/vendor/rails/activerecord/test/cases/schema_test_postgresql.rb +0 -0
  1426. data/vendor/rails/activerecord/test/cases/serialization_test.rb +0 -0
  1427. data/vendor/rails/activerecord/test/cases/synonym_test_oracle.rb +0 -0
  1428. data/vendor/rails/activerecord/test/cases/transactions_test.rb +237 -22
  1429. data/vendor/rails/activerecord/test/cases/unconnected_test.rb +0 -0
  1430. data/vendor/rails/activerecord/test/cases/validations_i18n_test.rb +915 -0
  1431. data/vendor/rails/activerecord/test/cases/validations_test.rb +274 -213
  1432. data/vendor/rails/activerecord/test/cases/xml_serialization_test.rb +19 -1
  1433. data/vendor/rails/activerecord/test/config.rb +0 -0
  1434. data/vendor/rails/activerecord/test/connections/jdbc_jdbcderby/connection.rb +18 -0
  1435. data/vendor/rails/activerecord/test/connections/jdbc_jdbch2/connection.rb +18 -0
  1436. data/vendor/rails/activerecord/test/connections/jdbc_jdbchsqldb/connection.rb +18 -0
  1437. data/vendor/rails/activerecord/test/connections/jdbc_jdbcmysql/connection.rb +26 -0
  1438. data/vendor/rails/activerecord/test/connections/jdbc_jdbcpostgresql/connection.rb +26 -0
  1439. data/vendor/rails/activerecord/test/connections/jdbc_jdbcsqlite3/connection.rb +25 -0
  1440. data/vendor/rails/activerecord/test/connections/native_db2/connection.rb +0 -0
  1441. data/vendor/rails/activerecord/test/connections/native_firebird/connection.rb +0 -0
  1442. data/vendor/rails/activerecord/test/connections/native_frontbase/connection.rb +0 -0
  1443. data/vendor/rails/activerecord/test/connections/native_mysql/connection.rb +1 -3
  1444. data/vendor/rails/activerecord/test/connections/native_openbase/connection.rb +0 -0
  1445. data/vendor/rails/activerecord/test/connections/native_oracle/connection.rb +0 -0
  1446. data/vendor/rails/activerecord/test/connections/native_postgresql/connection.rb +0 -0
  1447. data/vendor/rails/activerecord/test/connections/native_sqlite/connection.rb +0 -0
  1448. data/vendor/rails/activerecord/test/connections/native_sqlite3/connection.rb +0 -0
  1449. data/vendor/rails/activerecord/test/connections/native_sqlite3/in_memory_connection.rb +0 -0
  1450. data/vendor/rails/activerecord/test/connections/native_sybase/connection.rb +0 -0
  1451. data/vendor/rails/activerecord/test/fixtures/accounts.yml +0 -0
  1452. data/vendor/rails/activerecord/test/fixtures/all/developers.yml +0 -0
  1453. data/vendor/rails/activerecord/test/fixtures/all/people.csv +0 -0
  1454. data/vendor/rails/activerecord/test/fixtures/all/tasks.yml +0 -0
  1455. data/vendor/rails/activerecord/test/fixtures/author_addresses.yml +0 -0
  1456. data/vendor/rails/activerecord/test/fixtures/author_favorites.yml +0 -0
  1457. data/vendor/rails/activerecord/test/fixtures/authors.yml +0 -0
  1458. data/vendor/rails/activerecord/test/fixtures/binaries.yml +0 -0
  1459. data/vendor/rails/activerecord/test/fixtures/books.yml +0 -0
  1460. data/vendor/rails/activerecord/test/fixtures/categories.yml +0 -0
  1461. data/vendor/rails/activerecord/test/fixtures/categories/special_categories.yml +0 -0
  1462. data/vendor/rails/activerecord/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -0
  1463. data/vendor/rails/activerecord/test/fixtures/categories_ordered.yml +0 -0
  1464. data/vendor/rails/activerecord/test/fixtures/categories_posts.yml +0 -0
  1465. data/vendor/rails/activerecord/test/fixtures/categorizations.yml +0 -0
  1466. data/vendor/rails/activerecord/test/fixtures/clubs.yml +0 -0
  1467. data/vendor/rails/activerecord/test/fixtures/comments.yml +0 -0
  1468. data/vendor/rails/activerecord/test/fixtures/companies.yml +1 -0
  1469. data/vendor/rails/activerecord/test/fixtures/computers.yml +0 -0
  1470. data/vendor/rails/activerecord/test/fixtures/courses.yml +0 -0
  1471. data/vendor/rails/activerecord/test/fixtures/customers.yml +10 -1
  1472. data/vendor/rails/activerecord/test/fixtures/developers.yml +0 -0
  1473. data/vendor/rails/activerecord/test/fixtures/developers_projects.yml +0 -0
  1474. data/vendor/rails/activerecord/test/fixtures/edges.yml +0 -0
  1475. data/vendor/rails/activerecord/test/fixtures/entrants.yml +0 -0
  1476. data/vendor/rails/activerecord/test/fixtures/fixture_database.sqlite3 +0 -0
  1477. data/vendor/rails/activerecord/test/fixtures/fixture_database_2.sqlite3 +0 -0
  1478. data/vendor/rails/activerecord/test/fixtures/fk_test_has_fk.yml +0 -0
  1479. data/vendor/rails/activerecord/test/fixtures/fk_test_has_pk.yml +0 -0
  1480. data/vendor/rails/activerecord/test/fixtures/funny_jokes.yml +0 -0
  1481. data/vendor/rails/activerecord/test/fixtures/items.yml +0 -0
  1482. data/vendor/rails/activerecord/test/fixtures/jobs.yml +0 -0
  1483. data/vendor/rails/activerecord/test/fixtures/legacy_things.yml +0 -0
  1484. data/vendor/rails/activerecord/test/fixtures/mateys.yml +0 -0
  1485. data/vendor/rails/activerecord/test/fixtures/member_types.yml +6 -0
  1486. data/vendor/rails/activerecord/test/fixtures/members.yml +3 -1
  1487. data/vendor/rails/activerecord/test/fixtures/memberships.yml +0 -0
  1488. data/vendor/rails/activerecord/test/fixtures/minimalistics.yml +0 -0
  1489. data/vendor/rails/activerecord/test/fixtures/mixed_case_monkeys.yml +0 -0
  1490. data/vendor/rails/activerecord/test/fixtures/mixins.yml +0 -0
  1491. data/vendor/rails/activerecord/test/fixtures/movies.yml +0 -0
  1492. data/vendor/rails/activerecord/test/fixtures/naked/csv/accounts.csv +0 -0
  1493. data/vendor/rails/activerecord/test/fixtures/naked/yml/accounts.yml +0 -0
  1494. data/vendor/rails/activerecord/test/fixtures/naked/yml/companies.yml +0 -0
  1495. data/vendor/rails/activerecord/test/fixtures/naked/yml/courses.yml +0 -0
  1496. data/vendor/rails/activerecord/test/fixtures/organizations.yml +5 -0
  1497. data/vendor/rails/activerecord/test/fixtures/owners.yml +0 -0
  1498. data/vendor/rails/activerecord/test/fixtures/parrots.yml +0 -0
  1499. data/vendor/rails/activerecord/test/fixtures/parrots_pirates.yml +0 -0
  1500. data/vendor/rails/activerecord/test/fixtures/people.yml +10 -1
  1501. data/vendor/rails/activerecord/test/fixtures/pets.yml +0 -0
  1502. data/vendor/rails/activerecord/test/fixtures/pirates.yml +0 -0
  1503. data/vendor/rails/activerecord/test/fixtures/posts.yml +0 -0
  1504. data/vendor/rails/activerecord/test/fixtures/price_estimates.yml +0 -0
  1505. data/vendor/rails/activerecord/test/fixtures/projects.yml +0 -0
  1506. data/vendor/rails/activerecord/test/fixtures/readers.yml +0 -0
  1507. data/vendor/rails/activerecord/test/fixtures/references.yml +0 -0
  1508. data/vendor/rails/activerecord/test/fixtures/reserved_words/distinct.yml +0 -0
  1509. data/vendor/rails/activerecord/test/fixtures/reserved_words/distincts_selects.yml +0 -0
  1510. data/vendor/rails/activerecord/test/fixtures/reserved_words/group.yml +0 -0
  1511. data/vendor/rails/activerecord/test/fixtures/reserved_words/select.yml +0 -0
  1512. data/vendor/rails/activerecord/test/fixtures/reserved_words/values.yml +0 -0
  1513. data/vendor/rails/activerecord/test/fixtures/ships.yml +0 -0
  1514. data/vendor/rails/activerecord/test/fixtures/sponsors.yml +0 -0
  1515. data/vendor/rails/activerecord/test/fixtures/subscribers.yml +0 -0
  1516. data/vendor/rails/activerecord/test/fixtures/subscriptions.yml +0 -0
  1517. data/vendor/rails/activerecord/test/fixtures/taggings.yml +0 -0
  1518. data/vendor/rails/activerecord/test/fixtures/tags.yml +0 -0
  1519. data/vendor/rails/activerecord/test/fixtures/tasks.yml +0 -0
  1520. data/vendor/rails/activerecord/test/fixtures/topics.yml +0 -0
  1521. data/vendor/rails/activerecord/test/fixtures/toys.yml +4 -0
  1522. data/vendor/rails/activerecord/test/fixtures/treasures.yml +0 -0
  1523. data/vendor/rails/activerecord/test/fixtures/vertices.yml +0 -0
  1524. data/vendor/rails/activerecord/test/fixtures/warehouse-things.yml +0 -0
  1525. data/vendor/rails/activerecord/test/migrations/broken/100_migration_that_raises_exception.rb +10 -0
  1526. data/vendor/rails/activerecord/test/migrations/decimal/1_give_me_big_numbers.rb +0 -0
  1527. data/vendor/rails/activerecord/test/migrations/duplicate/1_people_have_last_names.rb +0 -0
  1528. data/vendor/rails/activerecord/test/migrations/duplicate/2_we_need_reminders.rb +0 -0
  1529. data/vendor/rails/activerecord/test/migrations/duplicate/3_foo.rb +0 -0
  1530. data/vendor/rails/activerecord/test/migrations/duplicate/3_innocent_jointable.rb +0 -0
  1531. data/vendor/rails/activerecord/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -0
  1532. data/vendor/rails/activerecord/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -0
  1533. data/vendor/rails/activerecord/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -0
  1534. data/vendor/rails/activerecord/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -0
  1535. data/vendor/rails/activerecord/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -0
  1536. data/vendor/rails/activerecord/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -0
  1537. data/vendor/rails/activerecord/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -0
  1538. data/vendor/rails/activerecord/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -0
  1539. data/vendor/rails/activerecord/test/migrations/missing/1000_people_have_middle_names.rb +0 -0
  1540. data/vendor/rails/activerecord/test/migrations/missing/1_people_have_last_names.rb +0 -0
  1541. data/vendor/rails/activerecord/test/migrations/missing/3_we_need_reminders.rb +0 -0
  1542. data/vendor/rails/activerecord/test/migrations/missing/4_innocent_jointable.rb +0 -0
  1543. data/vendor/rails/activerecord/test/migrations/valid/1_people_have_last_names.rb +0 -0
  1544. data/vendor/rails/activerecord/test/migrations/valid/2_we_need_reminders.rb +0 -0
  1545. data/vendor/rails/activerecord/test/migrations/valid/3_innocent_jointable.rb +0 -0
  1546. data/vendor/rails/activerecord/test/models/author.rb +4 -0
  1547. data/vendor/rails/activerecord/test/models/auto_id.rb +0 -0
  1548. data/vendor/rails/activerecord/test/models/binary.rb +0 -0
  1549. data/vendor/rails/activerecord/test/models/bird.rb +3 -0
  1550. data/vendor/rails/activerecord/test/models/book.rb +0 -0
  1551. data/vendor/rails/activerecord/test/models/categorization.rb +0 -0
  1552. data/vendor/rails/activerecord/test/models/category.rb +4 -0
  1553. data/vendor/rails/activerecord/test/models/citation.rb +0 -0
  1554. data/vendor/rails/activerecord/test/models/club.rb +6 -0
  1555. data/vendor/rails/activerecord/test/models/column_name.rb +0 -0
  1556. data/vendor/rails/activerecord/test/models/comment.rb +0 -0
  1557. data/vendor/rails/activerecord/test/models/company.rb +28 -1
  1558. data/vendor/rails/activerecord/test/models/company_in_module.rb +0 -0
  1559. data/vendor/rails/activerecord/test/models/computer.rb +0 -0
  1560. data/vendor/rails/activerecord/test/models/contact.rb +0 -0
  1561. data/vendor/rails/activerecord/test/models/course.rb +0 -0
  1562. data/vendor/rails/activerecord/test/models/customer.rb +19 -1
  1563. data/vendor/rails/activerecord/test/models/default.rb +0 -0
  1564. data/vendor/rails/activerecord/test/models/developer.rb +12 -0
  1565. data/vendor/rails/activerecord/test/models/edge.rb +0 -0
  1566. data/vendor/rails/activerecord/test/models/entrant.rb +0 -0
  1567. data/vendor/rails/activerecord/test/models/event.rb +3 -0
  1568. data/vendor/rails/activerecord/test/models/guid.rb +0 -0
  1569. data/vendor/rails/activerecord/test/models/item.rb +0 -0
  1570. data/vendor/rails/activerecord/test/models/job.rb +0 -0
  1571. data/vendor/rails/activerecord/test/models/joke.rb +0 -0
  1572. data/vendor/rails/activerecord/test/models/keyboard.rb +0 -0
  1573. data/vendor/rails/activerecord/test/models/legacy_thing.rb +0 -0
  1574. data/vendor/rails/activerecord/test/models/matey.rb +0 -0
  1575. data/vendor/rails/activerecord/test/models/member.rb +3 -0
  1576. data/vendor/rails/activerecord/test/models/member_detail.rb +5 -0
  1577. data/vendor/rails/activerecord/test/models/member_type.rb +3 -0
  1578. data/vendor/rails/activerecord/test/models/membership.rb +0 -0
  1579. data/vendor/rails/activerecord/test/models/minimalistic.rb +0 -0
  1580. data/vendor/rails/activerecord/test/models/mixed_case_monkey.rb +0 -0
  1581. data/vendor/rails/activerecord/test/models/movie.rb +0 -0
  1582. data/vendor/rails/activerecord/test/models/order.rb +0 -0
  1583. data/vendor/rails/activerecord/test/models/organization.rb +4 -0
  1584. data/vendor/rails/activerecord/test/models/owner.rb +2 -1
  1585. data/vendor/rails/activerecord/test/models/parrot.rb +3 -0
  1586. data/vendor/rails/activerecord/test/models/person.rb +6 -0
  1587. data/vendor/rails/activerecord/test/models/pet.rb +2 -1
  1588. data/vendor/rails/activerecord/test/models/pirate.rb +55 -1
  1589. data/vendor/rails/activerecord/test/models/post.rb +15 -0
  1590. data/vendor/rails/activerecord/test/models/price_estimate.rb +0 -0
  1591. data/vendor/rails/activerecord/test/models/project.rb +1 -0
  1592. data/vendor/rails/activerecord/test/models/reader.rb +0 -0
  1593. data/vendor/rails/activerecord/test/models/reference.rb +0 -0
  1594. data/vendor/rails/activerecord/test/models/reply.rb +6 -0
  1595. data/vendor/rails/activerecord/test/models/ship.rb +8 -1
  1596. data/vendor/rails/activerecord/test/models/ship_part.rb +5 -0
  1597. data/vendor/rails/activerecord/test/models/sponsor.rb +0 -0
  1598. data/vendor/rails/activerecord/test/models/subject.rb +0 -0
  1599. data/vendor/rails/activerecord/test/models/subscriber.rb +0 -0
  1600. data/vendor/rails/activerecord/test/models/subscription.rb +0 -0
  1601. data/vendor/rails/activerecord/test/models/tag.rb +0 -0
  1602. data/vendor/rails/activerecord/test/models/tagging.rb +0 -0
  1603. data/vendor/rails/activerecord/test/models/task.rb +0 -0
  1604. data/vendor/rails/activerecord/test/models/topic.rb +16 -1
  1605. data/vendor/rails/activerecord/test/models/toy.rb +4 -0
  1606. data/vendor/rails/activerecord/test/models/treasure.rb +0 -0
  1607. data/vendor/rails/activerecord/test/models/vertex.rb +0 -0
  1608. data/vendor/rails/activerecord/test/models/warehouse_thing.rb +0 -0
  1609. data/vendor/rails/activerecord/test/schema/mysql_specific_schema.rb +0 -0
  1610. data/vendor/rails/activerecord/test/schema/postgresql_specific_schema.rb +0 -0
  1611. data/vendor/rails/activerecord/test/schema/schema.rb +47 -3
  1612. data/vendor/rails/activerecord/test/schema/schema2.rb +0 -0
  1613. data/vendor/rails/activerecord/test/schema/sqlite_specific_schema.rb +0 -0
  1614. data/vendor/rails/activeresource/CHANGELOG +35 -24
  1615. data/vendor/rails/activeresource/README +1 -1
  1616. data/vendor/rails/activeresource/Rakefile +5 -4
  1617. data/vendor/rails/activeresource/lib/active_resource.rb +7 -10
  1618. data/vendor/rails/activeresource/lib/active_resource/base.rb +177 -121
  1619. data/vendor/rails/activeresource/lib/active_resource/connection.rb +28 -17
  1620. data/vendor/rails/activeresource/lib/active_resource/custom_methods.rb +14 -13
  1621. data/vendor/rails/activeresource/lib/active_resource/formats.rb +0 -0
  1622. data/vendor/rails/activeresource/lib/active_resource/formats/json_format.rb +7 -7
  1623. data/vendor/rails/activeresource/lib/active_resource/formats/xml_format.rb +9 -9
  1624. data/vendor/rails/activeresource/lib/active_resource/http_mock.rb +29 -39
  1625. data/vendor/rails/activeresource/lib/active_resource/validations.rb +16 -30
  1626. data/vendor/rails/activeresource/lib/active_resource/version.rb +1 -1
  1627. data/vendor/rails/activeresource/lib/activeresource.rb +0 -0
  1628. data/vendor/rails/activeresource/test/abstract_unit.rb +5 -8
  1629. data/vendor/rails/activeresource/test/authorization_test.rb +12 -12
  1630. data/vendor/rails/activeresource/test/base/custom_methods_test.rb +3 -2
  1631. data/vendor/rails/activeresource/test/base/equality_test.rb +9 -0
  1632. data/vendor/rails/activeresource/test/base/load_test.rb +2 -2
  1633. data/vendor/rails/activeresource/test/base_errors_test.rb +0 -0
  1634. data/vendor/rails/activeresource/test/base_test.rb +144 -101
  1635. data/vendor/rails/activeresource/test/connection_test.rb +14 -8
  1636. data/vendor/rails/activeresource/test/fixtures/beast.rb +0 -0
  1637. data/vendor/rails/activeresource/test/fixtures/customer.rb +0 -0
  1638. data/vendor/rails/activeresource/test/fixtures/person.rb +0 -0
  1639. data/vendor/rails/activeresource/test/fixtures/street_address.rb +0 -0
  1640. data/vendor/rails/activeresource/test/format_test.rb +40 -11
  1641. data/vendor/rails/activeresource/test/setter_trap.rb +2 -3
  1642. data/vendor/rails/activesupport/CHANGELOG +194 -83
  1643. data/vendor/rails/activesupport/README +0 -0
  1644. data/vendor/rails/activesupport/lib/active_support.rb +30 -32
  1645. data/vendor/rails/activesupport/lib/active_support/backtrace_cleaner.rb +72 -0
  1646. data/vendor/rails/activesupport/lib/active_support/base64.rb +13 -2
  1647. data/vendor/rails/activesupport/lib/active_support/basic_object.rb +1 -1
  1648. data/vendor/rails/activesupport/lib/active_support/buffered_logger.rb +27 -21
  1649. data/vendor/rails/activesupport/lib/active_support/cache.rb +128 -47
  1650. data/vendor/rails/activesupport/lib/active_support/cache/compressed_mem_cache_store.rb +7 -2
  1651. data/vendor/rails/activesupport/lib/active_support/cache/drb_store.rb +2 -3
  1652. data/vendor/rails/activesupport/lib/active_support/cache/file_store.rb +7 -5
  1653. data/vendor/rails/activesupport/lib/active_support/cache/mem_cache_store.rb +53 -21
  1654. data/vendor/rails/activesupport/lib/active_support/cache/memory_store.rb +16 -2
  1655. data/vendor/rails/activesupport/lib/active_support/cache/strategy/local_cache.rb +104 -0
  1656. data/vendor/rails/activesupport/lib/active_support/cache/synchronized_memory_store.rb +47 -0
  1657. data/vendor/rails/activesupport/lib/active_support/callbacks.rb +34 -30
  1658. data/vendor/rails/activesupport/lib/active_support/core_ext.rb +1 -1
  1659. data/vendor/rails/activesupport/lib/active_support/core_ext/array.rb +2 -0
  1660. data/vendor/rails/activesupport/lib/active_support/core_ext/array/access.rb +27 -0
  1661. data/vendor/rails/activesupport/lib/active_support/core_ext/array/conversions.rb +30 -12
  1662. data/vendor/rails/activesupport/lib/active_support/core_ext/array/extract_options.rb +0 -0
  1663. data/vendor/rails/activesupport/lib/active_support/core_ext/array/grouping.rb +53 -10
  1664. data/vendor/rails/activesupport/lib/active_support/core_ext/array/random_access.rb +0 -0
  1665. data/vendor/rails/activesupport/lib/active_support/core_ext/array/wrapper.rb +24 -0
  1666. data/vendor/rails/activesupport/lib/active_support/core_ext/base64.rb +0 -0
  1667. data/vendor/rails/activesupport/lib/active_support/core_ext/base64/encoding.rb +3 -0
  1668. data/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb +13 -6
  1669. data/vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal.rb +0 -0
  1670. data/vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb +18 -22
  1671. data/vendor/rails/activesupport/lib/active_support/core_ext/blank.rb +5 -0
  1672. data/vendor/rails/activesupport/lib/active_support/core_ext/cgi.rb +0 -0
  1673. data/vendor/rails/activesupport/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +14 -5
  1674. data/vendor/rails/activesupport/lib/active_support/core_ext/class.rb +0 -0
  1675. data/vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb +24 -24
  1676. data/vendor/rails/activesupport/lib/active_support/core_ext/class/delegating_attributes.rb +20 -19
  1677. data/vendor/rails/activesupport/lib/active_support/core_ext/class/inheritable_attributes.rb +39 -39
  1678. data/vendor/rails/activesupport/lib/active_support/core_ext/class/removal.rb +0 -0
  1679. data/vendor/rails/activesupport/lib/active_support/core_ext/date.rb +0 -0
  1680. data/vendor/rails/activesupport/lib/active_support/core_ext/date/behavior.rb +3 -0
  1681. data/vendor/rails/activesupport/lib/active_support/core_ext/date/calculations.rb +24 -9
  1682. data/vendor/rails/activesupport/lib/active_support/core_ext/date/conversions.rb +3 -3
  1683. data/vendor/rails/activesupport/lib/active_support/core_ext/date_time.rb +0 -0
  1684. data/vendor/rails/activesupport/lib/active_support/core_ext/date_time/calculations.rb +19 -5
  1685. data/vendor/rails/activesupport/lib/active_support/core_ext/date_time/conversions.rb +1 -1
  1686. data/vendor/rails/activesupport/lib/active_support/core_ext/duplicable.rb +6 -0
  1687. data/vendor/rails/activesupport/lib/active_support/core_ext/enumerable.rb +51 -4
  1688. data/vendor/rails/activesupport/lib/active_support/core_ext/exception.rb +12 -8
  1689. data/vendor/rails/activesupport/lib/active_support/core_ext/file.rb +4 -20
  1690. data/vendor/rails/activesupport/lib/active_support/core_ext/file/atomic.rb +46 -0
  1691. data/vendor/rails/activesupport/lib/active_support/core_ext/float.rb +2 -0
  1692. data/vendor/rails/activesupport/lib/active_support/core_ext/float/rounding.rb +0 -0
  1693. data/vendor/rails/activesupport/lib/active_support/core_ext/float/time.rb +27 -0
  1694. data/vendor/rails/activesupport/lib/active_support/core_ext/hash.rb +2 -1
  1695. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/conversions.rb +33 -55
  1696. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/deep_merge.rb +23 -0
  1697. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/diff.rb +0 -0
  1698. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/except.rb +1 -1
  1699. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb +6 -0
  1700. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/keys.rb +1 -1
  1701. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb +12 -5
  1702. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/slice.rb +15 -5
  1703. data/vendor/rails/activesupport/lib/active_support/core_ext/integer.rb +2 -0
  1704. data/vendor/rails/activesupport/lib/active_support/core_ext/integer/even_odd.rb +0 -0
  1705. data/vendor/rails/activesupport/lib/active_support/core_ext/integer/inflections.rb +0 -0
  1706. data/vendor/rails/activesupport/lib/active_support/core_ext/integer/time.rb +45 -0
  1707. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel.rb +0 -0
  1708. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/agnostics.rb +0 -0
  1709. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/daemonizing.rb +0 -0
  1710. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/debugger.rb +4 -4
  1711. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/reporting.rb +0 -0
  1712. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/requires.rb +0 -0
  1713. data/vendor/rails/activesupport/lib/active_support/core_ext/load_error.rb +0 -0
  1714. data/vendor/rails/activesupport/lib/active_support/core_ext/logger.rb +136 -7
  1715. data/vendor/rails/activesupport/lib/active_support/core_ext/module.rb +11 -1
  1716. data/vendor/rails/activesupport/lib/active_support/core_ext/module/aliasing.rb +71 -67
  1717. data/vendor/rails/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb +4 -4
  1718. data/vendor/rails/activesupport/lib/active_support/core_ext/module/attr_internal.rb +0 -0
  1719. data/vendor/rails/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +24 -24
  1720. data/vendor/rails/activesupport/lib/active_support/core_ext/module/delegation.rb +60 -3
  1721. data/vendor/rails/activesupport/lib/active_support/core_ext/module/inclusion.rb +0 -0
  1722. data/vendor/rails/activesupport/lib/active_support/core_ext/module/introspection.rb +81 -66
  1723. data/vendor/rails/activesupport/lib/active_support/core_ext/module/loading.rb +0 -0
  1724. data/vendor/rails/activesupport/lib/active_support/core_ext/module/model_naming.rb +8 -7
  1725. data/vendor/rails/activesupport/lib/active_support/core_ext/module/synchronization.rb +39 -0
  1726. data/vendor/rails/activesupport/lib/active_support/core_ext/name_error.rb +0 -0
  1727. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric.rb +0 -0
  1728. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric/bytes.rb +0 -0
  1729. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric/conversions.rb +0 -0
  1730. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric/time.rb +0 -10
  1731. data/vendor/rails/activesupport/lib/active_support/core_ext/object.rb +1 -0
  1732. data/vendor/rails/activesupport/lib/active_support/core_ext/object/conversions.rb +2 -1
  1733. data/vendor/rails/activesupport/lib/active_support/core_ext/object/extending.rb +29 -7
  1734. data/vendor/rails/activesupport/lib/active_support/core_ext/object/instance_variables.rb +1 -1
  1735. data/vendor/rails/activesupport/lib/active_support/core_ext/object/metaclass.rb +13 -0
  1736. data/vendor/rails/activesupport/lib/active_support/core_ext/object/misc.rb +52 -21
  1737. data/vendor/rails/activesupport/lib/active_support/core_ext/pathname.rb +0 -0
  1738. data/vendor/rails/activesupport/lib/active_support/core_ext/pathname/clean_within.rb +0 -0
  1739. data/vendor/rails/activesupport/lib/active_support/core_ext/proc.rb +0 -0
  1740. data/vendor/rails/activesupport/lib/active_support/core_ext/process.rb +0 -0
  1741. data/vendor/rails/activesupport/lib/active_support/core_ext/process/daemon.rb +0 -0
  1742. data/vendor/rails/activesupport/lib/active_support/core_ext/range.rb +0 -0
  1743. data/vendor/rails/activesupport/lib/active_support/core_ext/range/blockless_step.rb +0 -0
  1744. data/vendor/rails/activesupport/lib/active_support/core_ext/range/conversions.rb +1 -1
  1745. data/vendor/rails/activesupport/lib/active_support/core_ext/range/include_range.rb +0 -0
  1746. data/vendor/rails/activesupport/lib/active_support/core_ext/range/overlaps.rb +0 -0
  1747. data/vendor/rails/activesupport/lib/active_support/core_ext/rexml.rb +29 -24
  1748. data/vendor/rails/activesupport/lib/active_support/core_ext/string.rb +6 -2
  1749. data/vendor/rails/activesupport/lib/active_support/core_ext/string/access.rb +5 -5
  1750. data/vendor/rails/activesupport/lib/active_support/core_ext/string/behavior.rb +13 -0
  1751. data/vendor/rails/activesupport/lib/active_support/core_ext/string/conversions.rb +0 -0
  1752. data/vendor/rails/activesupport/lib/active_support/core_ext/string/filters.rb +0 -0
  1753. data/vendor/rails/activesupport/lib/active_support/core_ext/string/inflections.rb +22 -3
  1754. data/vendor/rails/activesupport/lib/active_support/core_ext/string/iterators.rb +3 -1
  1755. data/vendor/rails/activesupport/lib/active_support/core_ext/string/multibyte.rb +81 -0
  1756. data/vendor/rails/activesupport/lib/active_support/core_ext/string/starts_ends_with.rb +0 -0
  1757. data/vendor/rails/activesupport/lib/active_support/core_ext/string/xchar.rb +0 -0
  1758. data/vendor/rails/activesupport/lib/active_support/core_ext/symbol.rb +0 -0
  1759. data/vendor/rails/activesupport/lib/active_support/core_ext/time.rb +0 -0
  1760. data/vendor/rails/activesupport/lib/active_support/core_ext/time/behavior.rb +0 -0
  1761. data/vendor/rails/activesupport/lib/active_support/core_ext/time/calculations.rb +39 -12
  1762. data/vendor/rails/activesupport/lib/active_support/core_ext/time/conversions.rb +2 -1
  1763. data/vendor/rails/activesupport/lib/active_support/core_ext/time/zones.rb +1 -1
  1764. data/vendor/rails/activesupport/lib/active_support/core_ext/try.rb +36 -0
  1765. data/vendor/rails/activesupport/lib/active_support/core_ext/uri.rb +16 -0
  1766. data/vendor/rails/activesupport/lib/active_support/dependencies.rb +196 -124
  1767. data/vendor/rails/activesupport/lib/active_support/deprecation.rb +33 -60
  1768. data/vendor/rails/activesupport/lib/active_support/duration.rb +3 -1
  1769. data/vendor/rails/activesupport/lib/active_support/gzip.rb +0 -0
  1770. data/vendor/rails/activesupport/lib/active_support/inflections.rb +1 -0
  1771. data/vendor/rails/activesupport/lib/active_support/inflector.rb +131 -38
  1772. data/vendor/rails/activesupport/lib/active_support/json.rb +1 -1
  1773. data/vendor/rails/activesupport/lib/active_support/json/decoding.rb +23 -4
  1774. data/vendor/rails/activesupport/lib/active_support/json/encoders/date.rb +9 -2
  1775. data/vendor/rails/activesupport/lib/active_support/json/encoders/date_time.rb +9 -2
  1776. data/vendor/rails/activesupport/lib/active_support/json/encoders/enumerable.rb +0 -0
  1777. data/vendor/rails/activesupport/lib/active_support/json/encoders/false_class.rb +0 -0
  1778. data/vendor/rails/activesupport/lib/active_support/json/encoders/hash.rb +10 -11
  1779. data/vendor/rails/activesupport/lib/active_support/json/encoders/nil_class.rb +0 -0
  1780. data/vendor/rails/activesupport/lib/active_support/json/encoders/numeric.rb +0 -0
  1781. data/vendor/rails/activesupport/lib/active_support/json/encoders/object.rb +0 -0
  1782. data/vendor/rails/activesupport/lib/active_support/json/encoders/regexp.rb +0 -0
  1783. data/vendor/rails/activesupport/lib/active_support/json/encoders/string.rb +0 -0
  1784. data/vendor/rails/activesupport/lib/active_support/json/encoders/symbol.rb +0 -0
  1785. data/vendor/rails/activesupport/lib/active_support/json/encoders/time.rb +10 -3
  1786. data/vendor/rails/activesupport/lib/active_support/json/encoders/true_class.rb +0 -0
  1787. data/vendor/rails/activesupport/lib/active_support/json/encoding.rb +23 -29
  1788. data/vendor/rails/activesupport/lib/active_support/json/variable.rb +0 -0
  1789. data/vendor/rails/activesupport/lib/active_support/locale/en.yml +33 -0
  1790. data/vendor/rails/activesupport/lib/active_support/memoizable.rb +100 -0
  1791. data/vendor/rails/activesupport/lib/active_support/message_encryptor.rb +70 -0
  1792. data/vendor/rails/activesupport/lib/active_support/message_verifier.rb +46 -0
  1793. data/vendor/rails/activesupport/lib/active_support/multibyte.rb +31 -7
  1794. data/vendor/rails/activesupport/lib/active_support/multibyte/chars.rb +686 -122
  1795. data/vendor/rails/activesupport/lib/active_support/multibyte/exceptions.rb +8 -0
  1796. data/vendor/rails/activesupport/lib/active_support/multibyte/unicode_database.rb +71 -0
  1797. data/vendor/rails/activesupport/lib/active_support/option_merger.rb +6 -8
  1798. data/vendor/rails/activesupport/lib/active_support/ordered_hash.rb +81 -18
  1799. data/vendor/rails/activesupport/lib/active_support/ordered_options.rb +0 -0
  1800. data/vendor/rails/activesupport/lib/active_support/rescuable.rb +108 -0
  1801. data/vendor/rails/activesupport/lib/active_support/secure_random.rb +199 -0
  1802. data/vendor/rails/activesupport/lib/active_support/string_inquirer.rb +11 -1
  1803. data/vendor/rails/activesupport/lib/active_support/test_case.rb +33 -7
  1804. data/vendor/rails/activesupport/lib/active_support/{core_ext/test/unit → testing}/assertions.rb +14 -13
  1805. data/vendor/rails/activesupport/lib/active_support/testing/declarative.rb +21 -0
  1806. data/vendor/rails/activesupport/lib/active_support/testing/default.rb +0 -0
  1807. data/vendor/rails/activesupport/lib/active_support/testing/deprecation.rb +55 -0
  1808. data/vendor/rails/activesupport/lib/active_support/testing/performance.rb +452 -0
  1809. data/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb +66 -68
  1810. data/vendor/rails/activesupport/lib/active_support/time_with_zone.rb +80 -50
  1811. data/vendor/rails/activesupport/lib/active_support/values/time_zone.rb +12 -4
  1812. data/vendor/rails/activesupport/lib/active_support/values/unicode_tables.dat +0 -0
  1813. data/vendor/rails/activesupport/lib/active_support/vendor.rb +12 -9
  1814. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/blankslate.rb +0 -0
  1815. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder.rb +0 -0
  1816. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +0 -0
  1817. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder/css.rb +0 -0
  1818. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +0 -0
  1819. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +0 -0
  1820. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +1 -1
  1821. data/vendor/rails/activesupport/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +0 -0
  1822. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +20 -0
  1823. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/README.textile +20 -0
  1824. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/Rakefile +5 -0
  1825. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +27 -0
  1826. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +199 -0
  1827. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +214 -0
  1828. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +53 -0
  1829. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/all.rb +5 -0
  1830. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +100 -0
  1831. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +125 -0
  1832. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +1 -0
  1833. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +3 -0
  1834. data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +568 -0
  1835. data/vendor/rails/activesupport/lib/active_support/vendor/{memcache-client-1.5.0 → memcache-client-1.6.5}/memcache.rb +383 -297
  1836. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo.rb +0 -0
  1837. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/data_timezone.rb +0 -0
  1838. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/data_timezone_info.rb +0 -0
  1839. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Algiers.rb +0 -0
  1840. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Cairo.rb +0 -0
  1841. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Casablanca.rb +0 -0
  1842. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Harare.rb +0 -0
  1843. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Johannesburg.rb +0 -0
  1844. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Monrovia.rb +0 -0
  1845. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Africa/Nairobi.rb +0 -0
  1846. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -0
  1847. data/vendor/rails/activesupport/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +86 -0
  1848. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Bogota.rb +0 -0
  1849. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Caracas.rb +0 -0
  1850. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Chicago.rb +0 -0
  1851. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Chihuahua.rb +0 -0
  1852. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Denver.rb +0 -0
  1853. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Godthab.rb +0 -0
  1854. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Guatemala.rb +0 -0
  1855. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Halifax.rb +0 -0
  1856. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -0
  1857. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Juneau.rb +0 -0
  1858. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/La_Paz.rb +0 -0
  1859. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Lima.rb +0 -0
  1860. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Los_Angeles.rb +0 -0
  1861. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Mazatlan.rb +0 -0
  1862. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Mexico_City.rb +0 -0
  1863. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Monterrey.rb +0 -0
  1864. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/New_York.rb +0 -0
  1865. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Phoenix.rb +0 -0
  1866. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Regina.rb +0 -0
  1867. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Santiago.rb +0 -0
  1868. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Sao_Paulo.rb +0 -0
  1869. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/St_Johns.rb +0 -0
  1870. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/America/Tijuana.rb +0 -0
  1871. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Almaty.rb +0 -0
  1872. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Baghdad.rb +0 -0
  1873. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Baku.rb +0 -0
  1874. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Bangkok.rb +0 -0
  1875. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Chongqing.rb +0 -0
  1876. data/vendor/rails/activesupport/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +30 -0
  1877. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Dhaka.rb +0 -0
  1878. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Hong_Kong.rb +0 -0
  1879. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Irkutsk.rb +0 -0
  1880. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Jakarta.rb +0 -0
  1881. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Jerusalem.rb +0 -0
  1882. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Kabul.rb +0 -0
  1883. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Kamchatka.rb +0 -0
  1884. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Karachi.rb +0 -0
  1885. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Katmandu.rb +0 -0
  1886. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Kolkata.rb +0 -0
  1887. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -0
  1888. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -0
  1889. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Kuwait.rb +0 -0
  1890. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Magadan.rb +0 -0
  1891. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Muscat.rb +0 -0
  1892. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Novosibirsk.rb +0 -0
  1893. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Rangoon.rb +0 -0
  1894. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Riyadh.rb +0 -0
  1895. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Seoul.rb +0 -0
  1896. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Shanghai.rb +0 -0
  1897. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Singapore.rb +0 -0
  1898. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Taipei.rb +0 -0
  1899. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Tashkent.rb +0 -0
  1900. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Tbilisi.rb +0 -0
  1901. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Tehran.rb +0 -0
  1902. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Tokyo.rb +0 -0
  1903. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -0
  1904. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Urumqi.rb +0 -0
  1905. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Vladivostok.rb +0 -0
  1906. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Yakutsk.rb +0 -0
  1907. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -0
  1908. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Asia/Yerevan.rb +0 -0
  1909. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Atlantic/Azores.rb +0 -0
  1910. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -0
  1911. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -0
  1912. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Adelaide.rb +0 -0
  1913. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Brisbane.rb +0 -0
  1914. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Darwin.rb +0 -0
  1915. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Hobart.rb +0 -0
  1916. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Melbourne.rb +0 -0
  1917. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Perth.rb +0 -0
  1918. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Australia/Sydney.rb +0 -0
  1919. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Etc/UTC.rb +0 -0
  1920. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Amsterdam.rb +0 -0
  1921. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Athens.rb +0 -0
  1922. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Belgrade.rb +0 -0
  1923. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Berlin.rb +0 -0
  1924. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Bratislava.rb +0 -0
  1925. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Brussels.rb +0 -0
  1926. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Bucharest.rb +0 -0
  1927. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Budapest.rb +0 -0
  1928. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Copenhagen.rb +0 -0
  1929. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Dublin.rb +0 -0
  1930. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Helsinki.rb +0 -0
  1931. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Istanbul.rb +0 -0
  1932. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Kiev.rb +0 -0
  1933. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Lisbon.rb +0 -0
  1934. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Ljubljana.rb +0 -0
  1935. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/London.rb +0 -0
  1936. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Madrid.rb +0 -0
  1937. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Minsk.rb +0 -0
  1938. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Moscow.rb +0 -0
  1939. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Paris.rb +0 -0
  1940. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Prague.rb +0 -0
  1941. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Riga.rb +0 -0
  1942. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Rome.rb +0 -0
  1943. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Sarajevo.rb +0 -0
  1944. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Skopje.rb +0 -0
  1945. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Sofia.rb +0 -0
  1946. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Stockholm.rb +0 -0
  1947. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Tallinn.rb +0 -0
  1948. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Vienna.rb +0 -0
  1949. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Vilnius.rb +0 -0
  1950. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Warsaw.rb +0 -0
  1951. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Europe/Zagreb.rb +0 -0
  1952. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Auckland.rb +0 -0
  1953. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Fiji.rb +0 -0
  1954. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Guam.rb +0 -0
  1955. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Honolulu.rb +0 -0
  1956. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Majuro.rb +0 -0
  1957. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Midway.rb +0 -0
  1958. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Noumea.rb +0 -0
  1959. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -0
  1960. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -0
  1961. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/definitions/Pacific/Tongatapu.rb +0 -0
  1962. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/info_timezone.rb +0 -0
  1963. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/linked_timezone.rb +0 -0
  1964. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/linked_timezone_info.rb +0 -0
  1965. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/offset_rationals.rb +0 -0
  1966. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/ruby_core_support.rb +0 -0
  1967. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/time_or_datetime.rb +0 -0
  1968. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/timezone.rb +0 -0
  1969. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/timezone_definition.rb +0 -0
  1970. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/timezone_info.rb +0 -0
  1971. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/timezone_offset_info.rb +0 -0
  1972. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/timezone_period.rb +0 -0
  1973. data/vendor/rails/activesupport/lib/active_support/vendor/{tzinfo-0.3.11 → tzinfo-0.3.12}/tzinfo/timezone_transition_info.rb +0 -0
  1974. data/vendor/rails/activesupport/lib/active_support/version.rb +1 -1
  1975. data/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  1976. data/vendor/rails/activesupport/lib/active_support/xml_mini.rb +31 -0
  1977. data/vendor/rails/activesupport/lib/active_support/xml_mini/libxml.rb +133 -0
  1978. data/vendor/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb +77 -0
  1979. data/vendor/rails/activesupport/lib/active_support/xml_mini/rexml.rb +108 -0
  1980. data/vendor/rails/activesupport/lib/activesupport.rb +0 -0
  1981. data/vendor/rails/railties/CHANGELOG +297 -188
  1982. data/vendor/rails/railties/MIT-LICENSE +1 -1
  1983. data/vendor/rails/railties/README +6 -19
  1984. data/vendor/rails/railties/Rakefile +33 -20
  1985. data/vendor/rails/railties/bin/rails +1 -0
  1986. data/vendor/rails/railties/builtin/rails_info/rails/info.rb +12 -8
  1987. data/vendor/rails/railties/builtin/rails_info/rails/info_controller.rb +0 -0
  1988. data/vendor/rails/railties/builtin/rails_info/rails/info_helper.rb +0 -0
  1989. data/vendor/rails/railties/builtin/rails_info/rails_info_controller.rb +0 -0
  1990. data/vendor/rails/railties/configs/databases/frontbase.yml +0 -0
  1991. data/vendor/rails/railties/configs/databases/ibm_db.yml +62 -0
  1992. data/vendor/rails/railties/configs/databases/mysql.yml +6 -0
  1993. data/vendor/rails/railties/configs/databases/oracle.yml +0 -0
  1994. data/vendor/rails/railties/configs/databases/postgresql.yml +3 -0
  1995. data/vendor/rails/railties/configs/databases/sqlite2.yml +3 -0
  1996. data/vendor/rails/railties/configs/databases/sqlite3.yml +3 -0
  1997. data/vendor/rails/railties/configs/empty.log +0 -0
  1998. data/vendor/rails/railties/configs/initializers/backtrace_silencers.rb +7 -0
  1999. data/vendor/rails/railties/configs/initializers/inflections.rb +0 -0
  2000. data/vendor/rails/railties/configs/initializers/mime_types.rb +0 -0
  2001. data/vendor/rails/railties/configs/initializers/new_rails_defaults.rb +2 -0
  2002. data/vendor/rails/railties/configs/initializers/session_store.rb +15 -0
  2003. data/vendor/rails/railties/configs/locales/en.yml +5 -0
  2004. data/vendor/rails/railties/configs/routes.rb +0 -0
  2005. data/vendor/rails/railties/dispatches/config.ru +7 -0
  2006. data/vendor/rails/railties/dispatches/dispatch.fcgi +1 -1
  2007. data/vendor/rails/railties/dispatches/dispatch.rb +2 -2
  2008. data/vendor/rails/railties/dispatches/gateway.cgi +2 -2
  2009. data/vendor/rails/railties/doc/README_FOR_APP +0 -0
  2010. data/vendor/rails/railties/environments/boot.rb +3 -2
  2011. data/vendor/rails/railties/environments/development.rb +0 -0
  2012. data/vendor/rails/railties/environments/environment.rb +16 -42
  2013. data/vendor/rails/railties/environments/production.rb +10 -4
  2014. data/vendor/rails/railties/environments/test.rb +6 -0
  2015. data/vendor/rails/railties/helpers/application_controller.rb +10 -0
  2016. data/vendor/rails/railties/helpers/application_helper.rb +0 -0
  2017. data/vendor/rails/railties/helpers/performance_test.rb +9 -0
  2018. data/vendor/rails/railties/helpers/test_helper.rb +1 -1
  2019. data/vendor/rails/railties/html/404.html +0 -0
  2020. data/vendor/rails/railties/html/422.html +0 -0
  2021. data/vendor/rails/railties/html/500.html +1 -1
  2022. data/vendor/rails/railties/html/favicon.ico +0 -0
  2023. data/vendor/rails/railties/html/images/rails.png +0 -0
  2024. data/vendor/rails/railties/html/index.html +1 -0
  2025. data/vendor/rails/railties/html/javascripts/application.js +0 -0
  2026. data/vendor/rails/railties/html/javascripts/controls.js +72 -72
  2027. data/vendor/rails/railties/html/javascripts/dragdrop.js +165 -164
  2028. data/vendor/rails/railties/html/javascripts/effects.js +173 -165
  2029. data/vendor/rails/railties/html/javascripts/prototype.js +362 -267
  2030. data/vendor/rails/railties/html/robots.txt +0 -0
  2031. data/vendor/rails/railties/lib/code_statistics.rb +0 -0
  2032. data/vendor/rails/railties/lib/commands.rb +0 -0
  2033. data/vendor/rails/railties/lib/commands/about.rb +1 -1
  2034. data/vendor/rails/railties/lib/commands/console.rb +13 -0
  2035. data/vendor/rails/railties/lib/commands/dbconsole.rb +20 -4
  2036. data/vendor/rails/railties/lib/commands/destroy.rb +0 -0
  2037. data/vendor/rails/railties/lib/commands/ncgi/listener +2 -2
  2038. data/vendor/rails/railties/lib/commands/ncgi/tracker +2 -2
  2039. data/vendor/rails/railties/lib/commands/performance/benchmarker.rb +0 -0
  2040. data/vendor/rails/railties/lib/commands/performance/profiler.rb +0 -0
  2041. data/vendor/rails/railties/lib/commands/plugin.rb +43 -25
  2042. data/vendor/rails/railties/lib/commands/runner.rb +13 -7
  2043. data/vendor/rails/railties/lib/commands/server.rb +100 -25
  2044. data/vendor/rails/railties/lib/commands/update.rb +0 -0
  2045. data/vendor/rails/railties/lib/console_app.rb +4 -4
  2046. data/vendor/rails/railties/lib/console_sandbox.rb +0 -0
  2047. data/vendor/rails/railties/lib/console_with_helpers.rb +2 -23
  2048. data/vendor/rails/railties/lib/dispatcher.rb +1 -1
  2049. data/vendor/rails/railties/lib/fcgi_handler.rb +13 -13
  2050. data/vendor/rails/railties/lib/initializer.rb +256 -66
  2051. data/vendor/rails/railties/lib/performance_test_help.rb +5 -0
  2052. data/vendor/rails/railties/lib/rails/backtrace_cleaner.rb +54 -0
  2053. data/vendor/rails/railties/lib/rails/gem_builder.rb +3 -3
  2054. data/vendor/rails/railties/lib/rails/gem_dependency.rb +209 -56
  2055. data/vendor/rails/railties/lib/rails/plugin.rb +59 -8
  2056. data/vendor/rails/railties/lib/rails/plugin/loader.rb +66 -27
  2057. data/vendor/rails/railties/lib/rails/plugin/locator.rb +1 -1
  2058. data/vendor/rails/railties/lib/rails/rack.rb +8 -0
  2059. data/vendor/rails/railties/lib/rails/rack/debugger.rb +21 -0
  2060. data/vendor/rails/railties/lib/rails/rack/log_tailer.rb +35 -0
  2061. data/vendor/rails/railties/lib/rails/rack/metal.rb +51 -0
  2062. data/vendor/rails/railties/lib/rails/rack/static.rb +46 -0
  2063. data/vendor/rails/railties/lib/rails/vendor_gem_source_index.rb +140 -0
  2064. data/vendor/rails/railties/lib/rails/version.rb +1 -1
  2065. data/vendor/rails/railties/lib/rails_generator.rb +0 -0
  2066. data/vendor/rails/railties/lib/rails_generator/base.rb +3 -0
  2067. data/vendor/rails/railties/lib/rails_generator/commands.rb +16 -17
  2068. data/vendor/rails/railties/lib/rails_generator/generated_attribute.rb +4 -0
  2069. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/USAGE +0 -0
  2070. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/app_generator.rb +213 -133
  2071. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/scm/scm.rb +8 -0
  2072. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/scm/svn.rb +7 -0
  2073. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/template_runner.rb +401 -0
  2074. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/USAGE +12 -11
  2075. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/controller_generator.rb +7 -1
  2076. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/controller.rb +0 -0
  2077. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/functional_test.rb +1 -1
  2078. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/helper.rb +0 -0
  2079. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/helper_test.rb +4 -0
  2080. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/view.html.erb +0 -0
  2081. data/vendor/rails/railties/lib/rails_generator/generators/components/helper/USAGE +24 -0
  2082. data/vendor/rails/railties/lib/rails_generator/generators/components/helper/helper_generator.rb +25 -0
  2083. data/vendor/rails/railties/lib/rails_generator/generators/components/helper/templates/helper.rb +2 -0
  2084. data/vendor/rails/railties/lib/rails_generator/generators/components/helper/templates/helper_test.rb +4 -0
  2085. data/vendor/rails/railties/lib/rails_generator/generators/components/integration_test/USAGE +0 -0
  2086. data/vendor/rails/railties/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +1 -1
  2087. data/vendor/rails/railties/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +2 -2
  2088. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/USAGE +0 -0
  2089. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/mailer_generator.rb +1 -1
  2090. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/fixture.erb +0 -0
  2091. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  2092. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/mailer.rb +0 -0
  2093. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +2 -3
  2094. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/view.erb +0 -0
  2095. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  2096. data/vendor/rails/railties/lib/rails_generator/generators/components/metal/USAGE +8 -0
  2097. data/vendor/rails/railties/lib/rails_generator/generators/components/metal/metal_generator.rb +8 -0
  2098. data/vendor/rails/railties/lib/rails_generator/generators/components/metal/templates/metal.rb +12 -0
  2099. data/vendor/rails/railties/lib/rails_generator/generators/components/migration/USAGE +0 -0
  2100. data/vendor/rails/railties/lib/rails_generator/generators/components/migration/migration_generator.rb +0 -0
  2101. data/vendor/rails/railties/lib/rails_generator/generators/components/migration/templates/migration.rb +0 -0
  2102. data/vendor/rails/railties/lib/rails_generator/generators/components/model/USAGE +0 -0
  2103. data/vendor/rails/railties/lib/rails_generator/generators/components/model/model_generator.rb +1 -1
  2104. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -0
  2105. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/migration.rb +0 -0
  2106. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/model.rb +3 -0
  2107. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/unit_test.rb +1 -1
  2108. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/USAGE +0 -0
  2109. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/observer_generator.rb +1 -1
  2110. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/templates/observer.rb +0 -0
  2111. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/templates/unit_test.rb +1 -1
  2112. data/vendor/rails/railties/lib/rails_generator/generators/components/performance_test/USAGE +8 -0
  2113. data/vendor/rails/railties/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +16 -0
  2114. data/vendor/rails/railties/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +9 -0
  2115. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/USAGE +0 -0
  2116. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/plugin_generator.rb +11 -11
  2117. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +0 -0
  2118. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/README +0 -0
  2119. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/Rakefile +1 -0
  2120. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/USAGE +0 -0
  2121. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/generator.rb +0 -0
  2122. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/init.rb +0 -0
  2123. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/install.rb +0 -0
  2124. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/plugin.rb +0 -0
  2125. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/tasks.rake +0 -0
  2126. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +3 -0
  2127. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +0 -0
  2128. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +4 -4
  2129. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/USAGE +2 -2
  2130. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/resource_generator.rb +4 -2
  2131. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/controller.rb +0 -0
  2132. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/functional_test.rb +1 -1
  2133. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/helper.rb +0 -0
  2134. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/helper_test.rb +4 -0
  2135. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/USAGE +9 -5
  2136. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +12 -3
  2137. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb +1 -1
  2138. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +11 -11
  2139. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/helper.rb +0 -0
  2140. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb +4 -0
  2141. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +1 -1
  2142. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -0
  2143. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +2 -2
  2144. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +2 -2
  2145. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +2 -2
  2146. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +1 -1
  2147. data/vendor/rails/railties/lib/rails_generator/generators/components/session_migration/USAGE +0 -0
  2148. data/vendor/rails/railties/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +0 -0
  2149. data/vendor/rails/railties/lib/rails_generator/generators/components/session_migration/templates/migration.rb +0 -0
  2150. data/vendor/rails/railties/lib/rails_generator/lookup.rb +0 -0
  2151. data/vendor/rails/railties/lib/rails_generator/manifest.rb +0 -0
  2152. data/vendor/rails/railties/lib/rails_generator/options.rb +0 -0
  2153. data/vendor/rails/railties/lib/rails_generator/scripts.rb +1 -1
  2154. data/vendor/rails/railties/lib/rails_generator/scripts/destroy.rb +6 -7
  2155. data/vendor/rails/railties/lib/rails_generator/scripts/generate.rb +0 -0
  2156. data/vendor/rails/railties/lib/rails_generator/scripts/update.rb +0 -0
  2157. data/vendor/rails/railties/lib/rails_generator/secret_key_generator.rb +7 -147
  2158. data/vendor/rails/railties/lib/rails_generator/simple_logger.rb +0 -0
  2159. data/vendor/rails/railties/lib/rails_generator/spec.rb +0 -0
  2160. data/vendor/rails/railties/lib/railties_path.rb +0 -0
  2161. data/vendor/rails/railties/lib/ruby_version_check.rb +0 -0
  2162. data/vendor/rails/railties/lib/rubyprof_ext.rb +0 -0
  2163. data/vendor/rails/railties/lib/source_annotation_extractor.rb +0 -0
  2164. data/vendor/rails/railties/lib/tasks/annotations.rake +8 -11
  2165. data/vendor/rails/railties/lib/tasks/databases.rake +55 -21
  2166. data/vendor/rails/railties/lib/tasks/documentation.rake +8 -0
  2167. data/vendor/rails/railties/lib/tasks/framework.rake +31 -2
  2168. data/vendor/rails/railties/lib/tasks/gems.rake +41 -40
  2169. data/vendor/rails/railties/lib/tasks/log.rake +0 -0
  2170. data/vendor/rails/railties/lib/tasks/middleware.rake +7 -0
  2171. data/vendor/rails/railties/lib/tasks/misc.rake +10 -4
  2172. data/vendor/rails/railties/lib/tasks/rails.rb +0 -0
  2173. data/vendor/rails/railties/lib/tasks/routes.rake +0 -0
  2174. data/vendor/rails/railties/lib/tasks/statistics.rake +0 -1
  2175. data/vendor/rails/railties/lib/tasks/testing.rake +30 -9
  2176. data/vendor/rails/railties/lib/test_help.rb +17 -10
  2177. data/vendor/rails/railties/lib/webrick_server.rb +2 -11
  2178. data/vendor/redcloth/Rakefile +0 -0
  2179. data/vendor/redcloth/bin/redcloth +0 -0
  2180. data/vendor/redcloth/doc/CHANGELOG +0 -0
  2181. data/vendor/redcloth/doc/COPYING +0 -0
  2182. data/vendor/redcloth/doc/README +0 -0
  2183. data/vendor/redcloth/doc/REFERENCE +0 -0
  2184. data/vendor/redcloth/doc/make.rb +0 -0
  2185. data/vendor/redcloth/lib/rctodb.rb +0 -0
  2186. data/vendor/redcloth/lib/redcloth.rb +0 -0
  2187. data/vendor/redcloth/run-tests.rb +0 -0
  2188. data/vendor/redcloth/setup.rb +0 -0
  2189. data/vendor/redcloth/tests/code.yml +0 -0
  2190. data/vendor/redcloth/tests/images.yml +0 -0
  2191. data/vendor/redcloth/tests/instiki.yml +0 -0
  2192. data/vendor/redcloth/tests/links.yml +0 -0
  2193. data/vendor/redcloth/tests/lists.yml +0 -0
  2194. data/vendor/redcloth/tests/markdown.yml +0 -0
  2195. data/vendor/redcloth/tests/poignant.yml +0 -0
  2196. data/vendor/redcloth/tests/table.yml +0 -0
  2197. data/vendor/redcloth/tests/textism.yml +0 -0
  2198. metadata +514 -315
  2199. data/app/controllers/admin/abstract_model_controller.rb +0 -134
  2200. data/app/models/response_cache.rb +0 -187
  2201. data/lib/plugins/extension_patches/lib/fixture_loading_extension.rb +0 -76
  2202. data/lib/plugins/extension_patches/lib/mailer_view_paths_extension.rb +0 -93
  2203. data/lib/radiant/compat.rb +0 -10
  2204. data/spec/integration/admin/content_negotiation_spec.rb +0 -27
  2205. data/spec/integration/admin/pages_integration_spec.rb +0 -124
  2206. data/spec/integration/admin/permission_integration_spec.rb +0 -24
  2207. data/spec/integration/admin/snippets_integration_spec.rb +0 -73
  2208. data/spec/integration/admin/user_management_integration_spec.rb +0 -80
  2209. data/spec/integration/admin/user_preferences_integration_spec.rb +0 -19
  2210. data/spec/integration/page_serving_spec.rb +0 -37
  2211. data/spec/models/response_cache_spec.rb +0 -286
  2212. data/stories/all.rb +0 -4
  2213. data/stories/helper.rb +0 -3
  2214. data/vendor/highline/AUTHORS +0 -2
  2215. data/vendor/highline/COPYING +0 -340
  2216. data/vendor/highline/site/highline.css +0 -65
  2217. data/vendor/highline/site/images/logo.png +0 -0
  2218. data/vendor/highline/site/index.html +0 -59
  2219. data/vendor/plugins/dataset/History.txt +0 -9
  2220. data/vendor/plugins/dataset/Manifest.txt +0 -21
  2221. data/vendor/plugins/default_order/README +0 -35
  2222. data/vendor/plugins/default_order/Rakefile +0 -22
  2223. data/vendor/plugins/default_order/init.rb +0 -1
  2224. data/vendor/plugins/default_order/lib/default_order.rb +0 -32
  2225. data/vendor/plugins/default_order/test/default_order_test.rb +0 -5
  2226. data/vendor/plugins/spec_integration/LICENSE +0 -19
  2227. data/vendor/plugins/spec_integration/README +0 -117
  2228. data/vendor/plugins/spec_integration/Rakefile +0 -10
  2229. data/vendor/plugins/spec_integration/lib/spec/integration.rb +0 -10
  2230. data/vendor/plugins/spec_integration/lib/spec/integration/dsl.rb +0 -11
  2231. data/vendor/plugins/spec_integration/lib/spec/integration/dsl/form.rb +0 -157
  2232. data/vendor/plugins/spec_integration/lib/spec/integration/dsl/integration_example_group.rb +0 -97
  2233. data/vendor/plugins/spec_integration/lib/spec/integration/dsl/navigation.rb +0 -102
  2234. data/vendor/plugins/spec_integration/lib/spec/integration/extensions.rb +0 -8
  2235. data/vendor/plugins/spec_integration/lib/spec/integration/extensions/action_controller.rb +0 -25
  2236. data/vendor/plugins/spec_integration/lib/spec/integration/extensions/hash.rb +0 -48
  2237. data/vendor/plugins/spec_integration/lib/spec/integration/matchers.rb +0 -1
  2238. data/vendor/plugins/spec_integration/lib/spec/integration/matchers/display_object.rb +0 -41
  2239. data/vendor/plugins/spec_integration/lib/spec/integration/matchers/have_link_to.rb +0 -35
  2240. data/vendor/plugins/spec_integration/lib/spec/integration/matchers/navigate_successfully.rb +0 -60
  2241. data/vendor/plugins/spec_integration/lib/spec/integration/matchers/showing.rb +0 -44
  2242. data/vendor/plugins/spec_integration/spec/application.rb +0 -3
  2243. data/vendor/plugins/spec_integration/spec/dispatcher.rb +0 -24
  2244. data/vendor/plugins/spec_integration/spec/dsl/form_spec.rb +0 -130
  2245. data/vendor/plugins/spec_integration/spec/dsl/integration_spec_spec.rb +0 -38
  2246. data/vendor/plugins/spec_integration/spec/dsl/navigation_spec.rb +0 -35
  2247. data/vendor/plugins/spec_integration/spec/integration_dsl_controller.rb +0 -5
  2248. data/vendor/plugins/spec_integration/spec/spec.opts +0 -7
  2249. data/vendor/plugins/spec_integration/spec/spec_helper.rb +0 -10
  2250. data/vendor/plugins/spec_integration/tasks/integration.rake +0 -14
  2251. data/vendor/plugins/vizres/CHANGELOG +0 -15
  2252. data/vendor/plugins/vizres/MIT-LICENSE +0 -16
  2253. data/vendor/plugins/vizres/README +0 -80
  2254. data/vendor/plugins/vizres/Rakefile +0 -22
  2255. data/vendor/plugins/vizres/init.rb +0 -1
  2256. data/vendor/plugins/vizres/lib/vizres.rb +0 -33
  2257. data/vendor/plugins/vizres/lib/vizres/browser.rb +0 -36
  2258. data/vendor/plugins/vizres/lib/vizres/scm.rb +0 -27
  2259. data/vendor/plugins/vizres/test/vizres/browser_test.rb +0 -76
  2260. data/vendor/plugins/vizres/test/vizres/scm_test.rb +0 -41
  2261. data/vendor/plugins/vizres/test/vizres_test.rb +0 -55
  2262. data/vendor/plugins/vizres/vizres.gemspec +0 -26
  2263. data/vendor/rails/actionmailer/lib/action_mailer/vendor.rb +0 -14
  2264. data/vendor/rails/actionpack/lib/action_controller/assertions.rb +0 -69
  2265. data/vendor/rails/actionpack/lib/action_controller/caching/sql_cache.rb +0 -18
  2266. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/session.rb +0 -73
  2267. data/vendor/rails/actionpack/lib/action_controller/components.rb +0 -166
  2268. data/vendor/rails/actionpack/lib/action_controller/request_profiler.rb +0 -169
  2269. data/vendor/rails/actionpack/lib/action_controller/session/active_record_store.rb +0 -340
  2270. data/vendor/rails/actionpack/lib/action_controller/session/drb_server.rb +0 -32
  2271. data/vendor/rails/actionpack/lib/action_controller/session/drb_store.rb +0 -35
  2272. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/controls.js +0 -963
  2273. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/dragdrop.js +0 -972
  2274. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/effects.js +0 -1120
  2275. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/prototype.js +0 -4225
  2276. data/vendor/rails/actionpack/lib/action_view/partial_template.rb +0 -70
  2277. data/vendor/rails/actionpack/lib/action_view/template_finder.rb +0 -177
  2278. data/vendor/rails/actionpack/lib/action_view/template_handlers/compilable.rb +0 -128
  2279. data/vendor/rails/actionpack/test/controller/cgi_test.rb +0 -116
  2280. data/vendor/rails/actionpack/test/controller/components_test.rb +0 -140
  2281. data/vendor/rails/actionpack/test/controller/custom_handler_test.rb +0 -45
  2282. data/vendor/rails/actionpack/test/controller/http_authentication_test.rb +0 -54
  2283. data/vendor/rails/actionpack/test/controller/integration_upload_test.rb +0 -43
  2284. data/vendor/rails/actionpack/test/controller/new_render_test.rb +0 -945
  2285. data/vendor/rails/actionpack/test/controller/session_fixation_test.rb +0 -89
  2286. data/vendor/rails/actionpack/test/controller/session_management_test.rb +0 -178
  2287. data/vendor/rails/actionpack/test/fixtures/test/block_content_for.erb +0 -2
  2288. data/vendor/rails/actionpack/test/fixtures/test/erb_content_for.erb +0 -2
  2289. data/vendor/rails/actionpack/test/template/deprecated_erb_variable_test.rb +0 -9
  2290. data/vendor/rails/actionpack/test/template/template_finder_test.rb +0 -73
  2291. data/vendor/rails/actionpack/test/template/template_object_test.rb +0 -95
  2292. data/vendor/rails/activerecord/lib/active_record/vendor/mysql.rb +0 -1214
  2293. data/vendor/rails/activerecord/test/cases/adapter_test_sqlserver.rb +0 -95
  2294. data/vendor/rails/activerecord/test/cases/table_name_test_sqlserver.rb +0 -23
  2295. data/vendor/rails/activerecord/test/cases/threaded_connections_test.rb +0 -48
  2296. data/vendor/rails/activerecord/test/schema/sqlserver_specific_schema.rb +0 -5
  2297. data/vendor/rails/activesupport/lib/active_support/clean_logger.rb +0 -127
  2298. data/vendor/rails/activesupport/lib/active_support/core_ext/string/unicode.rb +0 -66
  2299. data/vendor/rails/activesupport/lib/active_support/core_ext/test.rb +0 -1
  2300. data/vendor/rails/activesupport/lib/active_support/multibyte/generators/generate_tables.rb +0 -149
  2301. data/vendor/rails/activesupport/lib/active_support/multibyte/handlers/passthru_handler.rb +0 -9
  2302. data/vendor/rails/activesupport/lib/active_support/multibyte/handlers/utf8_handler.rb +0 -564
  2303. data/vendor/rails/activesupport/lib/active_support/multibyte/handlers/utf8_handler_proc.rb +0 -43
  2304. data/vendor/rails/activesupport/lib/active_support/vendor/tzinfo-0.3.11/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -170
  2305. data/vendor/rails/activesupport/lib/active_support/vendor/xml-simple-1.0.11/xmlsimple.rb +0 -1021
  2306. data/vendor/rails/railties/bin/performance/request +0 -3
  2307. data/vendor/rails/railties/bin/process/inspector +0 -3
  2308. data/vendor/rails/railties/bin/process/reaper +0 -3
  2309. data/vendor/rails/railties/bin/process/spawner +0 -3
  2310. data/vendor/rails/railties/configs/apache.conf +0 -40
  2311. data/vendor/rails/railties/configs/lighttpd.conf +0 -54
  2312. data/vendor/rails/railties/helpers/application.rb +0 -15
  2313. data/vendor/rails/railties/lib/commands/performance/request.rb +0 -6
  2314. data/vendor/rails/railties/lib/commands/process/inspector.rb +0 -68
  2315. data/vendor/rails/railties/lib/commands/process/reaper.rb +0 -149
  2316. data/vendor/rails/railties/lib/commands/process/spawner.rb +0 -219
  2317. data/vendor/rails/railties/lib/commands/process/spinner.rb +0 -57
  2318. data/vendor/rails/railties/lib/commands/servers/base.rb +0 -31
  2319. data/vendor/rails/railties/lib/commands/servers/lighttpd.rb +0 -94
  2320. data/vendor/rails/railties/lib/commands/servers/mongrel.rb +0 -69
  2321. data/vendor/rails/railties/lib/commands/servers/new_mongrel.rb +0 -16
  2322. data/vendor/rails/railties/lib/commands/servers/webrick.rb +0 -66
  2323. data/vendor/rails/railties/lib/rails/mongrel_server/commands.rb +0 -342
  2324. data/vendor/rails/railties/lib/rails/mongrel_server/handler.rb +0 -55
@@ -1,6 +1,5 @@
1
1
  require 'abstract_unit'
2
2
  require 'controller/fake_controllers'
3
- require 'action_controller/routing'
4
3
 
5
4
  class MilestonesController < ActionController::Base
6
5
  def index() head :ok end
@@ -59,1477 +58,1560 @@ class UriReservedCharactersRoutingTest < Test::Unit::TestCase
59
58
  end
60
59
  end
61
60
 
62
- class LegacyRouteSetTests < Test::Unit::TestCase
63
- attr_reader :rs
64
- def setup
65
- # These tests assume optimisation is on, so re-enable it.
66
- ActionController::Base.optimise_named_routes = true
61
+ class SegmentTest < Test::Unit::TestCase
62
+ def test_first_segment_should_interpolate_for_structure
63
+ s = ROUTING::Segment.new
64
+ def s.interpolation_statement(array) 'hello' end
65
+ assert_equal 'hello', s.continue_string_structure([])
66
+ end
67
67
 
68
- @rs = ::ActionController::Routing::RouteSet.new
69
- @rs.draw {|m| m.connect ':controller/:action/:id' }
68
+ def test_interpolation_statement
69
+ s = ROUTING::StaticSegment.new("Hello")
70
+ assert_equal "Hello", eval(s.interpolation_statement([]))
71
+ assert_equal "HelloHello", eval(s.interpolation_statement([s]))
70
72
 
71
- ActionController::Routing.use_controllers! %w(content admin/user admin/news_feed)
73
+ s2 = ROUTING::StaticSegment.new("-")
74
+ assert_equal "Hello-Hello", eval(s.interpolation_statement([s, s2]))
75
+
76
+ s3 = ROUTING::StaticSegment.new("World")
77
+ assert_equal "Hello-World", eval(s3.interpolation_statement([s, s2]))
72
78
  end
79
+ end
73
80
 
74
- def test_default_setup
75
- assert_equal({:controller => "content", :action => 'index'}, rs.recognize_path("/content"))
76
- assert_equal({:controller => "content", :action => 'list'}, rs.recognize_path("/content/list"))
77
- assert_equal({:controller => "content", :action => 'show', :id => '10'}, rs.recognize_path("/content/show/10"))
78
-
79
- assert_equal({:controller => "admin/user", :action => 'show', :id => '10'}, rs.recognize_path("/admin/user/show/10"))
80
-
81
- assert_equal '/admin/user/show/10', rs.generate(:controller => 'admin/user', :action => 'show', :id => 10)
82
-
83
- assert_equal '/admin/user/show', rs.generate({:action => 'show'}, {:controller => 'admin/user', :action => 'list', :id => '10'})
84
- assert_equal '/admin/user/list/10', rs.generate({}, {:controller => 'admin/user', :action => 'list', :id => '10'})
81
+ class StaticSegmentTest < Test::Unit::TestCase
82
+ def test_interpolation_chunk_should_respect_raw
83
+ s = ROUTING::StaticSegment.new('Hello World')
84
+ assert !s.raw?
85
+ assert_equal 'Hello%20World', s.interpolation_chunk
85
86
 
86
- assert_equal '/admin/stuff', rs.generate({:controller => 'stuff'}, {:controller => 'admin/user', :action => 'list', :id => '10'})
87
- assert_equal '/stuff', rs.generate({:controller => '/stuff'}, {:controller => 'admin/user', :action => 'list', :id => '10'})
88
- end
89
-
90
- def test_ignores_leading_slash
91
- @rs.draw {|m| m.connect '/:controller/:action/:id'}
92
- test_default_setup
87
+ s = ROUTING::StaticSegment.new('Hello World', :raw => true)
88
+ assert s.raw?
89
+ assert_equal 'Hello World', s.interpolation_chunk
93
90
  end
94
-
95
- def test_time_recognition
96
- # We create many routes to make situation more realistic
97
- @rs = ::ActionController::Routing::RouteSet.new
98
- @rs.draw { |map|
99
- map.frontpage '', :controller => 'search', :action => 'new'
100
- map.resources :videos do |video|
101
- video.resources :comments
102
- video.resource :file, :controller => 'video_file'
103
- video.resource :share, :controller => 'video_shares'
104
- video.resource :abuse, :controller => 'video_abuses'
105
- end
106
- map.resources :abuses, :controller => 'video_abuses'
107
- map.resources :video_uploads
108
- map.resources :video_visits
109
91
 
110
- map.resources :users do |user|
111
- user.resource :settings
112
- user.resources :videos
113
- end
114
- map.resources :channels do |channel|
115
- channel.resources :videos, :controller => 'channel_videos'
116
- end
117
- map.resource :session
118
- map.resource :lost_password
119
- map.search 'search', :controller => 'search'
120
- map.resources :pages
121
- map.connect ':controller/:action/:id'
122
- }
123
- n = 1000
124
- if RunTimeTests
125
- GC.start
126
- rectime = Benchmark.realtime do
127
- n.times do
128
- rs.recognize_path("/videos/1234567", {:method => :get})
129
- rs.recognize_path("/videos/1234567/abuse", {:method => :get})
130
- rs.recognize_path("/users/1234567/settings", {:method => :get})
131
- rs.recognize_path("/channels/1234567", {:method => :get})
132
- rs.recognize_path("/session/new", {:method => :get})
133
- rs.recognize_path("/admin/user/show/10", {:method => :get})
134
- end
135
- end
136
- puts "\n\nRecognition (#{rs.routes.size} routes):"
137
- per_url = rectime / (n * 6)
138
- puts "#{per_url * 1000} ms/url"
139
- puts "#{1 / per_url} url/s\n\n"
140
- end
141
- end
142
- def test_time_generation
143
- n = 5000
144
- if RunTimeTests
145
- GC.start
146
- pairs = [
147
- [{:controller => 'content', :action => 'index'}, {:controller => 'content', :action => 'show'}],
148
- [{:controller => 'content'}, {:controller => 'content', :action => 'index'}],
149
- [{:controller => 'content', :action => 'list'}, {:controller => 'content', :action => 'index'}],
150
- [{:controller => 'content', :action => 'show', :id => '10'}, {:controller => 'content', :action => 'list'}],
151
- [{:controller => 'admin/user', :action => 'index'}, {:controller => 'admin/user', :action => 'show'}],
152
- [{:controller => 'admin/user'}, {:controller => 'admin/user', :action => 'index'}],
153
- [{:controller => 'admin/user', :action => 'list'}, {:controller => 'admin/user', :action => 'index'}],
154
- [{:controller => 'admin/user', :action => 'show', :id => '10'}, {:controller => 'admin/user', :action => 'list'}],
155
- ]
156
- p = nil
157
- gentime = Benchmark.realtime do
158
- n.times do
159
- pairs.each {|(a, b)| rs.generate(a, b)}
160
- end
161
- end
162
-
163
- puts "\n\nGeneration (RouteSet): (#{(n * 8)} urls)"
164
- per_url = gentime / (n * 8)
165
- puts "#{per_url * 1000} ms/url"
166
- puts "#{1 / per_url} url/s\n\n"
167
- end
92
+ def test_regexp_chunk_should_escape_specials
93
+ s = ROUTING::StaticSegment.new('Hello*World')
94
+ assert_equal 'Hello\*World', s.regexp_chunk
95
+
96
+ s = ROUTING::StaticSegment.new('HelloWorld')
97
+ assert_equal 'HelloWorld', s.regexp_chunk
168
98
  end
169
99
 
170
- def test_route_with_colon_first
171
- rs.draw do |map|
172
- map.connect '/:controller/:action/:id', :action => 'index', :id => nil
173
- map.connect ':url', :controller => 'tiny_url', :action => 'translate'
174
- end
100
+ def test_regexp_chunk_should_add_question_mark_for_optionals
101
+ s = ROUTING::StaticSegment.new("/", :optional => true)
102
+ assert_equal "/?", s.regexp_chunk
103
+
104
+ s = ROUTING::StaticSegment.new("hello", :optional => true)
105
+ assert_equal "(?:hello)?", s.regexp_chunk
175
106
  end
107
+ end
176
108
 
177
- def test_route_with_regexp_for_controller
178
- rs.draw do |map|
179
- map.connect ':controller/:admintoken/:action/:id', :controller => /admin\/.+/
180
- map.connect ':controller/:action/:id'
109
+ class DynamicSegmentTest < Test::Unit::TestCase
110
+ def segment(options = {})
111
+ unless @segment
112
+ @segment = ROUTING::DynamicSegment.new(:a, options)
181
113
  end
182
- assert_equal({:controller => "admin/user", :admintoken => "foo", :action => "index"},
183
- rs.recognize_path("/admin/user/foo"))
184
- assert_equal({:controller => "content", :action => "foo"}, rs.recognize_path("/content/foo"))
185
- assert_equal '/admin/user/foo', rs.generate(:controller => "admin/user", :admintoken => "foo", :action => "index")
186
- assert_equal '/content/foo', rs.generate(:controller => "content", :action => "foo")
114
+ @segment
187
115
  end
188
116
 
189
- def test_route_with_regexp_and_dot
190
- rs.draw do |map|
191
- map.connect ':controller/:action/:file',
192
- :controller => /admin|user/,
193
- :action => /upload|download/,
194
- :defaults => {:file => nil},
195
- :requirements => {:file => %r{[^/]+(\.[^/]+)?}}
196
- end
197
- # Without a file extension
198
- assert_equal '/user/download/file',
199
- rs.generate(:controller => "user", :action => "download", :file => "file")
200
- assert_equal(
201
- {:controller => "user", :action => "download", :file => "file"},
202
- rs.recognize_path("/user/download/file"))
117
+ def test_extract_value
118
+ s = ROUTING::DynamicSegment.new(:a)
203
119
 
204
- # Now, let's try a file with an extension, really a dot (.)
205
- assert_equal '/user/download/file.jpg',
206
- rs.generate(
207
- :controller => "user", :action => "download", :file => "file.jpg")
208
- assert_equal(
209
- {:controller => "user", :action => "download", :file => "file.jpg"},
210
- rs.recognize_path("/user/download/file.jpg"))
211
- end
212
-
213
- def test_basic_named_route
214
- rs.add_named_route :home, '', :controller => 'content', :action => 'list'
215
- x = setup_for_named_route
216
- assert_equal("http://named.route.test/",
217
- x.send(:home_url))
120
+ hash = {:a => '10', :b => '20'}
121
+ assert_equal '10', eval(s.extract_value)
122
+
123
+ hash = {:b => '20'}
124
+ assert_equal nil, eval(s.extract_value)
125
+
126
+ s.default = '20'
127
+ assert_equal '20', eval(s.extract_value)
218
128
  end
219
129
 
220
- def test_basic_named_route_with_relative_url_root
221
- rs.add_named_route :home, '', :controller => 'content', :action => 'list'
222
- x = setup_for_named_route
223
- x.relative_url_root="/foo"
224
- assert_equal("http://named.route.test/foo/",
225
- x.send(:home_url))
226
- assert_equal "/foo/", x.send(:home_path)
130
+ def test_default_local_name
131
+ assert_equal 'a_value', segment.local_name,
132
+ "Unexpected name -- all value_check tests will fail!"
227
133
  end
228
134
 
229
- def test_named_route_with_option
230
- rs.add_named_route :page, 'page/:title', :controller => 'content', :action => 'show_page'
231
- x = setup_for_named_route
232
- assert_equal("http://named.route.test/page/new%20stuff",
233
- x.send(:page_url, :title => 'new stuff'))
135
+ def test_presence_value_check
136
+ a_value = 10
137
+ assert eval(segment.value_check)
234
138
  end
235
139
 
236
- def test_named_route_with_default
237
- rs.add_named_route :page, 'page/:title', :controller => 'content', :action => 'show_page', :title => 'AboutPage'
238
- x = setup_for_named_route
239
- assert_equal("http://named.route.test/page/AboutRails",
240
- x.send(:page_url, :title => "AboutRails"))
140
+ def test_regexp_value_check_rejects_nil
141
+ segment = segment(:regexp => /\d+/)
241
142
 
143
+ a_value = nil
144
+ assert !eval(segment.value_check)
242
145
  end
243
146
 
244
- def test_named_route_with_nested_controller
245
- rs.add_named_route :users, 'admin/user', :controller => 'admin/user', :action => 'index'
246
- x = setup_for_named_route
247
- assert_equal("http://named.route.test/admin/user",
248
- x.send(:users_url))
147
+ def test_optional_regexp_value_check_should_accept_nil
148
+ segment = segment(:regexp => /\d+/, :optional => true)
149
+
150
+ a_value = nil
151
+ assert eval(segment.value_check)
249
152
  end
250
-
251
- uses_mocha "named route optimisation" do
252
- def test_optimised_named_route_call_never_uses_url_for
253
- rs.add_named_route :users, 'admin/user', :controller => '/admin/user', :action => 'index'
254
- rs.add_named_route :user, 'admin/user/:id', :controller=>'/admin/user', :action=>'show'
255
- x = setup_for_named_route
256
- x.expects(:url_for).never
257
- x.send(:users_url)
258
- x.send(:users_path)
259
- x.send(:user_url, 2, :foo=>"bar")
260
- x.send(:user_path, 3, :bar=>"foo")
261
- end
262
-
263
- def test_optimised_named_route_with_host
264
- rs.add_named_route :pages, 'pages', :controller => 'content', :action => 'show_page', :host => 'foo.com'
265
- x = setup_for_named_route
266
- x.expects(:url_for).with(:host => 'foo.com', :only_path => false, :controller => 'content', :action => 'show_page', :use_route => :pages).once
267
- x.send(:pages_url)
268
- end
153
+
154
+ def test_regexp_value_check_rejects_no_match
155
+ segment = segment(:regexp => /\d+/)
156
+
157
+ a_value = "Hello20World"
158
+ assert !eval(segment.value_check)
159
+
160
+ a_value = "20Hi"
161
+ assert !eval(segment.value_check)
269
162
  end
270
163
 
271
- def setup_for_named_route
272
- klass = Class.new(MockController)
273
- rs.install_helpers(klass)
274
- klass.new(rs)
164
+ def test_regexp_value_check_accepts_match
165
+ segment = segment(:regexp => /\d+/)
166
+ a_value = "30"
167
+ assert eval(segment.value_check)
275
168
  end
276
169
 
277
- def test_named_route_without_hash
278
- rs.draw do |map|
279
- map.normal ':controller/:action/:id'
280
- end
170
+ def test_value_check_fails_on_nil
171
+ a_value = nil
172
+ assert ! eval(segment.value_check)
281
173
  end
282
-
283
- def test_named_route_root
284
- rs.draw do |map|
285
- map.root :controller => "hello"
286
- end
287
- x = setup_for_named_route
288
- assert_equal("http://named.route.test/", x.send(:root_url))
289
- assert_equal("/", x.send(:root_path))
174
+
175
+ def test_optional_value_needs_no_check
176
+ segment = segment(:optional => true)
177
+
178
+ a_value = nil
179
+ assert_equal nil, segment.value_check
290
180
  end
291
-
292
- def test_named_route_with_regexps
293
- rs.draw do |map|
294
- map.article 'page/:year/:month/:day/:title', :controller => 'page', :action => 'show',
295
- :year => /\d+/, :month => /\d+/, :day => /\d+/
296
- map.connect ':controller/:action/:id'
297
- end
298
- x = setup_for_named_route
299
- # assert_equal(
300
- # {:controller => 'page', :action => 'show', :title => 'hi', :use_route => :article, :only_path => false},
301
- # x.send(:article_url, :title => 'hi')
302
- # )
303
- assert_equal(
304
- "http://named.route.test/page/2005/6/10/hi",
305
- x.send(:article_url, :title => 'hi', :day => 10, :year => 2005, :month => 6)
306
- )
181
+
182
+ def test_regexp_value_check_should_accept_match_with_default
183
+ segment = segment(:regexp => /\d+/, :default => '200')
184
+
185
+ a_value = '100'
186
+ assert eval(segment.value_check)
307
187
  end
308
188
 
309
- def test_changing_controller
310
- assert_equal '/admin/stuff/show/10', rs.generate(
311
- {:controller => 'stuff', :action => 'show', :id => 10},
312
- {:controller => 'admin/user', :action => 'index'}
313
- )
314
- end
189
+ def test_expiry_should_not_trigger_once_expired
190
+ expired = true
191
+ hash = merged = {:a => 2, :b => 3}
192
+ options = {:b => 3}
193
+ expire_on = Hash.new { raise 'No!!!' }
315
194
 
316
- def test_paths_escaped
317
- rs.draw do |map|
318
- map.path 'file/*path', :controller => 'content', :action => 'show_file'
319
- map.connect ':controller/:action/:id'
320
- end
195
+ eval(segment.expiry_statement)
196
+ rescue RuntimeError
197
+ flunk "Expiry check should not have occurred!"
198
+ end
321
199
 
322
- # No + to space in URI escaping, only for query params.
323
- results = rs.recognize_path "/file/hello+world/how+are+you%3F"
324
- assert results, "Recognition should have succeeded"
325
- assert_equal ['hello+world', 'how+are+you?'], results[:path]
200
+ def test_expiry_should_occur_according_to_expire_on
201
+ expired = false
202
+ hash = merged = {:a => 2, :b => 3}
203
+ options = {:b => 3}
326
204
 
327
- # Use %20 for space instead.
328
- results = rs.recognize_path "/file/hello%20world/how%20are%20you%3F"
329
- assert results, "Recognition should have succeeded"
330
- assert_equal ['hello world', 'how are you?'], results[:path]
205
+ expire_on = {:b => true, :a => false}
206
+ eval(segment.expiry_statement)
207
+ assert !expired
208
+ assert_equal({:a => 2, :b => 3}, hash)
331
209
 
332
- results = rs.recognize_path "/file"
333
- assert results, "Recognition should have succeeded"
334
- assert_equal [], results[:path]
210
+ expire_on = {:b => true, :a => true}
211
+ eval(segment.expiry_statement)
212
+ assert expired
213
+ assert_equal({:b => 3}, hash)
335
214
  end
336
-
337
- def test_paths_slashes_unescaped_with_ordered_parameters
338
- rs.add_named_route :path, '/file/*path', :controller => 'content'
339
215
 
340
- # No / to %2F in URI, only for query params.
341
- x = setup_for_named_route
342
- assert_equal("/file/hello/world", x.send(:path_path, 'hello/world'))
343
- end
344
-
345
- def test_non_controllers_cannot_be_matched
346
- rs.draw do |map|
347
- map.connect ':controller/:action/:id'
348
- end
349
- assert_raises(ActionController::RoutingError) { rs.recognize_path("/not_a/show/10") }
350
- end
216
+ def test_extraction_code_should_return_on_nil
217
+ hash = merged = {:b => 3}
218
+ options = {:b => 3}
219
+ a_value = nil
351
220
 
352
- def test_paths_do_not_accept_defaults
353
- assert_raises(ActionController::RoutingError) do
354
- rs.draw do |map|
355
- map.path 'file/*path', :controller => 'content', :action => 'show_file', :path => %w(fake default)
356
- map.connect ':controller/:action/:id'
357
- end
358
- end
359
-
360
- rs.draw do |map|
361
- map.path 'file/*path', :controller => 'content', :action => 'show_file', :path => []
362
- map.connect ':controller/:action/:id'
363
- end
221
+ # Local jump because of return inside eval.
222
+ assert_raise(LocalJumpError) { eval(segment.extraction_code) }
364
223
  end
365
-
366
- def test_should_list_options_diff_when_routing_requirements_dont_match
367
- rs.draw do |map|
368
- map.post 'post/:id', :controller=> 'post', :action=> 'show', :requirements => {:id => /\d+/}
369
- end
370
- exception = assert_raise(ActionController::RoutingError) { rs.generate(:controller => 'post', :action => 'show', :bad_param => "foo", :use_route => "post") }
371
- assert_match /^post_url failed to generate/, exception.message
372
- from_match = exception.message.match(/from \{[^\}]+\}/).to_s
373
- assert_match /:bad_param=>"foo"/, from_match
374
- assert_match /:action=>"show"/, from_match
375
- assert_match /:controller=>"post"/, from_match
376
-
377
- expected_match = exception.message.match(/expected: \{[^\}]+\}/).to_s
378
- assert_no_match /:bad_param=>"foo"/, expected_match
379
- assert_match /:action=>"show"/, expected_match
380
- assert_match /:controller=>"post"/, expected_match
381
224
 
382
- diff_match = exception.message.match(/diff: \{[^\}]+\}/).to_s
383
- assert_match /:bad_param=>"foo"/, diff_match
384
- assert_no_match /:action=>"show"/, diff_match
385
- assert_no_match /:controller=>"post"/, diff_match
225
+ def test_extraction_code_should_return_on_mismatch
226
+ segment = segment(:regexp => /\d+/)
227
+ hash = merged = {:a => 'Hi', :b => '3'}
228
+ options = {:b => '3'}
229
+ a_value = nil
230
+
231
+ # Local jump because of return inside eval.
232
+ assert_raise(LocalJumpError) { eval(segment.extraction_code) }
386
233
  end
387
234
 
388
- # this specifies the case where your formerly would get a very confusing error message with an empty diff
389
- def test_should_have_better_error_message_when_options_diff_is_empty
390
- rs.draw do |map|
391
- map.content '/content/:query', :controller => 'content', :action => 'show'
392
- end
235
+ def test_extraction_code_should_accept_value_and_set_local
236
+ hash = merged = {:a => 'Hi', :b => '3'}
237
+ options = {:b => '3'}
238
+ a_value = nil
239
+ expired = true
393
240
 
394
- exception = assert_raise(ActionController::RoutingError) { rs.generate(:controller => 'content', :action => 'show', :use_route => "content") }
395
- assert_match %r[:action=>"show"], exception.message
396
- assert_match %r[:controller=>"content"], exception.message
397
- assert_match %r[you may have ambiguous routes, or you may need to supply additional parameters for this route], exception.message
398
- assert_match %r[content_url has the following required parameters: \["content", :query\] - are they all satisfied?], exception.message
241
+ eval(segment.extraction_code)
242
+ assert_equal 'Hi', a_value
399
243
  end
400
-
401
- def test_dynamic_path_allowed
402
- rs.draw do |map|
403
- map.connect '*path', :controller => 'content', :action => 'show_file'
404
- end
405
244
 
406
- assert_equal '/pages/boo', rs.generate(:controller => 'content', :action => 'show_file', :path => %w(pages boo))
245
+ def test_extraction_should_work_without_value_check
246
+ segment.default = 'hi'
247
+ hash = merged = {:b => '3'}
248
+ options = {:b => '3'}
249
+ a_value = nil
250
+ expired = true
251
+
252
+ eval(segment.extraction_code)
253
+ assert_equal 'hi', a_value
407
254
  end
408
255
 
409
- def test_dynamic_recall_paths_allowed
410
- rs.draw do |map|
411
- map.connect '*path', :controller => 'content', :action => 'show_file'
412
- end
413
-
414
- recall_path = ActionController::Routing::PathSegment::Result.new(%w(pages boo))
415
- assert_equal '/pages/boo', rs.generate({}, :controller => 'content', :action => 'show_file', :path => recall_path)
256
+ def test_extraction_code_should_perform_expiry
257
+ expired = false
258
+ hash = merged = {:a => 'Hi', :b => '3'}
259
+ options = {:b => '3'}
260
+ expire_on = {:a => true}
261
+ a_value = nil
262
+
263
+ eval(segment.extraction_code)
264
+ assert_equal 'Hi', a_value
265
+ assert expired
266
+ assert_equal options, hash
416
267
  end
417
268
 
418
- def test_backwards
419
- rs.draw do |map|
420
- map.connect 'page/:id/:action', :controller => 'pages', :action => 'show'
421
- map.connect ':controller/:action/:id'
422
- end
269
+ def test_interpolation_chunk_should_replace_value
270
+ a_value = 'Hi'
271
+ assert_equal a_value, eval(%("#{segment.interpolation_chunk}"))
272
+ end
423
273
 
424
- assert_equal '/page/20', rs.generate({:id => 20}, {:controller => 'pages', :action => 'show'})
425
- assert_equal '/page/20', rs.generate(:controller => 'pages', :id => 20, :action => 'show')
426
- assert_equal '/pages/boo', rs.generate(:controller => 'pages', :action => 'boo')
274
+ def test_interpolation_chunk_should_accept_nil
275
+ a_value = nil
276
+ assert_equal '', eval(%("#{segment.interpolation_chunk('a_value')}"))
427
277
  end
428
278
 
429
- def test_route_with_fixnum_default
430
- rs.draw do |map|
431
- map.connect 'page/:id', :controller => 'content', :action => 'show_page', :id => 1
432
- map.connect ':controller/:action/:id'
433
- end
279
+ def test_value_regexp_should_be_nil_without_regexp
280
+ assert_equal nil, segment.value_regexp
281
+ end
434
282
 
435
- assert_equal '/page', rs.generate(:controller => 'content', :action => 'show_page')
436
- assert_equal '/page', rs.generate(:controller => 'content', :action => 'show_page', :id => 1)
437
- assert_equal '/page', rs.generate(:controller => 'content', :action => 'show_page', :id => '1')
438
- assert_equal '/page/10', rs.generate(:controller => 'content', :action => 'show_page', :id => 10)
283
+ def test_value_regexp_should_match_exacly
284
+ segment = segment(:regexp => /\d+/)
285
+ assert_no_match segment.value_regexp, "Hello 10 World"
286
+ assert_no_match segment.value_regexp, "Hello 10"
287
+ assert_no_match segment.value_regexp, "10 World"
288
+ assert_match segment.value_regexp, "10"
289
+ end
439
290
 
440
- assert_equal({:controller => "content", :action => 'show_page', :id => '1'}, rs.recognize_path("/page"))
441
- assert_equal({:controller => "content", :action => 'show_page', :id => '1'}, rs.recognize_path("/page/1"))
442
- assert_equal({:controller => "content", :action => 'show_page', :id => '10'}, rs.recognize_path("/page/10"))
291
+ def test_regexp_chunk_should_return_string
292
+ segment = segment(:regexp => /\d+/)
293
+ assert_kind_of String, segment.regexp_chunk
443
294
  end
444
295
 
445
- # For newer revision
446
- def test_route_with_text_default
447
- rs.draw do |map|
448
- map.connect 'page/:id', :controller => 'content', :action => 'show_page', :id => 1
449
- map.connect ':controller/:action/:id'
450
- end
296
+ def test_build_pattern_non_optional_with_no_captures
297
+ # Non optional
298
+ a_segment = ROUTING::DynamicSegment.new(nil, :regexp => /\d+/)
299
+ assert_equal "(\\d+)stuff", a_segment.build_pattern('stuff')
300
+ end
451
301
 
452
- assert_equal '/page/foo', rs.generate(:controller => 'content', :action => 'show_page', :id => 'foo')
453
- assert_equal({:controller => "content", :action => 'show_page', :id => 'foo'}, rs.recognize_path("/page/foo"))
302
+ def test_build_pattern_non_optional_with_captures
303
+ # Non optional
304
+ a_segment = ROUTING::DynamicSegment.new(nil, :regexp => /(\d+)(.*?)/)
305
+ assert_equal "((\\d+)(.*?))stuff", a_segment.build_pattern('stuff')
306
+ end
454
307
 
455
- token = "\321\202\320\265\320\272\321\201\321\202" # 'text' in russian
456
- escaped_token = CGI::escape(token)
308
+ def test_optionality_implied
309
+ a_segment = ROUTING::DynamicSegment.new(:id)
310
+ assert a_segment.optionality_implied?
457
311
 
458
- assert_equal '/page/' + escaped_token, rs.generate(:controller => 'content', :action => 'show_page', :id => token)
459
- assert_equal({:controller => "content", :action => 'show_page', :id => token}, rs.recognize_path("/page/#{escaped_token}"))
312
+ a_segment = ROUTING::DynamicSegment.new(:action)
313
+ assert a_segment.optionality_implied?
460
314
  end
461
-
462
- def test_action_expiry
463
- assert_equal '/content', rs.generate({:controller => 'content'}, {:controller => 'content', :action => 'show'})
315
+
316
+ def test_modifiers_must_be_handled_sensibly
317
+ a_segment = ROUTING::DynamicSegment.new(nil, :regexp => /david|jamis/i)
318
+ assert_equal "((?i-mx:david|jamis))stuff", a_segment.build_pattern('stuff')
319
+ a_segment = ROUTING::DynamicSegment.new(nil, :regexp => /david|jamis/x)
320
+ assert_equal "((?x-mi:david|jamis))stuff", a_segment.build_pattern('stuff')
321
+ a_segment = ROUTING::DynamicSegment.new(nil, :regexp => /david|jamis/)
322
+ assert_equal "(david|jamis)stuff", a_segment.build_pattern('stuff')
464
323
  end
324
+ end
465
325
 
466
- def test_recognition_with_uppercase_controller_name
467
- assert_equal({:controller => "content", :action => 'index'}, rs.recognize_path("/Content"))
468
- assert_equal({:controller => "content", :action => 'list'}, rs.recognize_path("/ConTent/list"))
469
- assert_equal({:controller => "content", :action => 'show', :id => '10'}, rs.recognize_path("/CONTENT/show/10"))
326
+ class ControllerSegmentTest < Test::Unit::TestCase
327
+ def test_regexp_should_only_match_possible_controllers
328
+ ActionController::Routing.with_controllers %w(admin/accounts admin/users account pages) do
329
+ cs = ROUTING::ControllerSegment.new :controller
330
+ regexp = %r{\A#{cs.regexp_chunk}\Z}
470
331
 
471
- # these used to work, before the routes rewrite, but support for this was pulled in the new version...
472
- #assert_equal({'controller' => "admin/news_feed", 'action' => 'index'}, rs.recognize_path("Admin/NewsFeed"))
473
- #assert_equal({'controller' => "admin/news_feed", 'action' => 'index'}, rs.recognize_path("Admin/News_Feed"))
474
- end
475
-
476
- def test_requirement_should_prevent_optional_id
477
- rs.draw do |map|
478
- map.post 'post/:id', :controller=> 'post', :action=> 'show', :requirements => {:id => /\d+/}
479
- end
332
+ ActionController::Routing.possible_controllers.each do |name|
333
+ assert_match regexp, name
334
+ assert_no_match regexp, "#{name}_fake"
480
335
 
481
- assert_equal '/post/10', rs.generate(:controller => 'post', :action => 'show', :id => 10)
482
-
483
- assert_raises ActionController::RoutingError do
484
- rs.generate(:controller => 'post', :action => 'show')
336
+ match = regexp.match name
337
+ assert_equal name, match[1]
338
+ end
485
339
  end
486
340
  end
487
-
488
- def test_both_requirement_and_optional
489
- rs.draw do |map|
490
- map.blog('test/:year', :controller => 'post', :action => 'show',
491
- :defaults => { :year => nil },
492
- :requirements => { :year => /\d{4}/ }
493
- )
494
- map.connect ':controller/:action/:id'
341
+ end
342
+
343
+ class PathSegmentTest < Test::Unit::TestCase
344
+ def segment(options = {})
345
+ unless @segment
346
+ @segment = ROUTING::PathSegment.new(:path, options)
495
347
  end
348
+ @segment
349
+ end
496
350
 
497
- assert_equal '/test', rs.generate(:controller => 'post', :action => 'show')
498
- assert_equal '/test', rs.generate(:controller => 'post', :action => 'show', :year => nil)
499
-
500
- x = setup_for_named_route
501
- assert_equal("http://named.route.test/test",
502
- x.send(:blog_url))
351
+ def test_regexp_chunk_should_return_string
352
+ segment = segment(:regexp => /[a-z]+/)
353
+ assert_kind_of String, segment.regexp_chunk
503
354
  end
504
-
505
- def test_set_to_nil_forgets
506
- rs.draw do |map|
507
- map.connect 'pages/:year/:month/:day', :controller => 'content', :action => 'list_pages', :month => nil, :day => nil
508
- map.connect ':controller/:action/:id'
509
- end
510
-
511
- assert_equal '/pages/2005',
512
- rs.generate(:controller => 'content', :action => 'list_pages', :year => 2005)
513
- assert_equal '/pages/2005/6',
514
- rs.generate(:controller => 'content', :action => 'list_pages', :year => 2005, :month => 6)
515
- assert_equal '/pages/2005/6/12',
516
- rs.generate(:controller => 'content', :action => 'list_pages', :year => 2005, :month => 6, :day => 12)
517
-
518
- assert_equal '/pages/2005/6/4',
519
- rs.generate({:day => 4}, {:controller => 'content', :action => 'list_pages', :year => '2005', :month => '6', :day => '12'})
520
-
521
- assert_equal '/pages/2005/6',
522
- rs.generate({:day => nil}, {:controller => 'content', :action => 'list_pages', :year => '2005', :month => '6', :day => '12'})
523
355
 
524
- assert_equal '/pages/2005',
525
- rs.generate({:day => nil, :month => nil}, {:controller => 'content', :action => 'list_pages', :year => '2005', :month => '6', :day => '12'})
526
- end
527
-
528
- def test_url_with_no_action_specified
529
- rs.draw do |map|
530
- map.connect '', :controller => 'content'
531
- map.connect ':controller/:action/:id'
532
- end
533
-
534
- assert_equal '/', rs.generate(:controller => 'content', :action => 'index')
535
- assert_equal '/', rs.generate(:controller => 'content')
356
+ def test_regexp_chunk_should_be_wrapped_with_parenthesis
357
+ segment = segment(:regexp => /[a-z]+/)
358
+ assert_equal "([a-z]+)", segment.regexp_chunk
536
359
  end
537
360
 
538
- def test_named_url_with_no_action_specified
539
- rs.draw do |map|
540
- map.home '', :controller => 'content'
541
- map.connect ':controller/:action/:id'
542
- end
543
-
544
- assert_equal '/', rs.generate(:controller => 'content', :action => 'index')
545
- assert_equal '/', rs.generate(:controller => 'content')
546
-
547
- x = setup_for_named_route
548
- assert_equal("http://named.route.test/",
549
- x.send(:home_url))
550
- end
551
-
552
- def test_url_generated_when_forgetting_action
553
- [{:controller => 'content', :action => 'index'}, {:controller => 'content'}].each do |hash|
554
- rs.draw do |map|
555
- map.home '', hash
556
- map.connect ':controller/:action/:id'
557
- end
558
- assert_equal '/', rs.generate({:action => nil}, {:controller => 'content', :action => 'hello'})
559
- assert_equal '/', rs.generate({:controller => 'content'})
560
- assert_equal '/content/hi', rs.generate({:controller => 'content', :action => 'hi'})
561
- end
361
+ def test_regexp_chunk_should_respect_options
362
+ segment = segment(:regexp => /[a-z]+/i)
363
+ assert_equal "((?i-mx:[a-z]+))", segment.regexp_chunk
562
364
  end
563
-
564
- def test_named_route_method
565
- rs.draw do |map|
566
- map.categories 'categories', :controller => 'content', :action => 'categories'
567
- map.connect ':controller/:action/:id'
568
- end
365
+ end
569
366
 
570
- assert_equal '/categories', rs.generate(:controller => 'content', :action => 'categories')
571
- assert_equal '/content/hi', rs.generate({:controller => 'content', :action => 'hi'})
367
+ class RouteBuilderTest < Test::Unit::TestCase
368
+ def builder
369
+ @builder ||= ROUTING::RouteBuilder.new
572
370
  end
573
371
 
574
- def test_named_routes_array
575
- test_named_route_method
576
- assert_equal [:categories], rs.named_routes.names
372
+ def build(path, options)
373
+ builder.build(path, options)
577
374
  end
578
375
 
579
- def test_nil_defaults
580
- rs.draw do |map|
581
- map.connect 'journal',
582
- :controller => 'content',
583
- :action => 'list_journal',
584
- :date => nil, :user_id => nil
585
- map.connect ':controller/:action/:id'
376
+ def test_options_should_not_be_modified
377
+ requirements1 = { :id => /\w+/, :controller => /(?:[a-z](?:-?[a-z]+)*)/ }
378
+ requirements2 = requirements1.dup
379
+
380
+ assert_equal requirements1, requirements2
381
+
382
+ with_options(:controller => 'folder',
383
+ :requirements => requirements2) do |m|
384
+ m.build 'folders/new', :action => 'new'
586
385
  end
587
386
 
588
- assert_equal '/journal', rs.generate(:controller => 'content', :action => 'list_journal', :date => nil, :user_id => nil)
387
+ assert_equal requirements1, requirements2
589
388
  end
590
389
 
591
- def setup_request_method_routes_for(method)
592
- @request = ActionController::TestRequest.new
593
- @request.env["REQUEST_METHOD"] = method
594
- @request.request_uri = "/match"
595
-
596
- rs.draw do |r|
597
- r.connect '/match', :controller => 'books', :action => 'get', :conditions => { :method => :get }
598
- r.connect '/match', :controller => 'books', :action => 'post', :conditions => { :method => :post }
599
- r.connect '/match', :controller => 'books', :action => 'put', :conditions => { :method => :put }
600
- r.connect '/match', :controller => 'books', :action => 'delete', :conditions => { :method => :delete }
601
- end
390
+ def test_segment_for_static
391
+ segment, rest = builder.segment_for 'ulysses'
392
+ assert_equal '', rest
393
+ assert_kind_of ROUTING::StaticSegment, segment
394
+ assert_equal 'ulysses', segment.value
602
395
  end
603
396
 
604
- %w(GET POST PUT DELETE).each do |request_method|
605
- define_method("test_request_method_recognized_with_#{request_method}") do
606
- begin
607
- Object.const_set(:BooksController, Class.new(ActionController::Base))
397
+ def test_segment_for_action
398
+ segment, rest = builder.segment_for ':action'
399
+ assert_equal '', rest
400
+ assert_kind_of ROUTING::DynamicSegment, segment
401
+ assert_equal :action, segment.key
402
+ assert_equal 'index', segment.default
403
+ end
608
404
 
609
- setup_request_method_routes_for(request_method)
405
+ def test_segment_for_dynamic
406
+ segment, rest = builder.segment_for ':login'
407
+ assert_equal '', rest
408
+ assert_kind_of ROUTING::DynamicSegment, segment
409
+ assert_equal :login, segment.key
410
+ assert_equal nil, segment.default
411
+ assert ! segment.optional?
412
+ end
610
413
 
611
- assert_nothing_raised { rs.recognize(@request) }
612
- assert_equal request_method.downcase, @request.path_parameters[:action]
613
- ensure
614
- Object.send(:remove_const, :BooksController) rescue nil
615
- end
616
- end
414
+ def test_segment_for_with_rest
415
+ segment, rest = builder.segment_for ':login/:action'
416
+ assert_equal :login, segment.key
417
+ assert_equal '/:action', rest
418
+ segment, rest = builder.segment_for rest
419
+ assert_equal '/', segment.value
420
+ assert_equal ':action', rest
421
+ segment, rest = builder.segment_for rest
422
+ assert_equal :action, segment.key
423
+ assert_equal '', rest
617
424
  end
618
425
 
619
- def test_subpath_recognized
620
- Object.const_set(:SubpathBooksController, Class.new(ActionController::Base))
426
+ def test_segments_for
427
+ segments = builder.segments_for_route_path '/:controller/:action/:id'
621
428
 
622
- rs.draw do |r|
623
- r.connect '/books/:id/edit', :controller => 'subpath_books', :action => 'edit'
624
- r.connect '/items/:id/:action', :controller => 'subpath_books'
625
- r.connect '/posts/new/:action', :controller => 'subpath_books'
626
- r.connect '/posts/:id', :controller => 'subpath_books', :action => "show"
627
- end
429
+ assert_kind_of ROUTING::DividerSegment, segments[0]
430
+ assert_equal '/', segments[2].value
628
431
 
629
- hash = rs.recognize_path "/books/17/edit"
630
- assert_not_nil hash
631
- assert_equal %w(subpath_books 17 edit), [hash[:controller], hash[:id], hash[:action]]
632
-
633
- hash = rs.recognize_path "/items/3/complete"
634
- assert_not_nil hash
635
- assert_equal %w(subpath_books 3 complete), [hash[:controller], hash[:id], hash[:action]]
636
-
637
- hash = rs.recognize_path "/posts/new/preview"
638
- assert_not_nil hash
639
- assert_equal %w(subpath_books preview), [hash[:controller], hash[:action]]
432
+ assert_kind_of ROUTING::DynamicSegment, segments[1]
433
+ assert_equal :controller, segments[1].key
640
434
 
641
- hash = rs.recognize_path "/posts/7"
642
- assert_not_nil hash
643
- assert_equal %w(subpath_books show 7), [hash[:controller], hash[:action], hash[:id]]
644
- ensure
645
- Object.send(:remove_const, :SubpathBooksController) rescue nil
646
- end
435
+ assert_kind_of ROUTING::DividerSegment, segments[2]
436
+ assert_equal '/', segments[2].value
647
437
 
648
- def test_subpath_generated
649
- Object.const_set(:SubpathBooksController, Class.new(ActionController::Base))
438
+ assert_kind_of ROUTING::DynamicSegment, segments[3]
439
+ assert_equal :action, segments[3].key
650
440
 
651
- rs.draw do |r|
652
- r.connect '/books/:id/edit', :controller => 'subpath_books', :action => 'edit'
653
- r.connect '/items/:id/:action', :controller => 'subpath_books'
654
- r.connect '/posts/new/:action', :controller => 'subpath_books'
655
- end
441
+ assert_kind_of ROUTING::DividerSegment, segments[4]
442
+ assert_equal '/', segments[4].value
656
443
 
657
- assert_equal "/books/7/edit", rs.generate(:controller => "subpath_books", :id => 7, :action => "edit")
658
- assert_equal "/items/15/complete", rs.generate(:controller => "subpath_books", :id => 15, :action => "complete")
659
- assert_equal "/posts/new/preview", rs.generate(:controller => "subpath_books", :action => "preview")
660
- ensure
661
- Object.send(:remove_const, :SubpathBooksController) rescue nil
444
+ assert_kind_of ROUTING::DynamicSegment, segments[5]
445
+ assert_equal :id, segments[5].key
662
446
  end
663
-
664
- def test_failed_requirements_raises_exception_with_violated_requirements
665
- rs.draw do |r|
666
- r.foo_with_requirement 'foos/:id', :controller=>'foos', :requirements=>{:id=>/\d+/}
667
- end
668
-
669
- x = setup_for_named_route
670
- assert_raises(ActionController::RoutingError) do
671
- x.send(:foo_with_requirement_url, "I am Against the requirements")
672
- end
447
+
448
+ def test_segment_for_action
449
+ s, r = builder.segment_for(':action/something/else')
450
+ assert_equal '/something/else', r
451
+ assert_equal :action, s.key
673
452
  end
674
453
 
675
- def test_routes_changed_correctly_after_clear
676
- ActionController::Base.optimise_named_routes = true
677
- rs = ::ActionController::Routing::RouteSet.new
678
- rs.draw do |r|
679
- r.connect 'ca', :controller => 'ca', :action => "aa"
680
- r.connect 'cb', :controller => 'cb', :action => "ab"
681
- r.connect 'cc', :controller => 'cc', :action => "ac"
682
- r.connect ':controller/:action/:id'
683
- r.connect ':controller/:action/:id.:format'
684
- end
454
+ def test_action_default_should_not_trigger_on_prefix
455
+ s, r = builder.segment_for ':action_name/something/else'
456
+ assert_equal '/something/else', r
457
+ assert_equal :action_name, s.key
458
+ assert_equal nil, s.default
459
+ end
685
460
 
686
- hash = rs.recognize_path "/cc"
461
+ def test_divide_route_options
462
+ segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
463
+ defaults, requirements = builder.divide_route_options(segments,
464
+ :action => 'buy', :person => /\w+/, :car => /\w+/,
465
+ :defaults => {:person => nil, :car => nil}
466
+ )
687
467
 
688
- assert_not_nil hash
689
- assert_equal %w(cc ac), [hash[:controller], hash[:action]]
468
+ assert_equal({:action => 'buy', :person => nil, :car => nil}, defaults)
469
+ assert_equal({:person => /\w+/, :car => /\w+/}, requirements)
470
+ end
690
471
 
691
- rs.draw do |r|
692
- r.connect 'cb', :controller => 'cb', :action => "ab"
693
- r.connect 'cc', :controller => 'cc', :action => "ac"
694
- r.connect ':controller/:action/:id'
695
- r.connect ':controller/:action/:id.:format'
696
- end
472
+ def test_assign_route_options
473
+ segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
474
+ defaults = {:action => 'buy', :person => nil, :car => nil}
475
+ requirements = {:person => /\w+/, :car => /\w+/}
697
476
 
698
- hash = rs.recognize_path "/cc"
477
+ route_requirements = builder.assign_route_options(segments, defaults, requirements)
478
+ assert_equal({}, route_requirements)
699
479
 
700
- assert_not_nil hash
701
- assert_equal %w(cc ac), [hash[:controller], hash[:action]]
702
- end
703
- end
480
+ assert_equal :action, segments[3].key
481
+ assert_equal 'buy', segments[3].default
704
482
 
705
- class SegmentTest < Test::Unit::TestCase
706
-
707
- def test_first_segment_should_interpolate_for_structure
708
- s = ROUTING::Segment.new
709
- def s.interpolation_statement(array) 'hello' end
710
- assert_equal 'hello', s.continue_string_structure([])
711
- end
712
-
713
- def test_interpolation_statement
714
- s = ROUTING::StaticSegment.new
715
- s.value = "Hello"
716
- assert_equal "Hello", eval(s.interpolation_statement([]))
717
- assert_equal "HelloHello", eval(s.interpolation_statement([s]))
718
-
719
- s2 = ROUTING::StaticSegment.new
720
- s2.value = "-"
721
- assert_equal "Hello-Hello", eval(s.interpolation_statement([s, s2]))
722
-
723
- s3 = ROUTING::StaticSegment.new
724
- s3.value = "World"
725
- assert_equal "Hello-World", eval(s3.interpolation_statement([s, s2]))
483
+ assert_equal :person, segments[5].key
484
+ assert_equal %r/\w+/, segments[5].regexp
485
+ assert segments[5].optional?
486
+
487
+ assert_equal :car, segments[7].key
488
+ assert_equal %r/\w+/, segments[7].regexp
489
+ assert segments[7].optional?
726
490
  end
727
-
728
- end
729
491
 
730
- class StaticSegmentTest < Test::Unit::TestCase
492
+ def test_assign_route_options_with_anchor_chars
493
+ segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
494
+ defaults = {:action => 'buy', :person => nil, :car => nil}
495
+ requirements = {:person => /\w+/, :car => /^\w+$/}
731
496
 
732
- def test_interpolation_chunk_should_respect_raw
733
- s = ROUTING::StaticSegment.new
734
- s.value = 'Hello World'
735
- assert ! s.raw?
736
- assert_equal 'Hello%20World', s.interpolation_chunk
497
+ assert_raise ArgumentError do
498
+ route_requirements = builder.assign_route_options(segments, defaults, requirements)
499
+ end
737
500
 
738
- s.raw = true
739
- assert s.raw?
740
- assert_equal 'Hello World', s.interpolation_chunk
501
+ requirements[:car] = /[^\/]+/
502
+ route_requirements = builder.assign_route_options(segments, defaults, requirements)
741
503
  end
742
504
 
743
- def test_regexp_chunk_should_escape_specials
744
- s = ROUTING::StaticSegment.new
745
-
746
- s.value = 'Hello*World'
747
- assert_equal 'Hello\*World', s.regexp_chunk
748
-
749
- s.value = 'HelloWorld'
750
- assert_equal 'HelloWorld', s.regexp_chunk
751
- end
752
-
753
- def test_regexp_chunk_should_add_question_mark_for_optionals
754
- s = ROUTING::StaticSegment.new
755
- s.value = "/"
756
- s.is_optional = true
757
- assert_equal "/?", s.regexp_chunk
758
-
759
- s.value = "hello"
760
- assert_equal "(?:hello)?", s.regexp_chunk
761
- end
762
-
763
- end
505
+ def test_optional_segments_preceding_required_segments
506
+ segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
507
+ defaults = {:action => 'buy', :person => nil, :car => "model-t"}
508
+ assert builder.assign_route_options(segments, defaults, {}).empty?
764
509
 
765
- class DynamicSegmentTest < Test::Unit::TestCase
766
-
767
- def segment
768
- unless @segment
769
- @segment = ROUTING::DynamicSegment.new
770
- @segment.key = :a
771
- end
772
- @segment
510
+ 0.upto(1) { |i| assert !segments[i].optional?, "segment #{i} is optional and it shouldn't be" }
511
+ assert segments[2].optional?
512
+
513
+ assert_equal nil, builder.warn_output # should only warn on the :person segment
773
514
  end
774
-
775
- def test_extract_value
776
- s = ROUTING::DynamicSegment.new
777
- s.key = :a
778
-
779
- hash = {:a => '10', :b => '20'}
780
- assert_equal '10', eval(s.extract_value)
781
-
782
- hash = {:b => '20'}
783
- assert_equal nil, eval(s.extract_value)
784
-
785
- s.default = '20'
786
- assert_equal '20', eval(s.extract_value)
515
+
516
+ def test_segmentation_of_dot_path
517
+ segments = builder.segments_for_route_path '/books/:action.rss'
518
+ assert builder.assign_route_options(segments, {}, {}).empty?
519
+ assert_equal 6, segments.length # "/", "books", "/", ":action", ".", "rss"
520
+ assert !segments.any? { |seg| seg.optional? }
787
521
  end
788
-
789
- def test_default_local_name
790
- assert_equal 'a_value', segment.local_name,
791
- "Unexpected name -- all value_check tests will fail!"
522
+
523
+ def test_segmentation_of_dynamic_dot_path
524
+ segments = builder.segments_for_route_path '/books/:action.:format'
525
+ assert builder.assign_route_options(segments, {}, {}).empty?
526
+ assert_equal 6, segments.length # "/", "books", "/", ":action", ".", ":format"
527
+ assert !segments.any? { |seg| seg.optional? }
528
+ assert_kind_of ROUTING::DynamicSegment, segments.last
792
529
  end
793
-
794
- def test_presence_value_check
795
- a_value = 10
796
- assert eval(segment.value_check)
530
+
531
+ def test_assignment_of_default_options
532
+ segments = builder.segments_for_route_path '/:controller/:action/:id/'
533
+ action, id = segments[-4], segments[-2]
534
+
535
+ assert_equal :action, action.key
536
+ assert_equal :id, id.key
537
+ assert ! action.optional?
538
+ assert ! id.optional?
539
+
540
+ builder.assign_default_route_options(segments)
541
+
542
+ assert_equal 'index', action.default
543
+ assert action.optional?
544
+ assert id.optional?
797
545
  end
798
-
799
- def test_regexp_value_check_rejects_nil
800
- segment.regexp = /\d+/
801
- a_value = nil
802
- assert ! eval(segment.value_check)
546
+
547
+ def test_assignment_of_default_options_respects_existing_defaults
548
+ segments = builder.segments_for_route_path '/:controller/:action/:id/'
549
+ action, id = segments[-4], segments[-2]
550
+
551
+ assert_equal :action, action.key
552
+ assert_equal :id, id.key
553
+ action.default = 'show'
554
+ action.is_optional = true
555
+
556
+ id.default = 'Welcome'
557
+ id.is_optional = true
558
+
559
+ builder.assign_default_route_options(segments)
560
+
561
+ assert_equal 'show', action.default
562
+ assert action.optional?
563
+ assert_equal 'Welcome', id.default
564
+ assert id.optional?
803
565
  end
804
-
805
- def test_optional_regexp_value_check_should_accept_nil
806
- segment.regexp = /\d+/
807
- segment.is_optional = true
808
- a_value = nil
809
- assert eval(segment.value_check)
566
+
567
+ def test_assignment_of_default_options_respects_regexps
568
+ segments = builder.segments_for_route_path '/:controller/:action/:id/'
569
+ action = segments[-4]
570
+
571
+ assert_equal :action, action.key
572
+ segments[-4] = ROUTING::DynamicSegment.new(:action, :regexp => /show|in/)
573
+
574
+ builder.assign_default_route_options(segments)
575
+
576
+ assert_equal nil, action.default
577
+ assert ! action.optional?
810
578
  end
811
-
812
- def test_regexp_value_check_rejects_no_match
813
- segment.regexp = /\d+/
814
-
815
- a_value = "Hello20World"
816
- assert ! eval(segment.value_check)
817
-
818
- a_value = "20Hi"
819
- assert ! eval(segment.value_check)
579
+
580
+ def test_assignment_of_is_optional_when_default
581
+ segments = builder.segments_for_route_path '/books/:action.rss'
582
+ assert_equal segments[3].key, :action
583
+ segments[3].default = 'changes'
584
+ builder.ensure_required_segments(segments)
585
+ assert ! segments[3].optional?
820
586
  end
821
-
822
- def test_regexp_value_check_accepts_match
823
- segment.regexp = /\d+/
824
-
825
- a_value = "30"
826
- assert eval(segment.value_check)
587
+
588
+ def test_is_optional_is_assigned_to_default_segments
589
+ segments = builder.segments_for_route_path '/books/:action'
590
+ builder.assign_route_options(segments, {:action => 'index'}, {})
591
+
592
+ assert_equal segments[3].key, :action
593
+ assert segments[3].optional?
594
+ assert_kind_of ROUTING::DividerSegment, segments[2]
595
+ assert segments[2].optional?
827
596
  end
828
-
829
- def test_value_check_fails_on_nil
830
- a_value = nil
831
- assert ! eval(segment.value_check)
597
+
598
+ # XXX is optional not being set right?
599
+ # /blah/:defaulted_segment <-- is the second slash optional? it should be.
600
+
601
+ def test_route_build
602
+ ActionController::Routing.with_controllers %w(users pages) do
603
+ r = builder.build '/:controller/:action/:id/', :action => nil
604
+
605
+ [0, 2, 4].each do |i|
606
+ assert_kind_of ROUTING::DividerSegment, r.segments[i]
607
+ assert_equal '/', r.segments[i].value
608
+ assert r.segments[i].optional? if i > 1
609
+ end
610
+
611
+ assert_kind_of ROUTING::DynamicSegment, r.segments[1]
612
+ assert_equal :controller, r.segments[1].key
613
+ assert_equal nil, r.segments[1].default
614
+
615
+ assert_kind_of ROUTING::DynamicSegment, r.segments[3]
616
+ assert_equal :action, r.segments[3].key
617
+ assert_equal 'index', r.segments[3].default
618
+
619
+ assert_kind_of ROUTING::DynamicSegment, r.segments[5]
620
+ assert_equal :id, r.segments[5].key
621
+ assert r.segments[5].optional?
622
+ end
832
623
  end
833
-
834
- def test_optional_value_needs_no_check
835
- segment.is_optional = true
836
- a_value = nil
837
- assert_equal nil, segment.value_check
624
+
625
+ def test_slashes_are_implied
626
+ routes = [
627
+ builder.build('/:controller/:action/:id/', :action => nil),
628
+ builder.build('/:controller/:action/:id', :action => nil),
629
+ builder.build(':controller/:action/:id', :action => nil),
630
+ builder.build('/:controller/:action/:id/', :action => nil)
631
+ ]
632
+ expected = routes.first.segments.length
633
+ routes.each_with_index do |route, i|
634
+ found = route.segments.length
635
+ assert_equal expected, found, "Route #{i + 1} has #{found} segments, expected #{expected}"
636
+ end
838
637
  end
839
-
840
- def test_regexp_value_check_should_accept_match_with_default
841
- segment.regexp = /\d+/
842
- segment.default = '200'
843
-
844
- a_value = '100'
845
- assert eval(segment.value_check)
638
+ end
639
+
640
+ class RoutingTest < Test::Unit::TestCase
641
+ def test_possible_controllers
642
+ true_controller_paths = ActionController::Routing.controller_paths
643
+
644
+ ActionController::Routing.use_controllers! nil
645
+
646
+ silence_warnings do
647
+ Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + '/controller_fixtures')
648
+ end
649
+
650
+ ActionController::Routing.controller_paths = [
651
+ RAILS_ROOT, RAILS_ROOT + '/app/controllers', RAILS_ROOT + '/vendor/plugins/bad_plugin/lib'
652
+ ]
653
+
654
+ assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
655
+ ensure
656
+ if true_controller_paths
657
+ ActionController::Routing.controller_paths = true_controller_paths
658
+ end
659
+ ActionController::Routing.use_controllers! nil
660
+ Object.send(:remove_const, :RAILS_ROOT) rescue nil
846
661
  end
847
-
848
- def test_expiry_should_not_trigger_once_expired
849
- expired = true
850
- hash = merged = {:a => 2, :b => 3}
851
- options = {:b => 3}
852
- expire_on = Hash.new { raise 'No!!!' }
853
-
854
- eval(segment.expiry_statement)
855
- rescue RuntimeError
856
- flunk "Expiry check should not have occurred!"
857
- end
858
-
859
- def test_expiry_should_occur_according_to_expire_on
860
- expired = false
861
- hash = merged = {:a => 2, :b => 3}
862
- options = {:b => 3}
863
-
864
- expire_on = {:b => true, :a => false}
865
- eval(segment.expiry_statement)
866
- assert !expired
867
- assert_equal({:a => 2, :b => 3}, hash)
868
-
869
- expire_on = {:b => true, :a => true}
870
- eval(segment.expiry_statement)
871
- assert expired
872
- assert_equal({:b => 3}, hash)
873
- end
874
-
875
- def test_extraction_code_should_return_on_nil
876
- hash = merged = {:b => 3}
877
- options = {:b => 3}
878
- a_value = nil
879
-
880
- # Local jump because of return inside eval.
881
- assert_raises(LocalJumpError) { eval(segment.extraction_code) }
882
- end
883
-
884
- def test_extraction_code_should_return_on_mismatch
885
- segment.regexp = /\d+/
886
- hash = merged = {:a => 'Hi', :b => '3'}
887
- options = {:b => '3'}
888
- a_value = nil
889
-
890
- # Local jump because of return inside eval.
891
- assert_raises(LocalJumpError) { eval(segment.extraction_code) }
892
- end
893
-
894
- def test_extraction_code_should_accept_value_and_set_local
895
- hash = merged = {:a => 'Hi', :b => '3'}
896
- options = {:b => '3'}
897
- a_value = nil
898
- expired = true
899
662
 
900
- eval(segment.extraction_code)
901
- assert_equal 'Hi', a_value
902
- end
903
-
904
- def test_extraction_should_work_without_value_check
905
- segment.default = 'hi'
906
- hash = merged = {:b => '3'}
907
- options = {:b => '3'}
908
- a_value = nil
909
- expired = true
910
-
911
- eval(segment.extraction_code)
912
- assert_equal 'hi', a_value
913
- end
914
-
915
- def test_extraction_code_should_perform_expiry
916
- expired = false
917
- hash = merged = {:a => 'Hi', :b => '3'}
918
- options = {:b => '3'}
919
- expire_on = {:a => true}
920
- a_value = nil
921
-
922
- eval(segment.extraction_code)
923
- assert_equal 'Hi', a_value
924
- assert expired
925
- assert_equal options, hash
926
- end
927
-
928
- def test_interpolation_chunk_should_replace_value
929
- a_value = 'Hi'
930
- assert_equal a_value, eval(%("#{segment.interpolation_chunk}"))
931
- end
932
-
933
- def test_interpolation_chunk_should_accept_nil
934
- a_value = nil
935
- assert_equal '', eval(%("#{segment.interpolation_chunk('a_value')}"))
936
- end
937
-
938
- def test_value_regexp_should_be_nil_without_regexp
939
- assert_equal nil, segment.value_regexp
940
- end
941
-
942
- def test_value_regexp_should_match_exacly
943
- segment.regexp = /\d+/
944
- assert_no_match segment.value_regexp, "Hello 10 World"
945
- assert_no_match segment.value_regexp, "Hello 10"
946
- assert_no_match segment.value_regexp, "10 World"
947
- assert_match segment.value_regexp, "10"
948
- end
949
-
950
- def test_regexp_chunk_should_return_string
951
- segment.regexp = /\d+/
952
- assert_kind_of String, segment.regexp_chunk
953
- end
954
-
955
- def test_build_pattern_non_optional_with_no_captures
956
- # Non optional
957
- a_segment = ROUTING::DynamicSegment.new
958
- a_segment.regexp = /\d+/ #number_of_captures is 0
959
- assert_equal "(\\d+)stuff", a_segment.build_pattern('stuff')
663
+ def test_possible_controllers_are_reset_on_each_load
664
+ true_possible_controllers = ActionController::Routing.possible_controllers
665
+ true_controller_paths = ActionController::Routing.controller_paths
666
+
667
+ ActionController::Routing.use_controllers! nil
668
+ root = File.dirname(__FILE__) + '/controller_fixtures'
669
+
670
+ ActionController::Routing.controller_paths = []
671
+ assert_equal [], ActionController::Routing.possible_controllers
672
+
673
+ ActionController::Routing.controller_paths = [
674
+ root, root + '/app/controllers', root + '/vendor/plugins/bad_plugin/lib'
675
+ ]
676
+ ActionController::Routing::Routes.load!
677
+
678
+ assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
679
+ ensure
680
+ ActionController::Routing.controller_paths = true_controller_paths
681
+ ActionController::Routing.use_controllers! true_possible_controllers
682
+ Object.send(:remove_const, :RAILS_ROOT) rescue nil
683
+
684
+ ActionController::Routing::Routes.clear!
685
+ ActionController::Routing::Routes.load_routes!
960
686
  end
961
687
 
962
- def test_build_pattern_non_optional_with_captures
963
- # Non optional
964
- a_segment = ROUTING::DynamicSegment.new
965
- a_segment.regexp = /(\d+)(.*?)/ #number_of_captures is 2
966
- assert_equal "((\\d+)(.*?))stuff", a_segment.build_pattern('stuff')
688
+ def test_with_controllers
689
+ c = %w(admin/accounts admin/users account pages)
690
+ ActionController::Routing.with_controllers c do
691
+ assert_equal c, ActionController::Routing.possible_controllers
692
+ end
967
693
  end
968
694
 
969
- def test_optionality_implied
970
- a_segment = ROUTING::DynamicSegment.new
971
- a_segment.key = :id
972
- assert a_segment.optionality_implied?
695
+ def test_normalize_unix_paths
696
+ load_paths = %w(. config/../app/controllers config/../app//helpers script/../config/../vendor/rails/actionpack/lib vendor/rails/railties/builtin/rails_info app/models lib script/../config/../foo/bar/../../app/models .foo/../.bar foo.bar/../config)
697
+ paths = ActionController::Routing.normalize_paths(load_paths)
698
+ assert_equal %w(vendor/rails/railties/builtin/rails_info vendor/rails/actionpack/lib app/controllers app/helpers app/models config .bar lib .), paths
699
+ end
973
700
 
974
- a_segment.key = :action
975
- assert a_segment.optionality_implied?
701
+ def test_normalize_windows_paths
702
+ load_paths = %w(. config\\..\\app\\controllers config\\..\\app\\\\helpers script\\..\\config\\..\\vendor\\rails\\actionpack\\lib vendor\\rails\\railties\\builtin\\rails_info app\\models lib script\\..\\config\\..\\foo\\bar\\..\\..\\app\\models .foo\\..\\.bar foo.bar\\..\\config)
703
+ paths = ActionController::Routing.normalize_paths(load_paths)
704
+ assert_equal %w(vendor\\rails\\railties\\builtin\\rails_info vendor\\rails\\actionpack\\lib app\\controllers app\\helpers app\\models config .bar lib .), paths
976
705
  end
977
706
 
978
- def test_modifiers_must_be_handled_sensibly
979
- a_segment = ROUTING::DynamicSegment.new
980
- a_segment.regexp = /david|jamis/i
981
- assert_equal "((?i-mx:david|jamis))stuff", a_segment.build_pattern('stuff')
982
- a_segment.regexp = /david|jamis/x
983
- assert_equal "((?x-mi:david|jamis))stuff", a_segment.build_pattern('stuff')
984
- a_segment.regexp = /david|jamis/
985
- assert_equal "(david|jamis)stuff", a_segment.build_pattern('stuff')
707
+ def test_routing_helper_module
708
+ assert_kind_of Module, ActionController::Routing::Helpers
709
+
710
+ h = ActionController::Routing::Helpers
711
+ c = Class.new
712
+ assert ! c.ancestors.include?(h)
713
+ ActionController::Routing::Routes.install_helpers c
714
+ assert c.ancestors.include?(h)
986
715
  end
987
716
  end
988
717
 
989
- class ControllerSegmentTest < Test::Unit::TestCase
990
-
991
- def test_regexp_should_only_match_possible_controllers
992
- ActionController::Routing.with_controllers %w(admin/accounts admin/users account pages) do
993
- cs = ROUTING::ControllerSegment.new :controller
994
- regexp = %r{\A#{cs.regexp_chunk}\Z}
995
-
996
- ActionController::Routing.possible_controllers.each do |name|
997
- assert_match regexp, name
998
- assert_no_match regexp, "#{name}_fake"
999
-
1000
- match = regexp.match name
1001
- assert_equal name, match[1]
1002
- end
1003
- end
718
+ class MockController
719
+ attr_accessor :routes
720
+
721
+ def initialize(routes)
722
+ self.routes = routes
1004
723
  end
1005
-
1006
- end
1007
724
 
1008
- uses_mocha 'RouteTest' do
725
+ def url_for(options)
726
+ only_path = options.delete(:only_path)
1009
727
 
1010
- class MockController
1011
- attr_accessor :routes
728
+ port = options.delete(:port) || 80
729
+ port_string = port == 80 ? '' : ":#{port}"
1012
730
 
1013
- def initialize(routes)
1014
- self.routes = routes
1015
- end
731
+ protocol = options.delete(:protocol) || "http"
732
+ host = options.delete(:host) || "test.host"
733
+ anchor = "##{options.delete(:anchor)}" if options.key?(:anchor)
1016
734
 
1017
- def url_for(options)
1018
- only_path = options.delete(:only_path)
1019
-
1020
- port = options.delete(:port) || 80
1021
- port_string = port == 80 ? '' : ":#{port}"
1022
-
1023
- host = options.delete(:host) || "named.route.test"
1024
- anchor = "##{options.delete(:anchor)}" if options.key?(:anchor)
1025
-
1026
- path = routes.generate(options)
1027
-
1028
- only_path ? "#{path}#{anchor}" : "http://#{host}#{port_string}#{path}#{anchor}"
1029
- end
1030
-
1031
- def request
1032
- @request ||= MockRequest.new(:host => "named.route.test", :method => :get)
1033
- end
1034
-
1035
- def relative_url_root=(value)
1036
- request.relative_url_root=value
1037
- end
735
+ path = routes.generate(options)
736
+
737
+ only_path ? "#{path}#{anchor}" : "#{protocol}://#{host}#{port_string}#{path}#{anchor}"
1038
738
  end
1039
739
 
1040
- class MockRequest
1041
- attr_accessor :path, :path_parameters, :host, :subdomains, :domain,
1042
- :method, :relative_url_root
1043
-
1044
- def initialize(values={})
1045
- values.each { |key, value| send("#{key}=", value) }
1046
- if values[:host]
1047
- subdomain, self.domain = values[:host].split(/\./, 2)
1048
- self.subdomains = [subdomain]
1049
- end
1050
- end
1051
-
1052
- def protocol
1053
- "http://"
1054
- end
1055
-
1056
- def host_with_port
1057
- (subdomains * '.') + '.' + domain
1058
- end
740
+ def request
741
+ @request ||= ActionController::TestRequest.new
1059
742
  end
743
+ end
1060
744
 
1061
- class RouteTest < Test::Unit::TestCase
745
+ class LegacyRouteSetTests < Test::Unit::TestCase
746
+ attr_reader :rs
1062
747
 
1063
748
  def setup
1064
- @route = ROUTING::Route.new
1065
- end
749
+ # These tests assume optimisation is on, so re-enable it.
750
+ ActionController::Base.optimise_named_routes = true
1066
751
 
1067
- def slash_segment(is_optional = false)
1068
- returning ROUTING::DividerSegment.new('/') do |s|
1069
- s.is_optional = is_optional
1070
- end
1071
- end
1072
-
1073
- def default_route
1074
- unless defined?(@default_route)
1075
- @default_route = ROUTING::Route.new
1076
-
1077
- @default_route.segments << (s = ROUTING::StaticSegment.new)
1078
- s.value = '/'
1079
- s.raw = true
1080
-
1081
- @default_route.segments << (s = ROUTING::DynamicSegment.new)
1082
- s.key = :controller
1083
-
1084
- @default_route.segments << slash_segment(:optional)
1085
- @default_route.segments << (s = ROUTING::DynamicSegment.new)
1086
- s.key = :action
1087
- s.default = 'index'
1088
- s.is_optional = true
1089
-
1090
- @default_route.segments << slash_segment(:optional)
1091
- @default_route.segments << (s = ROUTING::DynamicSegment.new)
1092
- s.key = :id
1093
- s.is_optional = true
1094
-
1095
- @default_route.segments << slash_segment(:optional)
1096
- end
1097
- @default_route
1098
- end
752
+ @rs = ::ActionController::Routing::RouteSet.new
1099
753
 
1100
- def test_default_route_recognition
1101
- expected = {:controller => 'accounts', :action => 'show', :id => '10'}
1102
- assert_equal expected, default_route.recognize('/accounts/show/10')
1103
- assert_equal expected, default_route.recognize('/accounts/show/10/')
1104
-
1105
- expected[:id] = 'jamis'
1106
- assert_equal expected, default_route.recognize('/accounts/show/jamis/')
1107
-
1108
- expected.delete :id
1109
- assert_equal expected, default_route.recognize('/accounts/show')
1110
- assert_equal expected, default_route.recognize('/accounts/show/')
1111
-
1112
- expected[:action] = 'index'
1113
- assert_equal expected, default_route.recognize('/accounts/')
1114
- assert_equal expected, default_route.recognize('/accounts')
1115
-
1116
- assert_equal nil, default_route.recognize('/')
1117
- assert_equal nil, default_route.recognize('/accounts/how/goood/it/is/to/be/free')
1118
- end
1119
-
1120
- def test_default_route_should_omit_default_action
1121
- o = {:controller => 'accounts', :action => 'index'}
1122
- assert_equal '/accounts', default_route.generate(o, o, {})
1123
- end
1124
-
1125
- def test_default_route_should_include_default_action_when_id_present
1126
- o = {:controller => 'accounts', :action => 'index', :id => '20'}
1127
- assert_equal '/accounts/index/20', default_route.generate(o, o, {})
754
+ ActionController::Routing.use_controllers! %w(content admin/user admin/news_feed)
1128
755
  end
1129
756
 
1130
- def test_default_route_should_work_with_action_but_no_id
1131
- o = {:controller => 'accounts', :action => 'list_all'}
1132
- assert_equal '/accounts/list_all', default_route.generate(o, o, {})
757
+ def teardown
758
+ @rs.clear!
1133
759
  end
1134
-
1135
- def test_default_route_should_uri_escape_pluses
1136
- expected = { :controller => 'accounts', :action => 'show', :id => 'hello world' }
1137
- assert_equal expected, default_route.recognize('/accounts/show/hello world')
1138
- assert_equal expected, default_route.recognize('/accounts/show/hello%20world')
1139
- assert_equal '/accounts/show/hello%20world', default_route.generate(expected, expected, {})
1140
760
 
1141
- expected[:id] = 'hello+world'
1142
- assert_equal expected, default_route.recognize('/accounts/show/hello+world')
1143
- assert_equal expected, default_route.recognize('/accounts/show/hello%2Bworld')
1144
- assert_equal '/accounts/show/hello+world', default_route.generate(expected, expected, {})
1145
- end
761
+ def test_default_setup
762
+ @rs.draw {|m| m.connect ':controller/:action/:id' }
763
+ assert_equal({:controller => "content", :action => 'index'}, rs.recognize_path("/content"))
764
+ assert_equal({:controller => "content", :action => 'list'}, rs.recognize_path("/content/list"))
765
+ assert_equal({:controller => "content", :action => 'show', :id => '10'}, rs.recognize_path("/content/show/10"))
1146
766
 
1147
- def test_matches_controller_and_action
1148
- # requirement_for should only be called for the action and controller _once_
1149
- @route.expects(:requirement_for).with(:controller).times(1).returns('pages')
1150
- @route.expects(:requirement_for).with(:action).times(1).returns('show')
1151
-
1152
- @route.requirements = {:controller => 'pages', :action => 'show'}
1153
- assert @route.matches_controller_and_action?('pages', 'show')
1154
- assert !@route.matches_controller_and_action?('not_pages', 'show')
1155
- assert !@route.matches_controller_and_action?('pages', 'not_show')
767
+ assert_equal({:controller => "admin/user", :action => 'show', :id => '10'}, rs.recognize_path("/admin/user/show/10"))
768
+
769
+ assert_equal '/admin/user/show/10', rs.generate(:controller => 'admin/user', :action => 'show', :id => 10)
770
+
771
+ assert_equal '/admin/user/show', rs.generate({:action => 'show'}, {:controller => 'admin/user', :action => 'list', :id => '10'})
772
+ assert_equal '/admin/user/list/10', rs.generate({}, {:controller => 'admin/user', :action => 'list', :id => '10'})
773
+
774
+ assert_equal '/admin/stuff', rs.generate({:controller => 'stuff'}, {:controller => 'admin/user', :action => 'list', :id => '10'})
775
+ assert_equal '/stuff', rs.generate({:controller => '/stuff'}, {:controller => 'admin/user', :action => 'list', :id => '10'})
1156
776
  end
1157
-
1158
- def test_parameter_shell
1159
- page_url = ROUTING::Route.new
1160
- page_url.requirements = {:controller => 'pages', :action => 'show', :id => /\d+/}
1161
- assert_equal({:controller => 'pages', :action => 'show'}, page_url.parameter_shell)
777
+
778
+ def test_ignores_leading_slash
779
+ @rs.clear!
780
+ @rs.draw {|m| m.connect '/:controller/:action/:id'}
781
+ test_default_setup
1162
782
  end
1163
783
 
1164
- def test_defaults
1165
- route = ROUTING::RouteBuilder.new.build '/users/:id.:format', :controller => "users", :action => "show", :format => "html"
1166
- assert_equal(
1167
- { :controller => "users", :action => "show", :format => "html" },
1168
- route.defaults)
784
+ def test_time_recognition
785
+ # We create many routes to make situation more realistic
786
+ @rs = ::ActionController::Routing::RouteSet.new
787
+ @rs.draw { |map|
788
+ map.frontpage '', :controller => 'search', :action => 'new'
789
+ map.resources :videos do |video|
790
+ video.resources :comments
791
+ video.resource :file, :controller => 'video_file'
792
+ video.resource :share, :controller => 'video_shares'
793
+ video.resource :abuse, :controller => 'video_abuses'
794
+ end
795
+ map.resources :abuses, :controller => 'video_abuses'
796
+ map.resources :video_uploads
797
+ map.resources :video_visits
798
+
799
+ map.resources :users do |user|
800
+ user.resource :settings
801
+ user.resources :videos
802
+ end
803
+ map.resources :channels do |channel|
804
+ channel.resources :videos, :controller => 'channel_videos'
805
+ end
806
+ map.resource :session
807
+ map.resource :lost_password
808
+ map.search 'search', :controller => 'search'
809
+ map.resources :pages
810
+ map.connect ':controller/:action/:id'
811
+ }
812
+ n = 1000
813
+ if RunTimeTests
814
+ GC.start
815
+ rectime = Benchmark.realtime do
816
+ n.times do
817
+ rs.recognize_path("/videos/1234567", {:method => :get})
818
+ rs.recognize_path("/videos/1234567/abuse", {:method => :get})
819
+ rs.recognize_path("/users/1234567/settings", {:method => :get})
820
+ rs.recognize_path("/channels/1234567", {:method => :get})
821
+ rs.recognize_path("/session/new", {:method => :get})
822
+ rs.recognize_path("/admin/user/show/10", {:method => :get})
823
+ end
824
+ end
825
+ puts "\n\nRecognition (#{rs.routes.size} routes):"
826
+ per_url = rectime / (n * 6)
827
+ puts "#{per_url * 1000} ms/url"
828
+ puts "#{1 / per_url} url/s\n\n"
829
+ end
1169
830
  end
1170
-
1171
- def test_builder_complains_without_controller
1172
- assert_raises(ArgumentError) do
1173
- ROUTING::RouteBuilder.new.build '/contact', :contoller => "contact", :action => "index"
831
+
832
+ def test_time_generation
833
+ n = 5000
834
+ if RunTimeTests
835
+ GC.start
836
+ pairs = [
837
+ [{:controller => 'content', :action => 'index'}, {:controller => 'content', :action => 'show'}],
838
+ [{:controller => 'content'}, {:controller => 'content', :action => 'index'}],
839
+ [{:controller => 'content', :action => 'list'}, {:controller => 'content', :action => 'index'}],
840
+ [{:controller => 'content', :action => 'show', :id => '10'}, {:controller => 'content', :action => 'list'}],
841
+ [{:controller => 'admin/user', :action => 'index'}, {:controller => 'admin/user', :action => 'show'}],
842
+ [{:controller => 'admin/user'}, {:controller => 'admin/user', :action => 'index'}],
843
+ [{:controller => 'admin/user', :action => 'list'}, {:controller => 'admin/user', :action => 'index'}],
844
+ [{:controller => 'admin/user', :action => 'show', :id => '10'}, {:controller => 'admin/user', :action => 'list'}],
845
+ ]
846
+ p = nil
847
+ gentime = Benchmark.realtime do
848
+ n.times do
849
+ pairs.each {|(a, b)| rs.generate(a, b)}
850
+ end
851
+ end
852
+
853
+ puts "\n\nGeneration (RouteSet): (#{(n * 8)} urls)"
854
+ per_url = gentime / (n * 8)
855
+ puts "#{per_url * 1000} ms/url"
856
+ puts "#{1 / per_url} url/s\n\n"
1174
857
  end
1175
858
  end
1176
859
 
1177
- def test_significant_keys_for_default_route
1178
- keys = default_route.significant_keys.sort_by {|k| k.to_s }
1179
- assert_equal [:action, :controller, :id], keys
860
+ def test_route_with_colon_first
861
+ rs.draw do |map|
862
+ map.connect '/:controller/:action/:id', :action => 'index', :id => nil
863
+ map.connect ':url', :controller => 'tiny_url', :action => 'translate'
864
+ end
1180
865
  end
1181
-
1182
- def test_significant_keys
1183
- user_url = ROUTING::Route.new
1184
- user_url.segments << (s = ROUTING::StaticSegment.new)
1185
- s.value = '/'
1186
- s.raw = true
1187
-
1188
- user_url.segments << (s = ROUTING::StaticSegment.new)
1189
- s.value = 'user'
1190
-
1191
- user_url.segments << (s = ROUTING::StaticSegment.new)
1192
- s.value = '/'
1193
- s.raw = true
1194
- s.is_optional = true
1195
-
1196
- user_url.segments << (s = ROUTING::DynamicSegment.new)
1197
- s.key = :user
1198
-
1199
- user_url.segments << (s = ROUTING::StaticSegment.new)
1200
- s.value = '/'
1201
- s.raw = true
1202
- s.is_optional = true
1203
-
1204
- user_url.requirements = {:controller => 'users', :action => 'show'}
1205
-
1206
- keys = user_url.significant_keys.sort_by { |k| k.to_s }
1207
- assert_equal [:action, :controller, :user], keys
866
+
867
+ def test_route_with_regexp_for_controller
868
+ rs.draw do |map|
869
+ map.connect ':controller/:admintoken/:action/:id', :controller => /admin\/.+/
870
+ map.connect ':controller/:action/:id'
871
+ end
872
+ assert_equal({:controller => "admin/user", :admintoken => "foo", :action => "index"},
873
+ rs.recognize_path("/admin/user/foo"))
874
+ assert_equal({:controller => "content", :action => "foo"}, rs.recognize_path("/content/foo"))
875
+ assert_equal '/admin/user/foo', rs.generate(:controller => "admin/user", :admintoken => "foo", :action => "index")
876
+ assert_equal '/content/foo', rs.generate(:controller => "content", :action => "foo")
1208
877
  end
1209
878
 
1210
- def test_build_empty_query_string
1211
- assert_equal '', @route.build_query_string({})
879
+ def test_route_with_regexp_and_captures_for_controller
880
+ rs.draw do |map|
881
+ map.connect ':controller/:action/:id', :controller => /admin\/(accounts|users)/
882
+ end
883
+ assert_equal({:controller => "admin/accounts", :action => "index"}, rs.recognize_path("/admin/accounts"))
884
+ assert_equal({:controller => "admin/users", :action => "index"}, rs.recognize_path("/admin/users"))
885
+ assert_raise(ActionController::RoutingError) { rs.recognize_path("/admin/products") }
1212
886
  end
1213
887
 
1214
- def test_build_query_string_with_nil_value
1215
- assert_equal '', @route.build_query_string({:x => nil})
888
+ def test_route_with_regexp_and_dot
889
+ rs.draw do |map|
890
+ map.connect ':controller/:action/:file',
891
+ :controller => /admin|user/,
892
+ :action => /upload|download/,
893
+ :defaults => {:file => nil},
894
+ :requirements => {:file => %r{[^/]+(\.[^/]+)?}}
895
+ end
896
+ # Without a file extension
897
+ assert_equal '/user/download/file',
898
+ rs.generate(:controller => "user", :action => "download", :file => "file")
899
+ assert_equal(
900
+ {:controller => "user", :action => "download", :file => "file"},
901
+ rs.recognize_path("/user/download/file"))
902
+
903
+ # Now, let's try a file with an extension, really a dot (.)
904
+ assert_equal '/user/download/file.jpg',
905
+ rs.generate(
906
+ :controller => "user", :action => "download", :file => "file.jpg")
907
+ assert_equal(
908
+ {:controller => "user", :action => "download", :file => "file.jpg"},
909
+ rs.recognize_path("/user/download/file.jpg"))
1216
910
  end
1217
911
 
1218
- def test_simple_build_query_string
1219
- assert_equal '?x=1&y=2', order_query_string(@route.build_query_string(:x => '1', :y => '2'))
912
+ def test_basic_named_route
913
+ rs.add_named_route :home, '', :controller => 'content', :action => 'list'
914
+ x = setup_for_named_route
915
+ assert_equal("http://test.host/",
916
+ x.send(:home_url))
1220
917
  end
1221
918
 
1222
- def test_convert_ints_build_query_string
1223
- assert_equal '?x=1&y=2', order_query_string(@route.build_query_string(:x => 1, :y => 2))
919
+ def test_basic_named_route_with_relative_url_root
920
+ rs.add_named_route :home, '', :controller => 'content', :action => 'list'
921
+ x = setup_for_named_route
922
+ ActionController::Base.relative_url_root = "/foo"
923
+ assert_equal("http://test.host/foo/",
924
+ x.send(:home_url))
925
+ assert_equal "/foo/", x.send(:home_path)
926
+ ActionController::Base.relative_url_root = nil
1224
927
  end
1225
928
 
1226
- def test_escape_spaces_build_query_string
1227
- assert_equal '?x=hello+world&y=goodbye+world', order_query_string(@route.build_query_string(:x => 'hello world', :y => 'goodbye world'))
929
+ def test_named_route_with_option
930
+ rs.add_named_route :page, 'page/:title', :controller => 'content', :action => 'show_page'
931
+ x = setup_for_named_route
932
+ assert_equal("http://test.host/page/new%20stuff",
933
+ x.send(:page_url, :title => 'new stuff'))
1228
934
  end
1229
935
 
1230
- def test_expand_array_build_query_string
1231
- assert_equal '?x%5B%5D=1&x%5B%5D=2', order_query_string(@route.build_query_string(:x => [1, 2]))
936
+ def test_named_route_with_default
937
+ rs.add_named_route :page, 'page/:title', :controller => 'content', :action => 'show_page', :title => 'AboutPage'
938
+ x = setup_for_named_route
939
+ assert_equal("http://test.host/page/AboutRails",
940
+ x.send(:page_url, :title => "AboutRails"))
941
+
1232
942
  end
1233
943
 
1234
- def test_escape_spaces_build_query_string_selected_keys
1235
- assert_equal '?x=hello+world', order_query_string(@route.build_query_string({:x => 'hello world', :y => 'goodbye world'}, [:x]))
944
+ def test_named_route_with_name_prefix
945
+ rs.add_named_route :page, 'page', :controller => 'content', :action => 'show_page', :name_prefix => 'my_'
946
+ x = setup_for_named_route
947
+ assert_equal("http://test.host/page",
948
+ x.send(:my_page_url))
1236
949
  end
1237
-
1238
- private
1239
- def order_query_string(qs)
1240
- '?' + qs[1..-1].split('&').sort.join('&')
1241
- end
1242
- end
1243
950
 
1244
- end # uses_mocha
951
+ def test_named_route_with_path_prefix
952
+ rs.add_named_route :page, 'page', :controller => 'content', :action => 'show_page', :path_prefix => 'my'
953
+ x = setup_for_named_route
954
+ assert_equal("http://test.host/my/page",
955
+ x.send(:page_url))
956
+ end
1245
957
 
1246
- class RouteBuilderTest < Test::Unit::TestCase
958
+ def test_named_route_with_blank_path_prefix
959
+ rs.add_named_route :page, 'page', :controller => 'content', :action => 'show_page', :path_prefix => ''
960
+ x = setup_for_named_route
961
+ assert_equal("http://test.host/page",
962
+ x.send(:page_url))
963
+ end
1247
964
 
1248
- def builder
1249
- @builder ||= ROUTING::RouteBuilder.new
965
+ def test_named_route_with_nested_controller
966
+ rs.add_named_route :users, 'admin/user', :controller => 'admin/user', :action => 'index'
967
+ x = setup_for_named_route
968
+ assert_equal("http://test.host/admin/user",
969
+ x.send(:users_url))
1250
970
  end
1251
971
 
1252
- def build(path, options)
1253
- builder.build(path, options)
972
+ def test_optimised_named_route_call_never_uses_url_for
973
+ rs.add_named_route :users, 'admin/user', :controller => '/admin/user', :action => 'index'
974
+ rs.add_named_route :user, 'admin/user/:id', :controller=>'/admin/user', :action=>'show'
975
+ x = setup_for_named_route
976
+ x.expects(:url_for).never
977
+ x.send(:users_url)
978
+ x.send(:users_path)
979
+ x.send(:user_url, 2, :foo=>"bar")
980
+ x.send(:user_path, 3, :bar=>"foo")
1254
981
  end
1255
982
 
1256
- def test_options_should_not_be_modified
1257
- requirements1 = { :id => /\w+/, :controller => /(?:[a-z](?:-?[a-z]+)*)/ }
1258
- requirements2 = requirements1.dup
983
+ def test_optimised_named_route_with_host
984
+ rs.add_named_route :pages, 'pages', :controller => 'content', :action => 'show_page', :host => 'foo.com'
985
+ x = setup_for_named_route
986
+ x.expects(:url_for).with(:host => 'foo.com', :only_path => false, :controller => 'content', :action => 'show_page', :use_route => :pages).once
987
+ x.send(:pages_url)
988
+ end
1259
989
 
1260
- assert_equal requirements1, requirements2
990
+ def setup_for_named_route
991
+ klass = Class.new(MockController)
992
+ rs.install_helpers(klass)
993
+ klass.new(rs)
994
+ end
1261
995
 
1262
- with_options(:controller => 'folder',
1263
- :requirements => requirements2) do |m|
1264
- m.build 'folders/new', :action => 'new'
996
+ def test_named_route_without_hash
997
+ rs.draw do |map|
998
+ map.normal ':controller/:action/:id'
1265
999
  end
1000
+ end
1266
1001
 
1267
- assert_equal requirements1, requirements2
1002
+ def test_named_route_root
1003
+ rs.draw do |map|
1004
+ map.root :controller => "hello"
1005
+ end
1006
+ x = setup_for_named_route
1007
+ assert_equal("http://test.host/", x.send(:root_url))
1008
+ assert_equal("/", x.send(:root_path))
1268
1009
  end
1269
1010
 
1270
- def test_segment_for_static
1271
- segment, rest = builder.segment_for 'ulysses'
1272
- assert_equal '', rest
1273
- assert_kind_of ROUTING::StaticSegment, segment
1274
- assert_equal 'ulysses', segment.value
1011
+ def test_named_route_with_regexps
1012
+ rs.draw do |map|
1013
+ map.article 'page/:year/:month/:day/:title', :controller => 'page', :action => 'show',
1014
+ :year => /\d+/, :month => /\d+/, :day => /\d+/
1015
+ map.connect ':controller/:action/:id'
1016
+ end
1017
+ x = setup_for_named_route
1018
+ # assert_equal(
1019
+ # {:controller => 'page', :action => 'show', :title => 'hi', :use_route => :article, :only_path => false},
1020
+ # x.send(:article_url, :title => 'hi')
1021
+ # )
1022
+ assert_equal(
1023
+ "http://test.host/page/2005/6/10/hi",
1024
+ x.send(:article_url, :title => 'hi', :day => 10, :year => 2005, :month => 6)
1025
+ )
1275
1026
  end
1276
-
1277
- def test_segment_for_action
1278
- segment, rest = builder.segment_for ':action'
1279
- assert_equal '', rest
1280
- assert_kind_of ROUTING::DynamicSegment, segment
1281
- assert_equal :action, segment.key
1282
- assert_equal 'index', segment.default
1027
+
1028
+ def test_changing_controller
1029
+ @rs.draw {|m| m.connect ':controller/:action/:id' }
1030
+
1031
+ assert_equal '/admin/stuff/show/10', rs.generate(
1032
+ {:controller => 'stuff', :action => 'show', :id => 10},
1033
+ {:controller => 'admin/user', :action => 'index'}
1034
+ )
1283
1035
  end
1284
-
1285
- def test_segment_for_dynamic
1286
- segment, rest = builder.segment_for ':login'
1287
- assert_equal '', rest
1288
- assert_kind_of ROUTING::DynamicSegment, segment
1289
- assert_equal :login, segment.key
1290
- assert_equal nil, segment.default
1291
- assert ! segment.optional?
1036
+
1037
+ def test_paths_escaped
1038
+ rs.draw do |map|
1039
+ map.path 'file/*path', :controller => 'content', :action => 'show_file'
1040
+ map.connect ':controller/:action/:id'
1041
+ end
1042
+
1043
+ # No + to space in URI escaping, only for query params.
1044
+ results = rs.recognize_path "/file/hello+world/how+are+you%3F"
1045
+ assert results, "Recognition should have succeeded"
1046
+ assert_equal ['hello+world', 'how+are+you?'], results[:path]
1047
+
1048
+ # Use %20 for space instead.
1049
+ results = rs.recognize_path "/file/hello%20world/how%20are%20you%3F"
1050
+ assert results, "Recognition should have succeeded"
1051
+ assert_equal ['hello world', 'how are you?'], results[:path]
1052
+
1053
+ results = rs.recognize_path "/file"
1054
+ assert results, "Recognition should have succeeded"
1055
+ assert_equal [], results[:path]
1292
1056
  end
1293
-
1294
- def test_segment_for_with_rest
1295
- segment, rest = builder.segment_for ':login/:action'
1296
- assert_equal :login, segment.key
1297
- assert_equal '/:action', rest
1298
- segment, rest = builder.segment_for rest
1299
- assert_equal '/', segment.value
1300
- assert_equal ':action', rest
1301
- segment, rest = builder.segment_for rest
1302
- assert_equal :action, segment.key
1303
- assert_equal '', rest
1057
+
1058
+ def test_paths_slashes_unescaped_with_ordered_parameters
1059
+ rs.add_named_route :path, '/file/*path', :controller => 'content'
1060
+
1061
+ # No / to %2F in URI, only for query params.
1062
+ x = setup_for_named_route
1063
+ assert_equal("/file/hello/world", x.send(:path_path, 'hello/world'))
1304
1064
  end
1305
-
1306
- def test_segments_for
1307
- segments = builder.segments_for_route_path '/:controller/:action/:id'
1308
-
1309
- assert_kind_of ROUTING::DividerSegment, segments[0]
1310
- assert_equal '/', segments[2].value
1311
-
1312
- assert_kind_of ROUTING::DynamicSegment, segments[1]
1313
- assert_equal :controller, segments[1].key
1314
-
1315
- assert_kind_of ROUTING::DividerSegment, segments[2]
1316
- assert_equal '/', segments[2].value
1317
-
1318
- assert_kind_of ROUTING::DynamicSegment, segments[3]
1319
- assert_equal :action, segments[3].key
1320
-
1321
- assert_kind_of ROUTING::DividerSegment, segments[4]
1322
- assert_equal '/', segments[4].value
1323
-
1324
- assert_kind_of ROUTING::DynamicSegment, segments[5]
1325
- assert_equal :id, segments[5].key
1065
+
1066
+ def test_non_controllers_cannot_be_matched
1067
+ rs.draw do |map|
1068
+ map.connect ':controller/:action/:id'
1069
+ end
1070
+ assert_raise(ActionController::RoutingError) { rs.recognize_path("/not_a/show/10") }
1326
1071
  end
1327
-
1328
- def test_segment_for_action
1329
- s, r = builder.segment_for(':action/something/else')
1330
- assert_equal '/something/else', r
1331
- assert_equal :action, s.key
1072
+
1073
+ def test_paths_do_not_accept_defaults
1074
+ assert_raise(ActionController::RoutingError) do
1075
+ rs.draw do |map|
1076
+ map.path 'file/*path', :controller => 'content', :action => 'show_file', :path => %w(fake default)
1077
+ map.connect ':controller/:action/:id'
1078
+ end
1079
+ end
1080
+
1081
+ rs.draw do |map|
1082
+ map.path 'file/*path', :controller => 'content', :action => 'show_file', :path => []
1083
+ map.connect ':controller/:action/:id'
1084
+ end
1332
1085
  end
1333
-
1334
- def test_action_default_should_not_trigger_on_prefix
1335
- s, r = builder.segment_for ':action_name/something/else'
1336
- assert_equal '/something/else', r
1337
- assert_equal :action_name, s.key
1338
- assert_equal nil, s.default
1086
+
1087
+ def test_should_list_options_diff_when_routing_requirements_dont_match
1088
+ rs.draw do |map|
1089
+ map.post 'post/:id', :controller=> 'post', :action=> 'show', :requirements => {:id => /\d+/}
1090
+ end
1091
+ exception = assert_raise(ActionController::RoutingError) { rs.generate(:controller => 'post', :action => 'show', :bad_param => "foo", :use_route => "post") }
1092
+ assert_match /^post_url failed to generate/, exception.message
1093
+ from_match = exception.message.match(/from \{[^\}]+\}/).to_s
1094
+ assert_match /:bad_param=>"foo"/, from_match
1095
+ assert_match /:action=>"show"/, from_match
1096
+ assert_match /:controller=>"post"/, from_match
1097
+
1098
+ expected_match = exception.message.match(/expected: \{[^\}]+\}/).to_s
1099
+ assert_no_match /:bad_param=>"foo"/, expected_match
1100
+ assert_match /:action=>"show"/, expected_match
1101
+ assert_match /:controller=>"post"/, expected_match
1102
+
1103
+ diff_match = exception.message.match(/diff: \{[^\}]+\}/).to_s
1104
+ assert_match /:bad_param=>"foo"/, diff_match
1105
+ assert_no_match /:action=>"show"/, diff_match
1106
+ assert_no_match /:controller=>"post"/, diff_match
1107
+ end
1108
+
1109
+ # this specifies the case where your formerly would get a very confusing error message with an empty diff
1110
+ def test_should_have_better_error_message_when_options_diff_is_empty
1111
+ rs.draw do |map|
1112
+ map.content '/content/:query', :controller => 'content', :action => 'show'
1113
+ end
1114
+
1115
+ exception = assert_raise(ActionController::RoutingError) { rs.generate(:controller => 'content', :action => 'show', :use_route => "content") }
1116
+ assert_match %r[:action=>"show"], exception.message
1117
+ assert_match %r[:controller=>"content"], exception.message
1118
+ assert_match %r[you may have ambiguous routes, or you may need to supply additional parameters for this route], exception.message
1119
+ assert_match %r[content_url has the following required parameters: \["content", :query\] - are they all satisfied?], exception.message
1120
+ end
1121
+
1122
+ def test_dynamic_path_allowed
1123
+ rs.draw do |map|
1124
+ map.connect '*path', :controller => 'content', :action => 'show_file'
1125
+ end
1126
+
1127
+ assert_equal '/pages/boo', rs.generate(:controller => 'content', :action => 'show_file', :path => %w(pages boo))
1128
+ end
1129
+
1130
+ def test_dynamic_recall_paths_allowed
1131
+ rs.draw do |map|
1132
+ map.connect '*path', :controller => 'content', :action => 'show_file'
1133
+ end
1134
+
1135
+ recall_path = ActionController::Routing::PathSegment::Result.new(%w(pages boo))
1136
+ assert_equal '/pages/boo', rs.generate({}, :controller => 'content', :action => 'show_file', :path => recall_path)
1137
+ end
1138
+
1139
+ def test_backwards
1140
+ rs.draw do |map|
1141
+ map.connect 'page/:id/:action', :controller => 'pages', :action => 'show'
1142
+ map.connect ':controller/:action/:id'
1143
+ end
1144
+
1145
+ assert_equal '/page/20', rs.generate({:id => 20}, {:controller => 'pages', :action => 'show'})
1146
+ assert_equal '/page/20', rs.generate(:controller => 'pages', :id => 20, :action => 'show')
1147
+ assert_equal '/pages/boo', rs.generate(:controller => 'pages', :action => 'boo')
1148
+ end
1149
+
1150
+ def test_route_with_fixnum_default
1151
+ rs.draw do |map|
1152
+ map.connect 'page/:id', :controller => 'content', :action => 'show_page', :id => 1
1153
+ map.connect ':controller/:action/:id'
1154
+ end
1155
+
1156
+ assert_equal '/page', rs.generate(:controller => 'content', :action => 'show_page')
1157
+ assert_equal '/page', rs.generate(:controller => 'content', :action => 'show_page', :id => 1)
1158
+ assert_equal '/page', rs.generate(:controller => 'content', :action => 'show_page', :id => '1')
1159
+ assert_equal '/page/10', rs.generate(:controller => 'content', :action => 'show_page', :id => 10)
1160
+
1161
+ assert_equal({:controller => "content", :action => 'show_page', :id => '1'}, rs.recognize_path("/page"))
1162
+ assert_equal({:controller => "content", :action => 'show_page', :id => '1'}, rs.recognize_path("/page/1"))
1163
+ assert_equal({:controller => "content", :action => 'show_page', :id => '10'}, rs.recognize_path("/page/10"))
1164
+ end
1165
+
1166
+ # For newer revision
1167
+ def test_route_with_text_default
1168
+ rs.draw do |map|
1169
+ map.connect 'page/:id', :controller => 'content', :action => 'show_page', :id => 1
1170
+ map.connect ':controller/:action/:id'
1171
+ end
1172
+
1173
+ assert_equal '/page/foo', rs.generate(:controller => 'content', :action => 'show_page', :id => 'foo')
1174
+ assert_equal({:controller => "content", :action => 'show_page', :id => 'foo'}, rs.recognize_path("/page/foo"))
1175
+
1176
+ token = "\321\202\320\265\320\272\321\201\321\202" # 'text' in russian
1177
+ token.force_encoding("UTF-8") if token.respond_to?(:force_encoding)
1178
+ escaped_token = CGI::escape(token)
1179
+
1180
+ assert_equal '/page/' + escaped_token, rs.generate(:controller => 'content', :action => 'show_page', :id => token)
1181
+ assert_equal({:controller => "content", :action => 'show_page', :id => token}, rs.recognize_path("/page/#{escaped_token}"))
1182
+ end
1183
+
1184
+ def test_action_expiry
1185
+ @rs.draw {|m| m.connect ':controller/:action/:id' }
1186
+ assert_equal '/content', rs.generate({:controller => 'content'}, {:controller => 'content', :action => 'show'})
1187
+ end
1188
+
1189
+ def test_recognition_with_uppercase_controller_name
1190
+ @rs.draw {|m| m.connect ':controller/:action/:id' }
1191
+ assert_equal({:controller => "content", :action => 'index'}, rs.recognize_path("/Content"))
1192
+ assert_equal({:controller => "content", :action => 'list'}, rs.recognize_path("/ConTent/list"))
1193
+ assert_equal({:controller => "content", :action => 'show', :id => '10'}, rs.recognize_path("/CONTENT/show/10"))
1194
+
1195
+ # these used to work, before the routes rewrite, but support for this was pulled in the new version...
1196
+ #assert_equal({'controller' => "admin/news_feed", 'action' => 'index'}, rs.recognize_path("Admin/NewsFeed"))
1197
+ #assert_equal({'controller' => "admin/news_feed", 'action' => 'index'}, rs.recognize_path("Admin/News_Feed"))
1198
+ end
1199
+
1200
+ def test_requirement_should_prevent_optional_id
1201
+ rs.draw do |map|
1202
+ map.post 'post/:id', :controller=> 'post', :action=> 'show', :requirements => {:id => /\d+/}
1203
+ end
1204
+
1205
+ assert_equal '/post/10', rs.generate(:controller => 'post', :action => 'show', :id => 10)
1206
+
1207
+ assert_raise ActionController::RoutingError do
1208
+ rs.generate(:controller => 'post', :action => 'show')
1209
+ end
1210
+ end
1211
+
1212
+ def test_both_requirement_and_optional
1213
+ rs.draw do |map|
1214
+ map.blog('test/:year', :controller => 'post', :action => 'show',
1215
+ :defaults => { :year => nil },
1216
+ :requirements => { :year => /\d{4}/ }
1217
+ )
1218
+ map.connect ':controller/:action/:id'
1219
+ end
1220
+
1221
+ assert_equal '/test', rs.generate(:controller => 'post', :action => 'show')
1222
+ assert_equal '/test', rs.generate(:controller => 'post', :action => 'show', :year => nil)
1223
+
1224
+ x = setup_for_named_route
1225
+ assert_equal("http://test.host/test",
1226
+ x.send(:blog_url))
1227
+ end
1228
+
1229
+ def test_set_to_nil_forgets
1230
+ rs.draw do |map|
1231
+ map.connect 'pages/:year/:month/:day', :controller => 'content', :action => 'list_pages', :month => nil, :day => nil
1232
+ map.connect ':controller/:action/:id'
1233
+ end
1234
+
1235
+ assert_equal '/pages/2005',
1236
+ rs.generate(:controller => 'content', :action => 'list_pages', :year => 2005)
1237
+ assert_equal '/pages/2005/6',
1238
+ rs.generate(:controller => 'content', :action => 'list_pages', :year => 2005, :month => 6)
1239
+ assert_equal '/pages/2005/6/12',
1240
+ rs.generate(:controller => 'content', :action => 'list_pages', :year => 2005, :month => 6, :day => 12)
1241
+
1242
+ assert_equal '/pages/2005/6/4',
1243
+ rs.generate({:day => 4}, {:controller => 'content', :action => 'list_pages', :year => '2005', :month => '6', :day => '12'})
1244
+
1245
+ assert_equal '/pages/2005/6',
1246
+ rs.generate({:day => nil}, {:controller => 'content', :action => 'list_pages', :year => '2005', :month => '6', :day => '12'})
1247
+
1248
+ assert_equal '/pages/2005',
1249
+ rs.generate({:day => nil, :month => nil}, {:controller => 'content', :action => 'list_pages', :year => '2005', :month => '6', :day => '12'})
1250
+ end
1251
+
1252
+ def test_url_with_no_action_specified
1253
+ rs.draw do |map|
1254
+ map.connect '', :controller => 'content'
1255
+ map.connect ':controller/:action/:id'
1256
+ end
1257
+
1258
+ assert_equal '/', rs.generate(:controller => 'content', :action => 'index')
1259
+ assert_equal '/', rs.generate(:controller => 'content')
1260
+ end
1261
+
1262
+ def test_named_url_with_no_action_specified
1263
+ rs.draw do |map|
1264
+ map.home '', :controller => 'content'
1265
+ map.connect ':controller/:action/:id'
1266
+ end
1267
+
1268
+ assert_equal '/', rs.generate(:controller => 'content', :action => 'index')
1269
+ assert_equal '/', rs.generate(:controller => 'content')
1270
+
1271
+ x = setup_for_named_route
1272
+ assert_equal("http://test.host/",
1273
+ x.send(:home_url))
1274
+ end
1275
+
1276
+ def test_url_generated_when_forgetting_action
1277
+ [{:controller => 'content', :action => 'index'}, {:controller => 'content'}].each do |hash|
1278
+ rs.draw do |map|
1279
+ map.home '', hash
1280
+ map.connect ':controller/:action/:id'
1281
+ end
1282
+ assert_equal '/', rs.generate({:action => nil}, {:controller => 'content', :action => 'hello'})
1283
+ assert_equal '/', rs.generate({:controller => 'content'})
1284
+ assert_equal '/content/hi', rs.generate({:controller => 'content', :action => 'hi'})
1285
+ end
1286
+ end
1287
+
1288
+ def test_named_route_method
1289
+ rs.draw do |map|
1290
+ map.categories 'categories', :controller => 'content', :action => 'categories'
1291
+ map.connect ':controller/:action/:id'
1292
+ end
1293
+
1294
+ assert_equal '/categories', rs.generate(:controller => 'content', :action => 'categories')
1295
+ assert_equal '/content/hi', rs.generate({:controller => 'content', :action => 'hi'})
1296
+ end
1297
+
1298
+ def test_named_routes_array
1299
+ test_named_route_method
1300
+ assert_equal [:categories], rs.named_routes.names
1301
+ end
1302
+
1303
+ def test_nil_defaults
1304
+ rs.draw do |map|
1305
+ map.connect 'journal',
1306
+ :controller => 'content',
1307
+ :action => 'list_journal',
1308
+ :date => nil, :user_id => nil
1309
+ map.connect ':controller/:action/:id'
1310
+ end
1311
+
1312
+ assert_equal '/journal', rs.generate(:controller => 'content', :action => 'list_journal', :date => nil, :user_id => nil)
1313
+ end
1314
+
1315
+ def setup_request_method_routes_for(method)
1316
+ @request = ActionController::TestRequest.new
1317
+ @request.env["REQUEST_METHOD"] = method
1318
+ @request.request_uri = "/match"
1319
+
1320
+ rs.draw do |r|
1321
+ r.connect '/match', :controller => 'books', :action => 'get', :conditions => { :method => :get }
1322
+ r.connect '/match', :controller => 'books', :action => 'post', :conditions => { :method => :post }
1323
+ r.connect '/match', :controller => 'books', :action => 'put', :conditions => { :method => :put }
1324
+ r.connect '/match', :controller => 'books', :action => 'delete', :conditions => { :method => :delete }
1325
+ end
1326
+ end
1327
+
1328
+ %w(GET POST PUT DELETE).each do |request_method|
1329
+ define_method("test_request_method_recognized_with_#{request_method}") do
1330
+ begin
1331
+ Object.const_set(:BooksController, Class.new(ActionController::Base))
1332
+
1333
+ setup_request_method_routes_for(request_method)
1334
+
1335
+ assert_nothing_raised { rs.recognize(@request) }
1336
+ assert_equal request_method.downcase, @request.path_parameters[:action]
1337
+ ensure
1338
+ Object.send(:remove_const, :BooksController) rescue nil
1339
+ end
1340
+ end
1341
+ end
1342
+
1343
+ def test_recognize_array_of_methods
1344
+ Object.const_set(:BooksController, Class.new(ActionController::Base))
1345
+ rs.draw do |r|
1346
+ r.connect '/match', :controller => 'books', :action => 'get_or_post', :conditions => { :method => [:get, :post] }
1347
+ r.connect '/match', :controller => 'books', :action => 'not_get_or_post'
1348
+ end
1349
+
1350
+ @request = ActionController::TestRequest.new
1351
+ @request.env["REQUEST_METHOD"] = 'POST'
1352
+ @request.request_uri = "/match"
1353
+ assert_nothing_raised { rs.recognize(@request) }
1354
+ assert_equal 'get_or_post', @request.path_parameters[:action]
1355
+
1356
+ # have to recreate or else the RouteSet uses a cached version:
1357
+ @request = ActionController::TestRequest.new
1358
+ @request.env["REQUEST_METHOD"] = 'PUT'
1359
+ @request.request_uri = "/match"
1360
+ assert_nothing_raised { rs.recognize(@request) }
1361
+ assert_equal 'not_get_or_post', @request.path_parameters[:action]
1362
+ ensure
1363
+ Object.send(:remove_const, :BooksController) rescue nil
1364
+ end
1365
+
1366
+ def test_subpath_recognized
1367
+ Object.const_set(:SubpathBooksController, Class.new(ActionController::Base))
1368
+
1369
+ rs.draw do |r|
1370
+ r.connect '/books/:id/edit', :controller => 'subpath_books', :action => 'edit'
1371
+ r.connect '/items/:id/:action', :controller => 'subpath_books'
1372
+ r.connect '/posts/new/:action', :controller => 'subpath_books'
1373
+ r.connect '/posts/:id', :controller => 'subpath_books', :action => "show"
1374
+ end
1375
+
1376
+ hash = rs.recognize_path "/books/17/edit"
1377
+ assert_not_nil hash
1378
+ assert_equal %w(subpath_books 17 edit), [hash[:controller], hash[:id], hash[:action]]
1379
+
1380
+ hash = rs.recognize_path "/items/3/complete"
1381
+ assert_not_nil hash
1382
+ assert_equal %w(subpath_books 3 complete), [hash[:controller], hash[:id], hash[:action]]
1383
+
1384
+ hash = rs.recognize_path "/posts/new/preview"
1385
+ assert_not_nil hash
1386
+ assert_equal %w(subpath_books preview), [hash[:controller], hash[:action]]
1387
+
1388
+ hash = rs.recognize_path "/posts/7"
1389
+ assert_not_nil hash
1390
+ assert_equal %w(subpath_books show 7), [hash[:controller], hash[:action], hash[:id]]
1391
+ ensure
1392
+ Object.send(:remove_const, :SubpathBooksController) rescue nil
1393
+ end
1394
+
1395
+ def test_subpath_generated
1396
+ Object.const_set(:SubpathBooksController, Class.new(ActionController::Base))
1397
+
1398
+ rs.draw do |r|
1399
+ r.connect '/books/:id/edit', :controller => 'subpath_books', :action => 'edit'
1400
+ r.connect '/items/:id/:action', :controller => 'subpath_books'
1401
+ r.connect '/posts/new/:action', :controller => 'subpath_books'
1402
+ end
1403
+
1404
+ assert_equal "/books/7/edit", rs.generate(:controller => "subpath_books", :id => 7, :action => "edit")
1405
+ assert_equal "/items/15/complete", rs.generate(:controller => "subpath_books", :id => 15, :action => "complete")
1406
+ assert_equal "/posts/new/preview", rs.generate(:controller => "subpath_books", :action => "preview")
1407
+ ensure
1408
+ Object.send(:remove_const, :SubpathBooksController) rescue nil
1409
+ end
1410
+
1411
+ def test_failed_requirements_raises_exception_with_violated_requirements
1412
+ rs.draw do |r|
1413
+ r.foo_with_requirement 'foos/:id', :controller=>'foos', :requirements=>{:id=>/\d+/}
1414
+ end
1415
+
1416
+ x = setup_for_named_route
1417
+ assert_raise(ActionController::RoutingError) do
1418
+ x.send(:foo_with_requirement_url, "I am Against the requirements")
1419
+ end
1420
+ end
1421
+
1422
+ def test_routes_changed_correctly_after_clear
1423
+ ActionController::Base.optimise_named_routes = true
1424
+ rs = ::ActionController::Routing::RouteSet.new
1425
+ rs.draw do |r|
1426
+ r.connect 'ca', :controller => 'ca', :action => "aa"
1427
+ r.connect 'cb', :controller => 'cb', :action => "ab"
1428
+ r.connect 'cc', :controller => 'cc', :action => "ac"
1429
+ r.connect ':controller/:action/:id'
1430
+ r.connect ':controller/:action/:id.:format'
1431
+ end
1432
+
1433
+ hash = rs.recognize_path "/cc"
1434
+
1435
+ assert_not_nil hash
1436
+ assert_equal %w(cc ac), [hash[:controller], hash[:action]]
1437
+
1438
+ rs.draw do |r|
1439
+ r.connect 'cb', :controller => 'cb', :action => "ab"
1440
+ r.connect 'cc', :controller => 'cc', :action => "ac"
1441
+ r.connect ':controller/:action/:id'
1442
+ r.connect ':controller/:action/:id.:format'
1443
+ end
1444
+
1445
+ hash = rs.recognize_path "/cc"
1446
+
1447
+ assert_not_nil hash
1448
+ assert_equal %w(cc ac), [hash[:controller], hash[:action]]
1449
+
1339
1450
  end
1340
-
1341
- def test_divide_route_options
1342
- segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
1343
- defaults, requirements = builder.divide_route_options(segments,
1344
- :action => 'buy', :person => /\w+/, :car => /\w+/,
1345
- :defaults => {:person => nil, :car => nil}
1346
- )
1347
-
1348
- assert_equal({:action => 'buy', :person => nil, :car => nil}, defaults)
1349
- assert_equal({:person => /\w+/, :car => /\w+/}, requirements)
1451
+ end
1452
+
1453
+ class RouteTest < Test::Unit::TestCase
1454
+ def setup
1455
+ @route = ROUTING::Route.new
1350
1456
  end
1351
-
1352
- def test_assign_route_options
1353
- segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
1354
- defaults = {:action => 'buy', :person => nil, :car => nil}
1355
- requirements = {:person => /\w+/, :car => /\w+/}
1356
-
1357
- route_requirements = builder.assign_route_options(segments, defaults, requirements)
1358
- assert_equal({}, route_requirements)
1359
-
1360
- assert_equal :action, segments[3].key
1361
- assert_equal 'buy', segments[3].default
1362
-
1363
- assert_equal :person, segments[5].key
1364
- assert_equal %r/\w+/, segments[5].regexp
1365
- assert segments[5].optional?
1366
-
1367
- assert_equal :car, segments[7].key
1368
- assert_equal %r/\w+/, segments[7].regexp
1369
- assert segments[7].optional?
1457
+
1458
+ def slash_segment(is_optional = false)
1459
+ ROUTING::DividerSegment.new('/', :optional => is_optional)
1370
1460
  end
1371
-
1372
- def test_assign_route_options_with_anchor_chars
1373
- segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
1374
- defaults = {:action => 'buy', :person => nil, :car => nil}
1375
- requirements = {:person => /\w+/, :car => /^\w+$/}
1376
-
1377
- assert_raises ArgumentError do
1378
- route_requirements = builder.assign_route_options(segments, defaults, requirements)
1461
+
1462
+ def default_route
1463
+ unless defined?(@default_route)
1464
+ segments = []
1465
+ segments << ROUTING::StaticSegment.new('/', :raw => true)
1466
+ segments << ROUTING::DynamicSegment.new(:controller)
1467
+ segments << slash_segment(:optional)
1468
+ segments << ROUTING::DynamicSegment.new(:action, :default => 'index', :optional => true)
1469
+ segments << slash_segment(:optional)
1470
+ segments << ROUTING::DynamicSegment.new(:id, :optional => true)
1471
+ segments << slash_segment(:optional)
1472
+ @default_route = ROUTING::Route.new(segments).freeze
1379
1473
  end
1380
-
1381
- requirements[:car] = /[^\/]+/
1382
- route_requirements = builder.assign_route_options(segments, defaults, requirements)
1474
+ @default_route
1383
1475
  end
1384
-
1385
1476
 
1386
- def test_optional_segments_preceding_required_segments
1387
- segments = builder.segments_for_route_path '/cars/:action/:person/:car/'
1388
- defaults = {:action => 'buy', :person => nil, :car => "model-t"}
1389
- assert builder.assign_route_options(segments, defaults, {}).empty?
1390
-
1391
- 0.upto(1) { |i| assert !segments[i].optional?, "segment #{i} is optional and it shouldn't be" }
1392
- assert segments[2].optional?
1393
-
1394
- assert_equal nil, builder.warn_output # should only warn on the :person segment
1477
+ def test_default_route_recognition
1478
+ expected = {:controller => 'accounts', :action => 'show', :id => '10'}
1479
+ assert_equal expected, default_route.recognize('/accounts/show/10')
1480
+ assert_equal expected, default_route.recognize('/accounts/show/10/')
1481
+
1482
+ expected[:id] = 'jamis'
1483
+ assert_equal expected, default_route.recognize('/accounts/show/jamis/')
1484
+
1485
+ expected.delete :id
1486
+ assert_equal expected, default_route.recognize('/accounts/show')
1487
+ assert_equal expected, default_route.recognize('/accounts/show/')
1488
+
1489
+ expected[:action] = 'index'
1490
+ assert_equal expected, default_route.recognize('/accounts/')
1491
+ assert_equal expected, default_route.recognize('/accounts')
1492
+
1493
+ assert_equal nil, default_route.recognize('/')
1494
+ assert_equal nil, default_route.recognize('/accounts/how/goood/it/is/to/be/free')
1395
1495
  end
1396
-
1397
- def test_segmentation_of_dot_path
1398
- segments = builder.segments_for_route_path '/books/:action.rss'
1399
- assert builder.assign_route_options(segments, {}, {}).empty?
1400
- assert_equal 6, segments.length # "/", "books", "/", ":action", ".", "rss"
1401
- assert !segments.any? { |seg| seg.optional? }
1496
+
1497
+ def test_default_route_should_omit_default_action
1498
+ o = {:controller => 'accounts', :action => 'index'}
1499
+ assert_equal '/accounts', default_route.generate(o, o, {})
1402
1500
  end
1403
-
1404
- def test_segmentation_of_dynamic_dot_path
1405
- segments = builder.segments_for_route_path '/books/:action.:format'
1406
- assert builder.assign_route_options(segments, {}, {}).empty?
1407
- assert_equal 6, segments.length # "/", "books", "/", ":action", ".", ":format"
1408
- assert !segments.any? { |seg| seg.optional? }
1409
- assert_kind_of ROUTING::DynamicSegment, segments.last
1501
+
1502
+ def test_default_route_should_include_default_action_when_id_present
1503
+ o = {:controller => 'accounts', :action => 'index', :id => '20'}
1504
+ assert_equal '/accounts/index/20', default_route.generate(o, o, {})
1410
1505
  end
1411
-
1412
- def test_assignment_of_default_options
1413
- segments = builder.segments_for_route_path '/:controller/:action/:id/'
1414
- action, id = segments[-4], segments[-2]
1415
-
1416
- assert_equal :action, action.key
1417
- assert_equal :id, id.key
1418
- assert ! action.optional?
1419
- assert ! id.optional?
1420
-
1421
- builder.assign_default_route_options(segments)
1422
-
1423
- assert_equal 'index', action.default
1424
- assert action.optional?
1425
- assert id.optional?
1506
+
1507
+ def test_default_route_should_work_with_action_but_no_id
1508
+ o = {:controller => 'accounts', :action => 'list_all'}
1509
+ assert_equal '/accounts/list_all', default_route.generate(o, o, {})
1426
1510
  end
1427
-
1428
- def test_assignment_of_default_options_respects_existing_defaults
1429
- segments = builder.segments_for_route_path '/:controller/:action/:id/'
1430
- action, id = segments[-4], segments[-2]
1431
-
1432
- assert_equal :action, action.key
1433
- assert_equal :id, id.key
1434
- action.default = 'show'
1435
- action.is_optional = true
1436
-
1437
- id.default = 'Welcome'
1438
- id.is_optional = true
1439
-
1440
- builder.assign_default_route_options(segments)
1441
-
1442
- assert_equal 'show', action.default
1443
- assert action.optional?
1444
- assert_equal 'Welcome', id.default
1445
- assert id.optional?
1511
+
1512
+ def test_default_route_should_uri_escape_pluses
1513
+ expected = { :controller => 'accounts', :action => 'show', :id => 'hello world' }
1514
+ assert_equal expected, default_route.recognize('/accounts/show/hello world')
1515
+ assert_equal expected, default_route.recognize('/accounts/show/hello%20world')
1516
+ assert_equal '/accounts/show/hello%20world', default_route.generate(expected, expected, {})
1517
+
1518
+ expected[:id] = 'hello+world'
1519
+ assert_equal expected, default_route.recognize('/accounts/show/hello+world')
1520
+ assert_equal expected, default_route.recognize('/accounts/show/hello%2Bworld')
1521
+ assert_equal '/accounts/show/hello+world', default_route.generate(expected, expected, {})
1446
1522
  end
1447
-
1448
- def test_assignment_of_default_options_respects_regexps
1449
- segments = builder.segments_for_route_path '/:controller/:action/:id/'
1450
- action = segments[-4]
1451
-
1452
- assert_equal :action, action.key
1453
- action.regexp = /show|in/ # Use 'in' to check partial matches
1454
-
1455
- builder.assign_default_route_options(segments)
1456
-
1457
- assert_equal nil, action.default
1458
- assert ! action.optional?
1523
+
1524
+ def test_matches_controller_and_action
1525
+ # requirement_for should only be called for the action and controller _once_
1526
+ @route.expects(:requirement_for).with(:controller).times(1).returns('pages')
1527
+ @route.expects(:requirement_for).with(:action).times(1).returns('show')
1528
+
1529
+ @route.requirements = {:controller => 'pages', :action => 'show'}
1530
+ assert @route.matches_controller_and_action?('pages', 'show')
1531
+ assert !@route.matches_controller_and_action?('not_pages', 'show')
1532
+ assert !@route.matches_controller_and_action?('pages', 'not_show')
1459
1533
  end
1460
-
1461
- def test_assignment_of_is_optional_when_default
1462
- segments = builder.segments_for_route_path '/books/:action.rss'
1463
- assert_equal segments[3].key, :action
1464
- segments[3].default = 'changes'
1465
- builder.ensure_required_segments(segments)
1466
- assert ! segments[3].optional?
1534
+
1535
+ def test_parameter_shell
1536
+ page_url = ROUTING::Route.new
1537
+ page_url.requirements = {:controller => 'pages', :action => 'show', :id => /\d+/}
1538
+ assert_equal({:controller => 'pages', :action => 'show'}, page_url.parameter_shell)
1467
1539
  end
1468
-
1469
- def test_is_optional_is_assigned_to_default_segments
1470
- segments = builder.segments_for_route_path '/books/:action'
1471
- builder.assign_route_options(segments, {:action => 'index'}, {})
1472
-
1473
- assert_equal segments[3].key, :action
1474
- assert segments[3].optional?
1475
- assert_kind_of ROUTING::DividerSegment, segments[2]
1476
- assert segments[2].optional?
1540
+
1541
+ def test_defaults
1542
+ route = ROUTING::RouteBuilder.new.build '/users/:id.:format', :controller => "users", :action => "show", :format => "html"
1543
+ assert_equal(
1544
+ { :controller => "users", :action => "show", :format => "html" },
1545
+ route.defaults)
1477
1546
  end
1478
-
1479
- # XXX is optional not being set right?
1480
- # /blah/:defaulted_segment <-- is the second slash optional? it should be.
1481
-
1482
- def test_route_build
1483
- ActionController::Routing.with_controllers %w(users pages) do
1484
- r = builder.build '/:controller/:action/:id/', :action => nil
1485
-
1486
- [0, 2, 4].each do |i|
1487
- assert_kind_of ROUTING::DividerSegment, r.segments[i]
1488
- assert_equal '/', r.segments[i].value
1489
- assert r.segments[i].optional? if i > 1
1490
- end
1491
-
1492
- assert_kind_of ROUTING::DynamicSegment, r.segments[1]
1493
- assert_equal :controller, r.segments[1].key
1494
- assert_equal nil, r.segments[1].default
1495
-
1496
- assert_kind_of ROUTING::DynamicSegment, r.segments[3]
1497
- assert_equal :action, r.segments[3].key
1498
- assert_equal 'index', r.segments[3].default
1499
-
1500
- assert_kind_of ROUTING::DynamicSegment, r.segments[5]
1501
- assert_equal :id, r.segments[5].key
1502
- assert r.segments[5].optional?
1547
+
1548
+ def test_builder_complains_without_controller
1549
+ assert_raise(ArgumentError) do
1550
+ ROUTING::RouteBuilder.new.build '/contact', :contoller => "contact", :action => "index"
1503
1551
  end
1504
1552
  end
1505
-
1506
- def test_slashes_are_implied
1507
- routes = [
1508
- builder.build('/:controller/:action/:id/', :action => nil),
1509
- builder.build('/:controller/:action/:id', :action => nil),
1510
- builder.build(':controller/:action/:id', :action => nil),
1511
- builder.build('/:controller/:action/:id/', :action => nil)
1512
- ]
1513
- expected = routes.first.segments.length
1514
- routes.each_with_index do |route, i|
1515
- found = route.segments.length
1516
- assert_equal expected, found, "Route #{i + 1} has #{found} segments, expected #{expected}"
1517
- end
1553
+
1554
+ def test_significant_keys_for_default_route
1555
+ keys = default_route.significant_keys.sort_by {|k| k.to_s }
1556
+ assert_equal [:action, :controller, :id], keys
1557
+ end
1558
+
1559
+ def test_significant_keys
1560
+ segments = []
1561
+ segments << ROUTING::StaticSegment.new('/', :raw => true)
1562
+ segments << ROUTING::StaticSegment.new('user')
1563
+ segments << ROUTING::StaticSegment.new('/', :raw => true, :optional => true)
1564
+ segments << ROUTING::DynamicSegment.new(:user)
1565
+ segments << ROUTING::StaticSegment.new('/', :raw => true, :optional => true)
1566
+
1567
+ requirements = {:controller => 'users', :action => 'show'}
1568
+
1569
+ user_url = ROUTING::Route.new(segments, requirements)
1570
+ keys = user_url.significant_keys.sort_by { |k| k.to_s }
1571
+ assert_equal [:action, :controller, :user], keys
1572
+ end
1573
+
1574
+ def test_build_empty_query_string
1575
+ assert_equal '', @route.build_query_string({})
1576
+ end
1577
+
1578
+ def test_build_query_string_with_nil_value
1579
+ assert_equal '', @route.build_query_string({:x => nil})
1518
1580
  end
1519
-
1520
- end
1521
1581
 
1582
+ def test_simple_build_query_string
1583
+ assert_equal '?x=1&y=2', order_query_string(@route.build_query_string(:x => '1', :y => '2'))
1584
+ end
1522
1585
 
1586
+ def test_convert_ints_build_query_string
1587
+ assert_equal '?x=1&y=2', order_query_string(@route.build_query_string(:x => 1, :y => 2))
1588
+ end
1523
1589
 
1590
+ def test_escape_spaces_build_query_string
1591
+ assert_equal '?x=hello+world&y=goodbye+world', order_query_string(@route.build_query_string(:x => 'hello world', :y => 'goodbye world'))
1592
+ end
1524
1593
 
1525
- class RouteSetTest < Test::Unit::TestCase
1594
+ def test_expand_array_build_query_string
1595
+ assert_equal '?x%5B%5D=1&x%5B%5D=2', order_query_string(@route.build_query_string(:x => [1, 2]))
1596
+ end
1597
+
1598
+ def test_escape_spaces_build_query_string_selected_keys
1599
+ assert_equal '?x=hello+world', order_query_string(@route.build_query_string({:x => 'hello world', :y => 'goodbye world'}, [:x]))
1600
+ end
1601
+
1602
+ private
1603
+ def order_query_string(qs)
1604
+ '?' + qs[1..-1].split('&').sort.join('&')
1605
+ end
1606
+ end
1526
1607
 
1608
+ class RouteSetTest < Test::Unit::TestCase
1527
1609
  def set
1528
1610
  @set ||= ROUTING::RouteSet.new
1529
1611
  end
1530
1612
 
1531
1613
  def request
1532
- @request ||= MockRequest.new(:host => "named.routes.test", :method => :get)
1614
+ @request ||= ActionController::TestRequest.new
1533
1615
  end
1534
1616
 
1535
1617
  def test_generate_extras
@@ -1544,33 +1626,33 @@ class RouteSetTest < Test::Unit::TestCase
1544
1626
  extras = set.extra_keys(:controller => "foo", :action => "bar", :id => 15, :this => "hello", :that => "world")
1545
1627
  assert_equal %w(that this), extras.map(&:to_s).sort
1546
1628
  end
1547
-
1629
+
1548
1630
  def test_generate_extras_not_first
1549
- set.draw do |map|
1631
+ set.draw do |map|
1550
1632
  map.connect ':controller/:action/:id.:format'
1551
1633
  map.connect ':controller/:action/:id'
1552
- end
1634
+ end
1553
1635
  path, extras = set.generate_extras(:controller => "foo", :action => "bar", :id => 15, :this => "hello", :that => "world")
1554
1636
  assert_equal "/foo/bar/15", path
1555
1637
  assert_equal %w(that this), extras.map(&:to_s).sort
1556
1638
  end
1557
-
1639
+
1558
1640
  def test_generate_not_first
1559
- set.draw do |map|
1641
+ set.draw do |map|
1560
1642
  map.connect ':controller/:action/:id.:format'
1561
1643
  map.connect ':controller/:action/:id'
1562
- end
1644
+ end
1563
1645
  assert_equal "/foo/bar/15?this=hello", set.generate(:controller => "foo", :action => "bar", :id => 15, :this => "hello")
1564
1646
  end
1565
-
1647
+
1566
1648
  def test_extra_keys_not_first
1567
- set.draw do |map|
1649
+ set.draw do |map|
1568
1650
  map.connect ':controller/:action/:id.:format'
1569
1651
  map.connect ':controller/:action/:id'
1570
1652
  end
1571
1653
  extras = set.extra_keys(:controller => "foo", :action => "bar", :id => 15, :this => "hello", :that => "world")
1572
1654
  assert_equal %w(that this), extras.map(&:to_s).sort
1573
- end
1655
+ end
1574
1656
 
1575
1657
  def test_draw
1576
1658
  assert_equal 0, set.routes.size
@@ -1579,7 +1661,7 @@ class RouteSetTest < Test::Unit::TestCase
1579
1661
  end
1580
1662
  assert_equal 1, set.routes.size
1581
1663
  end
1582
-
1664
+
1583
1665
  def test_named_draw
1584
1666
  assert_equal 0, set.routes.size
1585
1667
  set.draw do |map|
@@ -1588,7 +1670,7 @@ class RouteSetTest < Test::Unit::TestCase
1588
1670
  assert_equal 1, set.routes.size
1589
1671
  assert_equal set.routes.first, set.named_routes[:hello]
1590
1672
  end
1591
-
1673
+
1592
1674
  def test_later_named_routes_take_precedence
1593
1675
  set.draw do |map|
1594
1676
  map.hello '/hello/world', :controller => 'a', :action => 'b'
@@ -1620,7 +1702,7 @@ class RouteSetTest < Test::Unit::TestCase
1620
1702
  assert_equal(
1621
1703
  { :controller => 'people', :action => 'index', :use_route => :index, :only_path => false },
1622
1704
  controller.send(:hash_for_index_url))
1623
-
1705
+
1624
1706
  assert_equal(
1625
1707
  { :controller => 'people', :action => 'show', :id => 5, :use_route => :show, :only_path => true },
1626
1708
  controller.send(:hash_for_show_path, :id => 5)
@@ -1629,14 +1711,14 @@ class RouteSetTest < Test::Unit::TestCase
1629
1711
 
1630
1712
  def test_named_route_url_method
1631
1713
  controller = setup_named_route_test
1632
-
1633
- assert_equal "http://named.route.test/people/5", controller.send(:show_url, :id => 5)
1714
+
1715
+ assert_equal "http://test.host/people/5", controller.send(:show_url, :id => 5)
1634
1716
  assert_equal "/people/5", controller.send(:show_path, :id => 5)
1635
-
1636
- assert_equal "http://named.route.test/people", controller.send(:index_url)
1717
+
1718
+ assert_equal "http://test.host/people", controller.send(:index_url)
1637
1719
  assert_equal "/people", controller.send(:index_path)
1638
1720
 
1639
- assert_equal "http://named.route.test/admin/users", controller.send(:users_url)
1721
+ assert_equal "http://test.host/admin/users", controller.send(:users_url)
1640
1722
  assert_equal '/admin/users', controller.send(:users_path)
1641
1723
  assert_equal '/admin/users', set.generate(controller.send(:hash_for_users_url), {:controller => 'users', :action => 'index'})
1642
1724
  end
@@ -1644,54 +1726,64 @@ class RouteSetTest < Test::Unit::TestCase
1644
1726
  def test_named_route_url_method_with_anchor
1645
1727
  controller = setup_named_route_test
1646
1728
 
1647
- assert_equal "http://named.route.test/people/5#location", controller.send(:show_url, :id => 5, :anchor => 'location')
1729
+ assert_equal "http://test.host/people/5#location", controller.send(:show_url, :id => 5, :anchor => 'location')
1648
1730
  assert_equal "/people/5#location", controller.send(:show_path, :id => 5, :anchor => 'location')
1649
1731
 
1650
- assert_equal "http://named.route.test/people#location", controller.send(:index_url, :anchor => 'location')
1732
+ assert_equal "http://test.host/people#location", controller.send(:index_url, :anchor => 'location')
1651
1733
  assert_equal "/people#location", controller.send(:index_path, :anchor => 'location')
1652
1734
 
1653
- assert_equal "http://named.route.test/admin/users#location", controller.send(:users_url, :anchor => 'location')
1735
+ assert_equal "http://test.host/admin/users#location", controller.send(:users_url, :anchor => 'location')
1654
1736
  assert_equal '/admin/users#location', controller.send(:users_path, :anchor => 'location')
1655
1737
 
1656
- assert_equal "http://named.route.test/people/go/7/hello/joe/5#location",
1738
+ assert_equal "http://test.host/people/go/7/hello/joe/5#location",
1657
1739
  controller.send(:multi_url, 7, "hello", 5, :anchor => 'location')
1658
1740
 
1659
- assert_equal "http://named.route.test/people/go/7/hello/joe/5?baz=bar#location",
1741
+ assert_equal "http://test.host/people/go/7/hello/joe/5?baz=bar#location",
1660
1742
  controller.send(:multi_url, 7, "hello", 5, :baz => "bar", :anchor => 'location')
1661
1743
 
1662
- assert_equal "http://named.route.test/people?baz=bar#location",
1744
+ assert_equal "http://test.host/people?baz=bar#location",
1663
1745
  controller.send(:index_url, :baz => "bar", :anchor => 'location')
1664
1746
  end
1665
-
1747
+
1666
1748
  def test_named_route_url_method_with_port
1667
1749
  controller = setup_named_route_test
1668
- assert_equal "http://named.route.test:8080/people/5", controller.send(:show_url, 5, :port=>8080)
1750
+ assert_equal "http://test.host:8080/people/5", controller.send(:show_url, 5, :port=>8080)
1669
1751
  end
1670
-
1752
+
1671
1753
  def test_named_route_url_method_with_host
1672
1754
  controller = setup_named_route_test
1673
1755
  assert_equal "http://some.example.com/people/5", controller.send(:show_url, 5, :host=>"some.example.com")
1674
1756
  end
1675
-
1757
+
1758
+ def test_named_route_url_method_with_protocol
1759
+ controller = setup_named_route_test
1760
+ assert_equal "https://test.host/people/5", controller.send(:show_url, 5, :protocol => "https")
1761
+ end
1676
1762
 
1677
1763
  def test_named_route_url_method_with_ordered_parameters
1678
1764
  controller = setup_named_route_test
1679
- assert_equal "http://named.route.test/people/go/7/hello/joe/5",
1765
+ assert_equal "http://test.host/people/go/7/hello/joe/5",
1680
1766
  controller.send(:multi_url, 7, "hello", 5)
1681
1767
  end
1682
1768
 
1683
1769
  def test_named_route_url_method_with_ordered_parameters_and_hash
1684
1770
  controller = setup_named_route_test
1685
- assert_equal "http://named.route.test/people/go/7/hello/joe/5?baz=bar",
1771
+ assert_equal "http://test.host/people/go/7/hello/joe/5?baz=bar",
1686
1772
  controller.send(:multi_url, 7, "hello", 5, :baz => "bar")
1687
1773
  end
1688
-
1774
+
1775
+ def test_named_route_url_method_with_ordered_parameters_and_empty_hash
1776
+ controller = setup_named_route_test
1777
+ assert_equal "http://test.host/people/go/7/hello/joe/5",
1778
+ controller.send(:multi_url, 7, "hello", 5, {})
1779
+ end
1780
+
1689
1781
  def test_named_route_url_method_with_no_positional_arguments
1690
1782
  controller = setup_named_route_test
1691
- assert_equal "http://named.route.test/people?baz=bar",
1783
+ assert_equal "http://test.host/people?baz=bar",
1692
1784
  controller.send(:index_url, :baz => "bar")
1693
1785
  end
1694
-
1786
+
1695
1787
  def test_draw_default_route
1696
1788
  ActionController::Routing.with_controllers(['users']) do
1697
1789
  set.draw do |map|
@@ -1715,7 +1807,7 @@ class RouteSetTest < Test::Unit::TestCase
1715
1807
  ActionController::Routing.with_controllers(['users']) do
1716
1808
  set.draw do |map|
1717
1809
  map.connect '/:controller/:action/:id', :controller => 'users'
1718
- end
1810
+ end
1719
1811
  assert_equal({:controller => 'users', :action => 'index'}, set.recognize_path('/'))
1720
1812
  end
1721
1813
  end
@@ -1737,27 +1829,27 @@ class RouteSetTest < Test::Unit::TestCase
1737
1829
  end
1738
1830
 
1739
1831
  def test_route_requirements_with_anchor_chars_are_invalid
1740
- assert_raises ArgumentError do
1832
+ assert_raise ArgumentError do
1741
1833
  set.draw do |map|
1742
1834
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /^\d+/
1743
1835
  end
1744
1836
  end
1745
- assert_raises ArgumentError do
1837
+ assert_raise ArgumentError do
1746
1838
  set.draw do |map|
1747
1839
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /\A\d+/
1748
1840
  end
1749
1841
  end
1750
- assert_raises ArgumentError do
1842
+ assert_raise ArgumentError do
1751
1843
  set.draw do |map|
1752
1844
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /\d+$/
1753
1845
  end
1754
1846
  end
1755
- assert_raises ArgumentError do
1847
+ assert_raise ArgumentError do
1756
1848
  set.draw do |map|
1757
1849
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /\d+\Z/
1758
1850
  end
1759
1851
  end
1760
- assert_raises ArgumentError do
1852
+ assert_raise ArgumentError do
1761
1853
  set.draw do |map|
1762
1854
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /\d+\z/
1763
1855
  end
@@ -1766,25 +1858,49 @@ class RouteSetTest < Test::Unit::TestCase
1766
1858
  set.draw do |map|
1767
1859
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /\d+/, :name => /^(david|jamis)/
1768
1860
  end
1769
- assert_raises ActionController::RoutingError do
1861
+ assert_raise ActionController::RoutingError do
1770
1862
  set.generate :controller => 'pages', :action => 'show', :id => 10
1771
1863
  end
1772
1864
  end
1773
1865
  end
1774
1866
 
1867
+ def test_route_requirements_with_invalid_http_method_is_invalid
1868
+ assert_raise ArgumentError do
1869
+ set.draw do |map|
1870
+ map.connect 'valid/route', :controller => 'pages', :action => 'show', :conditions => {:method => :invalid}
1871
+ end
1872
+ end
1873
+ end
1874
+
1875
+ def test_route_requirements_with_options_method_condition_is_valid
1876
+ assert_nothing_raised do
1877
+ set.draw do |map|
1878
+ map.connect 'valid/route', :controller => 'pages', :action => 'show', :conditions => {:method => :options}
1879
+ end
1880
+ end
1881
+ end
1882
+
1883
+ def test_route_requirements_with_head_method_condition_is_invalid
1884
+ assert_raise ArgumentError do
1885
+ set.draw do |map|
1886
+ map.connect 'valid/route', :controller => 'pages', :action => 'show', :conditions => {:method => :head}
1887
+ end
1888
+ end
1889
+ end
1890
+
1775
1891
  def test_non_path_route_requirements_match_all
1776
1892
  set.draw do |map|
1777
1893
  map.connect 'page/37s', :controller => 'pages', :action => 'show', :name => /(jamis|david)/
1778
1894
  end
1779
1895
  assert_equal '/page/37s', set.generate(:controller => 'pages', :action => 'show', :name => 'jamis')
1780
- assert_raises ActionController::RoutingError do
1896
+ assert_raise ActionController::RoutingError do
1781
1897
  set.generate(:controller => 'pages', :action => 'show', :name => 'not_jamis')
1782
1898
  end
1783
- assert_raises ActionController::RoutingError do
1899
+ assert_raise ActionController::RoutingError do
1784
1900
  set.generate(:controller => 'pages', :action => 'show', :name => 'nor_jamis_and_david')
1785
1901
  end
1786
1902
  end
1787
-
1903
+
1788
1904
  def test_recognize_with_encoded_id_and_regex
1789
1905
  set.draw do |map|
1790
1906
  map.connect 'page/:id', :controller => 'pages', :action => 'show', :id => /[a-zA-Z0-9\+]+/
@@ -1808,54 +1924,59 @@ class RouteSetTest < Test::Unit::TestCase
1808
1924
  end
1809
1925
 
1810
1926
  request.path = "/people"
1811
- request.method = :get
1927
+ request.env["REQUEST_METHOD"] = "GET"
1812
1928
  assert_nothing_raised { set.recognize(request) }
1813
1929
  assert_equal("index", request.path_parameters[:action])
1814
-
1815
- request.method = :post
1930
+ request.recycle!
1931
+
1932
+ request.env["REQUEST_METHOD"] = "POST"
1816
1933
  assert_nothing_raised { set.recognize(request) }
1817
1934
  assert_equal("create", request.path_parameters[:action])
1818
-
1819
- request.method = :put
1935
+ request.recycle!
1936
+
1937
+ request.env["REQUEST_METHOD"] = "PUT"
1820
1938
  assert_nothing_raised { set.recognize(request) }
1821
1939
  assert_equal("update", request.path_parameters[:action])
1940
+ request.recycle!
1822
1941
 
1823
- begin
1824
- request.method = :bacon
1942
+ assert_raise(ActionController::UnknownHttpMethod) {
1943
+ request.env["REQUEST_METHOD"] = "BACON"
1825
1944
  set.recognize(request)
1826
- flunk 'Should have raised NotImplemented'
1827
- rescue ActionController::NotImplemented => e
1828
- assert_equal [:get, :post, :put, :delete], e.allowed_methods
1829
- end
1945
+ }
1946
+ request.recycle!
1830
1947
 
1831
1948
  request.path = "/people/5"
1832
- request.method = :get
1949
+ request.env["REQUEST_METHOD"] = "GET"
1833
1950
  assert_nothing_raised { set.recognize(request) }
1834
1951
  assert_equal("show", request.path_parameters[:action])
1835
1952
  assert_equal("5", request.path_parameters[:id])
1953
+ request.recycle!
1836
1954
 
1837
- request.method = :put
1955
+ request.env["REQUEST_METHOD"] = "PUT"
1838
1956
  assert_nothing_raised { set.recognize(request) }
1839
1957
  assert_equal("update", request.path_parameters[:action])
1840
1958
  assert_equal("5", request.path_parameters[:id])
1959
+ request.recycle!
1841
1960
 
1842
- request.method = :delete
1961
+ request.env["REQUEST_METHOD"] = "DELETE"
1843
1962
  assert_nothing_raised { set.recognize(request) }
1844
1963
  assert_equal("destroy", request.path_parameters[:action])
1845
1964
  assert_equal("5", request.path_parameters[:id])
1965
+ request.recycle!
1846
1966
 
1847
1967
  begin
1848
- request.method = :post
1968
+ request.env["REQUEST_METHOD"] = "POST"
1849
1969
  set.recognize(request)
1850
1970
  flunk 'Should have raised MethodNotAllowed'
1851
1971
  rescue ActionController::MethodNotAllowed => e
1852
1972
  assert_equal [:get, :put, :delete], e.allowed_methods
1853
1973
  end
1974
+ request.recycle!
1854
1975
 
1855
1976
  ensure
1856
1977
  Object.send(:remove_const, :PeopleController)
1857
1978
  end
1858
-
1979
+
1859
1980
  def test_recognize_with_alias_in_conditions
1860
1981
  Object.const_set(:PeopleController, Class.new)
1861
1982
 
@@ -1866,13 +1987,13 @@ class RouteSetTest < Test::Unit::TestCase
1866
1987
  end
1867
1988
 
1868
1989
  request.path = "/people"
1869
- request.method = :get
1990
+ request.env["REQUEST_METHOD"] = "GET"
1870
1991
  assert_nothing_raised { set.recognize(request) }
1871
1992
  assert_equal("people", request.path_parameters[:controller])
1872
1993
  assert_equal("index", request.path_parameters[:action])
1873
1994
 
1874
1995
  request.path = "/"
1875
- request.method = :get
1996
+ request.env["REQUEST_METHOD"] = "GET"
1876
1997
  assert_nothing_raised { set.recognize(request) }
1877
1998
  assert_equal("people", request.path_parameters[:controller])
1878
1999
  assert_equal("index", request.path_parameters[:action])
@@ -1888,16 +2009,16 @@ class RouteSetTest < Test::Unit::TestCase
1888
2009
  :controller => 'articles', :action => 'permalink',
1889
2010
  :year => /\d{4}/, :day => /\d{1,2}/, :month => /\d{1,2}/
1890
2011
  end
1891
-
2012
+
1892
2013
  request.path = "/articles/2005/11/05/a-very-interesting-article"
1893
- request.method = :get
2014
+ request.env["REQUEST_METHOD"] = "GET"
1894
2015
  assert_nothing_raised { set.recognize(request) }
1895
2016
  assert_equal("permalink", request.path_parameters[:action])
1896
2017
  assert_equal("2005", request.path_parameters[:year])
1897
2018
  assert_equal("11", request.path_parameters[:month])
1898
2019
  assert_equal("05", request.path_parameters[:day])
1899
2020
  assert_equal("a-very-interesting-article", request.path_parameters[:title])
1900
-
2021
+
1901
2022
  ensure
1902
2023
  Object.send(:remove_const, :ArticlesController)
1903
2024
  end
@@ -1911,7 +2032,7 @@ class RouteSetTest < Test::Unit::TestCase
1911
2032
  request.path = '/profile'
1912
2033
 
1913
2034
  set.recognize(request) rescue nil
1914
-
2035
+
1915
2036
  assert !Object.const_defined?("Profiler__"), "Profiler should not be loaded"
1916
2037
  end
1917
2038
 
@@ -1927,17 +2048,19 @@ class RouteSetTest < Test::Unit::TestCase
1927
2048
  end
1928
2049
 
1929
2050
  request.path = "/people/5"
1930
- request.method = :get
2051
+ request.env["REQUEST_METHOD"] = "GET"
1931
2052
  assert_nothing_raised { set.recognize(request) }
1932
2053
  assert_equal("show", request.path_parameters[:action])
1933
2054
  assert_equal("5", request.path_parameters[:id])
2055
+ request.recycle!
1934
2056
 
1935
- request.method = :put
2057
+ request.env["REQUEST_METHOD"] = "PUT"
1936
2058
  assert_nothing_raised { set.recognize(request) }
1937
2059
  assert_equal("update", request.path_parameters[:action])
2060
+ request.recycle!
1938
2061
 
1939
2062
  request.path = "/people/5.png"
1940
- request.method = :get
2063
+ request.env["REQUEST_METHOD"] = "GET"
1941
2064
  assert_nothing_raised { set.recognize(request) }
1942
2065
  assert_equal("show", request.path_parameters[:action])
1943
2066
  assert_equal("5", request.path_parameters[:id])
@@ -1955,56 +2078,54 @@ class RouteSetTest < Test::Unit::TestCase
1955
2078
  url = set.generate(:controller => "people", :action => "list")
1956
2079
  assert_equal "/people/list", url
1957
2080
  end
1958
-
2081
+
1959
2082
  def test_root_map
1960
2083
  Object.const_set(:PeopleController, Class.new)
1961
2084
 
1962
2085
  set.draw { |map| map.root :controller => "people" }
1963
2086
 
1964
2087
  request.path = ""
1965
- request.method = :get
2088
+ request.env["REQUEST_METHOD"] = "GET"
1966
2089
  assert_nothing_raised { set.recognize(request) }
1967
2090
  assert_equal("people", request.path_parameters[:controller])
1968
2091
  assert_equal("index", request.path_parameters[:action])
1969
2092
  ensure
1970
2093
  Object.send(:remove_const, :PeopleController)
1971
2094
  end
1972
-
1973
-
2095
+
1974
2096
  def test_namespace
1975
2097
  Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })
1976
2098
 
1977
- set.draw do |map|
1978
-
2099
+ set.draw do |map|
2100
+
1979
2101
  map.namespace 'api' do |api|
1980
2102
  api.route 'inventory', :controller => "products", :action => 'inventory'
1981
2103
  end
1982
-
2104
+
1983
2105
  end
1984
2106
 
1985
2107
  request.path = "/api/inventory"
1986
- request.method = :get
2108
+ request.env["REQUEST_METHOD"] = "GET"
1987
2109
  assert_nothing_raised { set.recognize(request) }
1988
2110
  assert_equal("api/products", request.path_parameters[:controller])
1989
2111
  assert_equal("inventory", request.path_parameters[:action])
1990
2112
  ensure
1991
2113
  Object.send(:remove_const, :Api)
1992
2114
  end
1993
-
1994
2115
 
1995
2116
  def test_namespaced_root_map
1996
2117
  Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })
1997
2118
 
1998
- set.draw do |map|
1999
-
2119
+ set.draw do |map|
2120
+
2000
2121
  map.namespace 'api' do |api|
2001
- api.root :controller => "products"
2122
+ api.root :controller => "products"
2002
2123
  end
2003
-
2124
+
2004
2125
  end
2005
2126
 
2006
2127
  request.path = "/api"
2007
- request.method = :get
2128
+ request.env["REQUEST_METHOD"] = "GET"
2008
2129
  assert_nothing_raised { set.recognize(request) }
2009
2130
  assert_equal("api/products", request.path_parameters[:controller])
2010
2131
  assert_equal("index", request.path_parameters[:action])
@@ -2016,15 +2137,31 @@ class RouteSetTest < Test::Unit::TestCase
2016
2137
  Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })
2017
2138
 
2018
2139
  set.draw do |map|
2019
-
2020
2140
  map.namespace 'api', :path_prefix => 'prefix' do |api|
2021
2141
  api.route 'inventory', :controller => "products", :action => 'inventory'
2022
2142
  end
2023
-
2024
2143
  end
2025
2144
 
2026
2145
  request.path = "/prefix/inventory"
2027
- request.method = :get
2146
+ request.env["REQUEST_METHOD"] = "GET"
2147
+ assert_nothing_raised { set.recognize(request) }
2148
+ assert_equal("api/products", request.path_parameters[:controller])
2149
+ assert_equal("inventory", request.path_parameters[:action])
2150
+ ensure
2151
+ Object.send(:remove_const, :Api)
2152
+ end
2153
+
2154
+ def test_namespace_with_blank_path_prefix
2155
+ Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })
2156
+
2157
+ set.draw do |map|
2158
+ map.namespace 'api', :path_prefix => '' do |api|
2159
+ api.route 'inventory', :controller => "products", :action => 'inventory'
2160
+ end
2161
+ end
2162
+
2163
+ request.path = "/inventory"
2164
+ request.env["REQUEST_METHOD"] = "GET"
2028
2165
  assert_nothing_raised { set.recognize(request) }
2029
2166
  assert_equal("api/products", request.path_parameters[:controller])
2030
2167
  assert_equal("inventory", request.path_parameters[:action])
@@ -2089,6 +2226,20 @@ class RouteSetTest < Test::Unit::TestCase
2089
2226
  assert_equal [:x], set.extra_keys(args)
2090
2227
  end
2091
2228
 
2229
+ def test_generate_with_path_prefix
2230
+ set.draw { |map| map.connect ':controller/:action/:id', :path_prefix => 'my' }
2231
+
2232
+ args = { :controller => "foo", :action => "bar", :id => "7", :x => "y" }
2233
+ assert_equal "/my/foo/bar/7?x=y", set.generate(args)
2234
+ end
2235
+
2236
+ def test_generate_with_blank_path_prefix
2237
+ set.draw { |map| map.connect ':controller/:action/:id', :path_prefix => '' }
2238
+
2239
+ args = { :controller => "foo", :action => "bar", :id => "7", :x => "y" }
2240
+ assert_equal "/foo/bar/7?x=y", set.generate(args)
2241
+ end
2242
+
2092
2243
  def test_named_routes_are_never_relative_to_modules
2093
2244
  set.draw do |map|
2094
2245
  map.connect "/connection/manage/:action", :controller => 'connection/manage'
@@ -2102,7 +2253,7 @@ class RouteSetTest < Test::Unit::TestCase
2102
2253
  url = set.generate({:use_route => :family_connection, :controller => "connection"}, {:controller => 'connection/manage'})
2103
2254
  assert_equal "/connection", url
2104
2255
  end
2105
-
2256
+
2106
2257
  def test_action_left_off_when_id_is_recalled
2107
2258
  set.draw do |map|
2108
2259
  map.connect ':controller/:action/:id'
@@ -2112,7 +2263,7 @@ class RouteSetTest < Test::Unit::TestCase
2112
2263
  {:controller => 'post', :action => 'show', :id => '10'}
2113
2264
  )
2114
2265
  end
2115
-
2266
+
2116
2267
  def test_query_params_will_be_shown_when_recalled
2117
2268
  set.draw do |map|
2118
2269
  map.connect 'show_post/:parameter', :controller => 'post', :action => 'show'
@@ -2124,6 +2275,22 @@ class RouteSetTest < Test::Unit::TestCase
2124
2275
  )
2125
2276
  end
2126
2277
 
2278
+ def test_format_is_not_inherit
2279
+ set.draw do |map|
2280
+ map.connect '/posts.:format', :controller => 'posts'
2281
+ end
2282
+
2283
+ assert_equal '/posts', set.generate(
2284
+ {:controller => 'posts'},
2285
+ {:controller => 'posts', :action => 'index', :format => 'xml'}
2286
+ )
2287
+
2288
+ assert_equal '/posts.xml', set.generate(
2289
+ {:controller => 'posts', :format => 'xml'},
2290
+ {:controller => 'posts', :action => 'index', :format => 'xml'}
2291
+ )
2292
+ end
2293
+
2127
2294
  def test_expiry_determination_should_consider_values_with_to_param
2128
2295
  set.draw { |map| map.connect 'projects/:project_id/:controller/:action' }
2129
2296
  assert_equal '/projects/1/post/show', set.generate(
@@ -2144,21 +2311,21 @@ class RouteSetTest < Test::Unit::TestCase
2144
2311
  assert_equal '/show_post/10', all.first
2145
2312
  assert_equal '/post/show/10', all.last
2146
2313
  end
2147
-
2314
+
2148
2315
  def test_named_route_in_nested_resource
2149
2316
  set.draw do |map|
2150
2317
  map.resources :projects do |project|
2151
2318
  project.milestones 'milestones', :controller => 'milestones', :action => 'index'
2152
2319
  end
2153
2320
  end
2154
-
2321
+
2155
2322
  request.path = "/projects/1/milestones"
2156
- request.method = :get
2323
+ request.env["REQUEST_METHOD"] = "GET"
2157
2324
  assert_nothing_raised { set.recognize(request) }
2158
2325
  assert_equal("milestones", request.path_parameters[:controller])
2159
2326
  assert_equal("index", request.path_parameters[:action])
2160
2327
  end
2161
-
2328
+
2162
2329
  def test_setting_root_in_namespace_using_symbol
2163
2330
  assert_nothing_raised do
2164
2331
  set.draw do |map|
@@ -2168,7 +2335,7 @@ class RouteSetTest < Test::Unit::TestCase
2168
2335
  end
2169
2336
  end
2170
2337
  end
2171
-
2338
+
2172
2339
  def test_setting_root_in_namespace_using_string
2173
2340
  assert_nothing_raised do
2174
2341
  set.draw do |map|
@@ -2180,7 +2347,7 @@ class RouteSetTest < Test::Unit::TestCase
2180
2347
  end
2181
2348
 
2182
2349
  def test_route_requirements_with_unsupported_regexp_options_must_error
2183
- assert_raises ArgumentError do
2350
+ assert_raise ArgumentError do
2184
2351
  set.draw do |map|
2185
2352
  map.connect 'page/:name', :controller => 'pages',
2186
2353
  :action => 'show',
@@ -2218,7 +2385,7 @@ class RouteSetTest < Test::Unit::TestCase
2218
2385
  :requirements => {:name => /(david|jamis)/i}
2219
2386
  end
2220
2387
  assert_equal({:controller => 'pages', :action => 'show', :name => 'jamis'}, set.recognize_path('/page/jamis'))
2221
- assert_raises ActionController::RoutingError do
2388
+ assert_raise ActionController::RoutingError do
2222
2389
  set.recognize_path('/page/davidjamis')
2223
2390
  end
2224
2391
  assert_equal({:controller => 'pages', :action => 'show', :name => 'DAVID'}, set.recognize_path('/page/DAVID'))
@@ -2232,7 +2399,7 @@ class RouteSetTest < Test::Unit::TestCase
2232
2399
  end
2233
2400
  url = set.generate({:controller => 'pages', :action => 'show', :name => 'david'})
2234
2401
  assert_equal "/page/david", url
2235
- assert_raises ActionController::RoutingError do
2402
+ assert_raise ActionController::RoutingError do
2236
2403
  url = set.generate({:controller => 'pages', :action => 'show', :name => 'davidjamis'})
2237
2404
  end
2238
2405
  url = set.generate({:controller => 'pages', :action => 'show', :name => 'JAMIS'})
@@ -2252,10 +2419,10 @@ class RouteSetTest < Test::Unit::TestCase
2252
2419
  end
2253
2420
  assert_equal({:controller => 'pages', :action => 'show', :name => 'jamis'}, set.recognize_path('/page/jamis'))
2254
2421
  assert_equal({:controller => 'pages', :action => 'show', :name => 'david'}, set.recognize_path('/page/david'))
2255
- assert_raises ActionController::RoutingError do
2422
+ assert_raise ActionController::RoutingError do
2256
2423
  set.recognize_path('/page/david #The Creator')
2257
2424
  end
2258
- assert_raises ActionController::RoutingError do
2425
+ assert_raise ActionController::RoutingError do
2259
2426
  set.recognize_path('/page/David')
2260
2427
  end
2261
2428
  end
@@ -2273,10 +2440,10 @@ class RouteSetTest < Test::Unit::TestCase
2273
2440
  end
2274
2441
  url = set.generate({:controller => 'pages', :action => 'show', :name => 'david'})
2275
2442
  assert_equal "/page/david", url
2276
- assert_raises ActionController::RoutingError do
2443
+ assert_raise ActionController::RoutingError do
2277
2444
  url = set.generate({:controller => 'pages', :action => 'show', :name => 'davidjamis'})
2278
2445
  end
2279
- assert_raises ActionController::RoutingError do
2446
+ assert_raise ActionController::RoutingError do
2280
2447
  url = set.generate({:controller => 'pages', :action => 'show', :name => 'JAMIS'})
2281
2448
  end
2282
2449
  end
@@ -2309,156 +2476,82 @@ class RouteSetTest < Test::Unit::TestCase
2309
2476
  end
2310
2477
  assert_equal({:controller => 'pages', :action => 'show', :name => 'JAMIS'}, set.recognize_path('/page/JAMIS'))
2311
2478
  end
2312
-
2313
-
2314
2479
  end
2315
2480
 
2316
- class RoutingTest < Test::Unit::TestCase
2317
-
2318
- def test_possible_controllers
2319
- true_controller_paths = ActionController::Routing.controller_paths
2320
-
2321
- ActionController::Routing.use_controllers! nil
2322
-
2323
- silence_warnings do
2324
- Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + '/controller_fixtures')
2325
- end
2326
-
2327
- ActionController::Routing.controller_paths = [
2328
- RAILS_ROOT, RAILS_ROOT + '/app/controllers', RAILS_ROOT + '/vendor/plugins/bad_plugin/lib'
2329
- ]
2330
-
2331
- assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
2332
- ensure
2333
- if true_controller_paths
2334
- ActionController::Routing.controller_paths = true_controller_paths
2335
- end
2336
- ActionController::Routing.use_controllers! nil
2337
- Object.send(:remove_const, :RAILS_ROOT) rescue nil
2338
- end
2339
-
2340
- def test_possible_controllers_are_reset_on_each_load
2341
- true_possible_controllers = ActionController::Routing.possible_controllers
2342
- true_controller_paths = ActionController::Routing.controller_paths
2343
-
2344
- ActionController::Routing.use_controllers! nil
2345
- root = File.dirname(__FILE__) + '/controller_fixtures'
2346
-
2347
- ActionController::Routing.controller_paths = []
2348
- assert_equal [], ActionController::Routing.possible_controllers
2349
-
2350
- ActionController::Routing::Routes.load!
2351
- ActionController::Routing.controller_paths = [
2352
- root, root + '/app/controllers', root + '/vendor/plugins/bad_plugin/lib'
2353
- ]
2354
-
2355
- assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
2356
- ensure
2357
- ActionController::Routing.controller_paths = true_controller_paths
2358
- ActionController::Routing.use_controllers! true_possible_controllers
2359
- Object.send(:remove_const, :RAILS_ROOT) rescue nil
2360
-
2361
- ActionController::Routing::Routes.clear!
2362
- ActionController::Routing::Routes.load_routes!
2363
- end
2364
-
2365
- def test_with_controllers
2366
- c = %w(admin/accounts admin/users account pages)
2367
- ActionController::Routing.with_controllers c do
2368
- assert_equal c, ActionController::Routing.possible_controllers
2369
- end
2370
- end
2481
+ class RouteLoadingTest < Test::Unit::TestCase
2482
+ def setup
2483
+ routes.instance_variable_set '@routes_last_modified', nil
2484
+ silence_warnings { Object.const_set :RAILS_ROOT, '.' }
2485
+ routes.add_configuration_file(File.join(RAILS_ROOT, 'config', 'routes.rb'))
2371
2486
 
2372
- def test_normalize_unix_paths
2373
- load_paths = %w(. config/../app/controllers config/../app//helpers script/../config/../vendor/rails/actionpack/lib vendor/rails/railties/builtin/rails_info app/models lib script/../config/../foo/bar/../../app/models .foo/../.bar foo.bar/../config)
2374
- paths = ActionController::Routing.normalize_paths(load_paths)
2375
- assert_equal %w(vendor/rails/railties/builtin/rails_info vendor/rails/actionpack/lib app/controllers app/helpers app/models config .bar lib .), paths
2487
+ @stat = stub_everything
2376
2488
  end
2377
2489
 
2378
- def test_normalize_windows_paths
2379
- load_paths = %w(. config\\..\\app\\controllers config\\..\\app\\\\helpers script\\..\\config\\..\\vendor\\rails\\actionpack\\lib vendor\\rails\\railties\\builtin\\rails_info app\\models lib script\\..\\config\\..\\foo\\bar\\..\\..\\app\\models .foo\\..\\.bar foo.bar\\..\\config)
2380
- paths = ActionController::Routing.normalize_paths(load_paths)
2381
- assert_equal %w(vendor\\rails\\railties\\builtin\\rails_info vendor\\rails\\actionpack\\lib app\\controllers app\\helpers app\\models config .bar lib .), paths
2382
- end
2383
-
2384
- def test_routing_helper_module
2385
- assert_kind_of Module, ActionController::Routing::Helpers
2386
-
2387
- h = ActionController::Routing::Helpers
2388
- c = Class.new
2389
- assert ! c.ancestors.include?(h)
2390
- ActionController::Routing::Routes.install_helpers c
2391
- assert c.ancestors.include?(h)
2490
+ def teardown
2491
+ ActionController::Routing::Routes.configuration_files.clear
2492
+ Object.send :remove_const, :RAILS_ROOT
2392
2493
  end
2393
2494
 
2394
- end
2395
-
2396
- uses_mocha 'route loading' do
2397
- class RouteLoadingTest < Test::Unit::TestCase
2398
-
2399
- def setup
2400
- routes.instance_variable_set '@routes_last_modified', nil
2401
- silence_warnings { Object.const_set :RAILS_ROOT, '.' }
2402
- ActionController::Routing::Routes.configuration_file = File.join(RAILS_ROOT, 'config', 'routes.rb')
2403
-
2404
- @stat = stub_everything
2405
- end
2495
+ def test_load
2496
+ File.expects(:stat).returns(@stat)
2497
+ routes.expects(:load).with(regexp_matches(/routes\.rb$/))
2406
2498
 
2407
- def teardown
2408
- ActionController::Routing::Routes.configuration_file = nil
2409
- Object.send :remove_const, :RAILS_ROOT
2410
- end
2499
+ routes.reload
2500
+ end
2411
2501
 
2412
- def test_load
2413
- File.expects(:stat).returns(@stat)
2414
- routes.expects(:load).with(regexp_matches(/routes\.rb$/))
2502
+ def test_no_reload_when_not_modified
2503
+ @stat.expects(:mtime).times(2).returns(1)
2504
+ File.expects(:stat).times(2).returns(@stat)
2505
+ routes.expects(:load).with(regexp_matches(/routes\.rb$/)).at_most_once
2415
2506
 
2416
- routes.reload
2417
- end
2507
+ 2.times { routes.reload }
2508
+ end
2418
2509
 
2419
- def test_no_reload_when_not_modified
2420
- @stat.expects(:mtime).times(2).returns(1)
2421
- File.expects(:stat).times(2).returns(@stat)
2422
- routes.expects(:load).with(regexp_matches(/routes\.rb$/)).at_most_once
2510
+ def test_reload_when_modified
2511
+ @stat.expects(:mtime).at_least(2).returns(1, 2)
2512
+ File.expects(:stat).at_least(2).returns(@stat)
2513
+ routes.expects(:load).with(regexp_matches(/routes\.rb$/)).times(2)
2423
2514
 
2424
- 2.times { routes.reload }
2425
- end
2515
+ 2.times { routes.reload }
2516
+ end
2426
2517
 
2427
- def test_reload_when_modified
2428
- @stat.expects(:mtime).at_least(2).returns(1, 2)
2429
- File.expects(:stat).at_least(2).returns(@stat)
2430
- routes.expects(:load).with(regexp_matches(/routes\.rb$/)).times(2)
2518
+ def test_bang_forces_reload
2519
+ @stat.expects(:mtime).at_least(2).returns(1)
2520
+ File.expects(:stat).at_least(2).returns(@stat)
2521
+ routes.expects(:load).with(regexp_matches(/routes\.rb$/)).times(2)
2431
2522
 
2432
- 2.times { routes.reload }
2433
- end
2523
+ 2.times { routes.reload! }
2524
+ end
2434
2525
 
2435
- def test_bang_forces_reload
2436
- @stat.expects(:mtime).at_least(2).returns(1)
2437
- File.expects(:stat).at_least(2).returns(@stat)
2438
- routes.expects(:load).with(regexp_matches(/routes\.rb$/)).times(2)
2526
+ def test_adding_inflections_forces_reload
2527
+ ActiveSupport::Inflector::Inflections.instance.expects(:uncountable).with('equipment')
2528
+ routes.expects(:reload!)
2439
2529
 
2440
- 2.times { routes.reload! }
2441
- end
2530
+ ActiveSupport::Inflector.inflections { |inflect| inflect.uncountable('equipment') }
2531
+ end
2442
2532
 
2443
- def test_adding_inflections_forces_reload
2444
- ActiveSupport::Inflector::Inflections.instance.expects(:uncountable).with('equipment')
2445
- routes.expects(:reload!)
2533
+ def test_load_with_configuration
2534
+ routes.configuration_files.clear
2535
+ routes.add_configuration_file("foobarbaz")
2536
+ File.expects(:stat).returns(@stat)
2537
+ routes.expects(:load).with("foobarbaz")
2446
2538
 
2447
- ActiveSupport::Inflector.inflections { |inflect| inflect.uncountable('equipment') }
2448
- end
2539
+ routes.reload
2540
+ end
2541
+
2542
+ def test_load_multiple_configurations
2543
+ routes.add_configuration_file("engines.rb")
2449
2544
 
2450
- def test_load_with_configuration
2451
- routes.configuration_file = "foobarbaz"
2452
- File.expects(:stat).returns(@stat)
2453
- routes.expects(:load).with("foobarbaz")
2545
+ File.expects(:stat).at_least_once.returns(@stat)
2454
2546
 
2455
- routes.reload
2456
- end
2547
+ routes.expects(:load).with('./config/routes.rb')
2548
+ routes.expects(:load).with('engines.rb')
2549
+
2550
+ routes.reload
2551
+ end
2457
2552
 
2458
- private
2553
+ private
2459
2554
  def routes
2460
2555
  ActionController::Routing::Routes
2461
2556
  end
2462
-
2463
- end
2464
2557
  end