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
@@ -1,19 +1,35 @@
1
1
  module Cms
2
2
  module PageHelper
3
+
4
+ # Outputs the title for this page. Used by both internal CMS pages, as well as page templates. If not explicitily set,
5
+ # returns the title of the page.
6
+ #
7
+ # @param [String] The name this page should be set to.
8
+ # @return [String] The title of the page.
3
9
  def page_title(*args)
4
10
  if args.first
5
- @controller.instance_variable_get("@template").instance_variable_set("@page_title", args.first)
11
+ # Removed unneeded indirection/fixed issue where @template is frozen in r1.9.1
12
+ @page_title = args.first
6
13
  else
7
- @controller.instance_variable_get("@template").instance_variable_get("@page_title")
14
+ @page_title ? @page_title : current_page.page_title
8
15
  end
9
16
  end
10
17
 
11
18
  def current_page
12
19
  @page
13
20
  end
14
-
21
+
22
+
23
+ # Outputs the content of a particular container. If the user is in 'edit' mode the container and block controls will
24
+ # be rendered.
25
+ #
26
+ # Note: As of Jan 19, 2010, all render.html.erb templates must handle marking their content as 'html_safe'. This is
27
+ # bit of a pain, but I can't figure out how (or if) i can globally do that or not.
28
+ #
29
+ # @returns [String] The HTML content for the container.
15
30
  def container(name)
16
- content = instance_variable_get("@content_for_#{name}")
31
+ page_content = instance_variable_get("@_content_for")
32
+ content = page_content[name]
17
33
  if logged_in? && @page && @mode == "edit" && current_user.able_to_edit?(@page)
18
34
  render :partial => 'cms/pages/edit_container', :locals => {:name => name, :content => content}
19
35
  else
@@ -21,6 +37,18 @@ module Cms
21
37
  end
22
38
  end
23
39
 
40
+ # Determine if a given container has any blocks within it. Useful for determine if markup should be conditionally included
41
+ # when a block is present, but not shown if no block was added. For example:
42
+ #
43
+ # <% unless container_has_block? :sidebar %>
44
+ # <div id="sidebar">
45
+ # <%= container :sidebar %>
46
+ # </div>
47
+ # <% end %>
48
+ #
49
+ # @param [Symbol] name The name of the container to check
50
+ # @param [Proc] block
51
+ # @return [Boolean] True if the container has one or more blocks, or if we are in edit mode. False otherwise.
24
52
  def container_has_block?(name, &block)
25
53
  has_block = (@mode == "edit") || current_page.connectable_count_for_container(name) > 0
26
54
  logger.info "mode = #{@mode}, has_block = #{has_block}"
@@ -30,12 +58,17 @@ module Cms
30
58
  has_block
31
59
  end
32
60
  end
33
-
61
+
62
+ # Add the code to render the CMS toolbar.
34
63
  def cms_toolbar
35
- instance_variable_get("@content_for_layout")
64
+ toolbar = <<HTML
65
+ <iframe src="#{cms_toolbar_path(:page_id => @page.id, :page_version => @page.version, :mode => @mode, :page_toolbar => @show_page_toolbar ? 1 : 0) }" width="100%" height="#{@show_page_toolbar ? 159 : 100 }px" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="cms_toolbar"></iframe>
66
+ HTML
67
+ toolbar.html_safe if @show_toolbar
36
68
  end
37
69
 
38
70
 
71
+
39
72
  # Renders breadcrumbs based on the current_page. This will generate an unordered list representing the
40
73
  # current page and all it's ancestors including the root name of of the site. The UL can be styled via CSS for
41
74
  # layout purposes. Each breadcrumb except the last will be linked to the page in question.
@@ -61,15 +94,14 @@ module Cms
61
94
  items = []
62
95
  ancestors[start..ancestors.size].each_with_index do |sec,i|
63
96
  items << content_tag(:li,
64
- link_to(h(sec.name), sec.actual_path),
65
- (i == 0 ? {:class => "first"} : {}))
97
+ link_to(h(sec.name), sec.actual_path), (i == 0 ? {:class => "first"} : {}))
66
98
  end
67
99
  if !show_parent && current_page.section.path == current_page.path
68
100
  items[items.size-1] = content_tag(:li, h(current_page.section.name))
69
101
  else
70
102
  items << content_tag(:li, h(current_page.page_title))
71
103
  end
72
- content_tag(:ul, "\n #{items.join("\n ")}\n", :class => "breadcrumbs")
104
+ content_tag(:ul, "\n #{items.join("\n ")}\n".html_safe, :class => "breadcrumbs")
73
105
  end
74
106
 
75
107
  def render_portlet(name)
@@ -85,7 +117,8 @@ module Cms
85
117
 
86
118
  # Determines if the current_user is able to do specific permissions.
87
119
  def able_to?(*perms, &block)
88
- yield if current_user.able_to?(*perms)
120
+ block.call if current_user.able_to?(*perms)
121
+ return ''
89
122
  end
90
123
 
91
124
  end
@@ -33,7 +33,7 @@ module Cms
33
33
  end
34
34
 
35
35
  private
36
- # Returns the name of the collection that this resouce belongs to
36
+ # Returns the name of the collection that this resource belongs to
37
37
  # the resource can be a ContentType, ActiveRecord::Base instance
38
38
  # or just a string or symbol
39
39
  def resource_collection_name(resource)
@@ -6,8 +6,7 @@ module Cms
6
6
  module RenderingHelper
7
7
  def render_connector_and_connectable(connector, connectable)
8
8
  if logged_in? && @mode == "edit" && current_user.able_to_edit?(connector.page)
9
- render :partial => 'cms/pages/edit_connector',
10
- :locals => { :connector => connector, :connectable => connectable}
9
+ render(:partial => 'cms/pages/edit_connector', :locals => { :connector => connector, :connectable => connectable})
11
10
  else
12
11
  render_connectable(connectable)
13
12
  end
@@ -16,8 +15,8 @@ module Cms
16
15
  def render_connectable(content_block)
17
16
  if content_block
18
17
  if content_block.class.renderable?
19
- logger.info "..... Rendering connectable #{content_block.class} ##{content_block.id} #{"v#{content_block.version}" if content_block.respond_to?(:version)}"
20
- content_block.perform_render(@controller)
18
+ logger.debug "Rendering connectable #{content_block.class} ##{content_block.id} #{"v#{content_block.version}" if content_block.respond_to?(:version)}"
19
+ content_block.perform_render(controller)
21
20
  else
22
21
  logger.warn "Connectable #{content_block.class} ##{content_block.id} is not renderable"
23
22
  end
@@ -1,51 +1,13 @@
1
1
  module Cms
2
2
  module SectionNodesHelper
3
-
4
- def access_status(section_node, public_sections)
5
- access_icon = :unlocked
6
- unless public_sections.include?(section_node)
7
- access_icon = :locked
8
- end
9
- access_icon
10
- end
11
-
12
- def section_icons(section_node, children=[])
13
- folder_style = ""
14
- expander_image = "expand.png"
15
- if top_level_section?(section_node)
16
- folder_style = " large"
17
- expander_image = "gray_expand.png"
18
- end
19
- if children.empty?
20
- image_tag("cms/sitemap/no_contents.png", :class => "no_folder_toggle#{folder_style}")
3
+ def section_icons(node)
4
+
5
+ if (node.root? || node.parent.root? || node.parent.parent.root?)
6
+ node.child_nodes.empty? ? image_tag("cms/sitemap/no_contents.png", :class => "no_folder_toggle large") : image_tag("cms/sitemap/gray_expand.png", :class => "folder_toggle large")
21
7
  else
22
- image_tag("cms/sitemap/#{expander_image}", :class => "folder_toggle#{folder_style}")
8
+ node.child_nodes.empty? ? image_tag("cms/sitemap/no_contents.png", :class => "no_folder_toggle") : image_tag("cms/sitemap/expand.png", :class => "folder_toggle")
23
9
  end
24
10
  end
25
11
 
26
- # Renders the ul for a given node (Page/Section/Link/etc)
27
- # Default look:
28
- # - First level pages/sections use 'big' icons
29
- # - All non-first level items should be hidden.
30
- def sitemap_ul_tag(node)
31
- opts = {
32
- :id => "section_node_#{node.section_node.id}",
33
- :class => "section_node"
34
- }
35
- opts[:class] += " rootlet" if in_first_level?(node)
36
- opts[:style] = "display: none" unless in_first_level?(node)
37
- tag("ul", opts, true)
38
- end
39
-
40
- def in_first_level?(node)
41
- node.section_node.depth == 1
42
- end
43
-
44
- private
45
-
46
- def top_level_section?(node)
47
- node.depth <= 2
48
- end
49
-
50
12
  end
51
13
  end
@@ -4,10 +4,7 @@ class AbstractFileBlock < ActiveRecord::Base
4
4
 
5
5
  validates_presence_of :name
6
6
 
7
- named_scope :by_section, lambda { |section| {
8
- :include => {:attachment => :section_node },
9
- :conditions => ["section_nodes.ancestry = ?", section.node.ancestry_path] }
10
- }
7
+ scope :by_section, lambda { |section| { :include => {:attachment => :section_node }, :conditions => ["section_nodes.section_id = ?", section.id] } }
11
8
 
12
9
  def path
13
10
  attachment_file_path
@@ -17,16 +14,4 @@ class AbstractFileBlock < ActiveRecord::Base
17
14
  true
18
15
  end
19
16
 
20
- def set_attachment_path
21
- if @attachment_file_path && @attachment_file_path != attachment.file_path
22
- attachment.file_path = @attachment_file_path
23
- end
24
- end
25
-
26
- def set_attachment_section
27
- if @attachment_section_id && @attachment_section_id != attachment.section
28
- attachment.section_id = @attachment_section_id
29
- end
30
- end
31
-
32
17
  end
@@ -3,6 +3,9 @@ require 'fileutils'
3
3
 
4
4
  class Attachment < ActiveRecord::Base
5
5
 
6
+ #----- Constants ----------------------------------------------------------------
7
+ UNKNOWN_MIME_TYPE = 'application/octet-stream'
8
+
6
9
  #----- Macros ----------------------------------------------------------------
7
10
 
8
11
  is_archivable
@@ -10,37 +13,64 @@ class Attachment < ActiveRecord::Base
10
13
  uses_soft_delete
11
14
  is_userstamped
12
15
  is_versioned
13
- attr_accessor :temp_file
14
16
 
15
- #----- Callbacks -------------------------------------------------------------
17
+ # Rails 3 uses a new ActionDispatch::Http::UploadedFile. This holds that during the file processing.
18
+ attr_accessor :uploaded_file
19
+
20
+ # This exists for backwards compatibility
21
+ alias_method :temp_file, :uploaded_file
22
+ alias_method :temp_file=, :uploaded_file=
16
23
 
24
+ #----- Callbacks -------------------------------------------------------------
17
25
  before_validation :make_dirty_if_temp_file
18
26
  before_validation :prepend_file_path_with_slash
19
27
  before_validation :extract_file_extension_from_file_name
20
28
  before_validation :extract_file_type_from_temp_file
21
29
  before_validation :extract_file_size_from_temp_file
22
30
  before_validation :set_file_location
31
+ before_save :process_section
23
32
 
24
33
  after_save :write_temp_file_to_storage_location
25
34
  after_save :clear_ivars
26
-
35
+
36
+
27
37
  #----- Associations ----------------------------------------------------------
28
38
 
29
- include Addressable
30
- include Addressable::DeprecatedPageAccessors
31
39
  has_one :section_node, :as => :node
32
- alias :node :section_node
33
40
 
34
41
  #----- Validations -----------------------------------------------------------
35
42
 
36
43
  validates_presence_of :temp_file, :message => "You must upload a file", :on => :create
37
44
  validates_presence_of :file_path
38
45
  validates_uniqueness_of :file_path
46
+ validates_presence_of :section_id
47
+
48
+ #----- Virtual Attributes ----------------------------------------------------
49
+
50
+ def section_id
51
+ @section_id ||= section_node ? section_node.section_id : nil
52
+ end
53
+
54
+ def section_id=(section_id)
55
+ if @section_id != section_id
56
+ dirty!
57
+ @section_id = section_id
58
+ end
59
+ end
60
+
61
+ def section
62
+ @section ||= section_node ? section_node.section : nil
63
+ end
39
64
 
40
65
  def section=(section)
41
- dirty! if self.section != section
42
- super(section)
66
+ logger.debug {"Attachment#section=(#{section})"}
67
+ if @section != section
68
+ dirty!
69
+ @section_id = section ? section.id : nil
70
+ @section = section
71
+ end
43
72
  end
73
+
44
74
  #----- Callbacks Methods -----------------------------------------------------
45
75
 
46
76
  def make_dirty_if_temp_file
@@ -62,6 +92,11 @@ class Attachment < ActiveRecord::Base
62
92
  def extract_file_type_from_temp_file
63
93
  unless temp_file.blank?
64
94
  self.file_type = temp_file.content_type
95
+
96
+ # Some
97
+ if self.file_type == nil
98
+ self.file_type = UNKNOWN_MIME_TYPE
99
+ end
65
100
  end
66
101
  end
67
102
 
@@ -82,25 +117,25 @@ class Attachment < ActiveRecord::Base
82
117
  end
83
118
  end
84
119
 
85
- #def process_section
86
- # if section_node
87
- # section_node.move_to_end(parent)
88
- # #end
89
- # #logger.info "processing section, section_id => #{section_id}, section_node => #{section_node.inspect}"
90
- # #if section_node && !section_node.new_record? && section_node.section_id != section_id
91
- # # section_node.move_to_end(Section.find(section_id))
92
- # else
93
- # build_section_node(:node => self, :parent => parent)
94
- # end
95
- #end
120
+ def process_section
121
+ #logger.info "processing section, section_id => #{section_id}, section_node => #{section_node.inspect}"
122
+ if section_node && !section_node.new_record? && section_node.section_id != section_id
123
+ section_node.move_to_end(Section.find(section_id))
124
+ else
125
+ build_section_node(:node => self, :section_id => section_id)
126
+ end
127
+ end
96
128
 
97
129
  def write_temp_file_to_storage_location
98
130
  unless temp_file.blank?
131
+ actual_temp_file = temp_file.tempfile
132
+
133
+ Rails.logger.warn "I want to write out #{temp_file.tempfile}"
99
134
  FileUtils.mkdir_p File.dirname(full_file_location)
100
- if temp_file.local_path
101
- FileUtils.copy temp_file.local_path, full_file_location
135
+ if actual_temp_file.path
136
+ FileUtils.copy actual_temp_file.path, full_file_location
102
137
  else
103
- open(full_file_location, 'w') {|f| f << temp_file.read }
138
+ open(full_file_location, 'w') {|f| f << actual_temp_file.read }
104
139
  end
105
140
 
106
141
  if Cms.attachment_file_permission
@@ -6,12 +6,12 @@ class Category < ActiveRecord::Base
6
6
  validates_presence_of :category_type_id, :name
7
7
  validates_uniqueness_of :name, :scope => :category_type_id
8
8
 
9
- named_scope :named, lambda{|name| {:conditions => ['categories.name = ?', name]}}
9
+ scope :named, lambda{|name| {:conditions => ['categories.name = ?', name]}}
10
10
 
11
- named_scope :of_type, lambda{|type_name| {:include => :category_type, :conditions => ['category_types.name = ?', type_name], :order => 'categories.name'}}
12
- named_scope :top_level, :conditions => ['categories.parent_id is null']
11
+ scope :of_type, lambda{|type_name| {:include => :category_type, :conditions => ['category_types.name = ?', type_name], :order => 'categories.name'}}
12
+ scope :top_level, :conditions => ['categories.parent_id is null']
13
13
 
14
- named_scope :list, :include => :category_type
14
+ scope :list, :include => :category_type
15
15
 
16
16
  def ancestors
17
17
  fn = lambda do |cat, parents|
@@ -3,7 +3,7 @@ class CategoryType < ActiveRecord::Base
3
3
  validates_presence_of :name
4
4
  validates_uniqueness_of :name
5
5
  is_searchable
6
- named_scope :named, lambda {|name| {:conditions => ['category_types.name = ?', name] } }
6
+ scope :named, lambda {|name| {:conditions => ['category_types.name = ?', name] } }
7
7
 
8
8
  # Return a map when the key is category type id as a string
9
9
  # and the value is an array of arrays, each entry having
@@ -28,7 +28,7 @@ class CategoryType < ActiveRecord::Base
28
28
  end
29
29
 
30
30
  def cannot_be_deleted_message
31
- categories.count.zero? ? nil : "This cannot be deleted because it is in use in #{categories.count} #{"category".pluralize(categories.count)}"
31
+ categories.count.zero? ? nil : "This cannot be deleted because it is in use in #{categories.count} #{"category".pluralize_unless_one(categories.count)}"
32
32
  end
33
33
 
34
34
  end
@@ -0,0 +1,46 @@
1
+ module Cms
2
+
3
+ # Trying to get rendering working:
4
+ #
5
+ # Things that need to happen:
6
+ # 1. Need to add all helpers from that the Cms::ContentController has access to:
7
+ # 2. Add helpers for the portlet or content block
8
+ #
9
+ # Understanding how Cms::ContentController renders a template:
10
+ # 1. It starts with a layout, which is a CMS template.
11
+ # 2. show.html.erb is called, which iterates over the connectables, adding content_for for each of the yields.
12
+ #
13
+ # TODOS
14
+ # There are currently way to many values getting copied into this view, including:
15
+ # content_block (desired) - From ContentController
16
+ # content - An attribute of the block itself.
17
+ class ViewContext < ActionView::Base
18
+
19
+ # @param [ActionController::Base] controller The CMS controller rendering the overall page
20
+ # @param [Hash] attributes_to_assign All the values that should be passed to this View as @attributes available.
21
+ def initialize(controller, attributes_to_assign)
22
+ @controller = controller
23
+ super(@controller.view_paths, attributes_to_assign, @controller)
24
+
25
+
26
+ helpers = controller.class._helpers
27
+ self.class.send(:include, helpers)
28
+
29
+ # Make all Route helpers available in the view, i.e. cms_xyz_path and cms_xyz_url
30
+ self.class.send(:include, Rails.application.routes.url_helpers)
31
+
32
+ # See what values are getting copied into template
33
+ # Rails.logger.warn "Assigned these variables: #{attributes_to_assign}"
34
+
35
+ end
36
+
37
+ # We want content_for to be called on the controller's view, not this inner view
38
+ def content_for(name, content=nil, &block)
39
+ Rails.logger.warn "content_for(#{name}, #{content}, block) called."
40
+ @controller.instance_variable_get("@template").content_for(name, content, &block)
41
+ end
42
+
43
+ end
44
+
45
+
46
+ end
@@ -6,14 +6,15 @@ class Connector < ActiveRecord::Base
6
6
  alias :move_up :move_higher
7
7
  alias :move_down :move_lower
8
8
 
9
- named_scope :for_page_version, lambda{|pv| {:conditions => {:page_version => pv}}}
10
- named_scope :for_connectable_version, lambda{|cv| {:conditions => {:connectable_version => cv}}}
11
- named_scope :for_connectable, lambda{|c|
9
+ scope :for_page_version, lambda{|pv| {:conditions => {:page_version => pv}}}
10
+ scope :for_connectable_version, lambda{|cv| {:conditions => {:connectable_version => cv}}}
11
+ scope :for_connectable, lambda{|c|
12
+ # puts "Finding for_connectable for #{c.id} and #{c.class.base_class.name}"
12
13
  {:conditions => { :connectable_id => c.id, :connectable_type => c.class.base_class.name }}
13
14
  }
14
- named_scope :in_container, lambda{|container| {:conditions => {:container => container}}}
15
- named_scope :at_position, lambda{|position| {:conditions => {:position => position}}}
16
- named_scope :like, lambda{|connector|
15
+ scope :in_container, lambda{|container| {:conditions => {:container => container}}}
16
+ scope :at_position, lambda{|position| {:conditions => {:position => position}}}
17
+ scope :like, lambda{|connector|
17
18
  {:conditions => {
18
19
  :connectable_id => connector.connectable_id,
19
20
  :connectable_type => connector.connectable_type,