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
@@ -0,0 +1,59 @@
1
+ namespace :radiant do
2
+ namespace :i18n do
3
+
4
+ desc "Syncs all available translations to the English master"
5
+ task :sync => :environment do
6
+ # All places TrustyCms can store locales
7
+ locale_paths = TrustyCms::AvailableLocales.locale_paths
8
+ # The main translation root, basically where English is kept
9
+ language_root = "#{TRUSTY_CMS_ROOT}/config/locales"
10
+ words = TranslationSupport.get_translation_keys(language_root)
11
+ locale_paths.each do |path|
12
+ if path == language_root || path.match('language_pack')
13
+ Dir["#{path}/*.yml"].each do |filename|
14
+ next if filename.match('_available_tags')
15
+ basename = File.basename(filename, '.yml')
16
+ puts "Syncing #{basename}"
17
+ (comments, other) = TranslationSupport.read_file(filename, basename)
18
+ words.each { |k,v| other[k] ||= words[k] } # Initializing hash variable as empty if it does not exist
19
+ other.delete_if { |k,v| !words[k] } # Remove if not defined in en.yml
20
+ TranslationSupport.write_file(filename, basename, comments, other)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ desc "Creates or updates the English available tag descriptions"
27
+ task :available_tags => :environment do
28
+ descriptions = Hash.new
29
+ Page.tag_descriptions.sort.each do |tag, desc|
30
+ tag = ' ' + tag.gsub(':','-') + ':'
31
+ desc = desc.gsub(' ',' ')
32
+ descriptions[tag] = ' "' + desc.gsub('%','%').gsub('"','\"').strip + '"'
33
+ end
34
+ comments = ''
35
+ TranslationSupport.write_file("#{TRUSTY_CMS_ROOT}/config/locales/en_available_tags.yml","---\nen:\n desc",comments,descriptions)
36
+ end
37
+
38
+ desc "Syncs all translations available_tags to the English master"
39
+ task :sync_available_tags => :environment do
40
+ # All places TrustyCms can store locales
41
+ locale_paths = TrustyCms::AvailableLocales.locale_paths
42
+ # The main translation root, basically where English is kept
43
+ language_root = "#{TRUSTY_CMS_ROOT}/config/locales"
44
+ words = TranslationSupport.open_available_tags("#{language_root}/en_available_tags.yml")
45
+ locale_paths.each do |path|
46
+ if path == language_root || path.match('language_pack')
47
+ Dir["#{path}/*.yml"].each do |filename|
48
+ next unless filename.match('_available_tags')
49
+ basename = File.basename(filename, '_available_tags.yml')
50
+ puts "Syncing #{basename}"
51
+ (comments, other) = TranslationSupport.open_available_tags(filename)
52
+ puts other
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,28 @@
1
+ # # Undefined unneeded tasks in instance mode
2
+ # unless TrustyCms.app?
3
+ # def undefine_task(*names)
4
+ # app = Rake.application
5
+ # tasks = app.instance_variable_get('@tasks')
6
+ # names.flatten.each { |name| tasks.delete(name) }
7
+ # end
8
+ #
9
+ # undefine_task %w(
10
+ # radiant:clobber_package
11
+ # radiant:install_gem
12
+ # radiant:package
13
+ # radiant:release
14
+ # radiant:repackage
15
+ # radiant:uninstall_gem
16
+ # radiant:import:prototype:stylesheets
17
+ # radiant:import:prototype:images
18
+ # radiant:import:prototype:javascripts
19
+ # radiant:import:prototype:assets
20
+ # rails:freeze:edge
21
+ # rails:freeze:gems
22
+ # rails:unfreeze
23
+ # rails:update
24
+ # rails:update:configs
25
+ # rails:update:javascripts
26
+ # rails:update:scripts
27
+ # )
28
+ # end
@@ -0,0 +1,54 @@
1
+ class TranslationSupport
2
+ class << self
3
+
4
+ #Retrieve US word set
5
+ def get_translation_keys(language_root, suffix=nil)
6
+ (dummy_comments, words) = read_file("#{language_root}/en#{suffix}.yml", 'en')
7
+ words
8
+ end
9
+
10
+ #Retrieve comments, translation data in hash form
11
+ def read_file(filename, basename)
12
+ (comments, data) = IO.read(filename).split(/\n#{basename}:\s*\n/) #Add error checking for failed file read?
13
+ return comments, create_hash(data, basename)
14
+ end
15
+
16
+ #Creates hash of translation data
17
+ def create_hash(data, basename)
18
+ words = Hash.new
19
+ return words if !data
20
+ parent = Array.new
21
+ previous_key = 'base'
22
+ data.split("\n").each do |w|
23
+ next if w.strip.blank?
24
+ (key, value) = w.split(':', 2)
25
+ value ||= ''
26
+ shift = (key =~ /\w/)/2 - parent.size #Determine level of current key in comparison to parent array
27
+ key = key.sub(/^\s+/,'')
28
+ parent << previous_key if shift > 0 #If key is child of previous key, add previous key as parent
29
+ (shift * -1).times { parent.pop } if shift < 0 #If key is not related to previous key, remove parent keys
30
+ previous_key = key #Track key in case next key is child of this key
31
+ words[parent.join(':') + ':' + key] = value unless key.blank?
32
+ end
33
+ words
34
+ end
35
+
36
+ def open_available_tags(filename)
37
+ data = YAML::load(File.open("#{filename}"))
38
+ data.to_s
39
+ end
40
+
41
+ #Writes to file from translation data hash structure
42
+ def write_file(filename,basename,comments,words)
43
+ File.open(filename, "w") do |log|
44
+ log.puts(comments+"\n"+basename+": \n")
45
+ words.sort.each do |k,v|
46
+ keys = k.split(':')
47
+ (keys.size-1).times { keys[keys.size-1] = ' ' + keys[keys.size-1] } #Add indentation for children keys
48
+ log.puts(keys[keys.size-1]+':'+v+"\n")
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,23 @@
1
+ class TrustyCms::AdminUI::RegionPartials
2
+ def initialize(template)
3
+ @partials = Hash.new {|h,k| h[k] = "<strong>`#{k}' default partial not found!</strong>" }
4
+ @template = template
5
+ end
6
+
7
+ def [](key)
8
+ @partials[key.to_s]
9
+ end
10
+
11
+ def method_missing(method, *args, &block)
12
+ if block_given?
13
+ # Ruby 1.9.2 yields self in instance_eval... see https://gist.github.com/479572
14
+ # lambdas are as strict as methods in 1.9.x, making sure that the args match, Procs are not.
15
+ if RUBY_VERSION =~ /^1\.9/ and block.lambda? and block.arity != 1
16
+ raise "You can only pass a proc ('Proc.new') or a lambda that takes exactly one arg (for self) to TrustyCms::AdminUI::RegionPartials' method_missing."
17
+ end
18
+ @partials[method.to_s] = @template.capture(&block)
19
+ else
20
+ @partials[method.to_s]
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,35 @@
1
+ class TrustyCms::AdminUI::RegionSet
2
+
3
+ def initialize
4
+ @regions = Hash.new do |h,k|
5
+ h[k] = []
6
+ end
7
+ yield self if block_given?
8
+ end
9
+
10
+ def [](region)
11
+ @regions[region.to_sym]
12
+ end
13
+
14
+ def add(region=nil, partial=nil, options={})
15
+ raise ArgumentError, "You must specify a region and a partial" unless region and partial
16
+ if options[:before]
17
+ index = @regions[region].empty? ? 0 : (@regions[region].index(options[:before]) || @regions[region].size)
18
+ self[region].insert(index, partial)
19
+ elsif options[:after]
20
+ index = @regions[region].empty? ? 0 : (@regions[region].index(options[:after]) || @regions[region].size - 1)
21
+ self[region].insert(index + 1, partial)
22
+ else
23
+ self[region] << partial
24
+ end
25
+ end
26
+
27
+ def method_missing(method, *args, &block)
28
+ if args.empty?
29
+ self[method]
30
+ else
31
+ super
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,244 @@
1
+ require 'simpleton'
2
+ require 'ostruct'
3
+
4
+ module TrustyCms
5
+ class AdminUI
6
+ # This may be loaded before ActiveSupport, so do an explicit require
7
+ require 'trusty_cms/admin_ui/region_set'
8
+
9
+ class DuplicateTabNameError < StandardError; end
10
+
11
+ # The NavTab Class holds the structure of a navigation tab (including
12
+ # its sub-nav items).
13
+ class NavTab < Array
14
+ attr_reader :name
15
+
16
+ def initialize(name)
17
+ @name = name
18
+ end
19
+
20
+ def [](id)
21
+ unless id.kind_of? Fixnum
22
+ self.find {|subnav_item| subnav_item.name.to_s.titleize == id.to_s.titleize }
23
+ else
24
+ super
25
+ end
26
+ end
27
+
28
+ def <<(*args)
29
+ options = args.extract_options!
30
+ item = args.size > 1 ? deprecated_add(*(args << caller)) : args.first
31
+ raise DuplicateTabNameError.new("duplicate tab name `#{item.name}'") if self[item.name]
32
+ item.tab = self if item.respond_to?(:tab=)
33
+ if options.empty?
34
+ super(item)
35
+ else
36
+ options.symbolize_keys!
37
+ before = options.delete(:before)
38
+ after = options.delete(:after)
39
+ tab_name = before || after
40
+ if self[tab_name]
41
+ _index = index(self[tab_name])
42
+ _index += 1 unless before
43
+ insert(_index, item)
44
+ else
45
+ super(item)
46
+ end
47
+ end
48
+ end
49
+
50
+ alias :add :<<
51
+
52
+ def add_item(*args)
53
+ options = args.extract_options!
54
+ options.symbolize_keys!
55
+ before = options.delete(:before)
56
+ after = options.delete(:after)
57
+ tab_name = before || after
58
+ if self[tab_name]
59
+ _index = index(self[tab_name])
60
+ _index += 1 unless before
61
+ insert(_index, NavSubItem.new(args.first, args.second))
62
+ else
63
+ add NavSubItem.new(args.first, args.second)
64
+ end
65
+ end
66
+
67
+ def visible?(user)
68
+ any? { |sub_item| sub_item.visible?(user) }
69
+ end
70
+
71
+ def deprecated_add(name, url, caller)
72
+ ActiveSupport::Deprecation.warn("admin.tabs.add is no longer supported in TrustyCms 0.9.x. Please update your code to use: \ntab \"Content\" do\n\tadd_item(...)\nend", caller)
73
+ NavSubItem.new(name, url)
74
+ end
75
+ end
76
+
77
+ # Simple structure for storing the properties of a tab's sub items.
78
+ class NavSubItem
79
+ attr_reader :name, :url
80
+ attr_accessor :tab
81
+
82
+ def initialize(name, url = "#")
83
+ @name, @url = name, url
84
+ end
85
+
86
+ def visible?(user)
87
+ visible_by_controller?(user)
88
+ end
89
+
90
+ def relative_url
91
+ File.join(ActionController::Base.relative_url_root || '', url)
92
+ end
93
+
94
+ private
95
+ def visible_by_controller?(user)
96
+ params = ActionController::Routing::Routes.recognize_path(url, :method => :get)
97
+ if params && params[:controller]
98
+ klass = "#{params[:controller].camelize}Controller".constantize
99
+ klass.user_has_access_to_action?(user, params[:action])
100
+ else
101
+ false
102
+ end
103
+ end
104
+ end
105
+
106
+ include Simpleton
107
+
108
+ attr_accessor :nav
109
+
110
+ def nav_tab(*args)
111
+ NavTab.new(*args)
112
+ end
113
+
114
+ def nav_item(*args)
115
+ NavSubItem.new(*args)
116
+ end
117
+
118
+ def tabs
119
+ nav['Content']
120
+ end
121
+
122
+ # Region sets
123
+ %w{page layout user configuration extension}.each do |controller|
124
+ attr_accessor controller
125
+ alias_method "#{controller}s", controller
126
+ end
127
+
128
+ def initialize
129
+ initialize_nav
130
+ load_default_regions
131
+ end
132
+
133
+ def initialize_nav
134
+ @nav = NavTab.new("Tab Container")
135
+ load_default_nav
136
+ end
137
+
138
+ def load_default_nav
139
+ content = nav_tab("Content")
140
+ content << nav_item("Pages", "/admin/pages")
141
+ nav << content
142
+
143
+ design = nav_tab("Design")
144
+ design << nav_item("Layouts", "/admin/layouts")
145
+ nav << design
146
+
147
+ settings = nav_tab("Settings")
148
+ settings << nav_item("General", "/admin/configuration")
149
+ settings << nav_item("Personal", "/admin/preferences")
150
+ settings << nav_item("Users", "/admin/users")
151
+ settings << nav_item("Extensions", "/admin/extensions")
152
+ nav << settings
153
+ end
154
+
155
+ def load_default_regions
156
+ @page = load_default_page_regions
157
+ @layout = load_default_layout_regions
158
+ @user = load_default_user_regions
159
+ @configuration = load_default_configuration_regions
160
+ @extension = load_default_extension_regions
161
+ end
162
+
163
+ private
164
+
165
+ def load_default_page_regions
166
+ OpenStruct.new.tap do |page|
167
+ page.edit = RegionSet.new do |edit|
168
+ edit.main.concat %w{edit_header edit_form edit_popups}
169
+ edit.form.concat %w{edit_title edit_extended_metadata edit_page_parts}
170
+ edit.layout.concat %w{edit_layout edit_type edit_status edit_published_at}
171
+ edit.form_bottom.concat %w{edit_buttons edit_timestamp}
172
+ end
173
+ page.index = RegionSet.new do |index|
174
+ index.sitemap_head.concat %w{title_column_header status_column_header actions_column_header}
175
+ index.node.concat %w{title_column status_column actions_column}
176
+ end
177
+ page.remove = page.children = page.index
178
+ page.new = page._part = page.edit
179
+ end
180
+ end
181
+
182
+ def load_default_user_regions
183
+ OpenStruct.new.tap do |user|
184
+ user.preferences = RegionSet.new do |preferences|
185
+ preferences.main.concat %w{edit_header edit_form}
186
+ preferences.form.concat %w{edit_name edit_email edit_username edit_password edit_locale}
187
+ preferences.form_bottom.concat %w{edit_buttons}
188
+ end
189
+ user.edit = RegionSet.new do |edit|
190
+ edit.main.concat %w{edit_header edit_form}
191
+ edit.form.concat %w{edit_name edit_email edit_username edit_password
192
+ edit_roles edit_locale edit_notes}
193
+ edit.form_bottom.concat %w{edit_buttons edit_timestamp}
194
+ end
195
+ user.index = RegionSet.new do |index|
196
+ index.thead.concat %w{title_header roles_header actions_header}
197
+ index.tbody.concat %w{title_cell roles_cell actions_cell}
198
+ index.bottom.concat %w{new_button}
199
+ end
200
+ user.new = user.edit
201
+ end
202
+ end
203
+
204
+ def load_default_layout_regions
205
+ OpenStruct.new.tap do |layout|
206
+ layout.edit = RegionSet.new do |edit|
207
+ edit.main.concat %w{edit_header edit_form}
208
+ edit.form.concat %w{edit_title edit_extended_metadata edit_content}
209
+ edit.form_bottom.concat %w{reference_links edit_buttons edit_timestamp}
210
+ end
211
+ layout.index = RegionSet.new do |index|
212
+ index.top.concat %w{}
213
+ index.thead.concat %w{title_header actions_header}
214
+ index.tbody.concat %w{title_cell actions_cell}
215
+ index.bottom.concat %w{new_button}
216
+ end
217
+ layout.new = layout.edit
218
+ end
219
+ end
220
+
221
+ def load_default_configuration_regions
222
+ OpenStruct.new.tap do |configuration|
223
+ configuration.show = RegionSet.new do |show|
224
+ show.user.concat %w{preferences}
225
+ show.config.concat %w{site defaults users}
226
+ end
227
+ configuration.edit = RegionSet.new do |edit|
228
+ edit.main.concat %w{edit_header edit_form}
229
+ edit.form.concat %w{edit_site edit_defaults edit_users}
230
+ edit.form_bottom.concat %w{edit_buttons}
231
+ end
232
+ end
233
+ end
234
+
235
+ def load_default_extension_regions
236
+ OpenStruct.new.tap do |extension|
237
+ extension.index = RegionSet.new do |index|
238
+ index.thead.concat %w{title_header website_header version_header}
239
+ index.tbody.concat %w{title_cell website_cell version_cell}
240
+ end
241
+ end
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,19 @@
1
+ module TrustyCms::AvailableLocales
2
+
3
+ # Returns the list of available locale files in options_for_select format.
4
+ #
5
+ def self.locales
6
+ available_locales = {}
7
+ TrustyCms.configuration.i18n.load_path.each do |path|
8
+ if File.exists?(path) && path !~ /_available_tags/
9
+ locale_yaml = YAML.load_file(path)
10
+ stem = File.basename(path, '.yml')
11
+ if locale_yaml[stem] && lang = locale_yaml[stem]["this_file_language"]
12
+ available_locales[lang] = stem
13
+ end
14
+ end
15
+ end
16
+ available_locales.collect {|k,v| [k, v]}.sort_by { |s| s[0] }
17
+ end
18
+
19
+ end
@@ -0,0 +1,100 @@
1
+ require 'rack/cache'
2
+ # So we can subclass the storage types
3
+ require 'rack/cache/storage'
4
+ require 'rack/cache/metastore'
5
+ require 'rack/cache/entitystore'
6
+
7
+ module TrustyCms
8
+ module Cache
9
+ mattr_accessor :meta_stores, :entity_stores, :use_x_sendfile, :use_x_accel_redirect
10
+ self.meta_stores ||= []
11
+ self.entity_stores ||= []
12
+ self.use_x_sendfile = false
13
+ self.use_x_accel_redirect = nil
14
+
15
+ def self.new(app, options={})
16
+ self.use_x_sendfile = options.delete(:use_x_sendfile) if options[:use_x_sendfile]
17
+ self.use_x_accel_redirect = options.delete(:use_x_accel_redirect) if options[:use_x_accel_redirect]
18
+ Rack::Cache.new(app, {
19
+ :private_headers => ['Authorization'],
20
+ :entitystore => "radiant:tmp/cache/entity",
21
+ :metastore => "radiant:tmp/cache/meta",
22
+ :verbose => false,
23
+ :allow_reload => false,
24
+ :allow_revalidate => false}.merge(options))
25
+ end
26
+
27
+ def self.clear
28
+ meta_stores.each {|ms| ms.clear }
29
+ entity_stores.each {|es| es.clear }
30
+ end
31
+
32
+ class EntityStore < Rack::Cache::EntityStore::Disk
33
+ def initialize(root="#{Rails.root}/tmp/cache/entity")
34
+ super
35
+ TrustyCms::Cache.entity_stores << self
36
+ end
37
+
38
+ def clear
39
+ Dir[File.join(self.root, "*")].each {|file| FileUtils.rm_rf(file) }
40
+ end
41
+
42
+ def write(body)
43
+ # Verify that the cache directory exists before attempting to write
44
+ FileUtils.mkdir_p(self.root, :mode => 0755) unless File.directory?(self.root)
45
+ super
46
+ end
47
+ end
48
+
49
+ class MetaStore < Rack::Cache::MetaStore::Disk
50
+ def initialize(root="#{Rails.root}/tmp/cache/meta")
51
+ super
52
+ TrustyCms::Cache.meta_stores << self
53
+ end
54
+
55
+ def clear
56
+ Dir[File.join(self.root, "*")].each {|file| FileUtils.rm_rf(file) }
57
+ end
58
+
59
+ def store(request, response, entitystore)
60
+ # Verify that the cache directory exists before attempting to store
61
+ FileUtils.mkdir_p(self.root, :mode => 0755) unless File.directory?(self.root)
62
+ super
63
+ end
64
+
65
+ private
66
+ def restore_response(hash, body=nil)
67
+ # Cribbed from the Rack::Cache source
68
+ status = hash.delete('X-Status').to_i
69
+ response = Rack::Cache::Response.new(status, hash, body)
70
+
71
+ # Add acceleration headers
72
+ if TrustyCms::Cache.use_x_sendfile
73
+ accelerate(response, 'X-Sendfile', File.expand_path(body.path))
74
+ elsif TrustyCms::Cache.use_x_accel_redirect
75
+ virtual_path = File.expand_path(body.path)
76
+ entity_path = File.expand_path(TrustyCms::Cache.entity_stores.first.root)
77
+ virtual_path[entity_path] = TrustyCms::Cache.use_x_accel_redirect
78
+ accelerate(response,'X-Accel-Redirect', virtual_path)
79
+ end
80
+ response
81
+ end
82
+
83
+ def accelerate(response, header, value)
84
+ response.headers[header] = value
85
+ response.body = []
86
+ response.headers['Content-Length'] = '0'
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ # Rack::Cache will look for a constant matching the uri scheme given to the :metastore and :entitystore options
93
+ # when initialising the Middleware
94
+ class Rack::Cache::EntityStore
95
+ RADIANT = TrustyCms::Cache::EntityStore
96
+ end
97
+
98
+ class Rack::Cache::MetaStore
99
+ RADIANT = TrustyCms::Cache::MetaStore
100
+ end