trusty-cms 1.0.0

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 (388) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +23 -0
  3. data/CHANGELOG.md +754 -0
  4. data/CONTRIBUTORS.md +263 -0
  5. data/Gemfile +40 -0
  6. data/Gemfile.lock +177 -0
  7. data/INSTALL.md +10 -0
  8. data/LICENSE.md +21 -0
  9. data/README.md +85 -0
  10. data/Rakefile +7 -0
  11. data/app/controllers/admin/configuration_controller.rb +50 -0
  12. data/app/controllers/admin/extensions_controller.rb +11 -0
  13. data/app/controllers/admin/layouts_controller.rb +8 -0
  14. data/app/controllers/admin/page_fields_controller.rb +9 -0
  15. data/app/controllers/admin/page_parts_controller.rb +9 -0
  16. data/app/controllers/admin/pages_controller.rb +89 -0
  17. data/app/controllers/admin/preferences_controller.rb +46 -0
  18. data/app/controllers/admin/references_controller.rb +7 -0
  19. data/app/controllers/admin/resource_controller.rb +245 -0
  20. data/app/controllers/admin/users_controller.rb +40 -0
  21. data/app/controllers/admin/welcome_controller.rb +48 -0
  22. data/app/controllers/application_controller.rb +114 -0
  23. data/app/controllers/site_controller.rb +97 -0
  24. data/app/helpers/admin/configuration_helper.rb +80 -0
  25. data/app/helpers/admin/export_helper.rb +2 -0
  26. data/app/helpers/admin/extensions_helper.rb +2 -0
  27. data/app/helpers/admin/layouts_helper.rb +21 -0
  28. data/app/helpers/admin/node_helper.rb +96 -0
  29. data/app/helpers/admin/pages_helper.rb +117 -0
  30. data/app/helpers/admin/preferences_helper.rb +3 -0
  31. data/app/helpers/admin/references_helper.rb +46 -0
  32. data/app/helpers/admin/regions_helper.rb +28 -0
  33. data/app/helpers/admin/resource_helper.rb +2 -0
  34. data/app/helpers/admin/users_helper.rb +8 -0
  35. data/app/helpers/admin/welcome_helper.rb +2 -0
  36. data/app/helpers/application_helper.rb +241 -0
  37. data/app/helpers/site_helper.rb +2 -0
  38. data/app/models/deprecated_tags.rb +42 -0
  39. data/app/models/file_not_found_page.rb +32 -0
  40. data/app/models/layout.rb +15 -0
  41. data/app/models/menu_renderer.rb +140 -0
  42. data/app/models/page.rb +377 -0
  43. data/app/models/page_context.rb +53 -0
  44. data/app/models/page_field.rb +3 -0
  45. data/app/models/page_part.rb +20 -0
  46. data/app/models/standard_tags.rb +1318 -0
  47. data/app/models/status.rb +41 -0
  48. data/app/models/text_filter.rb +36 -0
  49. data/app/models/trusty_cms/config.rb +313 -0
  50. data/app/models/trusty_cms/page_response_cache_director.rb +43 -0
  51. data/app/models/user.rb +96 -0
  52. data/app/models/user_action_observer.rb +25 -0
  53. data/app/views/admin/configuration/edit.html.haml +38 -0
  54. data/app/views/admin/configuration/show.html.haml +58 -0
  55. data/app/views/admin/extensions/index.html.haml +41 -0
  56. data/app/views/admin/layouts/_form.html.haml +39 -0
  57. data/app/views/admin/layouts/edit.html.haml +9 -0
  58. data/app/views/admin/layouts/index.html.haml +35 -0
  59. data/app/views/admin/layouts/new.html.haml +7 -0
  60. data/app/views/admin/layouts/remove.html.haml +16 -0
  61. data/app/views/admin/page_fields/_page_field.html.haml +12 -0
  62. data/app/views/admin/page_parts/_page_part.html.haml +18 -0
  63. data/app/views/admin/pages/_fields.html.haml +71 -0
  64. data/app/views/admin/pages/_meta_row.html.haml +8 -0
  65. data/app/views/admin/pages/_node.html.haml +26 -0
  66. data/app/views/admin/pages/_popups.html.haml +27 -0
  67. data/app/views/admin/pages/children.html.haml +2 -0
  68. data/app/views/admin/pages/edit.html.haml +12 -0
  69. data/app/views/admin/pages/index.html.haml +26 -0
  70. data/app/views/admin/pages/new.html.haml +10 -0
  71. data/app/views/admin/pages/remove.html.haml +18 -0
  72. data/app/views/admin/preferences/edit.html.haml +44 -0
  73. data/app/views/admin/references/_tag_reference.haml +3 -0
  74. data/app/views/admin/references/filters.haml +6 -0
  75. data/app/views/admin/references/tags.haml +30 -0
  76. data/app/views/admin/users/_avatar.html.haml +5 -0
  77. data/app/views/admin/users/_form.html.haml +53 -0
  78. data/app/views/admin/users/_password_fields.html.haml +18 -0
  79. data/app/views/admin/users/edit.html.haml +9 -0
  80. data/app/views/admin/users/index.html.haml +39 -0
  81. data/app/views/admin/users/new.html.haml +6 -0
  82. data/app/views/admin/users/remove.html.haml +16 -0
  83. data/app/views/admin/welcome/login.html.haml +23 -0
  84. data/app/views/layouts/application.html.haml +50 -0
  85. data/app/views/site/not_found.html.haml +3 -0
  86. data/bin/ci/before_script +15 -0
  87. data/bin/trusty_cms +53 -0
  88. data/config/application.rb +124 -0
  89. data/config/boot.rb +9 -0
  90. data/config/compass.config +15 -0
  91. data/config/database.db2.yml +20 -0
  92. data/config/database.mysql.yml +25 -0
  93. data/config/database.postgresql.yml +25 -0
  94. data/config/database.sqlite.yml +16 -0
  95. data/config/database.sqlserver.yml +20 -0
  96. data/config/environment.rb +5 -0
  97. data/config/environments/development.rb +19 -0
  98. data/config/environments/production.rb +27 -0
  99. data/config/environments/test.rb +35 -0
  100. data/config/initializers/active_record_extensions.rb +1 -0
  101. data/config/initializers/configuration_extensions.rb +0 -0
  102. data/config/initializers/haml.rb +2 -0
  103. data/config/initializers/object_extensions.rb +1 -0
  104. data/config/initializers/radiant_config.rb +16 -0
  105. data/config/initializers/rails_patch.rb +2 -0
  106. data/config/initializers/response_cache_timeout.rb +3 -0
  107. data/config/initializers/string_extensions.rb +1 -0
  108. data/config/initializers/symbol_extensions.rb +1 -0
  109. data/config/initializers/tmp.rb +2 -0
  110. data/config/locales/en.yml +230 -0
  111. data/config/locales/en_available_tags.yml +625 -0
  112. data/config/preinitializer.rb +18 -0
  113. data/config/routes.rb +30 -0
  114. data/db/migrate/001_create_radiant_tables.rb +75 -0
  115. data/db/migrate/002_insert_initial_data.rb +12 -0
  116. data/db/migrate/003_rename_behavior_column.rb +9 -0
  117. data/db/migrate/004_rename_filter_column.rb +11 -0
  118. data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
  119. data/db/migrate/006_integer_columns_to_boolean.rb +36 -0
  120. data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
  121. data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
  122. data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
  123. data/db/migrate/010_merge_behaviors_and_pages.rb +57 -0
  124. data/db/migrate/011_rename_type_column_on_page_to_class_name.rb +9 -0
  125. data/db/migrate/012_create_extension_meta.rb +13 -0
  126. data/db/migrate/013_add_notes_field_to_user.rb +9 -0
  127. data/db/migrate/014_rename_config_default_parts_key.rb +17 -0
  128. data/db/migrate/015_add_optimistic_locking.rb +15 -0
  129. data/db/migrate/016_add_sessions.rb +16 -0
  130. data/db/migrate/017_rename_created_by_updated_by_columns.rb +15 -0
  131. data/db/migrate/018_add_description_and_keywords_to_pages.rb +11 -0
  132. data/db/migrate/019_add_salt_to_users.rb +11 -0
  133. data/db/migrate/020_add_session_info_to_users.rb +11 -0
  134. data/db/migrate/021_remove_session_expire_from_users.rb +9 -0
  135. data/db/migrate/20081203140407_add_indexes.rb +19 -0
  136. data/db/migrate/20090226140109_add_user_language.rb +9 -0
  137. data/db/migrate/20090929164633_rename_developer_role_to_designer.rb +9 -0
  138. data/db/migrate/20091003095744_change_user_language_to_locale.rb +9 -0
  139. data/db/migrate/20100805154952_add_page_fields.rb +15 -0
  140. data/db/migrate/20100805155020_convert_page_metas.rb +24 -0
  141. data/db/migrate/20100810151922_add_field_name_index.rb +11 -0
  142. data/db/migrate/20110902203823_add_allowed_children_cache_to_pages.rb +13 -0
  143. data/db/migrate/20111016150725_extend_page_part_content_limit.rb +15 -0
  144. data/db/migrate/20120209231801_change_pages_allowed_children_cache_to_text.rb +11 -0
  145. data/db/schema.rb +128 -0
  146. data/lib/active_record_extensions/active_record_extensions.rb +27 -0
  147. data/lib/annotatable.rb +68 -0
  148. data/lib/configuration_extensions/configuration_extensions.rb +357 -0
  149. data/lib/generators/extension/USAGE +30 -0
  150. data/lib/generators/extension/extension_generator.rb +97 -0
  151. data/lib/generators/extension/templates/README.md +6 -0
  152. data/lib/generators/extension/templates/RSpecRakefile +109 -0
  153. data/lib/generators/extension/templates/Rakefile +25 -0
  154. data/lib/generators/extension/templates/cucumber.yml +1 -0
  155. data/lib/generators/extension/templates/cucumber_env.rb +11 -0
  156. data/lib/generators/extension/templates/cucumber_paths.rb +22 -0
  157. data/lib/generators/extension/templates/en.yml +3 -0
  158. data/lib/generators/extension/templates/extension.rb +21 -0
  159. data/lib/generators/extension/templates/functional_test.rb +15 -0
  160. data/lib/generators/extension/templates/gemspec.rb +29 -0
  161. data/lib/generators/extension/templates/lib.rb +8 -0
  162. data/lib/generators/extension/templates/migration.rb +9 -0
  163. data/lib/generators/extension/templates/radiant_config.rb +3 -0
  164. data/lib/generators/extension/templates/routes.rb +5 -0
  165. data/lib/generators/extension/templates/spec.opts +6 -0
  166. data/lib/generators/extension/templates/spec_helper.rb +42 -0
  167. data/lib/generators/extension/templates/tasks.rake +47 -0
  168. data/lib/generators/extension/templates/test_helper.rb +26 -0
  169. data/lib/generators/extension_controller/USAGE +36 -0
  170. data/lib/generators/extension_controller/extension_controller_generator.rb +84 -0
  171. data/lib/generators/extension_controller/templates/controller.rb +10 -0
  172. data/lib/generators/extension_controller/templates/controller_spec.rb +23 -0
  173. data/lib/generators/extension_controller/templates/functional_test.rb +11 -0
  174. data/lib/generators/extension_controller/templates/helper.rb +2 -0
  175. data/lib/generators/extension_controller/templates/helper_spec.rb +11 -0
  176. data/lib/generators/extension_controller/templates/helper_test.rb +4 -0
  177. data/lib/generators/extension_controller/templates/view.html.erb +2 -0
  178. data/lib/generators/extension_controller/templates/view_spec.rb +12 -0
  179. data/lib/generators/extension_mailer/USAGE +17 -0
  180. data/lib/generators/extension_mailer/extension_mailer_generator.rb +68 -0
  181. data/lib/generators/extension_mailer/templates/fixture.erb +3 -0
  182. data/lib/generators/extension_mailer/templates/mailer.rb +15 -0
  183. data/lib/generators/extension_mailer/templates/unit_test.rb +21 -0
  184. data/lib/generators/extension_mailer/templates/view.erb +3 -0
  185. data/lib/generators/extension_migration/USAGE +34 -0
  186. data/lib/generators/extension_migration/extension_migration_generator.rb +25 -0
  187. data/lib/generators/extension_migration/templates/migration.rb +11 -0
  188. data/lib/generators/extension_model/USAGE +35 -0
  189. data/lib/generators/extension_model/extension_model_generator.rb +68 -0
  190. data/lib/generators/extension_model/templates/fixtures.yml +19 -0
  191. data/lib/generators/extension_model/templates/migration.rb +16 -0
  192. data/lib/generators/extension_model/templates/model.rb +2 -0
  193. data/lib/generators/extension_model/templates/model_spec.rb +11 -0
  194. data/lib/generators/extension_model/templates/unit_test.rb +8 -0
  195. data/lib/generators/generator_base_extension.rb +16 -0
  196. data/lib/generators/instance/instance_generator.rb +148 -0
  197. data/lib/generators/instance/templates/databases/db2.yml +40 -0
  198. data/lib/generators/instance/templates/databases/mysql.yml +47 -0
  199. data/lib/generators/instance/templates/databases/postgresql.yml +44 -0
  200. data/lib/generators/instance/templates/databases/sqlite3.yml +16 -0
  201. data/lib/generators/instance/templates/databases/sqlserver.yml +21 -0
  202. data/lib/generators/instance/templates/instance_boot.rb +122 -0
  203. data/lib/generators/instance/templates/instance_config.ru +2 -0
  204. data/lib/generators/instance/templates/instance_environment.rb +83 -0
  205. data/lib/generators/instance/templates/instance_gemfile +81 -0
  206. data/lib/generators/instance/templates/instance_generate +6 -0
  207. data/lib/generators/instance/templates/instance_radiant_config.rb +16 -0
  208. data/lib/generators/instance/templates/instance_rakefile +3 -0
  209. data/lib/generators/instance/templates/instance_routes.rb +1 -0
  210. data/lib/generators/language_extension/USAGE +27 -0
  211. data/lib/generators/language_extension/language_extension_generator.rb +71 -0
  212. data/lib/generators/language_extension/templates/README +3 -0
  213. data/lib/generators/language_extension/templates/RSpecRakefile +123 -0
  214. data/lib/generators/language_extension/templates/Rakefile +25 -0
  215. data/lib/generators/language_extension/templates/available_tags.yml +553 -0
  216. data/lib/generators/language_extension/templates/cucumber.yml +1 -0
  217. data/lib/generators/language_extension/templates/cucumber_env.rb +16 -0
  218. data/lib/generators/language_extension/templates/cucumber_paths.rb +14 -0
  219. data/lib/generators/language_extension/templates/extension.rb +12 -0
  220. data/lib/generators/language_extension/templates/functional_test.rb +15 -0
  221. data/lib/generators/language_extension/templates/gemspec.rb +24 -0
  222. data/lib/generators/language_extension/templates/lang.yml +181 -0
  223. data/lib/generators/language_extension/templates/lib.rb +8 -0
  224. data/lib/generators/language_extension/templates/spec.opts +6 -0
  225. data/lib/generators/language_extension/templates/spec_helper.rb +36 -0
  226. data/lib/generators/language_extension/templates/tasks.rake +28 -0
  227. data/lib/generators/language_extension/templates/test_helper.rb +26 -0
  228. data/lib/inheritable_class_attributes.rb +65 -0
  229. data/lib/local_time.rb +6 -0
  230. data/lib/login_system.rb +132 -0
  231. data/lib/method_observer.rb +50 -0
  232. data/lib/object_extensions/object_extensions.rb +5 -0
  233. data/lib/simpleton.rb +21 -0
  234. data/lib/string_extensions/string_extensions.rb +25 -0
  235. data/lib/symbol_extensions/symbol_extensions.rb +5 -0
  236. data/lib/tasks/database.rake +85 -0
  237. data/lib/tasks/environments.rake +11 -0
  238. data/lib/tasks/extensions.rake +85 -0
  239. data/lib/tasks/framework.rake +255 -0
  240. data/lib/tasks/instance.rake +23 -0
  241. data/lib/tasks/prototype.rake +31 -0
  242. data/lib/tasks/radiant_config.rake +18 -0
  243. data/lib/tasks/release.rake +131 -0
  244. data/lib/tasks/translate.rake +59 -0
  245. data/lib/tasks/undefine.rake +28 -0
  246. data/lib/translation_support.rb +54 -0
  247. data/lib/trusty_cms/admin_ui/region_partials.rb +23 -0
  248. data/lib/trusty_cms/admin_ui/region_set.rb +35 -0
  249. data/lib/trusty_cms/admin_ui.rb +244 -0
  250. data/lib/trusty_cms/available_locales.rb +19 -0
  251. data/lib/trusty_cms/cache.rb +100 -0
  252. data/lib/trusty_cms/config/definition.rb +142 -0
  253. data/lib/trusty_cms/engine.rb +10 -0
  254. data/lib/trusty_cms/extension/script.rb +395 -0
  255. data/lib/trusty_cms/extension.rb +146 -0
  256. data/lib/trusty_cms/extension_loader.rb +130 -0
  257. data/lib/trusty_cms/extension_migrator.rb +98 -0
  258. data/lib/trusty_cms/extension_path.rb +200 -0
  259. data/lib/trusty_cms/initializer.rb +162 -0
  260. data/lib/trusty_cms/pagination/controller.rb +41 -0
  261. data/lib/trusty_cms/pagination/link_renderer.rb +34 -0
  262. data/lib/trusty_cms/resource_responses.rb +121 -0
  263. data/lib/trusty_cms/setup.rb +227 -0
  264. data/lib/trusty_cms/taggable.rb +138 -0
  265. data/lib/trusty_cms/task_support.rb +66 -0
  266. data/lib/trusty_cms.rb +19 -0
  267. data/log/.keep +0 -0
  268. data/public/.htaccess +40 -0
  269. data/public/404.html +8 -0
  270. data/public/500.html +8 -0
  271. data/public/dispatch.cgi +10 -0
  272. data/public/dispatch.fcgi +24 -0
  273. data/public/dispatch.rb +10 -0
  274. data/public/favicon.ico +0 -0
  275. data/public/images/admin/add_tab.png +0 -0
  276. data/public/images/admin/avatar_32x32.png +0 -0
  277. data/public/images/admin/avatar_64x64.png +0 -0
  278. data/public/images/admin/avatar_96x96.png +0 -0
  279. data/public/images/admin/brown_bottom_line.gif +0 -0
  280. data/public/images/admin/calendar_down.gif +0 -0
  281. data/public/images/admin/collapse.png +0 -0
  282. data/public/images/admin/draft_page.png +0 -0
  283. data/public/images/admin/expand.png +0 -0
  284. data/public/images/admin/image.png +0 -0
  285. data/public/images/admin/javascript.png +0 -0
  286. data/public/images/admin/layout.png +0 -0
  287. data/public/images/admin/metadata_toggle.png +0 -0
  288. data/public/images/admin/minus.png +0 -0
  289. data/public/images/admin/minus_disabled.png +0 -0
  290. data/public/images/admin/minus_grey.png +0 -0
  291. data/public/images/admin/navigation_secondary_separator.gif +0 -0
  292. data/public/images/admin/page.png +0 -0
  293. data/public/images/admin/plus.png +0 -0
  294. data/public/images/admin/plus_disabled.png +0 -0
  295. data/public/images/admin/plus_grey.png +0 -0
  296. data/public/images/admin/popup_border_background.png +0 -0
  297. data/public/images/admin/popup_border_bottom_left.png +0 -0
  298. data/public/images/admin/popup_border_bottom_right.png +0 -0
  299. data/public/images/admin/popup_border_top_left.png +0 -0
  300. data/public/images/admin/popup_border_top_right.png +0 -0
  301. data/public/images/admin/search.png +0 -0
  302. data/public/images/admin/single_form_shadow.png +0 -0
  303. data/public/images/admin/snippet.png +0 -0
  304. data/public/images/admin/spinner.gif +0 -0
  305. data/public/images/admin/status_background.png +0 -0
  306. data/public/images/admin/status_bottom_left.png +0 -0
  307. data/public/images/admin/status_bottom_right.png +0 -0
  308. data/public/images/admin/status_spinner.gif +0 -0
  309. data/public/images/admin/status_top_left.png +0 -0
  310. data/public/images/admin/status_top_right.png +0 -0
  311. data/public/images/admin/stylesheet.png +0 -0
  312. data/public/images/admin/tab_close.png +0 -0
  313. data/public/images/admin/upload.png +0 -0
  314. data/public/images/admin/virtual_page.png +0 -0
  315. data/public/images/radiant/radiant-badge-color.png +0 -0
  316. data/public/javascripts/admin/application.js +94 -0
  317. data/public/javascripts/admin/codearea.js +165 -0
  318. data/public/javascripts/admin/controls.js +965 -0
  319. data/public/javascripts/admin/cookie.js +80 -0
  320. data/public/javascripts/admin/dateinput.js +402 -0
  321. data/public/javascripts/admin/dragdrop.js +974 -0
  322. data/public/javascripts/admin/dropdown.js +216 -0
  323. data/public/javascripts/admin/effects.js +1122 -0
  324. data/public/javascripts/admin/lowpro.js +340 -0
  325. data/public/javascripts/admin/overrides.js +1 -0
  326. data/public/javascripts/admin/page_preview.js +41 -0
  327. data/public/javascripts/admin/pagefield.js +54 -0
  328. data/public/javascripts/admin/pagestatus.js +17 -0
  329. data/public/javascripts/admin/popup.js +339 -0
  330. data/public/javascripts/admin/prototype.js +4874 -0
  331. data/public/javascripts/admin/ruledtable.js +13 -0
  332. data/public/javascripts/admin/shortcuts.js +33 -0
  333. data/public/javascripts/admin/sitemap.js +149 -0
  334. data/public/javascripts/admin/status.js +233 -0
  335. data/public/javascripts/admin/tabcontrol.js +123 -0
  336. data/public/javascripts/admin/toggle.js +430 -0
  337. data/public/javascripts/admin/utility.js +53 -0
  338. data/public/javascripts/admin/validationerror.js +18 -0
  339. data/public/loading-iframe.html +11 -0
  340. data/public/robots.txt +1 -0
  341. data/public/stylesheets/sass/admin/_base.sass +18 -0
  342. data/public/stylesheets/sass/admin/main.sass +27 -0
  343. data/public/stylesheets/sass/admin/modules/_boxes.sass +6 -0
  344. data/public/stylesheets/sass/admin/modules/_gradients.sass +4 -0
  345. data/public/stylesheets/sass/admin/modules/_links.sass +18 -0
  346. data/public/stylesheets/sass/admin/overrides.sass +2 -0
  347. data/public/stylesheets/sass/admin/partials/_actions.sass +96 -0
  348. data/public/stylesheets/sass/admin/partials/_avatars.sass +10 -0
  349. data/public/stylesheets/sass/admin/partials/_content.sass +58 -0
  350. data/public/stylesheets/sass/admin/partials/_dateinput.sass +62 -0
  351. data/public/stylesheets/sass/admin/partials/_deprecated.sass +55 -0
  352. data/public/stylesheets/sass/admin/partials/_dropdown.sass +28 -0
  353. data/public/stylesheets/sass/admin/partials/_footer.sass +12 -0
  354. data/public/stylesheets/sass/admin/partials/_forms.sass +322 -0
  355. data/public/stylesheets/sass/admin/partials/_header.sass +114 -0
  356. data/public/stylesheets/sass/admin/partials/_index.sass +147 -0
  357. data/public/stylesheets/sass/admin/partials/_layout.sass +10 -0
  358. data/public/stylesheets/sass/admin/partials/_messages.sass +10 -0
  359. data/public/stylesheets/sass/admin/partials/_popup.sass +213 -0
  360. data/public/stylesheets/sass/admin/partials/_tabcontrol.sass +72 -0
  361. data/public/stylesheets/sass/admin/partials/_toolbar.sass +31 -0
  362. data/public/stylesheets/sass/admin/partials/_typography.sass +60 -0
  363. data/public/stylesheets/sass/admin/partials/_validations.sass +19 -0
  364. data/rails/init.rb +1 -0
  365. data/script/about +4 -0
  366. data/script/breakpointer +3 -0
  367. data/script/console +3 -0
  368. data/script/dbconsole +3 -0
  369. data/script/destroy +3 -0
  370. data/script/extension +5 -0
  371. data/script/generate +3 -0
  372. data/script/performance/benchmarker +3 -0
  373. data/script/performance/profiler +3 -0
  374. data/script/performance/request +3 -0
  375. data/script/plugin +3 -0
  376. data/script/process/inspector +3 -0
  377. data/script/process/reaper +3 -0
  378. data/script/process/spawner +3 -0
  379. data/script/process/spinner +3 -0
  380. data/script/rails +6 -0
  381. data/script/runner +3 -0
  382. data/script/server +3 -0
  383. data/script/version +5 -0
  384. data/spec/ci/database.mysql.yml +4 -0
  385. data/spec/ci/database.postgresql.yml +4 -0
  386. data/spec/ci/database.sqlite.yml +3 -0
  387. data/trusty_cms.gemspec +50 -0
  388. metadata +781 -0
data/db/schema.rb ADDED
@@ -0,0 +1,128 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20120209231801) do
15
+
16
+ create_table "config", :force => true do |t|
17
+ t.string "key", :limit => 40, :default => "", :null => false
18
+ t.string "value", :default => ""
19
+ end
20
+
21
+ add_index "config", ["key"], :name => "key", :unique => true
22
+
23
+ create_table "extension_meta", :force => true do |t|
24
+ t.string "name"
25
+ t.integer "schema_version", :default => 0
26
+ t.boolean "enabled", :default => true
27
+ end
28
+
29
+ create_table "layouts", :force => true do |t|
30
+ t.string "name", :limit => 100
31
+ t.text "content"
32
+ t.datetime "created_at"
33
+ t.datetime "updated_at"
34
+ t.integer "created_by_id"
35
+ t.integer "updated_by_id"
36
+ t.string "content_type", :limit => 40
37
+ t.integer "lock_version", :default => 0
38
+ end
39
+
40
+ create_table "page_fields", :force => true do |t|
41
+ t.integer "page_id"
42
+ t.string "name"
43
+ t.string "content"
44
+ end
45
+
46
+ add_index "page_fields", ["page_id", "name", "content"], :name => "index_page_fields_on_page_id_and_name_and_content"
47
+
48
+ create_table "page_parts", :force => true do |t|
49
+ t.string "name", :limit => 100
50
+ t.string "filter_id", :limit => 25
51
+ t.text "content", :limit => 16777215
52
+ t.integer "page_id"
53
+ end
54
+
55
+ add_index "page_parts", ["page_id", "name"], :name => "parts_by_page"
56
+
57
+ create_table "pages", :force => true do |t|
58
+ t.string "title"
59
+ t.string "slug", :limit => 100
60
+ t.string "breadcrumb", :limit => 160
61
+ t.string "class_name", :limit => 25
62
+ t.integer "status_id", :default => 1, :null => false
63
+ t.integer "parent_id"
64
+ t.integer "layout_id"
65
+ t.datetime "created_at"
66
+ t.datetime "updated_at"
67
+ t.datetime "published_at"
68
+ t.integer "created_by_id"
69
+ t.integer "updated_by_id"
70
+ t.boolean "virtual", :default => false, :null => false
71
+ t.integer "lock_version", :default => 0
72
+ t.text "allowed_children_cache"
73
+ end
74
+
75
+ add_index "pages", ["class_name"], :name => "pages_class_name"
76
+ add_index "pages", ["parent_id"], :name => "pages_parent_id"
77
+ add_index "pages", ["slug", "parent_id"], :name => "pages_child_slug"
78
+ add_index "pages", ["virtual", "status_id"], :name => "pages_published"
79
+
80
+ create_table "people", :force => true do |t|
81
+ end
82
+
83
+ create_table "places", :force => true do |t|
84
+ end
85
+
86
+ create_table "sessions", :force => true do |t|
87
+ t.string "session_id"
88
+ t.text "data"
89
+ t.datetime "updated_at"
90
+ end
91
+
92
+ add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
93
+ add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
94
+
95
+ create_table "snippets", :force => true do |t|
96
+ t.string "name", :limit => 100, :default => "", :null => false
97
+ t.string "filter_id", :limit => 25
98
+ t.text "content"
99
+ t.datetime "created_at"
100
+ t.datetime "updated_at"
101
+ t.integer "created_by_id"
102
+ t.integer "updated_by_id"
103
+ t.integer "lock_version", :default => 0
104
+ end
105
+
106
+ add_index "snippets", ["name"], :name => "name", :unique => true
107
+
108
+ create_table "users", :force => true do |t|
109
+ t.string "name", :limit => 100
110
+ t.string "email"
111
+ t.string "login", :limit => 40, :default => "", :null => false
112
+ t.string "password", :limit => 40
113
+ t.datetime "created_at"
114
+ t.datetime "updated_at"
115
+ t.integer "created_by_id"
116
+ t.integer "updated_by_id"
117
+ t.boolean "admin", :default => false, :null => false
118
+ t.boolean "designer", :default => false, :null => false
119
+ t.text "notes"
120
+ t.integer "lock_version", :default => 0
121
+ t.string "salt"
122
+ t.string "session_token"
123
+ t.string "locale"
124
+ end
125
+
126
+ add_index "users", ["login"], :name => "login", :unique => true
127
+
128
+ end
@@ -0,0 +1,27 @@
1
+ require 'active_record'
2
+
3
+ class ActiveRecord::Base
4
+
5
+ def self.validates_path(*args)
6
+ configuration = args.extract_options!
7
+ validates_each(args, configuration) do |record, attr_name, value|
8
+ page = Page.find_by_path(value)
9
+ record.errors.add(attr_name, :page_not_found, :default => configuration[:message]) if page.nil? || page.is_a?(FileNotFoundPage)
10
+ end
11
+ end
12
+
13
+ def self.object_id_attr(symbol, klass)
14
+ module_eval %{
15
+ def #{symbol}
16
+ if @#{symbol}.nil? or (@old_#{symbol}_id != #{symbol}_id)
17
+ @old_#{symbol}_id = #{symbol}_id
18
+ klass = #{klass}.descendants.find { |d| d.#{symbol}_name == #{symbol}_id }
19
+ klass ||= #{klass}
20
+ @#{symbol} = klass.new
21
+ else
22
+ @#{symbol}
23
+ end
24
+ end
25
+ }
26
+ end
27
+ end
@@ -0,0 +1,68 @@
1
+ module Annotatable
2
+
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def self.extended(base)
9
+ base.instance_eval do
10
+ alias :inherited_without_annotatable :inherited
11
+ alias :inherited :inherited_with_annotatable
12
+ end
13
+ end
14
+
15
+ def annotate(*attrs)
16
+ options = {}
17
+ options = attrs.pop if attrs.last.kind_of?(Hash)
18
+ options.symbolize_keys!
19
+ inherit = options[:inherit]
20
+ if inherit
21
+ @inherited_annotations ||= []
22
+ @inherited_annotations += attrs
23
+ end
24
+ attrs.each do |attr|
25
+ class_eval %{
26
+ def self.#{attr}(string = nil)
27
+ @#{attr} = string || @#{attr}
28
+ end
29
+ def #{attr}(string = nil)
30
+ self.class.#{attr}(string)
31
+ end
32
+ def self.#{attr}=(string = nil)
33
+ #{attr}(string)
34
+ end
35
+ def #{attr}=(string = nil)
36
+ self.class.#{attr}=(string)
37
+ end
38
+ }
39
+ end
40
+ attrs
41
+ end
42
+
43
+ def inherited_with_annotatable(subclass)
44
+ inherited_without_annotatable(subclass)
45
+ (["inherited_annotations"] + (@inherited_annotations || [])).each do |t|
46
+ ivar = "@#{t}"
47
+ subclass.instance_variable_set(ivar, instance_variable_get(ivar))
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ # We don't necessarily have ActiveSupport loaded yet!
55
+ class Hash
56
+ # Return a new hash with all keys converted to symbols.
57
+ def symbolize_keys
58
+ inject({}) do |options, (key, value)|
59
+ options[key.to_sym || key] = value
60
+ options
61
+ end
62
+ end
63
+
64
+ # Destructively convert all keys to symbols.
65
+ def symbolize_keys!
66
+ self.replace(self.symbolize_keys)
67
+ end
68
+ end
@@ -0,0 +1,357 @@
1
+ module TrustyCms
2
+ autoload :Cache, 'trusty_cms/cache'
3
+
4
+ class << self
5
+ # Returns the TrustyCms::Config eigenclass object, so it can be used wherever you would use TrustyCms::Config.
6
+ #
7
+ # TrustyCms.config['site.title']
8
+ # TrustyCms.config['site.url'] = 'example.com'
9
+ #
10
+ # but it will also yield itself to a block:
11
+ #
12
+ # TrustyCms.config do |config|
13
+ # config.define 'something', default => 'something'
14
+ # config['other.thing'] = 'nothing'
15
+ # end
16
+ #
17
+ def config # method must be defined before any initializers run
18
+ yield TrustyCms::Config if block_given?
19
+ TrustyCms::Config
20
+ end
21
+
22
+ # Returns the configuration object with which this application was initialized.
23
+ # For now it's exactly the same as calling Rails.configuration except that it will also yield itself to a block.
24
+ #
25
+ def configuration
26
+ yield Rails.configuration if block_given?
27
+ Rails.configuration
28
+ end
29
+
30
+ # Returns the root directory of this radiant installation (which is usually the gem directory).
31
+ # This is not the same as Rails.root, which is the instance directory and tends to contain only site-delivery material.
32
+ #
33
+ def root
34
+ Pathname.new(TRUSTY_CMS_ROOT) if defined?(TRUSTY_CMS_ROOT)
35
+ end
36
+ def boot!
37
+ unless booted?
38
+ preinitialize
39
+ pick_boot.run
40
+ end
41
+ end
42
+
43
+ def booted?
44
+ defined? TrustyCms::Initializer
45
+ end
46
+
47
+ def pick_boot
48
+ case
49
+ when app?
50
+ AppBoot.new
51
+ when vendor?
52
+ VendorBoot.new
53
+ else
54
+ GemBoot.new
55
+ end
56
+ end
57
+
58
+ def vendor?
59
+ File.exist?("#{Rails.root}/vendor/radiant")
60
+ end
61
+
62
+ def app?
63
+ File.exist?("#{Rails.root}/lib/radiant.rb")
64
+ end
65
+
66
+ def preinitialize
67
+ load(preinitializer_path) if File.exist?(preinitializer_path)
68
+ end
69
+
70
+ def loaded_via_gem?
71
+ pick_boot.is_a? GemBoot
72
+ end
73
+
74
+ def preinitializer_path
75
+ "#{Rails.root}/config/preinitializer.rb"
76
+ end
77
+ end
78
+ end
79
+
80
+
81
+ class Rails::Application::Configuration
82
+
83
+ # The TrustyCms::Configuration class extends Rails::Configuration with three purposes:
84
+ # * to reset some rails defaults so that files are found in TRUSTY_CMS_ROOT instead of Rails.root
85
+ # * to notice that some gems and plugins are in fact radiant extensions
86
+ # * to notice that some radiant extensions add load paths (for plugins, controllers, metal, etc)
87
+
88
+ attr_accessor :extension_paths, :ignored_extensions
89
+
90
+
91
+ def load_trusty_paths
92
+ #paths << ["#{TRUSTY_CMS_ROOT}/test/mocks/#{environment}"]
93
+
94
+ # Add the app's controller directory
95
+ #paths['app/controllers'].concat(Dir["#{TRUSTY_CMS_ROOT}/app/controllers/"])
96
+
97
+
98
+
99
+ # Followed by the standard includes.
100
+ %w(
101
+ app
102
+ app/models
103
+ app/controllers
104
+ app/helpers
105
+ app/views
106
+ config
107
+ lib
108
+ vendor
109
+ ).each do |dir|
110
+ autoload_paths.unshift "#{TRUSTY_CMS_ROOT}/#{dir}"
111
+ $LOAD_PATH.unshift "#{TRUSTY_CMS_ROOT}/#{dir}"
112
+ puts dir
113
+ paths[dir] << "#{TRUSTY_CMS_ROOT}/#{dir}"
114
+ end
115
+
116
+ #paths.concat builtin_directories
117
+ end
118
+
119
+ def initialize_extension_paths
120
+ self.extension_paths = default_extension_paths
121
+ self.ignored_extensions = []
122
+ end
123
+
124
+ # Sets the locations in which we look for vendored extensions. Normally:
125
+ # Rails.root/vendor/extensions
126
+ # TrustyCms.root/vendor/extensions
127
+ # There are no vendor/* directories in +TRUSTY_CMS_ROOT+ any more but the possibility remains for compatibility reasons.
128
+ # In test mode we also add a fixtures path for testing the extension loader.
129
+ #
130
+ def default_extension_paths
131
+ env = ENV["RAILS_ENV"] || Rails.env
132
+ paths = [Rails.root + 'vendor/extensions']
133
+ paths.unshift(TRUSTY_CMS_ROOT + "vendor/extensions") unless Rails.root == TRUSTY_CMS_ROOT
134
+ paths
135
+ end
136
+
137
+ # The list of extensions, expanded and in load order, that results from combining all the extension
138
+ # configuration directives. These are the extensions that will actually be loaded or migrated,
139
+ # and for most purposes this is the list you want to refer to.
140
+ #
141
+ # TrustyCms.configuration.enabled_extensions # => [:name, :name, :name, :name]
142
+ #
143
+ # Note that an extension enabled is not the same as an extension activated or even loaded: it just means
144
+ # that the application is configured to load that extension.
145
+ #
146
+ def enabled_extensions
147
+ @enabled_extensions ||= expanded_extension_list - ignored_extensions
148
+ end
149
+
150
+ # The expanded and ordered list of extensions, including any that may later be ignored. This can be configured
151
+ # (it is here that the :all entry is expanded to mean 'everything else'), or will default to an alphabetical list
152
+ # of every extension found among gems and vendor/extensions directories.
153
+ #
154
+ # TrustyCms.configuration.expanded_extension_list # => [:name, :name, :name, :name]
155
+ #
156
+ # If an extension in the configurted list is not found, a LoadError will be thrown from here.
157
+ #
158
+ def expanded_extension_list
159
+ # NB. it should remain possible to say config.extensions = []
160
+ @extension_list ||= extensions ? expand_and_check(extensions) : available_extensions
161
+ end
162
+
163
+ def expand_and_check(extension_list) #:nodoc
164
+ missing_extensions = extension_list - [:all] - available_extensions
165
+ raise LoadError, "These configured extensions have not been found: #{missing_extensions.to_sentence}" if missing_extensions.any?
166
+ if m = extension_list.index(:all)
167
+ extension_list[m] = available_extensions - extension_list
168
+ end
169
+ extension_list.flatten
170
+ end
171
+
172
+ # Returns the checked and expanded list of extensions-to-enable. This may be derived from a list passed to
173
+ # +config.extensions=+ or it may have defaulted to all available extensions.
174
+
175
+ # Without such a call, we default to the alphabetical list of all well-formed vendor and gem extensions
176
+ # returned by +available_extensions+.
177
+ #
178
+ # TrustyCms.configuration.extensions # => [:name, :all, :name]
179
+ #
180
+ def extensions
181
+ @requested_extensions ||= available_extensions
182
+ end
183
+
184
+ # Sets the list of extensions that will be loaded and the order in which to load them.
185
+ # It can include an :all marker to mean 'everything else' and is typically set in environment.rb:
186
+ # config.extensions = [:layouts, :taggable, :all]
187
+ # config.extensions = [:dashboard, :blog, :all]
188
+ # config.extensions = [:dashboard, :blog, :all, :comments]
189
+ #
190
+ # A LoadError is raised if any of the specified extensions can't be found.
191
+ #
192
+ def extensions=(extensions)
193
+ @requested_extensions = extensions
194
+ end
195
+
196
+ # This is a configurable list of extension that should not be loaded.
197
+ # config.ignore_extensions = [:experimental, :broken]
198
+ # You can also retrieve the list with +ignored_extensions+:
199
+ # TrustyCms.configuration.ignored_extensions # => [:experimental, :broken]
200
+ # These exclusions are applied regardless of dependencies and extension locations. A configuration that bundles
201
+ # required extensions then ignores them will not boot and is likely to fail with errors about unitialized constants.
202
+ #
203
+ def ignore_extensions(array)
204
+ self.ignored_extensions |= array
205
+ end
206
+
207
+ # Returns an alphabetical list of every extension found among all the load paths and bundled gems. Any plugin or
208
+ # gem whose path ends in the form +radiant-something-extension+ is considered to be an extension.
209
+ #
210
+ # TrustyCms.configuration.available_extensions # => [:name, :name, :name, :name]
211
+ #
212
+ # This method is always called during initialization, either as a default or to check that specified extensions are
213
+ # available. One of its side effects is to populate the ExtensionLoader's list of extension root locations, later
214
+ # used when activating those extensions that have been enabled.
215
+ #
216
+ def available_extensions
217
+ @available_extensions ||= (vendored_extensions + gem_extensions).uniq.sort.map(&:to_sym)
218
+ end
219
+
220
+ # Searches the defined extension_paths for subdirectories and returns a list of names as symbols.
221
+ #
222
+ # TrustyCms.configuration.vendored_extensions # => [:name, :name]
223
+ #
224
+ def vendored_extensions
225
+ extension_paths.each_with_object([]) do |load_path, found|
226
+ Dir["#{load_path}/*"].each do |path|
227
+ if File.directory?(path)
228
+ ep = TrustyCms::ExtensionLoader.record_path(path)
229
+ found << ep.name
230
+ end
231
+ end
232
+ end
233
+ end
234
+
235
+ # Scans the bundled gems for any whose name match the +radiant-something-extension+ format
236
+ # and returns a list of their names as symbols.
237
+ #
238
+ # TrustyCms.configuration.gem_extensions # => [:name, :name]
239
+ #
240
+ def gem_extensions
241
+ Gem.loaded_specs.each_with_object([]) do |(gemname, gemspec), found|
242
+ if gemname =~ /trusty-.*-extension$/
243
+ ep = TrustyCms::ExtensionLoader.record_path(gemspec.full_gem_path, gemname)
244
+ found << ep.name
245
+ end
246
+ end
247
+ end
248
+
249
+ # Old extension-dependency mechanism now deprecated
250
+ #
251
+ def extension(ext)
252
+ ::ActiveSupport::Deprecation.warn("Extension dependencies have been deprecated and are no longer supported in radiant 1.0. Extensions with dependencies should be packaged as gems and use the .gemspec to declare them.", caller)
253
+ end
254
+
255
+ # Old gem-invogation method now deprecated
256
+ #
257
+ def gem(name, options = {})
258
+ ::ActiveSupport::Deprecation.warn("Please declare gem dependencies in your Gemfile (or for an extension, in the .gemspec file).", caller)
259
+ super
260
+ end
261
+
262
+ # Returns the AdminUI singleton, giving get-and-set access to the tabs and partial-sets it defines.
263
+ # More commonly accessed in the initializer via its call to +configuration.admin+.
264
+ #
265
+ def admin
266
+ TrustyCms::AdminUI.instance
267
+ end
268
+
269
+ %w{controller model view metal plugin load eager_load}.each do |type|
270
+ define_method("add_#{type}_paths".to_sym) do |paths|
271
+ puts "paths"
272
+ self.paths["app/#{type}s"].concat(paths)
273
+ end
274
+ end
275
+
276
+ private
277
+
278
+ # Overrides the Rails::Initializer default to add plugin paths in TRUSTY_CMS_ROOT as well as Rails.root.
279
+ #
280
+ def default_plugin_paths
281
+ super + ["#{TRUSTY_CMS_ROOT}/lib/plugins", "#{TRUSTY_CMS_ROOT}/vendor/plugins"]
282
+ end
283
+
284
+ # Overrides the Rails::Initializer default to look for views in TRUSTY_CMS_ROOT rather than Rails.root.
285
+ #
286
+ def default_view_path
287
+ File.join(TRUSTY_CMS_ROOT, 'app', 'views')
288
+ end
289
+
290
+ # Overrides the Rails::Initializer default to look for controllers in TRUSTY_CMS_ROOT rather than Rails.root.
291
+ #
292
+ def default_controller_paths
293
+ [File.join(TRUSTY_CMS_ROOT, 'app', 'controllers')]
294
+ end
295
+ end
296
+
297
+
298
+ # TODO: Move all of this to a separate file.
299
+ class Boot
300
+ def run
301
+ load_mutex
302
+ load_initializer
303
+ end
304
+
305
+ # RubyGems from version 1.6 does not require thread but Rails depend on it
306
+ # This should newer rails do automaticly
307
+ def load_mutex
308
+ begin
309
+ require "thread" unless defined?(Mutex)
310
+ rescue LoadError => e
311
+ $stderr.puts %(Mutex could not be initialized. #{load_error_message})
312
+ exit 1
313
+ end
314
+ end
315
+
316
+ def load_initializer
317
+ begin
318
+ require 'trusty_cms'
319
+ require 'trusty_cms/initializer'
320
+ rescue LoadError => e
321
+ $stderr.puts %(TrustyCms could not be initialized. #{load_error_message})
322
+ exit 1
323
+ end
324
+ TrustyCms::Initializer.run(:set_load_path)
325
+ TrustyCms::Initializer.run(:install_gem_spec_stubs)
326
+ Rails::GemDependency.add_frozen_gem_path
327
+ end
328
+ end
329
+
330
+ class VendorBoot < Boot
331
+ def load_initializer
332
+ $LOAD_PATH.unshift "#{Rails.root}/vendor/trusty_cms/lib"
333
+ super
334
+ end
335
+
336
+ def load_error_message
337
+ "Please verify that vendor/radiant contains a complete copy of the TrustyCms sources."
338
+ end
339
+ end
340
+
341
+ class AppBoot < Boot
342
+ def load_initializer
343
+ $LOAD_PATH.unshift "#{Rails.root}/lib"
344
+ super
345
+ end
346
+
347
+ def load_error_message
348
+ "Please verify that you have a complete copy of the TrustyCms sources."
349
+ end
350
+ end
351
+
352
+ class GemBoot < Boot
353
+ # The location and version of the radiant gem should be set in your Gemfile
354
+ def load_error_message
355
+ "Have you run `bundle install`?'."
356
+ end
357
+ end
@@ -0,0 +1,30 @@
1
+ Description:
2
+ The extension generator creates stubs for a new TrustyCms extension.
3
+
4
+ The generator takes an extension name as its argument. The extension name may be
5
+ given in CamelCase or under_score and should not be suffixed with 'Extension'.
6
+
7
+ The generator creates an extension directory in vendor/extensions that includes
8
+ <extension_name>_extension.rb, README and Rakefile files as well as db, lib, task,
9
+ and test directories.
10
+
11
+ Example:
12
+ ./script/generate extension AssetManagement
13
+
14
+ This will create:
15
+ vendor/extensions/asset_management/app/controllers
16
+ vendor/extensions/asset_management/app/helpers
17
+ vendor/extensions/asset_management/app/models
18
+ vendor/extensions/asset_management/app/views
19
+ vendor/extensions/asset_management/db/migrate
20
+ vendor/extensions/asset_management/lib/tasks
21
+ vendor/extensions/asset_management/README
22
+ vendor/extensions/asset_management/asset_management_extension.rb
23
+ vendor/extensions/asset_management/lib/tasks/asset_management_extension_tasks.rake
24
+ vendor/extensions/asset_management/spec/controllers
25
+ vendor/extensions/asset_management/spec/models
26
+ vendor/extensions/asset_management/spec/views
27
+ vendor/extensions/asset_management/spec/helpers
28
+ vendor/extensions/asset_management/Rakefile
29
+ vendor/extensions/asset_management/spec/spec_helper.rb
30
+ vendor/extensions/asset_management/spec/spec.opts