browsercms 3.1.5 → 3.3.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. data/app/controllers/cms/base_controller.rb +3 -3
  2. data/app/controllers/cms/content_block_controller.rb +2 -2
  3. data/app/controllers/cms/content_controller.rb +5 -4
  4. data/app/controllers/cms/error_handling.rb +1 -1
  5. data/app/controllers/cms/routes_controller.rb +4 -5
  6. data/app/controllers/cms/section_nodes_controller.rb +1 -6
  7. data/app/controllers/cms/sections_controller.rb +2 -3
  8. data/app/controllers/cms/tasks_controller.rb +3 -0
  9. data/app/controllers/cms/users_controller.rb +1 -1
  10. data/app/helpers/cms/application_helper.rb +137 -34
  11. data/app/helpers/cms/form_builder.rb +33 -21
  12. data/app/helpers/cms/page_helper.rb +43 -10
  13. data/app/helpers/cms/path_helper.rb +1 -1
  14. data/app/helpers/cms/rendering_helper.rb +3 -4
  15. data/app/helpers/cms/section_nodes_helper.rb +5 -43
  16. data/app/models/abstract_file_block.rb +1 -16
  17. data/app/models/attachment.rb +57 -22
  18. data/app/models/category.rb +4 -4
  19. data/app/models/category_type.rb +2 -2
  20. data/app/models/cms/view_context.rb +46 -0
  21. data/app/models/connector.rb +7 -6
  22. data/app/models/content_type.rb +3 -3
  23. data/app/models/dynamic_view.rb +1 -1
  24. data/app/models/email_message.rb +2 -2
  25. data/app/models/file_block.rb +12 -0
  26. data/app/models/group.rb +4 -4
  27. data/app/models/group_type.rb +4 -4
  28. data/app/models/html_block.rb +1 -1
  29. data/app/models/image_block.rb +12 -0
  30. data/app/models/link.rb +22 -5
  31. data/app/models/page.rb +87 -46
  32. data/app/models/page_route.rb +61 -6
  33. data/app/models/permission.rb +1 -1
  34. data/app/models/portlet.rb +14 -4
  35. data/app/models/section.rb +48 -86
  36. data/app/models/section_node.rb +25 -40
  37. data/app/models/site.rb +1 -1
  38. data/app/models/tag.rb +1 -1
  39. data/app/models/task.rb +8 -7
  40. data/app/models/user.rb +2 -7
  41. data/app/portlets/forgot_password_portlet.rb +6 -2
  42. data/app/portlets/reset_password_portlet.rb +1 -1
  43. data/app/views/cms/blocks/_toolbar.html.erb +1 -1
  44. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +3 -6
  45. data/app/views/cms/blocks/_toolbar_for_member.html.erb +3 -5
  46. data/app/views/cms/blocks/edit.html.erb +4 -4
  47. data/app/views/cms/blocks/index.html.erb +7 -7
  48. data/app/views/cms/blocks/new.html.erb +4 -4
  49. data/app/views/cms/blocks/show.html.erb +2 -2
  50. data/app/views/cms/blocks/usages.html.erb +2 -2
  51. data/app/views/cms/blocks/versions.html.erb +4 -4
  52. data/app/views/cms/cache/show.html.erb +2 -2
  53. data/app/views/cms/categories/_form.html.erb +2 -2
  54. data/app/views/cms/connectors/new.html.erb +6 -8
  55. data/app/views/cms/content/no_page.html.erb +1 -1
  56. data/app/views/cms/content/show.html.erb +2 -7
  57. data/app/views/cms/dashboard/_page_drafts.html.erb +1 -1
  58. data/app/views/cms/dashboard/_tasks.html.erb +1 -1
  59. data/app/views/cms/dashboard/index.html.erb +1 -1
  60. data/app/views/cms/dynamic_views/_form.html.erb +2 -2
  61. data/app/views/cms/dynamic_views/index.html.erb +7 -10
  62. data/app/views/cms/email_messages/show.html.erb +2 -2
  63. data/app/views/cms/file_blocks/_form.html.erb +4 -4
  64. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +2 -2
  65. data/app/views/cms/form_builder/_cms_file_field.html.erb +2 -2
  66. data/app/views/cms/form_builder/_cms_tag_list.html.erb +2 -2
  67. data/app/views/cms/form_builder/_cms_text_editor.html.erb +2 -2
  68. data/app/views/cms/groups/_form.html.erb +5 -5
  69. data/app/views/cms/groups/_permissions.html.erb +4 -4
  70. data/app/views/cms/groups/_sections.html.erb +1 -2
  71. data/app/views/cms/groups/index.html.erb +1 -1
  72. data/app/views/cms/html_blocks/render.html.erb +1 -1
  73. data/app/views/cms/image_blocks/_form.html.erb +4 -5
  74. data/app/views/cms/links/_form.html.erb +1 -1
  75. data/app/views/cms/links/edit.html.erb +2 -2
  76. data/app/views/cms/links/new.html.erb +2 -2
  77. data/app/views/cms/page_routes/_form.html.erb +2 -2
  78. data/app/views/cms/page_routes/index.html.erb +6 -9
  79. data/app/views/cms/page_routes/show.html.erb +5 -8
  80. data/app/views/cms/pages/_edit_connector.html.erb +1 -1
  81. data/app/views/cms/pages/_form.html.erb +3 -3
  82. data/app/views/cms/pages/edit.html.erb +2 -2
  83. data/app/views/cms/pages/new.html.erb +7 -7
  84. data/app/views/cms/pages/versions.html.erb +4 -4
  85. data/app/views/cms/redirects/_form.html.erb +2 -2
  86. data/app/views/cms/redirects/index.html.erb +8 -7
  87. data/app/views/cms/routes/index.html.erb +2 -2
  88. data/app/views/cms/section_nodes/_link.html.erb +3 -6
  89. data/app/views/cms/section_nodes/_node.html.erb +4 -13
  90. data/app/views/cms/section_nodes/_page.html.erb +7 -13
  91. data/app/views/cms/section_nodes/_section.html.erb +8 -24
  92. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  93. data/app/views/cms/section_nodes/index.html.erb +18 -30
  94. data/app/views/cms/sections/_form.html.erb +4 -6
  95. data/app/views/cms/sections/edit.html.erb +2 -2
  96. data/app/views/cms/sections/index.html.erb +3 -3
  97. data/app/views/cms/sections/new.html.erb +3 -3
  98. data/app/views/cms/sessions/new.html.erb +3 -3
  99. data/app/views/cms/shared/_pagination.html.erb +1 -1
  100. data/app/views/cms/shared/error.html.erb +1 -1
  101. data/app/views/cms/tags/render.html.erb +2 -2
  102. data/app/views/cms/tasks/new.html.erb +4 -4
  103. data/app/views/cms/users/_form.html.erb +3 -3
  104. data/app/views/cms/users/_toolbar.html.erb +3 -3
  105. data/app/views/cms/users/change_password.html.erb +5 -5
  106. data/app/views/cms/users/edit.html.erb +2 -2
  107. data/app/views/cms/users/index.html.erb +4 -4
  108. data/app/views/cms/users/new.html.erb +2 -2
  109. data/app/views/cms/users/show.html.erb +16 -16
  110. data/app/views/layouts/_cms_toolbar.html.erb +5 -5
  111. data/app/views/layouts/_page_toolbar.html.erb +11 -11
  112. data/app/views/layouts/cms/_footer.erb +1 -1
  113. data/app/views/layouts/cms/_head.html.erb +2 -6
  114. data/app/views/layouts/cms/administration.html.erb +32 -32
  115. data/app/views/layouts/cms/content_library.html.erb +5 -5
  116. data/app/views/layouts/cms/toolbar.html.erb +1 -1
  117. data/app/views/portlets/email_page/render.html.erb +2 -2
  118. data/app/views/portlets/forgot_password/render.html.erb +1 -1
  119. data/app/views/portlets/login/render.html.erb +4 -2
  120. data/app/views/portlets/reset_password/render.html.erb +1 -1
  121. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  122. data/bin/bcms +0 -0
  123. data/bin/bcms-upgrade +232 -0
  124. data/bin/browsercms +2 -2
  125. data/browsercms.gemspec +16 -14
  126. data/db/migrate/20100705083859_browsercms_3_3_0.rb +56 -0
  127. data/db/seeds.rb +58 -0
  128. data/doc/guides/html/authentication.html +448 -192
  129. data/doc/guides/html/build_it_yourself.html +454 -175
  130. data/doc/guides/html/building_modules.html +451 -220
  131. data/doc/guides/html/building_templates.html +448 -498
  132. data/doc/guides/html/content_blocks.html +450 -470
  133. data/doc/guides/html/customizing_browsercms.html +453 -169
  134. data/doc/guides/html/deployment_guide.html +443 -82
  135. data/doc/guides/html/files/bcmsorg.js +28 -0
  136. data/doc/guides/html/files/clearfix.css +8 -0
  137. data/doc/guides/html/files/cufon.js +7 -0
  138. data/doc/guides/html/files/global.css +190 -0
  139. data/doc/guides/html/files/helvetica.js +91 -0
  140. data/doc/guides/html/files/jquery.js +11 -0
  141. data/doc/guides/html/getting_started.html +454 -213
  142. data/doc/guides/html/index.html +454 -174
  143. data/doc/guides/html/installing_modules.html +454 -186
  144. data/doc/guides/html/portlets.html +451 -232
  145. data/doc/guides/html/user_guide.html +452 -270
  146. data/doc/guides/html/writing_guides.html +454 -161
  147. data/lib/acts_as_list.rb +1 -1
  148. data/lib/browsercms.rb +10 -6
  149. data/lib/cms/acts.rb +7 -0
  150. data/lib/cms/authentication.rb +4 -0
  151. data/lib/cms/authentication/controller.rb +1 -1
  152. data/lib/cms/behaviors.rb +1 -1
  153. data/lib/cms/behaviors/archiving.rb +2 -2
  154. data/lib/cms/behaviors/attaching.rb +28 -43
  155. data/lib/cms/behaviors/categorizing.rb +1 -1
  156. data/lib/cms/behaviors/connecting.rb +27 -12
  157. data/lib/cms/behaviors/dynamic_attributes.rb +8 -5
  158. data/lib/cms/behaviors/hiding.rb +2 -2
  159. data/lib/cms/behaviors/publishing.rb +32 -22
  160. data/lib/cms/behaviors/rendering.rb +41 -18
  161. data/lib/cms/behaviors/searching.rb +1 -1
  162. data/lib/cms/behaviors/soft_deleting.rb +58 -29
  163. data/lib/cms/behaviors/taggable.rb +1 -1
  164. data/lib/cms/behaviors/userstamping.rb +5 -4
  165. data/lib/cms/behaviors/versioning.rb +192 -111
  166. data/lib/cms/content_rendering_support.rb +3 -3
  167. data/lib/cms/date_picker.rb +23 -0
  168. data/lib/cms/engine.rb +46 -0
  169. data/lib/cms/extensions.rb +1 -1
  170. data/lib/cms/extensions/active_record/errors.rb +2 -2
  171. data/lib/cms/extensions/hash.rb +4 -2
  172. data/lib/cms/extensions/string.rb +7 -2
  173. data/lib/cms/init.rb +32 -21
  174. data/lib/cms/module.rb +22 -0
  175. data/lib/cms/module_installation.rb +38 -0
  176. data/lib/cms/routes.rb +127 -115
  177. data/lib/cms/version.rb +2 -2
  178. data/lib/generators/browser_cms.rb +12 -0
  179. data/lib/generators/browser_cms/cms/USAGE +2 -0
  180. data/lib/generators/browser_cms/cms/cms_generator.rb +36 -0
  181. data/{rails_generators/browser_cms → lib/generators/browser_cms/cms}/templates/README +0 -0
  182. data/{rails_generators/browser_cms_demo_site → lib/generators/browser_cms/demo_site}/USAGE +0 -0
  183. data/lib/generators/browser_cms/demo_site/demo_site_generator.rb +138 -0
  184. data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +11 -0
  185. data/{rails_generators/browser_cms_demo_site/templates/migration.rb → lib/generators/browser_cms/demo_site/templates/migration.erb} +2 -8
  186. data/lib/generators/cms/content_block/USAGE +22 -0
  187. data/lib/generators/cms/content_block/content_block_generator.rb +55 -0
  188. data/{rails_generators → lib/generators/cms}/content_block/templates/_form.html.erb +0 -0
  189. data/{rails_generators → lib/generators/cms}/content_block/templates/content_block.rb +0 -0
  190. data/{rails_generators → lib/generators/cms}/content_block/templates/controller.rb +0 -0
  191. data/{rails_generators → lib/generators/cms}/content_block/templates/functional_test.erb +0 -0
  192. data/{rails_generators/content_block/templates/migration.rb → lib/generators/cms/content_block/templates/migration.erb} +1 -1
  193. data/{rails_generators → lib/generators/cms}/content_block/templates/render.html.erb +0 -0
  194. data/{rails_generators → lib/generators/cms}/content_block/templates/unit_test.erb +0 -0
  195. data/lib/generators/cms/install/USAGE +8 -0
  196. data/lib/generators/cms/install/install_generator.rb +20 -0
  197. data/{rails_generators → lib/generators/cms}/portlet/USAGE +3 -16
  198. data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
  199. data/{rails_generators → lib/generators/cms}/portlet/templates/_form.html.erb +0 -0
  200. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet.rb +0 -0
  201. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet_helper.rb +0 -0
  202. data/{rails_generators → lib/generators/cms}/portlet/templates/render.html.erb +0 -0
  203. data/{rails_generators → lib/generators/cms}/portlet/templates/unit_test.erb +0 -0
  204. data/{rails_generators → lib/generators/cms}/template/USAGE +1 -1
  205. data/lib/generators/cms/template/template_generator.rb +18 -0
  206. data/lib/generators/cms/template/templates/template.erb +2 -0
  207. data/lib/generators/cms/upgrade_module/README.txt +3 -0
  208. data/lib/generators/cms/upgrade_module/templates/20100705083859_browsercms_3_3_0.rb +56 -0
  209. data/lib/generators/cms/upgrade_module/templates/README +1 -0
  210. data/lib/generators/cms/upgrade_module/templates/USAGE.erb +10 -0
  211. data/lib/generators/cms/upgrade_module/templates/build_gem.rake +5 -0
  212. data/lib/generators/cms/upgrade_module/templates/engine.erb +7 -0
  213. data/lib/generators/cms/upgrade_module/templates/gemspec.erb +25 -0
  214. data/lib/generators/cms/upgrade_module/templates/gitignore.erb +11 -0
  215. data/lib/generators/cms/upgrade_module/templates/install.erb +9 -0
  216. data/lib/generators/cms/upgrade_module/templates/module_file.erb +3 -0
  217. data/lib/generators/cms/upgrade_module/templates/routes.erb +7 -0
  218. data/lib/generators/cms/upgrade_module/upgrade_module_generator.rb +61 -0
  219. data/lib/tasks/build_gem.rake +1 -0
  220. data/lib/tasks/cms.rake +34 -6
  221. data/lib/tasks/cucumber.rake +53 -0
  222. data/lib/tasks/db.rake +2 -2
  223. data/public/javascripts/cms/application.js +144 -135
  224. data/public/javascripts/cms/sitemap.js +383 -357
  225. data/public/javascripts/jquery-ui.js +782 -591
  226. data/public/javascripts/jquery.cookie.js +38 -43
  227. data/public/javascripts/jquery.js +13 -8
  228. data/public/javascripts/jquery.taglist.js +7 -0
  229. data/public/stylesheets/cms/date_picker.css +49 -40
  230. data/rails/init.rb +2 -3
  231. data/templates/blank.rb +13 -7
  232. data/templates/demo.rb +15 -7
  233. data/templates/module.rb +12 -75
  234. metadata +87 -407
  235. data/app/helpers/cms/content_block_helper.rb +0 -27
  236. data/app/views/layouts/cms/thickbox.html.erb +0 -24
  237. data/db/migrate/20120117144039_browsercms315.rb +0 -94
  238. data/db/migrate/20121114172307_load_seeds.rb +0 -70
  239. data/lib/cms/addressable.rb +0 -83
  240. data/lib/cms/error_pages.rb +0 -8
  241. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  242. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  243. data/public/javascripts/jquery.contextMenu.js +0 -211
  244. data/public/javascripts/jquery.dimensions.js +0 -119
  245. data/public/javascripts/jquery.thickbox.js +0 -10
  246. data/public/stylesheets/cms/jquery.contextMenu.css +0 -61
  247. data/public/stylesheets/cms/thickbox.css +0 -163
  248. data/rails_generators/browser_cms/USAGE +0 -2
  249. data/rails_generators/browser_cms/browser_cms_generator.rb +0 -35
  250. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +0 -63
  251. data/rails_generators/content_block/USAGE +0 -32
  252. data/rails_generators/content_block/content_block_generator.rb +0 -69
  253. data/rails_generators/portlet/portlet_generator.rb +0 -35
  254. data/rails_generators/template/template_generator.rb +0 -18
  255. data/rails_generators/template/templates/template.erb +0 -3
  256. data/test/custom_assertions.rb +0 -74
  257. data/test/factories.rb +0 -111
  258. data/test/factories/sitemap_factories.rb +0 -28
  259. data/test/fixtures/connectors.yml +0 -97
  260. data/test/fixtures/content_type_groups.yml +0 -13
  261. data/test/fixtures/content_types.yml +0 -50
  262. data/test/fixtures/dynamic_view_versions.yml +0 -26
  263. data/test/fixtures/dynamic_views.yml +0 -26
  264. data/test/fixtures/group_permissions.yml +0 -16
  265. data/test/fixtures/group_sections.yml +0 -31
  266. data/test/fixtures/group_type_permissions.yml +0 -11
  267. data/test/fixtures/group_types.yml +0 -25
  268. data/test/fixtures/groups.yml +0 -25
  269. data/test/fixtures/html_block_versions.yml +0 -67
  270. data/test/fixtures/html_blocks.yml +0 -63
  271. data/test/fixtures/page_versions.yml +0 -265
  272. data/test/fixtures/pages.yml +0 -85
  273. data/test/fixtures/permissions.yml +0 -28
  274. data/test/fixtures/section_nodes.yml +0 -46
  275. data/test/fixtures/sections.yml +0 -19
  276. data/test/fixtures/sites.yml +0 -9
  277. data/test/fixtures/user_group_memberships.yml +0 -11
  278. data/test/fixtures/users.yml +0 -15
  279. data/test/functional/cms/cache_controller_test.rb +0 -14
  280. data/test/functional/cms/categories_controller_test.rb +0 -25
  281. data/test/functional/cms/connectors_controller_test.rb +0 -60
  282. data/test/functional/cms/content_block_controller_test.rb +0 -120
  283. data/test/functional/cms/content_controller_test.rb +0 -439
  284. data/test/functional/cms/content_types_controller_test.rb +0 -18
  285. data/test/functional/cms/dashboard_controller_test.rb +0 -16
  286. data/test/functional/cms/dynamic_views_controller_test.rb +0 -52
  287. data/test/functional/cms/file_blocks_controller_test.rb +0 -52
  288. data/test/functional/cms/groups_controller_test.rb +0 -50
  289. data/test/functional/cms/home_controller_test.rb +0 -156
  290. data/test/functional/cms/html_blocks_controller_test.rb +0 -164
  291. data/test/functional/cms/image_blocks_controller_test.rb +0 -82
  292. data/test/functional/cms/links_controller_test.rb +0 -148
  293. data/test/functional/cms/pages_controller_test.rb +0 -227
  294. data/test/functional/cms/portlets_controller_test.rb +0 -67
  295. data/test/functional/cms/section_nodes_controller_test.rb +0 -112
  296. data/test/functional/cms/sections_controller_test.rb +0 -227
  297. data/test/functional/cms/sessions_controller_test.rb +0 -76
  298. data/test/functional/cms/toolbar_controller_test.rb +0 -64
  299. data/test/functional/cms/users_controller_test.rb +0 -231
  300. data/test/functional/tests/pretend_controller_test.rb +0 -57
  301. data/test/integration/cms/ckeditor_test.rb +0 -30
  302. data/test/integration/cms/password_management_test.rb +0 -56
  303. data/test/integration/login_test.rb +0 -14
  304. data/test/integration/sitemap_performance_test.rb +0 -26
  305. data/test/selenium-core/Blank.html +0 -7
  306. data/test/selenium-core/InjectedRemoteRunner.html +0 -8
  307. data/test/selenium-core/RemoteRunner.html +0 -110
  308. data/test/selenium-core/SeleniumLog.html +0 -109
  309. data/test/selenium-core/TestPrompt.html +0 -145
  310. data/test/selenium-core/TestRunner-splash.html +0 -55
  311. data/test/selenium-core/TestRunner.hta +0 -176
  312. data/test/selenium-core/TestRunner.html +0 -176
  313. data/test/selenium-core/domviewer/butmin.gif +0 -0
  314. data/test/selenium-core/domviewer/butplus.gif +0 -0
  315. data/test/selenium-core/domviewer/domviewer.css +0 -298
  316. data/test/selenium-core/domviewer/domviewer.html +0 -16
  317. data/test/selenium-core/domviewer/selenium-domviewer.js +0 -205
  318. data/test/selenium-core/icons/all.png +0 -0
  319. data/test/selenium-core/icons/continue.png +0 -0
  320. data/test/selenium-core/icons/continue_disabled.png +0 -0
  321. data/test/selenium-core/icons/pause.png +0 -0
  322. data/test/selenium-core/icons/pause_disabled.png +0 -0
  323. data/test/selenium-core/icons/selected.png +0 -0
  324. data/test/selenium-core/icons/step.png +0 -0
  325. data/test/selenium-core/icons/step_disabled.png +0 -0
  326. data/test/selenium-core/iedoc-core.xml +0 -1515
  327. data/test/selenium-core/iedoc.xml +0 -1469
  328. data/test/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  329. data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  330. data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  331. data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  332. data/test/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  333. data/test/selenium-core/lib/prototype.js +0 -2006
  334. data/test/selenium-core/lib/scriptaculous/builder.js +0 -101
  335. data/test/selenium-core/lib/scriptaculous/controls.js +0 -815
  336. data/test/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  337. data/test/selenium-core/lib/scriptaculous/effects.js +0 -958
  338. data/test/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  339. data/test/selenium-core/lib/scriptaculous/slider.js +0 -283
  340. data/test/selenium-core/lib/scriptaculous/unittest.js +0 -383
  341. data/test/selenium-core/scripts/find_matching_child.js +0 -69
  342. data/test/selenium-core/scripts/htmlutils.js +0 -894
  343. data/test/selenium-core/scripts/injection.html +0 -72
  344. data/test/selenium-core/scripts/js2html.js +0 -70
  345. data/test/selenium-core/scripts/narcissus-defs.js +0 -175
  346. data/test/selenium-core/scripts/narcissus-exec.js +0 -1054
  347. data/test/selenium-core/scripts/narcissus-parse.js +0 -1003
  348. data/test/selenium-core/scripts/se2html.js +0 -63
  349. data/test/selenium-core/scripts/selenium-api.js +0 -2409
  350. data/test/selenium-core/scripts/selenium-browserbot.js +0 -2203
  351. data/test/selenium-core/scripts/selenium-browserdetect.js +0 -150
  352. data/test/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  353. data/test/selenium-core/scripts/selenium-executionloop.js +0 -175
  354. data/test/selenium-core/scripts/selenium-logging.js +0 -147
  355. data/test/selenium-core/scripts/selenium-remoterunner.js +0 -571
  356. data/test/selenium-core/scripts/selenium-testrunner.js +0 -1333
  357. data/test/selenium-core/scripts/selenium-version.js +0 -5
  358. data/test/selenium-core/scripts/user-extensions.js +0 -3
  359. data/test/selenium-core/scripts/user-extensions.js.sample +0 -75
  360. data/test/selenium-core/scripts/xmlextras.js +0 -153
  361. data/test/selenium-core/selenium-logo.png +0 -0
  362. data/test/selenium-core/selenium-test.css +0 -43
  363. data/test/selenium-core/selenium.css +0 -299
  364. data/test/selenium-core/xpath/dom.js +0 -428
  365. data/test/selenium-core/xpath/misc.js +0 -252
  366. data/test/selenium-core/xpath/xpath.js +0 -2223
  367. data/test/selenium/_login_as_cmsadmin.rsel +0 -4
  368. data/test/selenium/dashboard.rsel +0 -5
  369. data/test/selenium/html_blocks.rsel +0 -4
  370. data/test/selenium/login/failed_login.rsel +0 -8
  371. data/test/selenium/login/successful_login.rsel +0 -9
  372. data/test/selenium/page_templates.rsel +0 -12
  373. data/test/selenium/pages/edit_properties.rsel +0 -5
  374. data/test/selenium/site/view_home_page.rsel +0 -4
  375. data/test/selenium/sitemap/move_page.rsel +0 -9
  376. data/test/selenium/sitemap/open_section.rsel +0 -6
  377. data/test/selenium/sitemap/select_page.rsel +0 -12
  378. data/test/selenium/sitemap/select_section.rsel +0 -17
  379. data/test/test_helper.rb +0 -193
  380. data/test/test_logging.rb +0 -67
  381. data/test/unit/behaviors/attaching_test.rb +0 -357
  382. data/test/unit/behaviors/connectable_test.rb +0 -29
  383. data/test/unit/behaviors/dynamic_attributes_test.rb +0 -38
  384. data/test/unit/behaviors/publishable_test.rb +0 -84
  385. data/test/unit/behaviors/searching_test.rb +0 -102
  386. data/test/unit/behaviors/taggable_test.rb +0 -109
  387. data/test/unit/behaviors/versioning_test.rb +0 -36
  388. data/test/unit/extensions/active_record/base_test.rb +0 -10
  389. data/test/unit/extensions/hash_test.rb +0 -17
  390. data/test/unit/extensions/integer_test.rb +0 -10
  391. data/test/unit/helpers/application_helper_test.rb +0 -77
  392. data/test/unit/helpers/form_builder_test.rb +0 -36
  393. data/test/unit/helpers/menu_helper_test.rb +0 -242
  394. data/test/unit/helpers/page_helper_test.rb +0 -67
  395. data/test/unit/helpers/path_helper_test.rb +0 -57
  396. data/test/unit/lib/acts_as_content_page_test.rb +0 -72
  397. data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
  398. data/test/unit/lib/cms/sitemap_test.rb +0 -206
  399. data/test/unit/lib/cms_domain_support_test.rb +0 -43
  400. data/test/unit/lib/command_line_test.rb +0 -70
  401. data/test/unit/lib/content_block_test.rb +0 -203
  402. data/test/unit/lib/content_rendering_support_test.rb +0 -40
  403. data/test/unit/lib/generators_test.rb +0 -40
  404. data/test/unit/lib/routes_test.rb +0 -57
  405. data/test/unit/models/attachment_test.rb +0 -116
  406. data/test/unit/models/category_test.rb +0 -40
  407. data/test/unit/models/category_type_test.rb +0 -8
  408. data/test/unit/models/connector_test.rb +0 -152
  409. data/test/unit/models/content_type_test.rb +0 -56
  410. data/test/unit/models/email_page_portlet_test.rb +0 -14
  411. data/test/unit/models/file_block_test.rb +0 -230
  412. data/test/unit/models/group_test.rb +0 -13
  413. data/test/unit/models/html_block_test.rb +0 -102
  414. data/test/unit/models/link_test.rb +0 -52
  415. data/test/unit/models/page_partial_test.rb +0 -29
  416. data/test/unit/models/page_route_test.rb +0 -29
  417. data/test/unit/models/page_template_test.rb +0 -40
  418. data/test/unit/models/page_test.rb +0 -792
  419. data/test/unit/models/permission_test.rb +0 -10
  420. data/test/unit/models/portlet_test.rb +0 -69
  421. data/test/unit/models/sections_test.rb +0 -264
  422. data/test/unit/models/site_test.rb +0 -50
  423. data/test/unit/models/task_test.rb +0 -141
  424. data/test/unit/models/user_test.rb +0 -352
  425. data/test/unit/schema_statements_test.rb +0 -41
@@ -5,9 +5,9 @@ class ContentType < ActiveRecord::Base
5
5
  validates_presence_of :content_type_group
6
6
  before_validation :set_content_type_group
7
7
 
8
- named_scope :named, lambda{|name| {:conditions => ['content_types.name = ?', name]}}
8
+ scope :named, lambda{|name| {:conditions => ['content_types.name = ?', name]}}
9
9
 
10
- named_scope :connectable,
10
+ scope :connectable,
11
11
  :include => :content_type_group,
12
12
  :conditions => ['content_type_groups.name != ?', 'Categorization'],
13
13
  :order => 'content_types.priority, content_types.name'
@@ -19,7 +19,7 @@ class ContentType < ActiveRecord::Base
19
19
  # Given a 'key' like 'html_blocks' or 'portlet'
20
20
  # Raises exception if nothing was found.
21
21
  def self.find_by_key(key)
22
- class_name = key.tableize.classify
22
+ class_name = key.singularize.tableize.classify
23
23
  content_type = find_by_name(class_name)
24
24
  if content_type.nil?
25
25
  if class_name.constantize.ancestors.include?(Portlet)
@@ -3,7 +3,7 @@ class DynamicView < ActiveRecord::Base
3
3
  after_save :write_file_to_disk
4
4
  after_destroy :remove_file_from_disk
5
5
 
6
- named_scope :with_file_name, lambda{|file_name|
6
+ scope :with_file_name, lambda{|file_name|
7
7
  conditions = {:name => nil, :format => nil, :handler => nil}
8
8
  if file_name && (parts = file_name.split(".")).size == 3
9
9
  conditions[:name] = parts[0]
@@ -1,6 +1,6 @@
1
1
  class EmailMessage < ActiveRecord::Base
2
2
 
3
- named_scope :undelivered, :conditions => "delivered_at is null"
3
+ scope :undelivered, :conditions => "delivered_at is null"
4
4
 
5
5
  validates_presence_of :recipients
6
6
 
@@ -24,7 +24,7 @@ class EmailMessage < ActiveRecord::Base
24
24
 
25
25
  def deliver!
26
26
  return false if delivered?
27
- EmailMessageMailer.deliver_email_message(self)
27
+ EmailMessageMailer.email_message(self).deliver
28
28
  update_attributes(:delivered_at => Time.now)
29
29
  end
30
30
 
@@ -1,6 +1,18 @@
1
1
  class FileBlock < AbstractFileBlock
2
2
 
3
3
  acts_as_content_block :belongs_to_attachment => true, :taggable => true
4
+
5
+ def set_attachment_file_path
6
+ if @attachment_file_path && @attachment_file_path != attachment.file_path
7
+ attachment.file_path = @attachment_file_path
8
+ end
9
+ end
10
+
11
+ def set_attachment_section
12
+ if @attachment_section_id && @attachment_section_id != attachment.section_id
13
+ attachment.section_id = @attachment_section_id
14
+ end
15
+ end
4
16
 
5
17
  def self.display_name
6
18
  "File"
data/app/models/group.rb CHANGED
@@ -19,11 +19,11 @@ class Group < ActiveRecord::Base
19
19
 
20
20
  validates_presence_of :name
21
21
 
22
- named_scope :named, lambda{|n| {:conditions => {:name => n}}}
23
- named_scope :with_code, lambda{|c| {:conditions => {:code => c}}}
22
+ scope :named, lambda{|n| {:conditions => {:name => n}}}
23
+ scope :with_code, lambda{|c| {:conditions => {:code => c}}}
24
24
 
25
- named_scope :public, :include => :group_type, :conditions => ["group_types.cms_access = ?", false]
26
- named_scope :cms_access, :include => :group_type, :conditions => ["group_types.cms_access = ?", true]
25
+ scope :public_groups, :include => :group_type, :conditions => ["group_types.cms_access = ?", false]
26
+ scope :cms_access, :include => :group_type, :conditions => ["group_types.cms_access = ?", true]
27
27
 
28
28
  def guest?
29
29
  group_type && group_type.guest?
@@ -3,10 +3,10 @@ class GroupType < ActiveRecord::Base
3
3
  has_many :group_type_permissions
4
4
  has_many :permissions, :through => :group_type_permissions
5
5
 
6
- named_scope :guest, :conditions => ["group_types.guest = ?", true]
7
- named_scope :non_guest, :conditions => ["group_types.guest = ?", false]
6
+ scope :guest, :conditions => ["group_types.guest = ?", true]
7
+ scope :non_guest, :conditions => ["group_types.guest = ?", false]
8
8
 
9
- named_scope :cms_access, :conditions => ["group_types.cms_access = ?", true]
10
- named_scope :non_cms_access, :conditions => ["group_types.cms_access = ?", false]
9
+ scope :cms_access, :conditions => ["group_types.cms_access = ?", true]
10
+ scope :non_cms_access, :conditions => ["group_types.cms_access = ?", false]
11
11
 
12
12
  end
@@ -5,7 +5,7 @@ class HtmlBlock < ActiveRecord::Base
5
5
  validates_presence_of :name
6
6
 
7
7
  # Override of search scope from searching behavior to deal with include_body
8
- named_scope :search, lambda{|search_params|
8
+ scope :search, lambda{|search_params|
9
9
  term = search_params.is_a?(Hash) ? search_params[:term] : search_params
10
10
  order = search_params.is_a?(Hash) && search_params[:order] ? search_params[:order] : "html_blocks.name"
11
11
  include_body = search_params.is_a?(Hash) ? search_params[:include_body] : false
@@ -3,6 +3,18 @@ class ImageBlock < AbstractFileBlock
3
3
  acts_as_content_block :versioned => { :version_foreign_key => :file_block_id },
4
4
  :belongs_to_attachment => true, :taggable => true
5
5
 
6
+ def set_attachment_file_path
7
+ if @attachment_file_path && @attachment_file_path != attachment.file_path
8
+ attachment.file_path = @attachment_file_path
9
+ end
10
+ end
11
+
12
+ def set_attachment_section
13
+ if @attachment_section_id && @attachment_section_id != attachment.section_id
14
+ attachment.section_id = @attachment_section_id
15
+ end
16
+ end
17
+
6
18
  def self.display_name
7
19
  "Image"
8
20
  end
data/app/models/link.rb CHANGED
@@ -1,14 +1,31 @@
1
1
  class Link < ActiveRecord::Base
2
2
  acts_as_content_block :connectable => false
3
3
 
4
- named_scope :named, lambda{|name| {:conditions => ['links.name = ?', name]}}
4
+ scope :named, lambda{|name| {:conditions => ['links.name = ?', name]}}
5
+
6
+ has_one :section_node, :as => :node, :dependent => :destroy
5
7
 
6
- has_one :section_node, :as => :node, :dependent => :destroy, :inverse_of => :node
7
-
8
8
  validates_presence_of :name
9
9
 
10
- include Addressable
11
- include Addressable::DeprecatedPageAccessors
10
+ def section_id
11
+ section ? section.id : nil
12
+ end
13
+
14
+ def section
15
+ section_node ? section_node.section : nil
16
+ end
17
+
18
+ def section_id=(sec_id)
19
+ self.section = Section.find(sec_id)
20
+ end
21
+
22
+ def section=(sec)
23
+ if section_node
24
+ section_node.move_to_end(sec)
25
+ else
26
+ build_section_node(:node => self, :section => sec)
27
+ end
28
+ end
12
29
 
13
30
  #needed by menu_helper
14
31
  def path
data/app/models/page.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Page < ActiveRecord::Base
2
-
2
+
3
3
  is_archivable
4
4
  flush_cache_on_change
5
5
  is_hideable
@@ -11,8 +11,8 @@ class Page < ActiveRecord::Base
11
11
  has_many :connectors, :order => "connectors.container, connectors.position"
12
12
  has_many :page_routes
13
13
 
14
- named_scope :named, lambda{|name| {:conditions => ['pages.name = ?', name]}}
15
- named_scope :with_path, lambda{|path| {:conditions => ['pages.path = ?', path]}}
14
+ scope :named, lambda{|name| {:conditions => ['pages.name = ?', name]}}
15
+ scope :with_path, lambda{|path| {:conditions => ['pages.path = ?', path]}}
16
16
 
17
17
  # This scope will accept a connectable object or a Hash. The Hash is expect to have
18
18
  # a value for the key :connectable, which is the connectable object, and possibly
@@ -20,7 +20,7 @@ class Page < ActiveRecord::Base
20
20
  # it will use the value in :version if present, otherwise it will use the version
21
21
  # of the object. In either case of a connectable object or a Hash, if the object
22
22
  # is not versioned, no version will be used
23
- named_scope :connected_to, lambda { |b|
23
+ scope :connected_to, lambda { |b|
24
24
  if b.is_a?(Hash)
25
25
  obj = b[:connectable]
26
26
  if obj.class.versioned?
@@ -32,7 +32,7 @@ class Page < ActiveRecord::Base
32
32
  obj = b
33
33
  ver = obj.class.versioned? ? obj.version : nil
34
34
  end
35
-
35
+
36
36
  if ver
37
37
  { :include => :connectors,
38
38
  :conditions => ['connectors.connectable_id = ? and connectors.connectable_type = ? and connectors.connectable_version = ?', obj.id, obj.class.base_class.name, ver] }
@@ -41,20 +41,33 @@ class Page < ActiveRecord::Base
41
41
  :conditions => ['connectors.connectable_id = ? and connectors.connectable_type = ?', obj.id, obj.class.base_class.name] }
42
42
  end
43
43
  }
44
-
45
- has_one :section_node, :as => :node, :dependent => :destroy, :inverse_of => :node
46
-
47
-
48
- include Addressable
49
- include Addressable::DeprecatedPageAccessors
50
44
 
45
+ # currently_connected_to tightens the scope of connected_to by restricting to the
46
+ # results to matches on current versions of pages only. This renders obj versions
47
+ # useless, as the older objects will very likely have older versions of pages and
48
+ # thus return no results.
49
+ scope :currently_connected_to, lambda { |obj|
50
+ ver = obj.class.versioned? ? obj.version : nil
51
+ if ver
52
+ { :include => :connectors,
53
+ :conditions => ['connectors.connectable_id = ? and connectors.connectable_type = ? and connectors.connectable_version = ? and connectors.page_version = pages.version', obj.id, obj.class.base_class.name, ver] }
54
+ else
55
+ { :include => :connectors,
56
+ :conditions => ['connectors.connectable_id = ? and connectors.connectable_type = ? and connectors.page_version = pages.version', obj.id, obj.class.base_class.name] }
57
+ end
58
+ }
59
+
60
+ has_one :section_node, :as => :node, :dependent => :destroy
61
+
51
62
  has_many :tasks
52
63
 
53
- before_validation :append_leading_slash_to_path
64
+ before_validation :append_leading_slash_to_path, :remove_trailing_slash_from_path
54
65
  before_destroy :delete_connectors
55
66
 
56
67
  validates_presence_of :name, :path
57
- validates_uniqueness_of :path
68
+
69
+ # Paths must be unique among undeleted records
70
+ validates_uniqueness_of :path, :scope=>:deleted
58
71
  validate :path_not_reserved
59
72
 
60
73
  def after_build_new_version(new_version)
@@ -75,15 +88,22 @@ class Page < ActiveRecord::Base
75
88
  end
76
89
  end
77
90
  end
78
-
91
+
92
+ # Each time a page is updated, we need to copy all connectors associated with it forward, and save
93
+ # them.
79
94
  def copy_connectors(options={})
80
- connectors.for_page_version(options[:from_version_number]).all(:order => "connectors.container, connectors.position").each do |c|
95
+ logger.debug {"Copying connectors from Page #{id} v#{options[:from_version_number]} to v#{options[:to_version_number]}." }
96
+
97
+ c_found = connectors.for_page_version(options[:from_version_number]).all(:order => "connectors.container, connectors.position")
98
+ logger.debug {"Found connectors #{c_found}" }
99
+ c_found.each do |c|
81
100
  # The connector won't have a connectable if it has been deleted
82
101
  # Also need to see if the draft has been deleted,
83
102
  # in which case we are in the process of deleting it
84
103
  if c.should_be_copied?
104
+ logger.debug { "Connector id=>#{c.id} should be copied." }
85
105
  connectable = c.connectable_type.constantize.versioned? ? c.connectable.as_of_version(c.connectable_version) : c.connectable
86
-
106
+
87
107
  version = connectable.class.versioned? ? connectable.version : nil
88
108
 
89
109
  #If we are copying connectors from a previous version, that means we are reverting this page,
@@ -96,20 +116,26 @@ class Page < ActiveRecord::Base
96
116
  connectable.revert_to(c.connectable_version)
97
117
  version = connectable.class.versioned? ? connectable.draft.version : nil
98
118
  end
99
-
100
- new_connector = connectors.build(
119
+
120
+ logger.debug "When copying block #{connectable.inspect} version is '#{version}'"
121
+
122
+ new_connector = connectors.create(
101
123
  :page_version => options[:to_version_number],
102
124
  :connectable => connectable,
103
- :connectable_version => version,
125
+ :connectable_version => version,
104
126
  :container => c.container,
105
127
  :position => c.position
106
128
  )
129
+ logger.debug {"Built new connector #{new_connector}."}
107
130
  end
108
131
  end
109
132
  true
110
133
  end
111
-
112
- def create_connector(connectable, container)
134
+
135
+ # Adds a Content block to this page.
136
+ #
137
+ #
138
+ def create_connector(connectable, container=:main)
113
139
  transaction do
114
140
  raise "Connectable is nil" unless connectable
115
141
  raise "Container is required" if container.blank?
@@ -126,6 +152,7 @@ class Page < ActiveRecord::Base
126
152
  :container => container)
127
153
  end
128
154
  end
155
+ alias_method :add_content, :create_connector
129
156
 
130
157
  def move_connector(connector, direction)
131
158
  transaction do
@@ -156,7 +183,8 @@ class Page < ActiveRecord::Base
156
183
  end
157
184
  end
158
185
  end
159
-
186
+
187
+ # Pages that get deleted should be 'disconnected' from any blocks they were associated with.
160
188
  def delete_connectors
161
189
  connectors.for_page_version(version).all.each{|c| c.destroy }
162
190
  end
@@ -172,6 +200,26 @@ class Page < ActiveRecord::Base
172
200
  "?"
173
201
  end
174
202
 
203
+ def section_id
204
+ section ? section.id : nil
205
+ end
206
+
207
+ def section
208
+ section_node ? section_node.section : nil
209
+ end
210
+
211
+ def section_id=(sec_id)
212
+ self.section = Section.find(sec_id)
213
+ end
214
+
215
+ def section=(sec)
216
+ if section_node
217
+ section_node.move_to_end(sec)
218
+ else
219
+ build_section_node(:node => self, :section => sec)
220
+ end
221
+ end
222
+
175
223
  def public?
176
224
  section ? section.public? : false
177
225
  end
@@ -187,6 +235,12 @@ class Page < ActiveRecord::Base
187
235
  self.path = "/#{path}"
188
236
  end
189
237
  end
238
+
239
+ # remove trailing slash, unless the path is only a slash. uses capture and
240
+ # substition because ruby regex engine does not support lookbehind
241
+ def remove_trailing_slash_from_path
242
+ self.path.sub!(/(.+)\/+$/, '\1')
243
+ end
190
244
 
191
245
  def path_not_reserved
192
246
  if Cms.reserved_paths.include?(path)
@@ -207,25 +261,16 @@ class Page < ActiveRecord::Base
207
261
  template_file_name && PageTemplate.display_name(template_file_name)
208
262
  end
209
263
 
210
- # Determines if a page is a descendant of a given Section.
211
- #
212
- # @param [String | Section] section_or_section_name
264
+ def ancestors
265
+ section_node.ancestors
266
+ end
267
+
213
268
  def in_section?(section_or_section_name)
214
- found = false
215
- ancestors.each do |a|
216
- if section_or_section_name.is_a?(String)
217
- if a.name == section_or_section_name
218
- found = true
219
- break
220
- end
221
- else
222
- if a == section_or_section_name
223
- found = true
224
- break
225
- end
226
- end
227
- end
228
- found
269
+ sec = section_or_section_name.is_a?(String) ?
270
+ Section.first(:conditions => {:name => section_or_section_name}) :
271
+ section_or_section_name
272
+ fn = lambda{|s| s ? (s == sec || fn.call(s.parent)) : false}
273
+ fn.call(section)
229
274
  end
230
275
 
231
276
  #Returns true if the block attached to each connector in the given container are published
@@ -249,16 +294,12 @@ class Page < ActiveRecord::Base
249
294
  (a[1..a.size].map{|a| a.name} + [name]).join(" / ")
250
295
  end
251
296
 
252
- # This will return the "top level section" for this page, which is the section directly
297
+ # This will return the "top level section" for a page, which is the section directly
253
298
  # below the root (a.k.a My Site) that this page is in. If this page is in root,
254
299
  # then this will return root.
255
- #
256
- # @return [Section] The first non-root ancestor if available, root otherwise.
257
300
  def top_level_section
258
- # Cache the results of this since many projects will call it repeatly on current_page in menus.
259
- return @top_level_section if @top_level_section
260
301
  a = ancestors
261
- @top_level_section = (a.size > 0 && a[1]) ? a[1] : Section.root.first
302
+ (a.size > 0 && ancestors[1]) ? ancestors[1] : Section.root.first
262
303
  end
263
304
 
264
305
  def current_task
@@ -1,3 +1,19 @@
1
+ # Allows Rails routes to be matched to CMS pages, allowing arbitrary code that can be executed before the page is rendered.
2
+ #
3
+ # The primary goal of this is to provide human readable (and cachable) URLs for content_blocks. For example,
4
+ # a single 'Article' page can have a portlet that knows how to look up and display an Article by id. By default, this
5
+ # would look like this:
6
+ # GET /article?id=120
7
+ #
8
+ # Unless the Article page is marked a 'cache enabled = false' this will cause problems. Plus that URL is ugly.
9
+ # With PageRoutes, you can have multiple URLs all map to the article page, like so:
10
+ # GET /article/2010/12/30/article-1
11
+ # GET /article/2011/1/18/article-2
12
+ # In both these cases, these URLs can be matched to a Rails Route which is linked to a page:
13
+ # GET /article/:year/:month/:day/:slug -> Articles Page
14
+ #
15
+ # Saving a new PageRoute will reload the Rails routes.
16
+ #
1
17
  class PageRoute < ActiveRecord::Base
2
18
  belongs_to :page
3
19
  has_many :conditions, :class_name => "PageRouteCondition"
@@ -8,22 +24,32 @@ class PageRoute < ActiveRecord::Base
8
24
 
9
25
  after_save :reload_routes
10
26
 
27
+ # Force Rails to reload the routes. Allows modules to call this without concern that the Rails classes are going to change again.
28
+ def self.reload_routes
29
+ Rails.application.reload_routes!
30
+ end
31
+
11
32
  def reload_routes
12
- ActionController::Routing::Routes.load!
33
+ PageRoute.reload_routes
13
34
  end
14
35
 
15
36
  def add_condition(name, value)
16
37
  conditions.build(:name => name.to_s, :value => value.to_s)
17
38
  end
18
-
39
+
40
+ # @deprecated Use add_constraint instead (matches Rails 3 syntax)
19
41
  def add_requirement(name, value)
20
42
  requirements.build(:name => name.to_s, :value => value.to_s)
21
43
  end
22
-
44
+
45
+ alias_method :add_constraint, :add_requirement
46
+
47
+ # @deprecated Rails 3 no longer uses a 'conditions' element in its syntax for routing.
23
48
  def conditions_map
24
49
  conditions.inject({}){|acc, e| acc[e.name.to_sym] = e.value.to_sym; acc}
25
50
  end
26
-
51
+
52
+
27
53
  def requirements_map
28
54
  requirements.inject({}){|acc, e| acc[e.name.to_sym] = Regexp.new(e.value); acc}
29
55
  end
@@ -31,8 +57,33 @@ class PageRoute < ActiveRecord::Base
31
57
  def route_name
32
58
  name ? name.to_slug.gsub('-','_') : nil
33
59
  end
34
-
60
+
61
+ alias_method :as, :route_name
62
+
63
+ def to
64
+ "cms/content#show_page_route"
65
+ end
66
+
67
+ # Returns which methods this route can be via. Defaults to [:get, :post] if not specified.
68
+ def via
69
+ found = conditions.collect(){|condition| if condition.name.to_sym == :method; condition.value.to_sym end}
70
+ methods = found.compact
71
+ if methods.empty?
72
+ methods << :get << :post
73
+ end
74
+ methods
75
+ end
76
+
77
+ # Builds a hash which can be passed to the :constraints value in a route, like:
78
+ #
79
+ # match 'some/:pattern', :constraints => page_route.constraints()
80
+ def constraints
81
+ requirements_map
82
+ end
83
+
35
84
  # This is used in defining the route in the ActionController::Routing
85
+ # Used in Rails 2 version of routing (No longer valid for rails 3)
86
+ # @deprecated
36
87
  def options_map
37
88
  m = {:controller => "cms/content", :action => "show_page_route"}
38
89
 
@@ -43,7 +94,11 @@ class PageRoute < ActiveRecord::Base
43
94
 
44
95
  m
45
96
  end
46
-
97
+
98
+ def page_route_id
99
+ self.id.to_s
100
+ end
101
+
47
102
  # This is called by an instance of the content controller
48
103
  # in the process of rendering a page. This will eval the code
49
104
  # stored in this page route in the context of the controller.