zen 0.3 → 0.4

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 (373) hide show
  1. data/.gems +3 -2
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -1
  5. data/LICENSE +1 -1
  6. data/README.md +28 -24
  7. data/Rakefile +5 -2
  8. data/guide/asset_management.md +6 -6
  9. data/guide/autosaving_forms.md +42 -0
  10. data/guide/changelog.md +41 -0
  11. data/guide/faq.md +49 -0
  12. data/guide/getting_started.md +24 -13
  13. data/guide/hacking.md +40 -9
  14. data/guide/images/categories/categories.png +0 -0
  15. data/guide/images/categories/category_groups.png +0 -0
  16. data/guide/images/categories/new_category.png +0 -0
  17. data/guide/images/categories/new_category_group.png +0 -0
  18. data/guide/images/comments/comments.png +0 -0
  19. data/guide/images/comments/edit_comment.png +0 -0
  20. data/guide/images/custom_fields/custom_field_groups.png +0 -0
  21. data/guide/images/custom_fields/custom_field_types.png +0 -0
  22. data/guide/images/custom_fields/custom_fields.png +0 -0
  23. data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
  24. data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
  25. data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
  26. data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
  27. data/guide/images/dashboard/added.png +0 -0
  28. data/guide/images/dashboard/columns.png +0 -0
  29. data/guide/images/dashboard/dashboard.png +0 -0
  30. data/guide/images/dashboard/options.png +0 -0
  31. data/guide/images/menus/edit_menu.png +0 -0
  32. data/guide/images/menus/edit_menu_item.png +0 -0
  33. data/guide/images/menus/menu_item_hierarchy.png +0 -0
  34. data/guide/images/menus/menu_items.png +0 -0
  35. data/guide/images/menus/menus.png +0 -0
  36. data/guide/images/sections/edit_entry.png +0 -0
  37. data/guide/images/sections/edit_entry_categories.png +0 -0
  38. data/guide/images/sections/edit_entry_general.png +0 -0
  39. data/guide/images/sections/edit_entry_meta.png +0 -0
  40. data/guide/images/sections/edit_section_comments.png +0 -0
  41. data/guide/images/sections/edit_section_general.png +0 -0
  42. data/guide/images/sections/edit_section_groups.png +0 -0
  43. data/guide/images/sections/entries.png +0 -0
  44. data/guide/images/sections/sections.png +0 -0
  45. data/guide/images/settings/overview_general.png +0 -0
  46. data/guide/images/settings/overview_security.png +0 -0
  47. data/guide/images/settings/overview_user.png +0 -0
  48. data/guide/images/users/edit_user.png +0 -0
  49. data/guide/images/users/edit_user_group.png +0 -0
  50. data/guide/images/users/edit_user_group_permissions.png +0 -0
  51. data/guide/images/users/edit_user_permissions.png +0 -0
  52. data/guide/images/users/overview.png +0 -0
  53. data/guide/images/users/user_groups_overview.png +0 -0
  54. data/guide/installation.md +7 -1
  55. data/guide/javascript.md +36 -273
  56. data/guide/javascript/zen_autosave.md +26 -0
  57. data/guide/javascript/zen_editor.md +83 -0
  58. data/guide/javascript/zen_hash.md +34 -0
  59. data/guide/javascript/zen_htmltable.md +78 -0
  60. data/guide/javascript/zen_tabs.md +44 -0
  61. data/guide/javascript/zen_window.md +49 -0
  62. data/guide/zen_compared.md +201 -0
  63. data/lib/vendor/sequel_sluggable.rb +1 -1
  64. data/lib/zen.rb +64 -44
  65. data/lib/zen/asset_groups.rb +10 -10
  66. data/lib/zen/bin/create.rb +8 -1
  67. data/lib/zen/helper/breadcrumb.rb +4 -12
  68. data/lib/zen/helper/controller.rb +209 -6
  69. data/lib/zen/helper/locale.rb +19 -0
  70. data/lib/zen/helper/search.rb +1 -1
  71. data/lib/zen/helper/stacked_aspect.rb +7 -43
  72. data/lib/zen/helper/theme.rb +3 -3
  73. data/lib/zen/language.rb +5 -10
  74. data/lib/zen/language/translation.rb +1 -1
  75. data/lib/zen/layout/admin.xhtml +41 -25
  76. data/lib/zen/layout/login.xhtml +8 -3
  77. data/lib/zen/migrator.rb +54 -0
  78. data/lib/zen/model/helper.rb +20 -1
  79. data/lib/zen/model/init.rb +2 -0
  80. data/lib/zen/model/plugin/events.rb +158 -0
  81. data/lib/zen/package.rb +32 -6
  82. data/lib/zen/package/all.rb +1 -0
  83. data/lib/zen/package/categories/lib/categories.rb +6 -6
  84. data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
  85. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
  86. data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
  87. data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
  88. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
  89. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
  90. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
  91. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
  92. data/lib/zen/package/comments/lib/comments.rb +5 -5
  93. data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
  94. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
  95. data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
  96. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
  97. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
  98. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  99. data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
  100. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
  101. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
  102. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
  103. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
  104. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
  105. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
  106. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
  107. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
  108. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
  109. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
  110. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
  111. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
  112. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
  113. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
  114. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
  115. data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
  116. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
  117. data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
  118. data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
  119. data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
  120. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
  121. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
  122. data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
  123. data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
  124. data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
  125. data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
  126. data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
  127. data/lib/zen/package/extensions/lib/extensions.rb +5 -5
  128. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
  129. data/lib/zen/package/menu.rb +6 -1
  130. data/lib/zen/package/menus/lib/menus.rb +6 -4
  131. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
  132. data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
  133. data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
  134. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
  135. data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
  136. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
  137. data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
  138. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
  139. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
  140. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
  141. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
  142. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
  143. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
  144. data/lib/zen/package/sections/lib/sections.rb +9 -4
  145. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
  146. data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
  147. data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
  148. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
  149. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
  150. data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
  151. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
  152. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
  153. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
  154. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
  155. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
  156. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
  157. data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
  158. data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
  159. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  160. data/lib/zen/package/settings/lib/settings.rb +14 -5
  161. data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
  162. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
  163. data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
  164. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
  165. data/lib/zen/package/users/lib/users.rb +18 -19
  166. data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
  167. data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
  168. data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
  169. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
  170. data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
  171. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
  172. data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
  173. data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
  174. data/lib/zen/package/users/lib/users/model/user.rb +57 -4
  175. data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
  176. data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
  177. data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
  178. data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
  179. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
  180. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
  181. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
  182. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
  183. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
  184. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
  185. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
  186. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
  187. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
  188. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
  189. data/lib/zen/public/admin/zen/css/buttons.css +106 -0
  190. data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
  191. data/lib/zen/public/admin/zen/css/editor.css +69 -0
  192. data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
  193. data/lib/zen/public/admin/zen/css/general.css +183 -0
  194. data/lib/zen/public/admin/zen/css/layout.css +224 -0
  195. data/lib/zen/public/admin/zen/css/messages.css +34 -0
  196. data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
  197. data/lib/zen/public/admin/zen/css/tables.css +57 -0
  198. data/lib/zen/public/admin/zen/css/tabs.css +84 -0
  199. data/lib/zen/public/admin/zen/css/window.css +74 -0
  200. data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
  201. data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
  202. data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
  203. data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
  204. data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
  205. data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
  206. data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
  207. data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
  208. data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
  209. data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
  210. data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
  211. data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
  212. data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
  213. data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
  214. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
  215. data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
  216. data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
  217. data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
  218. data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
  219. data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
  220. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
  221. data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
  222. data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
  223. data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
  224. data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
  225. data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
  226. data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
  227. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
  228. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
  229. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
  230. data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
  231. data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
  232. data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
  233. data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
  234. data/lib/zen/security.rb +50 -0
  235. data/lib/zen/spec/helper.rb +5 -120
  236. data/lib/zen/spec/helper/capybara.rb +75 -0
  237. data/lib/zen/spec/helper/general.rb +75 -0
  238. data/lib/zen/spec/simplecov.rb +1 -0
  239. data/lib/zen/task/build.rake +2 -21
  240. data/lib/zen/task/clean.rake +1 -10
  241. data/lib/zen/task/db.rake +4 -10
  242. data/lib/zen/task/package.rake +2 -5
  243. data/lib/zen/task/setup.rake +1 -1
  244. data/lib/zen/task/test.rake +6 -6
  245. data/lib/zen/task/theme.rake +2 -5
  246. data/lib/zen/theme.rb +26 -22
  247. data/lib/zen/version.rb +1 -1
  248. data/lib/zen/view/bottom.xhtml +2 -3
  249. data/lib/zen/view/search.xhtml +3 -5
  250. data/proto/app/config/config.rb.erb +1 -1
  251. data/proto/app/theme/default/index.xhtml +116 -20
  252. data/proto/app/theme/partials/head.xhtml +9 -0
  253. data/proto/app/theme/partials/sidebar.xhtml +40 -0
  254. data/proto/app/theme/theme.rb +3 -0
  255. data/spec/Rakefile +1 -2
  256. data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
  257. data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
  258. data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
  259. data/spec/fixtures/zen/theme/theme.rb +2 -2
  260. data/spec/helper.rb +19 -10
  261. data/spec/zen/controller/admin_controller.rb +3 -3
  262. data/spec/zen/controller/main_controller.rb +7 -7
  263. data/spec/zen/controller/preview.rb +3 -3
  264. data/spec/zen/event.rb +4 -4
  265. data/spec/zen/helper/breadcrumb.rb +4 -8
  266. data/spec/zen/helper/controller.rb +47 -4
  267. data/spec/zen/helper/locale.rb +3 -3
  268. data/spec/zen/helper/message.rb +4 -4
  269. data/spec/zen/helper/stacked_aspect.rb +40 -0
  270. data/spec/zen/helper/theme.rb +9 -9
  271. data/spec/zen/language.rb +8 -8
  272. data/spec/zen/markup.rb +6 -6
  273. data/spec/zen/package.rb +11 -9
  274. data/spec/zen/package/categories/controller/categories.rb +56 -24
  275. data/spec/zen/package/categories/controller/category_groups.rb +55 -23
  276. data/spec/zen/package/categories/helper/category.rb +5 -5
  277. data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
  278. data/spec/zen/package/comments/anti_spam.rb +4 -4
  279. data/spec/zen/package/comments/controller/comments.rb +95 -24
  280. data/spec/zen/package/comments/controller/comments_form.rb +31 -26
  281. data/spec/zen/package/comments/helper/comment.rb +3 -3
  282. data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
  283. data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
  284. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
  285. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
  286. data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
  287. data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
  288. data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
  289. data/spec/zen/package/dashboard/widget.rb +56 -0
  290. data/spec/zen/package/extensions/controller/extensions.rb +4 -4
  291. data/spec/zen/package/menus/controller/menu_items.rb +48 -39
  292. data/spec/zen/package/menus/controller/menus.rb +55 -24
  293. data/spec/zen/package/menus/helper/menu.rb +6 -14
  294. data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
  295. data/spec/zen/package/menus/model/menu.rb +121 -0
  296. data/spec/zen/package/menus/model/menu_item.rb +34 -0
  297. data/spec/zen/package/sections/controller/section_entries.rb +104 -39
  298. data/spec/zen/package/sections/controller/sections.rb +60 -27
  299. data/spec/zen/package/sections/helper/section.rb +5 -5
  300. data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
  301. data/spec/zen/package/sections/widget.rb +44 -0
  302. data/spec/zen/package/settings/controller/settings.rb +18 -16
  303. data/spec/zen/package/settings/settings.rb +12 -12
  304. data/spec/zen/package/users/controller/user_groups.rb +61 -29
  305. data/spec/zen/package/users/controller/users.rb +118 -39
  306. data/spec/zen/package/users/helper/access.rb +3 -3
  307. data/spec/zen/package/users/helper/acl.rb +4 -4
  308. data/spec/zen/package/users/helper/users.rb +5 -5
  309. data/spec/zen/security.rb +25 -0
  310. data/spec/zen/theme.rb +20 -18
  311. data/spec/zen/validation.rb +5 -5
  312. data/spec/zen/vendor/sequel_sluggable.rb +12 -0
  313. data/zen.gemspec +27 -4
  314. metadata +182 -124
  315. data/AUTHORS +0 -4
  316. data/guide/_static/categories/categories.png +0 -0
  317. data/guide/_static/categories/category_groups.png +0 -0
  318. data/guide/_static/categories/new_category.png +0 -0
  319. data/guide/_static/categories/new_category_group.png +0 -0
  320. data/guide/_static/comments/comments.png +0 -0
  321. data/guide/_static/comments/edit_comment.png +0 -0
  322. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  323. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  324. data/guide/_static/custom_fields/custom_fields.png +0 -0
  325. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  326. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  327. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  328. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  329. data/guide/_static/menus/edit_menu.png +0 -0
  330. data/guide/_static/menus/edit_menu_item.png +0 -0
  331. data/guide/_static/menus/menu_items.png +0 -0
  332. data/guide/_static/menus/menus.png +0 -0
  333. data/guide/_static/sections/edit_entry.png +0 -0
  334. data/guide/_static/sections/edit_entry_categories.png +0 -0
  335. data/guide/_static/sections/edit_entry_general.png +0 -0
  336. data/guide/_static/sections/edit_entry_meta.png +0 -0
  337. data/guide/_static/sections/edit_section_comments.png +0 -0
  338. data/guide/_static/sections/edit_section_general.png +0 -0
  339. data/guide/_static/sections/edit_section_groups.png +0 -0
  340. data/guide/_static/sections/entries.png +0 -0
  341. data/guide/_static/sections/sections.png +0 -0
  342. data/guide/_static/settings/overview_general.png +0 -0
  343. data/guide/_static/settings/overview_security.png +0 -0
  344. data/guide/_static/settings/overview_user.png +0 -0
  345. data/guide/_static/users/edit_user.png +0 -0
  346. data/guide/_static/users/edit_user_group.png +0 -0
  347. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  348. data/guide/_static/users/edit_user_permissions.png +0 -0
  349. data/guide/_static/users/overview.png +0 -0
  350. data/guide/_static/users/user_groups_overview.png +0 -0
  351. data/lib/zen/controller/translations.rb +0 -49
  352. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
  353. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
  354. data/lib/zen/public/admin/css/zen/buttons.css +0 -46
  355. data/lib/zen/public/admin/css/zen/editor.css +0 -88
  356. data/lib/zen/public/admin/css/zen/general.css +0 -109
  357. data/lib/zen/public/admin/css/zen/grid.css +0 -100
  358. data/lib/zen/public/admin/css/zen/layout.css +0 -184
  359. data/lib/zen/public/admin/css/zen/messages.css +0 -54
  360. data/lib/zen/public/admin/css/zen/tables.css +0 -97
  361. data/lib/zen/public/admin/css/zen/tabs.css +0 -47
  362. data/lib/zen/public/admin/css/zen/window.css +0 -73
  363. data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
  364. data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
  365. data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
  366. data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
  367. data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
  368. data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
  369. data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
  370. data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
  371. data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
  372. data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
  373. data/lib/zen/view/main.xhtml +0 -19
@@ -121,7 +121,7 @@ module Sequel
121
121
  # @param [String] String to be slugged
122
122
  # @return [String]
123
123
  def to_slug(value)
124
- value.chomp.downcase.gsub(/[^a-z0-9]+/,'-')
124
+ value.chomp.downcase.gsub(/[^a-z0-9_]+/, '-')
125
125
  end
126
126
 
127
127
  # Sets target column with source column which
data/lib/zen.rb CHANGED
@@ -1,15 +1,14 @@
1
1
  require 'ramaze'
2
+ require 'json'
2
3
 
3
4
  Ramaze.setup(:verbose => false) do
4
- gem 'sequel' , ['~> 3.28.0']
5
+ gem 'sequel' , ['~> 3.33.0']
5
6
  gem 'bcrypt-ruby' , ['~> 3.0.1'], :lib => 'bcrypt'
6
7
  gem 'loofah' , ['~> 1.2.0']
7
8
  gem 'ramaze-asset', ['~> 0.2.3'], :lib => 'ramaze/asset'
8
9
  end
9
10
 
10
- unless $LOAD_PATH.include?(__DIR__)
11
- $LOAD_PATH.unshift(__DIR__)
12
- end
11
+ $:.unshift(__DIR__) unless $:.include?(__DIR__)
13
12
 
14
13
  ##
15
14
  # Main module for Zen, all other modules and classes will be placed inside this
@@ -18,6 +17,28 @@ end
18
17
  # @since 0.1
19
18
  #
20
19
  module Zen
20
+ ##
21
+ # Array containing all the translations that should be made available to the
22
+ # Javascript code.
23
+ #
24
+ # @since 19-02-2012
25
+ #
26
+ JAVASCRIPT_TRANSLATIONS = [
27
+ 'zen_general.buttons.bold',
28
+ 'zen_general.buttons.italic',
29
+ 'zen_general.buttons.link',
30
+ 'zen_general.buttons.ul',
31
+ 'zen_general.buttons.ol',
32
+ 'zen_general.buttons.preview',
33
+ 'zen_general.buttons.close',
34
+ 'zen_general.datepicker.select_a_time',
35
+ 'zen_general.datepicker.use_mouse_wheel',
36
+ 'zen_general.datepicker.time_confirm_button',
37
+ 'zen_general.datepicker.apply_range',
38
+ 'zen_general.datepicker.cancel',
39
+ 'zen_general.datepicker.week'
40
+ ]
41
+
21
42
  class << self
22
43
  # The database connection to use for Sequel.
23
44
  attr_accessor :database
@@ -29,29 +50,40 @@ module Zen
29
50
  attr_reader :root
30
51
 
31
52
  ##
32
- # Sets the root directory and adds the path to Ramaze.options.roots.
53
+ # Sets the root directory and adds the path to Ramaze.options.roots. Once
54
+ # set this method sets up the global assets and loads all asset groups that
55
+ # ship with Zen.
33
56
  #
34
57
  # @since 0.3
35
58
  #
36
59
  def root=(path)
60
+ raise('You can only set Zen.root once') unless root.nil?
61
+
37
62
  @root = path
38
63
 
39
64
  if !Ramaze.options.roots.include?(@root)
40
65
  Ramaze.options.roots.push(@root)
41
66
  end
67
+
68
+ setup_assets
69
+ load_global_assets
42
70
  end
43
71
 
44
72
  ##
45
73
  # Prepares Zen for the party of it's life.
46
74
  #
47
- # @since 0.3
75
+ # @since 0.3
76
+ # @event pre_start Event that is fired before starting Zen.
77
+ # @event post_start Event that is fired after all packages have been loaded,
78
+ # the cache has been set up, etc. This event is called at the very end of
79
+ # the method.
48
80
  #
49
81
  def start
50
- if root.nil?
51
- raise('You need to specify a valid root directory in Zen.root')
52
- end
82
+ raise('No valid root directory specified in Zen.root') if root.nil?
83
+
84
+ Zen::Event.call(:pre_start)
53
85
 
54
- # Set up Ramaze::Cache manually. This makes it possible for the langauge
86
+ # Set up Ramaze::Cache manually. This makes it possible for the language
55
87
  # files to cache their data in the custom cache without having to wait for
56
88
  # Ramaze to set it up.
57
89
  Ramaze::Cache.setup
@@ -59,27 +91,12 @@ module Zen
59
91
 
60
92
  require 'zen/model/init'
61
93
  require 'zen/model/methods'
62
-
63
- setup_assets
64
-
65
94
  require 'zen/package/all'
66
95
 
67
- # Load the global stylesheet and Javascript file if they're located in
68
- # ROOT/public/css/admin/global.css and ROOT/public/js/admin/global.js
69
- load_global_assets
70
-
71
- # Migrate all settings
72
- begin
73
- Settings::Setting.migrate
74
- rescue => e
75
- Ramaze::Log.warn(
76
- 'Failed to migrate the settings, make sure the database ' \
77
- 'table is up to date and that you executed rake db:migrate.'
78
- )
79
- end
80
-
81
96
  Zen.asset.build(:javascript)
82
97
  Zen.asset.build(:css)
98
+
99
+ Zen::Event.call(:post_start)
83
100
  end
84
101
 
85
102
  private
@@ -104,14 +121,13 @@ module Zen
104
121
  Zen.asset.serve(
105
122
  :css,
106
123
  [
107
- 'admin/css/zen/reset',
108
- 'admin/css/zen/grid',
109
- 'admin/css/zen/layout',
110
- 'admin/css/zen/general',
111
- 'admin/css/zen/forms',
112
- 'admin/css/zen/tables',
113
- 'admin/css/zen/buttons',
114
- 'admin/css/zen/messages'
124
+ 'admin/zen/css/reset',
125
+ 'admin/zen/css/layout',
126
+ 'admin/zen/css/general',
127
+ 'admin/zen/css/forms',
128
+ 'admin/zen/css/tables',
129
+ 'admin/zen/css/buttons',
130
+ 'admin/zen/css/messages'
115
131
  ],
116
132
  :name => 'zen_core'
117
133
  )
@@ -119,10 +135,12 @@ module Zen
119
135
  Zen.asset.serve(
120
136
  :javascript,
121
137
  [
122
- 'admin/js/vendor/mootools/core',
123
- 'admin/js/vendor/mootools/more',
124
- 'admin/js/zen/lib/html_table',
125
- 'admin/js/zen/index'
138
+ 'admin/mootools/js/core',
139
+ 'admin/mootools/js/more',
140
+ 'admin/zen/js/lib/base',
141
+ 'admin/zen/js/lib/html_table',
142
+ 'admin/zen/js/lib/autosave',
143
+ 'admin/zen/js/index'
126
144
  ],
127
145
  :name => 'zen_core'
128
146
  )
@@ -142,16 +160,16 @@ module Zen
142
160
 
143
161
  publics.each do |p|
144
162
  p = File.join(Zen.root, p)
145
- css = File.join(p, 'admin', 'css', 'global.css')
146
- js = File.join(p, 'admin', 'js', 'global.js')
163
+ css = File.join(p, 'admin/zen/css/global.css')
164
+ js = File.join(p, 'admin/zen/js/global.js')
147
165
 
148
166
  if File.exist?(css) and css_loaded == false
149
- Zen.asset.serve(:css, ['admin/css/global'])
167
+ Zen.asset.serve(:css, ['admin/zen/css/global'])
150
168
  css_loaded = true
151
169
  end
152
170
 
153
171
  if File.exist?(js) and js_loaded == false
154
- Zen.asset.serve(:javascript, ['admin/js/global'])
172
+ Zen.asset.serve(:javascript, ['admin/zen/js/global'])
155
173
  js_loaded = true
156
174
  end
157
175
  end
@@ -172,6 +190,7 @@ require 'zen/validation'
172
190
  require 'zen/language'
173
191
  require 'zen/event'
174
192
  require 'zen/model/helper'
193
+ require 'zen/model/plugin/events'
175
194
  require 'zen/languages'
176
195
 
177
196
  Ramaze::HelpersHelper.options.paths.push(__DIR__('zen'))
@@ -183,6 +202,8 @@ include Zen::Language::SingletonMethods
183
202
  require 'zen/markup'
184
203
  require 'zen/package'
185
204
  require 'zen/theme'
205
+ require 'zen/security'
206
+ require 'zen/migrator'
186
207
 
187
208
  # Load all the base controllers
188
209
  require 'zen/controller/base_controller'
@@ -190,4 +211,3 @@ require 'zen/controller/frontend_controller'
190
211
  require 'zen/controller/admin_controller'
191
212
  require 'zen/controller/main_controller'
192
213
  require 'zen/controller/preview'
193
- require 'zen/controller/translations'
@@ -1,7 +1,7 @@
1
1
  Zen.asset.register_asset_group(:tabs) do |asset, controller, methods|
2
2
  asset.serve(
3
3
  :javascript,
4
- ['admin/js/zen/lib/tabs'],
4
+ ['admin/zen/js/lib/tabs', 'admin/zen/js/lib/hash'],
5
5
  :name => 'zen_tabs',
6
6
  :controller => controller,
7
7
  :minify => true,
@@ -10,7 +10,7 @@ Zen.asset.register_asset_group(:tabs) do |asset, controller, methods|
10
10
 
11
11
  asset.serve(
12
12
  :css,
13
- ['admin/css/zen/tabs'],
13
+ ['admin/zen/css/tabs'],
14
14
  :name => 'zen_tabs',
15
15
  :controller => controller,
16
16
  :minify => true,
@@ -21,7 +21,7 @@ end
21
21
  Zen.asset.register_asset_group(:datepicker) do |asset, controller, methods|
22
22
  asset.serve(
23
23
  :javascript,
24
- ['admin/js/vendor/datepicker'],
24
+ ['admin/zen/js/lib/datepicker'],
25
25
  :name => 'vendor_datepicker',
26
26
  :controller => controller,
27
27
  :minify => true,
@@ -30,7 +30,7 @@ Zen.asset.register_asset_group(:datepicker) do |asset, controller, methods|
30
30
 
31
31
  asset.serve(
32
32
  :css,
33
- ['admin/css/zen/datepicker'],
33
+ ['admin/zen/css/datepicker'],
34
34
  :name => 'vendor_datepicker',
35
35
  :controller => controller,
36
36
  :minify => true,
@@ -41,7 +41,7 @@ end
41
41
  Zen.asset.register_asset_group(:window) do |asset, controller, methods|
42
42
  asset.serve(
43
43
  :javascript,
44
- ['admin/js/zen/lib/window'],
44
+ ['admin/zen/js/lib/window'],
45
45
  :name => 'zen_window',
46
46
  :controller => controller,
47
47
  :minify => true,
@@ -50,7 +50,7 @@ Zen.asset.register_asset_group(:window) do |asset, controller, methods|
50
50
 
51
51
  asset.serve(
52
52
  :css,
53
- ['admin/css/zen/window'],
53
+ ['admin/zen/css/window'],
54
54
  :name => 'zen_window',
55
55
  :controller => controller,
56
56
  :minify => true,
@@ -64,9 +64,9 @@ Zen.asset.register_asset_group(:editor) do |asset, controller, methods|
64
64
  asset.serve(
65
65
  :javascript,
66
66
  [
67
- 'admin/js/zen/lib/editor',
68
- 'admin/js/zen/lib/editor/markdown',
69
- 'admin/js/zen/lib/editor/textile'
67
+ 'admin/zen/js/lib/editor',
68
+ 'admin/zen/js/lib/editor/markdown',
69
+ 'admin/zen/js/lib/editor/textile'
70
70
  ],
71
71
  :name => 'zen_editor',
72
72
  :controller => controller,
@@ -76,7 +76,7 @@ Zen.asset.register_asset_group(:editor) do |asset, controller, methods|
76
76
 
77
77
  asset.serve(
78
78
  :css,
79
- ['admin/css/zen/editor'],
79
+ ['admin/zen/css/editor'],
80
80
  :name => 'zen_editor',
81
81
  :controller => controller,
82
82
  :minify => true,
@@ -218,9 +218,16 @@ module Zen
218
218
  )
219
219
  end
220
220
 
221
+ puts
221
222
  puts wrap_string(
222
- "Your project has been created, you can find it in #{destination}"
223
+ "Your project has been created. Don't forget to migrate your " \
224
+ "database before starting Zen, this can be done using the " \
225
+ "following command:"
223
226
  )
227
+
228
+ puts
229
+ puts ' $ rake db:migrate'
230
+ puts
224
231
  end
225
232
 
226
233
  ##
@@ -21,8 +21,6 @@ module Ramaze
21
21
  # @since 0.1
22
22
  #
23
23
  module Breadcrumb
24
- @breadcrumbs = []
25
-
26
24
  ##
27
25
  # Appends each element to the list of breadcrumb segments.
28
26
  #
@@ -53,21 +51,15 @@ module Ramaze
53
51
  # segment.
54
52
  # @return [String]
55
53
  #
56
- def get_breadcrumbs(separator = "&raquo;")
54
+ def get_breadcrumbs(separator = '/')
57
55
  if !@breadcrumbs or @breadcrumbs.empty?
58
56
  return
59
57
  end
60
58
 
61
- html = ''
62
- separator = " #{separator} "
63
-
64
- @breadcrumbs.each do |segment|
65
- html += segment + separator
66
- end
67
-
68
- @breadcrumbs = nil
59
+ items = @breadcrumbs.dup
60
+ items[-1] = '<span class="current">%s</span>' % items[-1]
69
61
 
70
- return html.chomp(separator)
62
+ return items.join(' %s ' % separator)
71
63
  end
72
64
  end # Breadcrumb
73
65
  end # Helper
@@ -1,8 +1,7 @@
1
1
  module Ramaze
2
2
  module Helper
3
3
  ##
4
- # Helper that provides a few methods for commonly used code inside a
5
- # controller.
4
+ # General helper for methods that don't really belong into separate helpers.
6
5
  #
7
6
  # @since 0.3
8
7
  #
@@ -18,6 +17,152 @@ module Ramaze
18
17
  into.extend(Ramaze::Helper::Controller::ClassMethods)
19
18
  end
20
19
 
20
+ ##
21
+ # Returns an anchor tag that points towards the URL that allows users to
22
+ # manage collections of data.
23
+ #
24
+ # @since 17-12-2011
25
+ # @see Ramaze::Helper::Controller#edit_link
26
+ # @return [String]
27
+ #
28
+ def manage_link(url, text)
29
+ return '<a href="%s" class="icon pages">%s</a>' % [url, text]
30
+ end
31
+
32
+ ##
33
+ # Returns an anchor tag that should point to a form that allows users to
34
+ # edit certain resources.
35
+ #
36
+ # @since 17-12-2011
37
+ # @param [#to_s] url The URL for the link.
38
+ # @param [#to_s] text The text to display in the link tag.
39
+ # @return [String]
40
+ #
41
+ def edit_link(url, text)
42
+ return '<a href="%s" class="icon edit">%s</a>' % [url, text]
43
+ end
44
+
45
+ ##
46
+ # Returns a button that should point to a form that allows users to create
47
+ # new resources.
48
+ #
49
+ # @since 17-12-2011
50
+ # @see Ramaze::Helper::Controller#edit_link
51
+ #
52
+ def new_button(url, text)
53
+ return '<a href="%s" class="button">%s</a>' % [url, text]
54
+ end
55
+
56
+ ##
57
+ # Returns a button that when clicked should delete a set of resources.
58
+ #
59
+ # @since 17-12-2011
60
+ # @param [String] text The text to display on the button.
61
+ # @return [String]
62
+ #
63
+ def delete_button(text)
64
+ return '<input type="submit" value="%s" class="button danger" />' \
65
+ % text
66
+ end
67
+
68
+ ##
69
+ # Checks if a given object can be paginated and the page count is greater
70
+ # than 1. If this is the case then the pagination links are displayed.
71
+ #
72
+ # @since 17-12-2011
73
+ # @param [Mixed] object
74
+ # @return [String]
75
+ #
76
+ def render_pagination(object)
77
+ if object.respond_to?(:navigation) and object.page_count > 1
78
+ return object.navigation
79
+ end
80
+ end
81
+
82
+ ##
83
+ # Returns a string containing the name of the browser. The following
84
+ # values can be returned:
85
+ #
86
+ # * firefox
87
+ # * internet_explorer
88
+ # * chrome
89
+ # * safari
90
+ # * other
91
+ #
92
+ # Note that this method does a very simple check and thus should not be
93
+ # relied on for anything mission critical.
94
+ #
95
+ # @since 23-12-2011
96
+ # @param [String] agent String containing the user agent to check, set to
97
+ # ``request.env['HTTP_USER_AGENT']`` if no custom agent is specified.
98
+ # @return [String]
99
+ #
100
+ def browser_name(agent = nil)
101
+ agent ||= request.env['HTTP_USER_AGENT']
102
+
103
+ if agent.nil? or agent.empty?
104
+ return 'other'
105
+ end
106
+
107
+ case agent.downcase
108
+ when /chrome/
109
+ return 'chrome'
110
+
111
+ when /safari/
112
+ return 'safari'
113
+
114
+ when /msie/
115
+ return 'internet_explorer'
116
+
117
+ when /firefox/
118
+ return 'firefox'
119
+ end
120
+
121
+ return 'other'
122
+ end
123
+
124
+ ##
125
+ # Writes a JSON response.
126
+ #
127
+ # @since 13-02-2012
128
+ # @param [Mixed] data The response data.
129
+ # @param [Fixnum] status The HTTP status code.
130
+ #
131
+ def respond_json(data, status = 200)
132
+ respond(JSON.dump(data), status, 'Content-Type' => 'application/json')
133
+ end
134
+
135
+ ##
136
+ # Returns a hash containing all the given POST fields, similar to
137
+ # ``Innate::Request#subset``.
138
+ #
139
+ # @since 19-02-2012
140
+ # @param [Array] *keys The POST keys to retrieve.
141
+ # @return [Hash]
142
+ #
143
+ def post_fields(*keys)
144
+ keys = keys.map { |k| k.to_s }
145
+
146
+ request.POST.reject { |k, v| not keys.include?(k) }
147
+ end
148
+
149
+ ##
150
+ # Returns a JSON string containing all the translations for the Javascript
151
+ # code.
152
+ #
153
+ # @since 19-02-2012
154
+ # @return [String]
155
+ #
156
+ def javascript_translations
157
+ hash = {}
158
+
159
+ Zen::JAVASCRIPT_TRANSLATIONS.each do |key|
160
+ hash[key] = lang(key)
161
+ end
162
+
163
+ return JSON.dump(hash)
164
+ end
165
+
21
166
  ##
22
167
  # Methods that become available as class methods.
23
168
  #
@@ -58,12 +203,70 @@ module Ramaze
58
203
  # CSRF attacks.
59
204
  #
60
205
  def csrf_protection(*actions)
61
- # before_all() calls don't stack. Because CSRF protected methods are
62
- # usually used for POST calls (and are separate methods) this works
63
- # around it.
64
206
  stacked_before_all(:validate_csrf_token) do
65
207
  csrf_protection(*actions) do
66
- respond(lang('zen_general.errors.csrf'), 403)
208
+ message(:error, lang('zen_general.errors.csrf'))
209
+
210
+ unless request.POST.empty?
211
+ request.POST.delete('id')
212
+ request.POST.delete('csrf_token')
213
+
214
+ flash[:form_data] = request.POST
215
+ end
216
+
217
+ redirect_referrer(::Dashboard::Controller::Dashboard.r(:index))
218
+ end
219
+ end
220
+ end
221
+
222
+ ##
223
+ # Creates a method that can be used for automatically saving an existing
224
+ # object. This method requires you to supply the following:
225
+ #
226
+ # * A model that extends ``Sequel::Model``
227
+ # * An array of columns that can be specified
228
+ #
229
+ # @example
230
+ # autosave Model::CategoryGroup,
231
+ # [:name, :description],
232
+ # :edit_category_group
233
+ #
234
+ # @since 13-02-2012
235
+ # @param [Class] model The model to use for saving data.
236
+ # @param [Array] columns The columns that can be saved.
237
+ # @param [#to_sym] permission The permission required for saving
238
+ # objects.
239
+ #
240
+ def autosave(model, columns, permission)
241
+ self.instance_eval do
242
+ define_method :autosave do
243
+ csrf_protection(:autosave) do
244
+ respond(lang('zen_general.errors.csrf'), 403)
245
+ end
246
+
247
+ post = post_fields(*columns)
248
+ object = model[request.params['id']]
249
+
250
+ if object.nil? or !user_authorized?(permission)
251
+ respond_json(
252
+ {:error => lang('zen_general.errors.invalid_request')},
253
+ 404
254
+ )
255
+ else
256
+ begin
257
+ post.each do |k, v|
258
+ object.send("#{k}=", v) if object.respond_to?("#{k}=")
259
+ end
260
+
261
+ object.save
262
+
263
+ respond_json({:csrf_token => get_csrf_token}, 200)
264
+ rescue => e
265
+ Ramaze::Log.error(e)
266
+
267
+ respond_json({:errors => object.errors}, 400)
268
+ end
269
+ end
67
270
  end
68
271
  end
69
272
  end