gluttonberg-core 2.6.4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (613) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +29 -3
  3. data/Rakefile +32 -15
  4. data/app/assets/images/chosen-sprite-2x.png +0 -0
  5. data/app/assets/images/chosen-sprite.png +0 -0
  6. data/app/assets/images/{library/gb_sort_by_asc.png → gb_sort_by_asc.png} +0 -0
  7. data/app/assets/images/{library/gb_sort_by_desc.png → gb_sort_by_desc.png} +0 -0
  8. data/app/assets/javascripts/chosen-jquery-min.js +2 -0
  9. data/app/assets/javascripts/gb_360player.js +676 -0
  10. data/app/assets/javascripts/gb_application.js +708 -463
  11. data/app/assets/javascripts/gb_html5.js +9 -0
  12. data/app/assets/javascripts/gb_jeditable.js +356 -356
  13. data/app/assets/javascripts/gb_jquery-nestable.js +490 -0
  14. data/app/assets/javascripts/gb_utils.js +1808 -0
  15. data/app/assets/javascripts/gluttonberg.js +26 -0
  16. data/app/assets/javascripts/jcrop/css/gb_jquery-Jcrop.css +163 -31
  17. data/app/assets/javascripts/jcrop/js/jquery-Jcrop-min.js +19 -243
  18. data/app/assets/javascripts/jquery-1-10-1.js +6 -0
  19. data/app/assets/javascripts/jquery-ui-1-10-3.custom-min.js +6 -0
  20. data/app/assets/javascripts/jquery-validate.js +652 -718
  21. data/app/assets/javascripts/rails.js +372 -106
  22. data/app/assets/javascripts/redactormin.js +7348 -0
  23. data/app/assets/stylesheets/chosen.css +430 -0
  24. data/app/assets/stylesheets/gb_360player.css +2 -10
  25. data/app/assets/stylesheets/gb_admin-override.sass +466 -22
  26. data/app/assets/stylesheets/gb_bootstrap.css +7 -1
  27. data/app/assets/stylesheets/gluttonberg.css +17 -0
  28. data/app/assets/stylesheets/redactor.css +864 -0
  29. data/app/assets/stylesheets/user-styles.sass +0 -3
  30. data/app/controllers/gluttonberg/admin/asset_library/assets_ajax_controller.rb +65 -0
  31. data/app/controllers/gluttonberg/admin/asset_library/assets_bulk_controller.rb +47 -0
  32. data/app/controllers/gluttonberg/admin/asset_library/assets_controller.rb +43 -266
  33. data/app/controllers/gluttonberg/admin/asset_library/base_controller.rb +29 -0
  34. data/app/controllers/gluttonberg/admin/asset_library/collections_controller.rb +11 -37
  35. data/app/controllers/gluttonberg/admin/base_controller.rb +117 -178
  36. data/app/controllers/gluttonberg/admin/content/auto_save_controller.rb +63 -0
  37. data/app/controllers/gluttonberg/admin/content/flag_controller.rb +6 -6
  38. data/app/controllers/gluttonberg/admin/content/galleries_controller.rb +29 -37
  39. data/app/controllers/gluttonberg/admin/content/page_localizations_controller.rb +82 -49
  40. data/app/controllers/gluttonberg/admin/content/pages_controller.rb +59 -32
  41. data/app/controllers/gluttonberg/admin/main_controller.rb +77 -7
  42. data/app/controllers/gluttonberg/admin/membership/base_controller.rb +2 -1
  43. data/app/controllers/gluttonberg/admin/membership/groups_controller.rb +27 -33
  44. data/app/controllers/gluttonberg/admin/membership/main_controller.rb +3 -2
  45. data/app/controllers/gluttonberg/admin/membership/members_controller.rb +37 -42
  46. data/app/controllers/gluttonberg/admin/password_resets_controller.rb +16 -28
  47. data/app/controllers/gluttonberg/admin/settings/configurations_controller.rb +101 -0
  48. data/app/controllers/gluttonberg/admin/settings/embeds_controller.rb +79 -0
  49. data/app/controllers/gluttonberg/admin/settings/locales_controller.rb +22 -28
  50. data/app/controllers/gluttonberg/admin/settings/stylesheets_controller.rb +31 -36
  51. data/app/controllers/gluttonberg/admin/settings/users_controller.rb +45 -40
  52. data/app/controllers/gluttonberg/base_controller.rb +95 -0
  53. data/app/controllers/gluttonberg/public/base_controller.rb +104 -157
  54. data/app/controllers/gluttonberg/public/flag_controller.rb +2 -7
  55. data/app/controllers/gluttonberg/public/gallery_controller.rb +1 -0
  56. data/app/controllers/gluttonberg/public/member_password_resets_controller.rb +5 -17
  57. data/app/controllers/gluttonberg/public/members_controller.rb +5 -15
  58. data/app/controllers/gluttonberg/public/pages_controller.rb +25 -14
  59. data/app/controllers/gluttonberg/public/public_assets_controller.rb +4 -2
  60. data/app/helpers/gluttonberg/admin.rb +86 -368
  61. data/app/helpers/gluttonberg/admin/assets.rb +84 -0
  62. data/app/helpers/gluttonberg/admin/form.rb +159 -0
  63. data/app/helpers/gluttonberg/admin/messages.rb +32 -0
  64. data/app/helpers/gluttonberg/admin/versioning.rb +196 -0
  65. data/app/helpers/gluttonberg/application_helper.rb +34 -7
  66. data/app/helpers/gluttonberg/asset_library.rb +29 -254
  67. data/app/helpers/gluttonberg/content_helpers.rb +17 -69
  68. data/app/helpers/gluttonberg/deprecated.rb +24 -0
  69. data/app/helpers/gluttonberg/public.rb +51 -244
  70. data/app/helpers/gluttonberg/public/assets.rb +31 -0
  71. data/app/helpers/gluttonberg/public/cms_stylesheets.rb +35 -0
  72. data/app/helpers/gluttonberg/public/html_truncate.rb +74 -0
  73. data/app/helpers/gluttonberg/public/meta_tags.rb +27 -0
  74. data/app/helpers/gluttonberg/public/nav_tree.rb +99 -0
  75. data/app/helpers/gluttonberg/public/page_info.rb +168 -0
  76. data/app/mailer/gluttonberg/base_notifier.rb +25 -0
  77. data/app/mailer/member_notifier.rb +8 -20
  78. data/app/mailer/notifier.rb +14 -39
  79. data/app/models/ability.rb +48 -34
  80. data/app/models/flag.rb +7 -7
  81. data/app/models/gluttonberg/asset.rb +115 -166
  82. data/app/models/gluttonberg/asset_bulk_import.rb +70 -0
  83. data/app/models/gluttonberg/asset_category.rb +75 -29
  84. data/app/models/gluttonberg/asset_collection.rb +65 -12
  85. data/app/models/gluttonberg/asset_mime_type.rb +5 -0
  86. data/app/models/gluttonberg/asset_thumbnail.rb +6 -1
  87. data/app/models/gluttonberg/asset_type.rb +49 -38
  88. data/app/models/gluttonberg/audio_asset_attribute.rb +7 -3
  89. data/app/models/gluttonberg/authorization.rb +10 -0
  90. data/app/models/gluttonberg/auto_save.rb +32 -0
  91. data/app/models/gluttonberg/collapsed_page.rb +13 -0
  92. data/app/models/gluttonberg/embed.rb +13 -0
  93. data/app/models/gluttonberg/feed.rb +14 -5
  94. data/app/models/gluttonberg/gallery.rb +35 -9
  95. data/app/models/gluttonberg/gallery_image.rb +9 -2
  96. data/app/models/gluttonberg/group.rb +18 -2
  97. data/app/models/gluttonberg/html_content.rb +5 -1
  98. data/app/models/gluttonberg/image_content.rb +5 -1
  99. data/app/models/gluttonberg/locale.rb +28 -9
  100. data/app/models/gluttonberg/member.rb +48 -197
  101. data/app/models/gluttonberg/page.rb +78 -288
  102. data/app/models/gluttonberg/page_localization.rb +63 -66
  103. data/app/models/gluttonberg/plain_text_content.rb +6 -0
  104. data/app/models/gluttonberg/repeater.rb +30 -0
  105. data/app/models/gluttonberg/search.rb +96 -72
  106. data/app/models/gluttonberg/select_content.rb +12 -0
  107. data/app/models/gluttonberg/setting.rb +79 -29
  108. data/app/models/gluttonberg/sitemap.rb +1 -0
  109. data/app/models/gluttonberg/stylesheet.rb +12 -6
  110. data/app/models/gluttonberg/textarea_content.rb +14 -0
  111. data/app/models/gluttonberg/version.rb +9 -0
  112. data/app/models/user.rb +137 -13
  113. data/app/observers/gluttonberg/locale_observer.rb +33 -22
  114. data/app/observers/gluttonberg/page_localization_observer.rb +22 -12
  115. data/app/observers/gluttonberg/page_observer.rb +50 -35
  116. data/app/views/{gluttonberg/public/exceptions → exceptions}/access_denied.html.haml +0 -0
  117. data/app/views/{gluttonberg/public/exceptions → exceptions}/not_found.html.haml +0 -0
  118. data/app/views/gluttonberg/admin/asset_library/assets/_browser_root.html.haml +17 -12
  119. data/app/views/gluttonberg/admin/asset_library/assets/_form.html.haml +5 -7
  120. data/app/views/gluttonberg/admin/asset_library/assets/browser.html.haml +5 -5
  121. data/app/views/gluttonberg/admin/asset_library/assets/show.html.haml +13 -7
  122. data/app/views/gluttonberg/admin/asset_library/assets/show.json.rabl +3 -0
  123. data/app/views/gluttonberg/admin/asset_library/{assets → assets_ajax}/browser_collection.json.haml +0 -0
  124. data/app/views/gluttonberg/admin/asset_library/{assets → assets_bulk}/add_assets_in_bulk.html.haml +6 -20
  125. data/app/views/gluttonberg/admin/asset_library/{assets → assets_bulk}/create_assets_in_bulk.html.haml +0 -0
  126. data/app/views/gluttonberg/admin/asset_library/collections/_form.html.haml +8 -5
  127. data/app/views/gluttonberg/admin/asset_library/shared/_asset_browser.html.haml +34 -0
  128. data/app/views/gluttonberg/admin/asset_library/shared/_asset_panels.html.haml +15 -11
  129. data/app/views/gluttonberg/admin/content/editors/_html_content.html.haml +2 -2
  130. data/app/views/gluttonberg/admin/content/editors/_select_content.html.haml +7 -0
  131. data/app/views/gluttonberg/admin/content/editors/_textarea_content.html.haml +6 -0
  132. data/app/views/gluttonberg/admin/content/flag/index.html.haml +48 -39
  133. data/app/views/gluttonberg/admin/content/galleries/_form.html.haml +46 -9
  134. data/app/views/gluttonberg/admin/content/galleries/_image_repeater.html.haml +30 -0
  135. data/app/views/gluttonberg/admin/content/galleries/edit.html.haml +1 -12
  136. data/app/views/gluttonberg/admin/content/galleries/index.html.haml +18 -9
  137. data/app/views/gluttonberg/admin/content/galleries/new.html.haml +1 -1
  138. data/app/views/gluttonberg/admin/content/main/_sidebar.html.haml +28 -16
  139. data/app/views/gluttonberg/admin/content/page_localizations/_form.html.haml +11 -20
  140. data/app/views/gluttonberg/admin/content/page_localizations/edit.html.haml +7 -0
  141. data/app/views/gluttonberg/admin/content/pages/_form.html.haml +11 -4
  142. data/app/views/gluttonberg/admin/content/pages/_page_settings.html.haml +4 -7
  143. data/app/views/gluttonberg/admin/content/pages/_row.html.haml +38 -30
  144. data/app/views/gluttonberg/admin/content/pages/index.html.haml +23 -15
  145. data/app/views/gluttonberg/admin/content/pages/pages_list_for_tinymce.html.haml +14 -3
  146. data/app/views/gluttonberg/admin/content/pages/show.html.haml +1 -1
  147. data/app/views/gluttonberg/admin/main/index.html.haml +13 -12
  148. data/app/views/gluttonberg/admin/main/waiting_for_approval.html.haml +33 -0
  149. data/app/views/gluttonberg/admin/membership/groups/index.html.haml +5 -5
  150. data/app/views/gluttonberg/admin/membership/members/_form.html.haml +3 -1
  151. data/app/views/gluttonberg/admin/membership/members/edit.html.haml +1 -0
  152. data/app/views/gluttonberg/admin/membership/members/index.html.haml +1 -1
  153. data/app/views/gluttonberg/admin/password_resets/edit.html.haml +36 -16
  154. data/app/views/gluttonberg/admin/password_resets/new.html.haml +19 -11
  155. data/app/views/gluttonberg/admin/settings/configurations/_form.html.haml +28 -0
  156. data/app/views/gluttonberg/admin/settings/configurations/_settings_table.html.haml +42 -0
  157. data/app/views/gluttonberg/admin/settings/{generic_settings → configurations}/_value_tag.html.haml +0 -0
  158. data/app/views/gluttonberg/admin/settings/configurations/edit.html.haml +4 -0
  159. data/app/views/gluttonberg/admin/settings/configurations/index.html.haml +31 -0
  160. data/app/views/gluttonberg/admin/settings/{generic_settings → configurations}/new.html.haml +2 -2
  161. data/app/views/gluttonberg/admin/settings/embeds/_form.html.haml +19 -0
  162. data/app/views/gluttonberg/admin/settings/embeds/edit.html.haml +12 -0
  163. data/app/views/gluttonberg/admin/settings/embeds/index.html.haml +36 -0
  164. data/app/views/gluttonberg/admin/settings/embeds/list_for_redactor.html.haml +29 -0
  165. data/app/views/gluttonberg/admin/settings/embeds/new.html.haml +12 -0
  166. data/app/views/gluttonberg/admin/settings/locales/edit.html.haml +9 -1
  167. data/app/views/gluttonberg/admin/settings/locales/index.html.haml +2 -1
  168. data/app/views/gluttonberg/admin/settings/locales/new.html.haml +10 -1
  169. data/app/views/gluttonberg/admin/settings/main/_sidebar.html.haml +9 -7
  170. data/app/views/gluttonberg/admin/settings/stylesheets/_form.html.haml +11 -9
  171. data/app/views/gluttonberg/admin/settings/stylesheets/edit.html.haml +11 -2
  172. data/app/views/gluttonberg/admin/settings/stylesheets/index.html.haml +45 -36
  173. data/app/views/gluttonberg/admin/settings/stylesheets/new.html.haml +11 -2
  174. data/app/views/gluttonberg/admin/settings/users/_form.html.haml +29 -18
  175. data/app/views/gluttonberg/admin/settings/users/index.html.haml +1 -1
  176. data/app/views/gluttonberg/admin/shared/_asset_panel.html.haml +19 -4
  177. data/app/views/gluttonberg/admin/shared/_auto_save_version.html.haml +12 -0
  178. data/app/views/gluttonberg/admin/shared/_datetime_field.html.haml +19 -0
  179. data/app/views/gluttonberg/admin/shared/_previous_version_warning.html.haml +5 -0
  180. data/app/views/gluttonberg/admin/shared/_version_alerts.html.haml +34 -0
  181. data/app/views/gluttonberg/admin/shared/_version_dashboard_notifications.html.haml +11 -0
  182. data/app/views/gluttonberg/admin/shared/_version_listing.html.haml +23 -0
  183. data/app/views/gluttonberg/admin/shared/delete.html.haml +21 -48
  184. data/app/views/gluttonberg/admin/shared/generic.html.haml +20 -19
  185. data/app/views/gluttonberg/admin/user_sessions/new.html.haml +14 -9
  186. data/app/views/gluttonberg/public/member_password_resets/edit.html.haml +2 -0
  187. data/app/views/gluttonberg/public/member_password_resets/new.html.haml +3 -0
  188. data/app/views/gluttonberg/public/members/_form.html.haml +3 -0
  189. data/app/views/gluttonberg/public/members/edit.html.haml +7 -9
  190. data/app/views/gluttonberg/public/members/show.html.haml +1 -3
  191. data/app/views/gluttonberg/public/pages/restrict_site_access.html.haml +3 -4
  192. data/app/views/gluttonberg/public/shared/_gallery_images_lis.html.haml +9 -0
  193. data/app/views/layouts/_flash_messages.html.haml +5 -3
  194. data/app/views/layouts/bare.html.haml +8 -17
  195. data/app/views/layouts/gluttonberg.html.haml +37 -44
  196. data/app/views/notifier/version_declined.html.haml +21 -0
  197. data/config/locales/en_au.yml +1 -1
  198. data/config/locales/en_gb.yml +2 -1
  199. data/config/routes.rb +70 -85
  200. data/db/migrate/20130801050257_create_repeater.rb +14 -0
  201. data/lib/audio_job.rb +11 -9
  202. data/lib/engine.rb +115 -72
  203. data/lib/generators/gluttonberg/resource/resource_generator.rb +51 -41
  204. data/lib/generators/gluttonberg/resource/templates/admin_controller.rb +16 -11
  205. data/lib/generators/gluttonberg/resource/templates/backend_view_edit.html.haml +7 -2
  206. data/lib/generators/gluttonberg/resource/templates/backend_view_form.html.haml +3 -14
  207. data/lib/generators/gluttonberg/resource/templates/backend_view_import.html.haml +10 -7
  208. data/lib/generators/gluttonberg/resource/templates/backend_view_index.html.haml +6 -5
  209. data/lib/generators/gluttonberg/resource/templates/backend_view_show.html.haml +2 -2
  210. data/lib/generators/gluttonberg/resource/templates/migration.rb +12 -1
  211. data/lib/generators/gluttonberg/resource/templates/model.rb +18 -1
  212. data/lib/generators/gluttonberg/resource/templates/public_view_index.html.haml +27 -10
  213. data/lib/generators/gluttonberg/resource/templates/public_view_show.html.haml +10 -4
  214. data/lib/gluttonberg.rb +68 -37
  215. data/lib/gluttonberg/can_flag.rb +64 -76
  216. data/lib/gluttonberg/components.rb +47 -24
  217. data/lib/gluttonberg/content.rb +15 -0
  218. data/lib/gluttonberg/content/block.rb +99 -85
  219. data/lib/gluttonberg/content/block_localization.rb +11 -8
  220. data/lib/gluttonberg/content/clean_html.rb +12 -15
  221. data/lib/gluttonberg/content/default_template_file.rb +44 -0
  222. data/lib/gluttonberg/content/despamilator/filter/naughty_words.rb +4 -2
  223. data/lib/gluttonberg/content/home_page_info.rb +39 -0
  224. data/lib/gluttonberg/content/import_export_csv.rb +243 -130
  225. data/lib/gluttonberg/content/localization.rb +137 -148
  226. data/lib/gluttonberg/content/page_children.rb +36 -0
  227. data/lib/gluttonberg/content/page_components.rb +23 -0
  228. data/lib/gluttonberg/content/page_description_info.rb +55 -0
  229. data/lib/gluttonberg/content/page_duplicate.rb +68 -0
  230. data/lib/gluttonberg/content/page_finder.rb +63 -0
  231. data/lib/gluttonberg/content/page_localization_slug.rb +89 -0
  232. data/lib/gluttonberg/content/page_repairer.rb +117 -0
  233. data/lib/gluttonberg/content/publishable.rb +77 -71
  234. data/lib/gluttonberg/content/slug_management.rb +74 -26
  235. data/lib/gluttonberg/content/validations.rb +58 -0
  236. data/lib/gluttonberg/content/versioning.rb +40 -22
  237. data/lib/gluttonberg/drag_tree.rb +0 -1
  238. data/lib/gluttonberg/drag_tree/action_controller.rb +49 -37
  239. data/lib/gluttonberg/drag_tree/action_view.rb +0 -6
  240. data/lib/gluttonberg/drag_tree/active_record.rb +49 -49
  241. data/lib/gluttonberg/extensions.rb +1 -0
  242. data/lib/gluttonberg/extensions/string.rb +20 -0
  243. data/lib/gluttonberg/gb_file.rb +30 -0
  244. data/lib/gluttonberg/helpers/form_builder.rb +91 -38
  245. data/lib/gluttonberg/library.rb +9 -90
  246. data/lib/gluttonberg/library/attachment_mixin.rb +88 -98
  247. data/lib/gluttonberg/library/config/image_sizes.rb +22 -19
  248. data/lib/gluttonberg/library/default_asset_types.rb +104 -0
  249. data/lib/gluttonberg/library/processor/audio.rb +32 -16
  250. data/lib/gluttonberg/library/processor/image.rb +78 -69
  251. data/lib/gluttonberg/library/quick_magick/image.rb +72 -319
  252. data/lib/gluttonberg/library/quick_magick/image/draw.rb +133 -0
  253. data/lib/gluttonberg/library/quick_magick/image/operators_and_settings.rb +78 -0
  254. data/lib/gluttonberg/library/quick_magick/image/serialization.rb +79 -0
  255. data/lib/gluttonberg/library/quick_magick/image_list.rb +0 -1
  256. data/lib/gluttonberg/library/storage/filesystem.rb +45 -46
  257. data/lib/gluttonberg/library/storage/s3.rb +123 -119
  258. data/lib/gluttonberg/membership.rb +9 -0
  259. data/lib/gluttonberg/membership/export.rb +82 -0
  260. data/lib/gluttonberg/membership/import.rb +179 -0
  261. data/lib/gluttonberg/middleware/honeypot.rb +1 -2
  262. data/lib/gluttonberg/middleware/locales.rb +69 -18
  263. data/lib/gluttonberg/middleware/rewriter.rb +57 -16
  264. data/lib/gluttonberg/mixin_manager.rb +19 -0
  265. data/lib/gluttonberg/page_description.rb +82 -112
  266. data/lib/gluttonberg/random_string_generator.rb +31 -0
  267. data/lib/gluttonberg/record_history.rb +5 -7
  268. data/lib/gluttonberg/tasks/asset.rake +19 -8
  269. data/lib/gluttonberg/tasks/gluttonberg.rake +167 -13
  270. data/lib/gluttonberg/templates.rb +1 -3
  271. data/lib/gluttonberg/version.rb +1 -1
  272. data/lib/photo_job.rb +16 -0
  273. data/spec/controllers/auto_save_controller_spec.rb +57 -0
  274. data/spec/controllers/record_history_spec.rb +75 -0
  275. data/spec/dummy/README.rdoc +261 -0
  276. data/spec/dummy/Rakefile +7 -0
  277. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  278. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  279. data/spec/dummy/app/controllers/admin/staff_profiles_controller.rb +56 -0
  280. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  281. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  282. data/spec/dummy/app/models/staff_profile.rb +20 -0
  283. data/spec/dummy/app/models/vendor_mixin.rb +14 -0
  284. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  285. data/spec/dummy/config.ru +4 -0
  286. data/spec/dummy/config/application.rb +18 -0
  287. data/spec/dummy/config/boot.rb +10 -0
  288. data/spec/dummy/config/database.yml +8 -0
  289. data/spec/dummy/config/environment.rb +5 -0
  290. data/spec/dummy/config/environments/development.rb +37 -0
  291. data/spec/dummy/config/environments/production.rb +67 -0
  292. data/spec/dummy/config/environments/test.rb +37 -0
  293. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  294. data/spec/dummy/config/initializers/gluttonberg_advance_settings.rb +73 -0
  295. data/spec/dummy/config/initializers/gluttonberg_basic_settings.rb +65 -0
  296. data/spec/dummy/config/initializers/gluttonberg_menu_settings.rb +1 -0
  297. data/spec/dummy/config/initializers/inflections.rb +15 -0
  298. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  299. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  300. data/spec/dummy/config/initializers/session_store.rb +8 -0
  301. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  302. data/spec/dummy/config/locales/en.yml +5 -0
  303. data/{lib/generators/gluttonberg/installer/templates → spec/dummy/config}/page_descriptions.rb +103 -65
  304. data/spec/dummy/config/routes.rb +10 -0
  305. data/spec/dummy/db/20130625060411_create_staff_profile.rb +35 -0
  306. data/spec/dummy/db/schema.rb +474 -0
  307. data/spec/dummy/public/404.html +26 -0
  308. data/spec/dummy/public/422.html +26 -0
  309. data/spec/dummy/public/500.html +25 -0
  310. data/spec/dummy/public/favicon.ico +0 -0
  311. data/spec/dummy/script/rails +6 -0
  312. data/spec/dummy/tmp/cache/041/891/setting_library_number_of_recent_assets +0 -0
  313. data/spec/dummy/tmp/cache/08E/741/setting_comment_number_of_emails_allowed +0 -0
  314. data/spec/dummy/tmp/cache/580/D10/setting_title +0 -0
  315. data/spec/dummy/tmp/cache/62E/160/setting_fb_icon +0 -0
  316. data/spec/dummy/tmp/cache/6D6/FB0/setting_keywords +0 -0
  317. data/spec/dummy/tmp/cache/6D8/B60/setting_s3_key_id +0 -0
  318. data/spec/dummy/tmp/cache/6E1/A40/setting_s3_bucket +0 -0
  319. data/spec/dummy/tmp/cache/779/DF0/setting_from_email +0 -0
  320. data/spec/dummy/tmp/cache/7C5/450/setting_title_site1 +0 -0
  321. data/spec/dummy/tmp/cache/7C6/460/setting_title_site2 +0 -0
  322. data/spec/dummy/tmp/cache/802/000/setting_description +0 -0
  323. data/spec/dummy/tmp/cache/836/DD0/setting_backend_logo +0 -0
  324. data/spec/dummy/tmp/cache/862/FA0/setting_audio_assets +1 -0
  325. data/spec/dummy/tmp/cache/867/4E0/setting_video_assets +0 -0
  326. data/spec/dummy/tmp/cache/867/710/setting_enable_WYSIWYG +0 -0
  327. data/spec/dummy/tmp/cache/873/9E0/setting_fb_icon_site1 +0 -0
  328. data/spec/dummy/tmp/cache/874/9F0/setting_fb_icon_site2 +0 -0
  329. data/spec/dummy/tmp/cache/87D/A10/setting_s3_access_key +0 -0
  330. data/spec/dummy/tmp/cache/8AC/280/setting_s3_server_url +0 -0
  331. data/spec/dummy/tmp/cache/91B/730/setting_keywords_site1 +0 -0
  332. data/spec/dummy/tmp/cache/91C/740/setting_keywords_site2 +0 -0
  333. data/spec/dummy/tmp/cache/933/980/setting_auto_save_time +0 -0
  334. data/spec/dummy/tmp/cache/9BE/290/setting_from_email_site1 +0 -0
  335. data/spec/dummy/tmp/cache/9BF/2A0/setting_from_email_site2 +0 -0
  336. data/spec/dummy/tmp/cache/A02/5E0/setting_google_analytics +0 -0
  337. data/spec/dummy/tmp/cache/A47/800/setting_description_site1 +0 -0
  338. data/spec/dummy/tmp/cache/A48/810/setting_description_site2 +0 -0
  339. data/spec/dummy/tmp/cache/A69/B60/setting_comment_blacklist +0 -0
  340. data/spec/dummy/tmp/cache/B5C/D40/setting_number_of_revisions +0 -0
  341. data/spec/dummy/tmp/cache/BB3/350/setting_restrict_site_access +0 -0
  342. data/spec/dummy/tmp/cache/BB7/620/setting_comment_notification +0 -0
  343. data/spec/dummy/tmp/cache/BFB/140/setting_comment_email_as_spam +0 -0
  344. data/spec/dummy/tmp/cache/C47/DE0/setting_google_analytics_site1 +0 -0
  345. data/spec/dummy/tmp/cache/C48/DF0/setting_google_analytics_site2 +0 -0
  346. data/spec/dummy/tmp/cache/D3E/E20/setting_number_of_per_page_items +0 -0
  347. data/spec/dummy/tmp/cache/DF8/DB0/setting_restrict_site_access_site1 +0 -0
  348. data/spec/dummy/tmp/cache/DF9/DC0/setting_restrict_site_access_site2 +0 -0
  349. data/spec/dummy/tmp/cache/DFC/200/setting_comment_notification_site1 +0 -0
  350. data/spec/dummy/tmp/cache/DFD/210/setting_comment_notification_site2 +0 -0
  351. data/spec/dummy/tmp/cache/FD9/200/setting_comment_number_of_urls_allowed +0 -0
  352. data/spec/fixtures/assets/assets_import.zip +0 -0
  353. data/spec/fixtures/assets/audio.mp3 +0 -0
  354. data/spec/fixtures/assets/c3-add-interactive.mov +0 -0
  355. data/spec/fixtures/assets/gb_banner.jpg +0 -0
  356. data/spec/fixtures/assets/gb_logo.png +0 -0
  357. data/spec/fixtures/assets/high_res_photo.jpg +0 -0
  358. data/spec/fixtures/assets/untitled +0 -0
  359. data/spec/fixtures/members.csv +5 -0
  360. data/spec/fixtures/staff_profiles.csv +4 -0
  361. data/spec/helpers/public/assets_spec.rb +73 -0
  362. data/spec/helpers/public/content_helpers_spec.rb +71 -0
  363. data/spec/helpers/public/html_truncate_spec.rb +37 -0
  364. data/spec/helpers/public/meta_tags_spec.rb +29 -0
  365. data/spec/helpers/public/page_info_spec.rb +233 -0
  366. data/spec/helpers/public_spec.rb +114 -0
  367. data/spec/lib/content/import_export_csv_spec.rb +177 -0
  368. data/spec/lib/content/localization_spec.rb +107 -0
  369. data/spec/lib/content/page_finder_spec.rb +71 -0
  370. data/spec/lib/content/page_repairer_spec.rb +151 -0
  371. data/spec/lib/content/publishable_spec.rb +54 -0
  372. data/spec/lib/content/validations_spec.rb +88 -0
  373. data/spec/lib/drag_tree/action_controller_spec.rb +137 -0
  374. data/spec/lib/drag_tree/active_record_spec.rb +86 -0
  375. data/spec/lib/library/s3_rspec.rb +78 -0
  376. data/spec/lib/membership/export_spec.rb +89 -0
  377. data/spec/lib/membership/import_spec.rb +68 -0
  378. data/spec/lib/middleware/locales_spec.rb +192 -0
  379. data/spec/lib/middleware/rewriter_spec.rb +186 -0
  380. data/spec/lib/page_description_spec.rb +68 -0
  381. data/spec/mailers/member_notifier_spec.rb +140 -0
  382. data/spec/mailers/notifier_spec.rb +86 -0
  383. data/spec/models/asset_bulk_import_spec.rb +43 -0
  384. data/spec/models/asset_category_spec.rb +77 -0
  385. data/spec/models/asset_collection_spec.rb +72 -0
  386. data/spec/models/asset_spec.rb +278 -0
  387. data/spec/models/asset_type_spec.rb +109 -0
  388. data/spec/models/member_spec.rb +128 -0
  389. data/spec/models/page_localization_spec.rb +81 -0
  390. data/spec/models/page_spec.rb +221 -0
  391. data/spec/models/setting_spec.rb +49 -0
  392. data/spec/models/user_spec.rb +385 -0
  393. data/spec/observers/locale_observer_spec.rb +79 -0
  394. data/spec/observers/page_localization_observer_spec.rb +87 -0
  395. data/spec/observers/page_observer_spec.rb +130 -0
  396. data/spec/spec_helper.rb +90 -0
  397. metadata +508 -331
  398. data/app/assets/images/gb_360-button-pause-light.gif +0 -0
  399. data/app/assets/images/gb_360-button-pause-light.png +0 -0
  400. data/app/assets/images/gb_360-button-pause.gif +0 -0
  401. data/app/assets/images/gb_360-button-pause.png +0 -0
  402. data/app/assets/images/gb_360-button-play-light.gif +0 -0
  403. data/app/assets/images/gb_360-button-play-light.png +0 -0
  404. data/app/assets/images/gb_360-button-play.gif +0 -0
  405. data/app/assets/images/gb_360-button-play.png +0 -0
  406. data/app/assets/images/gb_360-button-vis-pause-light.gif +0 -0
  407. data/app/assets/images/gb_360-button-vis-pause-light.png +0 -0
  408. data/app/assets/images/gb_360-button-vis-pause.gif +0 -0
  409. data/app/assets/images/gb_360-button-vis-pause.png +0 -0
  410. data/app/assets/images/gb_360-button-vis-play-light.gif +0 -0
  411. data/app/assets/images/gb_360-button-vis-play-light.png +0 -0
  412. data/app/assets/images/gb_360-button-vis-play.gif +0 -0
  413. data/app/assets/images/gb_360-button-vis-play.png +0 -0
  414. data/app/assets/images/gb_button_bkg_grey.gif +0 -0
  415. data/app/assets/images/gb_icon_content_2.png +0 -0
  416. data/app/assets/images/gb_icon_dash.png +0 -0
  417. data/app/assets/images/gb_icon_library_2.png +0 -0
  418. data/app/assets/images/gb_page_content_fillin.gif +0 -0
  419. data/app/assets/images/gb_spinner_for_dialouge.gif +0 -0
  420. data/app/assets/images/gb_sub_nav_back_bkg.gif +0 -0
  421. data/app/assets/images/gb_subnav_bkg.gif +0 -0
  422. data/app/assets/images/gb_table_head_bkg.gif +0 -0
  423. data/app/assets/images/gb_wrapper_bkg.png +0 -0
  424. data/app/assets/images/gb_wysiwyg.png +0 -0
  425. data/app/assets/images/help/gb_help.jpg +0 -0
  426. data/app/assets/images/icons/gb_collapsed.png +0 -0
  427. data/app/assets/images/icons/gb_expanded.png +0 -0
  428. data/app/assets/images/library/gb_back.gif +0 -0
  429. data/app/assets/images/library/gb_dialog_overlay.png +0 -0
  430. data/app/assets/images/library/gb_inactive_tab.jpg +0 -0
  431. data/app/assets/images/library/gb_search_icon.gif +0 -0
  432. data/app/assets/images/library/gb_wysiwyg_pic.png +0 -0
  433. data/app/assets/javascripts/gb_ajaxfileupload.js +0 -205
  434. data/app/assets/javascripts/gb_berniecode-animator.js +0 -674
  435. data/app/assets/javascripts/gb_bootstrap-datepicker.js +0 -501
  436. data/app/assets/javascripts/gb_expander.js +0 -81
  437. data/app/assets/javascripts/gb_jquery-dragTree.js +0 -525
  438. data/app/assets/javascripts/gb_jquery-tagarea.js +0 -404
  439. data/app/assets/javascripts/gb_login.js +0 -33
  440. data/app/assets/javascripts/gb_tags.js +0 -177
  441. data/app/assets/javascripts/jquery-1-7-1.js +0 -9267
  442. data/app/assets/javascripts/jquery-dimensions-min.js +0 -12
  443. data/app/assets/javascripts/jquery-ui-1-8-23-custom-min.js +0 -85
  444. data/app/assets/javascripts/tiny_mce/jquery.tinymce.js +0 -1
  445. data/app/assets/javascripts/tiny_mce/langs/en.js +0 -223
  446. data/app/assets/javascripts/tiny_mce/plugins/advhr/css/advhr.css +0 -5
  447. data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +0 -1
  448. data/app/assets/javascripts/tiny_mce/plugins/advhr/js/rule.js +0 -43
  449. data/app/assets/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +0 -7
  450. data/app/assets/javascripts/tiny_mce/plugins/advhr/rule.htm +0 -58
  451. data/app/assets/javascripts/tiny_mce/plugins/advlink/css/advlink.css +0 -8
  452. data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +0 -61
  453. data/app/assets/javascripts/tiny_mce/plugins/advlink/js/advlink.js +0 -564
  454. data/app/assets/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +0 -54
  455. data/app/assets/javascripts/tiny_mce/plugins/advlink/link.htm +0 -355
  456. data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin.js +0 -1
  457. data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin.js +0 -1
  458. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
  459. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
  460. data/app/assets/javascripts/tiny_mce/plugins/gb_assets/editor_plugin.js +0 -47
  461. data/app/assets/javascripts/tiny_mce/plugins/gb_assets/editor_plugin_src.js +0 -43
  462. data/app/assets/javascripts/tiny_mce/plugins/gb_assets/emotions.htm +0 -41
  463. data/app/assets/javascripts/tiny_mce/plugins/gb_assets/js/emotions.js +0 -22
  464. data/app/assets/javascripts/tiny_mce/plugins/gb_assets/langs/en_dlg.js +0 -20
  465. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
  466. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  467. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  468. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  469. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  470. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  471. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  472. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  473. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +0 -90
  474. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +0 -387
  475. data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +0 -1
  476. data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +0 -1
  477. data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +0 -1
  478. data/app/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +0 -36
  479. data/app/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +0 -51
  480. data/app/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
  481. data/app/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +0 -27
  482. data/app/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +0 -21
  483. data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin.js +0 -1
  484. data/app/assets/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +0 -73
  485. data/app/assets/javascripts/tiny_mce/plugins/preview/preview.html +0 -18
  486. data/app/assets/javascripts/tiny_mce/plugins/style/css/props.css +0 -13
  487. data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin.js +0 -1
  488. data/app/assets/javascripts/tiny_mce/plugins/style/js/props.js +0 -635
  489. data/app/assets/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +0 -70
  490. data/app/assets/javascripts/tiny_mce/plugins/style/props.htm +0 -838
  491. data/app/assets/javascripts/tiny_mce/plugins/table/cell.htm +0 -180
  492. data/app/assets/javascripts/tiny_mce/plugins/table/css/cell.css +0 -17
  493. data/app/assets/javascripts/tiny_mce/plugins/table/css/row.css +0 -25
  494. data/app/assets/javascripts/tiny_mce/plugins/table/css/table.css +0 -13
  495. data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +0 -1
  496. data/app/assets/javascripts/tiny_mce/plugins/table/js/cell.js +0 -319
  497. data/app/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +0 -27
  498. data/app/assets/javascripts/tiny_mce/plugins/table/js/row.js +0 -237
  499. data/app/assets/javascripts/tiny_mce/plugins/table/js/table.js +0 -450
  500. data/app/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
  501. data/app/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +0 -32
  502. data/app/assets/javascripts/tiny_mce/plugins/table/row.htm +0 -158
  503. data/app/assets/javascripts/tiny_mce/plugins/table/table.htm +0 -188
  504. data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js +0 -1
  505. data/app/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +0 -26
  506. data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +0 -1
  507. data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template_src.js +0 -1358
  508. data/app/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  509. data/app/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  510. data/app/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +0 -42
  511. data/app/assets/javascripts/tiny_mce/themes/advanced/js/link.js +0 -153
  512. data/app/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +0 -56
  513. data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +0 -68
  514. data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
  515. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +0 -47
  516. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
  517. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  518. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  519. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  520. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  521. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  522. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  523. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +0 -227
  524. data/app/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +0 -25
  525. data/app/assets/javascripts/tiny_mce/tiny_mce.js +0 -1
  526. data/app/assets/javascripts/tiny_mce/tiny_mce_popup.js +0 -5
  527. data/app/assets/javascripts/tiny_mce/utils/editable_selects.js +0 -70
  528. data/app/assets/javascripts/tiny_mce/utils/form_utils.js +0 -210
  529. data/app/assets/javascripts/tiny_mce/utils/mctabs.js +0 -162
  530. data/app/assets/javascripts/tiny_mce/utils/validate.js +0 -252
  531. data/app/controllers/gluttonberg/admin/content/articles_controller.rb +0 -139
  532. data/app/controllers/gluttonberg/admin/content/blogs_controller.rb +0 -101
  533. data/app/controllers/gluttonberg/admin/content/comments_controller.rb +0 -130
  534. data/app/controllers/gluttonberg/admin/content/main_controller.rb +0 -13
  535. data/app/controllers/gluttonberg/admin/help_controller.rb +0 -15
  536. data/app/controllers/gluttonberg/admin/settings/generic_settings_controller.rb +0 -90
  537. data/app/controllers/gluttonberg/admin/settings/main_controller.rb +0 -11
  538. data/app/controllers/gluttonberg/public/articles_controller.rb +0 -79
  539. data/app/controllers/gluttonberg/public/blogs_controller.rb +0 -44
  540. data/app/controllers/gluttonberg/public/comments_controller.rb +0 -46
  541. data/app/models/gluttonberg/article.rb +0 -73
  542. data/app/models/gluttonberg/article_localization.rb +0 -21
  543. data/app/models/gluttonberg/blog.rb +0 -19
  544. data/app/models/gluttonberg/comment.rb +0 -142
  545. data/app/models/gluttonberg/comment_subscription.rb +0 -28
  546. data/app/models/gluttonberg/help.rb +0 -48
  547. data/app/views/gluttonberg/admin/content/articles/_form.html.haml +0 -115
  548. data/app/views/gluttonberg/admin/content/articles/edit.html.haml +0 -11
  549. data/app/views/gluttonberg/admin/content/articles/index.html.haml +0 -71
  550. data/app/views/gluttonberg/admin/content/articles/new.html.haml +0 -11
  551. data/app/views/gluttonberg/admin/content/blogs/_form.html.haml +0 -56
  552. data/app/views/gluttonberg/admin/content/blogs/edit.html.haml +0 -3
  553. data/app/views/gluttonberg/admin/content/blogs/index.html.haml +0 -35
  554. data/app/views/gluttonberg/admin/content/blogs/new.html.haml +0 -10
  555. data/app/views/gluttonberg/admin/content/comments/index.html.haml +0 -66
  556. data/app/views/gluttonberg/admin/content/galleries/_images_list.html.haml +0 -21
  557. data/app/views/gluttonberg/admin/content/galleries/add_image.html.haml +0 -1
  558. data/app/views/gluttonberg/admin/content/main/index.html.haml +0 -20
  559. data/app/views/gluttonberg/admin/content/pages/edit_home.html.haml +0 -11
  560. data/app/views/gluttonberg/admin/exceptions/internal_server_error.html.haml +0 -11
  561. data/app/views/gluttonberg/admin/exceptions/not_acceptable.html.haml +0 -9
  562. data/app/views/gluttonberg/admin/membership/main/index.html.haml +0 -11
  563. data/app/views/gluttonberg/admin/settings/generic_settings/_form.html.haml +0 -26
  564. data/app/views/gluttonberg/admin/settings/generic_settings/edit.html.haml +0 -4
  565. data/app/views/gluttonberg/admin/settings/generic_settings/index.html.haml +0 -58
  566. data/app/views/gluttonberg/admin/settings/main/index.html.haml +0 -18
  567. data/app/views/gluttonberg/public/articles/index.rss.builder +0 -21
  568. data/app/views/gluttonberg/public/blogs/show.rss.builder +0 -21
  569. data/app/views/gluttonberg/public/exceptions/internal_server_error.html.haml +0 -11
  570. data/app/views/gluttonberg/public/exceptions/not_acceptable.html.haml +0 -9
  571. data/app/views/help/gluttonberg/admin/AssetLibrary/assets/add_assets_in_bulk.html.haml +0 -41
  572. data/app/views/help/gluttonberg/admin/AssetLibrary/assets/edit.html.haml +0 -61
  573. data/app/views/help/gluttonberg/admin/AssetLibrary/assets/index.html.haml +0 -16
  574. data/app/views/help/gluttonberg/admin/AssetLibrary/assets/new.html.haml +0 -57
  575. data/app/views/help/gluttonberg/admin/AssetLibrary/collections/edit.html.haml +0 -15
  576. data/app/views/help/gluttonberg/admin/AssetLibrary/collections/index.html.haml +0 -41
  577. data/app/views/help/gluttonberg/admin/AssetLibrary/collections/new.html.haml +0 -15
  578. data/app/views/help/gluttonberg/admin/AssetLibrary/main/index.html.haml +0 -34
  579. data/app/views/help/gluttonberg/admin/content/page_localizations/edit.html.haml +0 -89
  580. data/app/views/help/gluttonberg/admin/content/pages/_page_description_help.html.haml +0 -14
  581. data/app/views/help/gluttonberg/admin/content/pages/edit.html.haml +0 -62
  582. data/app/views/help/gluttonberg/admin/content/pages/index.html.haml +0 -111
  583. data/app/views/help/gluttonberg/admin/content/pages/new.html.haml +0 -61
  584. data/app/views/help/gluttonberg/admin/settings/dialects/edit.html.haml +0 -47
  585. data/app/views/help/gluttonberg/admin/settings/dialects/index.html.haml +0 -50
  586. data/app/views/help/gluttonberg/admin/settings/dialects/new.html.haml +0 -47
  587. data/app/views/help/gluttonberg/admin/settings/generic_settings/index.html.haml +0 -74
  588. data/app/views/help/gluttonberg/admin/settings/locales/edit.html.haml +0 -71
  589. data/app/views/help/gluttonberg/admin/settings/locales/index.html.haml +0 -57
  590. data/app/views/help/gluttonberg/admin/settings/locales/new.html.haml +0 -71
  591. data/app/views/help/gluttonberg/admin/settings/users/edit.html.haml +0 -63
  592. data/app/views/help/gluttonberg/admin/settings/users/index.html.haml +0 -60
  593. data/app/views/help/gluttonberg/admin/settings/users/new.html.haml +0 -69
  594. data/app/views/notifier/comment_notification.html.haml +0 -17
  595. data/app/views/notifier/comment_notification_for_admin.html.haml +0 -19
  596. data/db/migrate/20121106025800_add_artist_and_link_to_assets.rb +0 -6
  597. data/lib/acts_as_versioned.rb +0 -496
  598. data/lib/generators/gluttonberg/blog/blog_generator.rb +0 -46
  599. data/lib/generators/gluttonberg/blog/templates/articles_index.html.haml +0 -18
  600. data/lib/generators/gluttonberg/blog/templates/articles_show.html.haml +0 -63
  601. data/lib/generators/gluttonberg/blog/templates/articles_tag.html.haml +0 -24
  602. data/lib/generators/gluttonberg/blog/templates/blog_migration.rb +0 -90
  603. data/lib/generators/gluttonberg/blog/templates/blogs_index.html.haml +0 -15
  604. data/lib/generators/gluttonberg/blog/templates/blogs_show.html.haml +0 -25
  605. data/lib/generators/gluttonberg/installer/USAGE +0 -1
  606. data/lib/generators/gluttonberg/installer/installer_generator.rb +0 -106
  607. data/lib/generators/gluttonberg/installer/templates/delayed_job_script +0 -5
  608. data/lib/generators/gluttonberg/installer/templates/gluttonberg_migration.rb +0 -368
  609. data/lib/generators/gluttonberg/installer/templates/public.html.haml +0 -24
  610. data/lib/generators/gluttonberg/installer/templates/sitemap.rb +0 -70
  611. data/lib/gluttonberg/authorizable.rb +0 -51
  612. data/lib/gluttonberg/helpers.rb +0 -20
  613. data/lib/rails/railties/tasks.rake +0 -3
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ module Gluttonberg
4
+ describe PageLocalization do
5
+
6
+ before(:all) do
7
+ @locale = Gluttonberg::Locale.generate_default_locale
8
+ @page = Page.create! :name => 'first name', :description_name => 'generic_page'
9
+ Gluttonberg::Setting.generate_common_settings
10
+ end
11
+
12
+ after(:all) do
13
+ clean_all_data
14
+ end
15
+
16
+
17
+ it "contents=, contents and easy_contents should accept and return all content in correct format" do
18
+ asset = create_image_asset
19
+ page_localization = @page.current_localization
20
+ contents = page_localization.contents
21
+
22
+ page_localization.contents = prepare_content_data(contents, asset)
23
+
24
+ # data comparison before save
25
+ compare_data(contents, asset)
26
+
27
+ page_localization.save
28
+
29
+ @page = Page.where(:id => @page.id).first
30
+
31
+ #compare data after save
32
+ compare_data(@page.current_localization.contents, asset)
33
+ compare_easy_contents_data(@page, asset)
34
+ end
35
+
36
+ it "duplicate should duplicate all content of a page" do
37
+ page = Page.create! :name => 'first name 2', :description_name => 'generic_page'
38
+ asset = create_image_asset
39
+
40
+ page.current_localization.contents = prepare_content_data(page.current_localization.contents, asset)
41
+
42
+ page.current_localization.save
43
+ # data comparison before save
44
+ compare_data(page.current_localization.contents, asset)
45
+
46
+ page = Page.where(:id => page.id).first
47
+ #compare data after save
48
+ compare_data(page.current_localization.contents, asset)
49
+
50
+ duplicated = page.duplicate
51
+ compare_data(duplicated.current_localization.contents, asset)
52
+ end
53
+
54
+ private
55
+
56
+ def compare_data(contents, asset)
57
+ contents.each do |content|
58
+ if content.association_name == :image_contents
59
+ content.asset_id.should == asset.id
60
+ elsif content.association_name == :plain_text_content_localizations
61
+ content.text.should == "Newsletter Title"
62
+ elsif content.association_name == :html_content_localizations
63
+ content.text.should == "<p>Newsletter Description</p>"
64
+ elsif content.association_name == :textarea_content_localizations
65
+ content.text.should == "Newsletter Excerpt"
66
+ elsif content.association_name == :select_contents
67
+ content.text.should == "Theme 1"
68
+ end
69
+ end
70
+ end
71
+
72
+ def compare_easy_contents_data(page, asset)
73
+ page.easy_contents(:title).should == "Newsletter Title"
74
+ page.easy_contents(:description).should == "<p>Newsletter Description</p>"
75
+ page.easy_contents(:image).should == asset.url
76
+ page.easy_contents(:image, :url_for => :fixed_image).should == asset.url_for(:fixed_image)
77
+ page.easy_contents(:excerpt).should == "Newsletter Excerpt"
78
+ page.easy_contents(:theme).should == "Theme 1"
79
+ end
80
+ end #PageLocalization
81
+ end
@@ -0,0 +1,221 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Gluttonberg
6
+ describe Page do
7
+
8
+ before(:all) do
9
+ @locale = Gluttonberg::Locale.generate_default_locale
10
+ @page = Page.create! :name => 'first name', :description_name => 'generic_page'
11
+ Gluttonberg::Setting.generate_common_settings
12
+ end
13
+
14
+ after(:all) do
15
+ clean_all_data
16
+ end
17
+
18
+ it "should return correct layout name" do
19
+ @page.layout.should == "public"
20
+ end
21
+
22
+ it "should have correct title" do
23
+ @page.title.should == "first name"
24
+ end
25
+
26
+ it "should have correct nav_label" do
27
+ @page.nav_label.should == "first name"
28
+ page = Page.create! :name => 'first name 2', :description_name => 'generic_page'
29
+ page.current_localization.update_attributes(:navigation_label => "Temporary Page")
30
+ page.nav_label.should == "Temporary Page"
31
+ end
32
+
33
+ it "should be able to load localizations" do
34
+ @page.load_localization(Locale.first_default)
35
+ end
36
+
37
+ it "should return correct be public page if no group is allocated" do
38
+ @page.is_public?.should == true
39
+ end
40
+
41
+ it "should return correct view name" do
42
+ @page.view.should == "generic"
43
+ end
44
+
45
+ it "should return correct path" do
46
+ @page.path.should == "first-name"
47
+ localize = Engine.config.localize
48
+ Engine.config.localize = false
49
+ @page.public_path.should == "/first-name"
50
+ Engine.config.localize = true
51
+ @page.public_path.should == "/en/first-name"
52
+ Engine.config.localize = localize
53
+ end
54
+
55
+ it "should return correct name_and_code" do
56
+ @page.current_localization.name_and_code.should == "first name (English)"
57
+ end
58
+
59
+ it "should have only one home page at a time" do
60
+ current_home = Page.create(:name => "Page1" , :home => true , :description_name => 'home')
61
+ page2 = Page.create(:name => "Page2" , :description_name => 'home')
62
+ page2.reload
63
+ current_home.reload
64
+
65
+ Page.home_page.id.should == current_home.id
66
+ Page.home_page_name.should == current_home.name
67
+
68
+ current_home.home.should be_truthy
69
+ page2.home.should be_falsey
70
+
71
+ page3 = Page.create(:name => "Page3" , :description_name => 'home')
72
+ page4 = Page.create(:name => "Page4" , :home => true, :description_name => 'home')
73
+
74
+ current_home.reload
75
+ page4.reload
76
+
77
+ page4.home.should be_truthy
78
+ current_home.home.should be_falsey
79
+
80
+ page5 = Page.create(:name => "Page5" , :description_name => 'home')
81
+ new_home = Page.create(:name => "New Home", :description_name => 'home')
82
+
83
+ new_home.update_attributes(:home => true)
84
+
85
+ new_home.reload
86
+ current_home.reload
87
+
88
+ new_home.home.should be_truthy
89
+ current_home.home.should be_falsey
90
+ end
91
+
92
+
93
+
94
+ it "should load contents (html_contents, image_contents, plain_text_contents, select_contents, textarea_contents)" do
95
+ @page.respond_to?(:html_contents).should == true
96
+ @page.respond_to?(:image_contents).should == true
97
+ @page.respond_to?(:plain_text_contents).should == true
98
+ @page.respond_to?(:textarea_contents).should == true
99
+ @page.respond_to?(:select_contents).should == true
100
+
101
+ #in my example generic_page has one content for each type
102
+ @page.html_contents.length.should == 1
103
+ @page.image_contents.length.should == 1
104
+ @page.plain_text_contents.length.should == 1
105
+ @page.textarea_contents.length.should == 1
106
+ @page.select_contents.length.should == 1
107
+ end
108
+
109
+ it "should have parent and children assoications" do
110
+ p1 = Page.create(:name => "P1" , :description_name => 'home' )
111
+ p2 = Page.create(:name => "P2" , :description_name => 'home' , :parent => p1)
112
+ p1.children.length.should == 1
113
+ p2.parent.id.should == p1.id
114
+
115
+ p1.slug.should == "p1"
116
+ p1.path.should == "p1"
117
+ p2.slug.should == "p2"
118
+ p2.path.should == "p1/p2"
119
+ end
120
+
121
+
122
+ it "should do slug management. If slug is not available it should make slug from title of the page by cleaning it. It should work with ruby 1.9.2" do
123
+ page = Page.new(:name => "Page ”Slug Test" , :description_name => 'home')
124
+
125
+ page.slug.blank?.should == true
126
+
127
+ page.valid?
128
+ page.slug.blank?.should == false
129
+ page.slug.should == "page-slug-test"
130
+
131
+ page.slug = "Page \t Slug ′‟‛„‚”“”˝\(\)\;\:\@\&\=\+\$\,\/?\%\#\[\]] Test"
132
+ page.slug.should == "page-slug-test"
133
+ end
134
+
135
+ it "should create versioned content" do
136
+ p = Page.create! :name => '2nd name', :description_name => 'generic_page'
137
+ p.new_record?.should == false
138
+ p.reload
139
+ p.current_localization.localized_contents.each do |loc|
140
+ loc.versions.size.should == 1
141
+ loc.version.should == 1
142
+ loc.class.versioned_class.should == loc.versions.first.class
143
+ end
144
+ end
145
+
146
+ it "should be able to save without revision" do
147
+ p = Page.find_by_name('first name')
148
+ p.current_localization.localized_contents.each do |loc|
149
+ loc.save_without_revision
150
+ old_versions = loc.versions.count
151
+ loc.without_revision do
152
+ loc.update_attributes :text => 'changed'
153
+ end
154
+ old_versions.should == loc.versions.count
155
+ end
156
+ end
157
+
158
+ it "should rollback with version number" do
159
+ p = Page.find_by_name('first name')
160
+
161
+ p.current_localization.localized_contents.each do |loc|
162
+ loc.version.should == 1
163
+
164
+ loc.text = "first name v2"
165
+ loc.save
166
+
167
+ loc.version.should == 2
168
+ loc.text.should == 'first name v2'
169
+
170
+ loc.revert_to!(1)
171
+ loc.version.should == 1
172
+ loc.text.should be_nil
173
+ loc.versions.size.should == 2
174
+
175
+ loc.revert_to!(2)
176
+ loc.version.should == 2
177
+ loc.text.should == 'first name v2'
178
+ loc.versions.size.should == 2
179
+ end
180
+ end
181
+
182
+ it "should not cross version limit" do
183
+ p = Page.find_by_name('first name')
184
+
185
+ p.current_localization.localized_contents.each do |loc|
186
+ loc.version.should == 1
187
+
188
+ (2..10).each do |i|
189
+ loc.update_attributes :text => "first name v#{i}"
190
+ loc.version.should == i
191
+ loc.text.should == "first name v#{i}"
192
+ loc.versions.size.should == i
193
+ end
194
+
195
+ loc.update_attributes :text => "first name v11"
196
+ loc.version.should == 11
197
+ loc.text.should == 'first name v11'
198
+ loc.versions.size.should == 10
199
+ end
200
+ end
201
+
202
+ it "redirect_required? && redirect_url" do
203
+ page = Page.create! :name => 'redirect required', :description_name => 'redirect_to_remote'
204
+ page.redirect_required?.should == true
205
+ page.path.should == "redirect-required"
206
+ page.redirect_url.should == "http://www.freerangefuture.com"
207
+ @page.redirect_required?.should == false
208
+
209
+ page = Page.create! :name => 'redirect to path', :description_name => 'redirect_to_path'
210
+ page.redirect_required?.should == true
211
+ page.redirect_url.should == "/local-path"
212
+ end
213
+
214
+ it "rewrite_required?" do
215
+ page = Page.create! :name => 'rewrite required', :description_name => 'examples'
216
+ page.rewrite_required?.should == true
217
+ @page.rewrite_required?.should == false
218
+ end
219
+
220
+ end #Page
221
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Gluttonberg
6
+ describe Setting do
7
+ before(:all) do
8
+
9
+ end
10
+
11
+ after(:all) do
12
+ clean_all_data
13
+ end
14
+
15
+ it "single site settings" do
16
+ Gluttonberg::Setting.count.should == 0
17
+ Rails.configuration.multisite.should == false
18
+ Gluttonberg::Setting.generate_common_settings
19
+ Gluttonberg::Setting.count.should > 0
20
+ Gluttonberg::Setting.all.each do |setting|
21
+ setting.site.should == nil
22
+ end
23
+ Rails.configuration.multisite = {:site1 => "site1.dev:5000", :site2 => "site2.dev:5000" }
24
+ Rails.configuration.multisite.should == {:site1 => "site1.dev:5000", :site2 => "site2.dev:5000" }
25
+ Gluttonberg::Setting.generate_common_settings
26
+ Gluttonberg::Setting.count.should > 0
27
+ Gluttonberg::Setting.where(:site => 'site1').count.should > 0
28
+ Gluttonberg::Setting.where(:site => 'site1').count.should == Gluttonberg::Setting.where(:site => 'site2').count
29
+
30
+ #after cleanup
31
+ Gluttonberg::Setting.all.each{|setting| setting.destroy}
32
+ Gluttonberg::Setting.generate_common_settings
33
+ Gluttonberg::Setting.count.should > 0
34
+ Gluttonberg::Setting.where(:site => 'site1').count.should > 0
35
+ Gluttonberg::Setting.where(:site => 'site1').count.should == Gluttonberg::Setting.where(:site => 'site2').count
36
+
37
+ Rails.configuration.multisite = false
38
+ Rails.configuration.multisite.should == false
39
+
40
+ Gluttonberg::Setting.all.each{|setting| setting.destroy}
41
+ Gluttonberg::Setting.generate_common_settings
42
+ Gluttonberg::Setting.count.should > 0
43
+ Gluttonberg::Setting.all.each do |setting|
44
+ setting.site.should == nil
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,385 @@
1
+ require 'spec_helper'
2
+
3
+ describe User do
4
+ before :all do
5
+ @all_roles = ["super_admin" , "admin", 'editor' , "contributor", "sales", "accounts"]
6
+ @params = {
7
+ :first_name => "First",
8
+ :email => "valid_user@test.com",
9
+ :password => "password1",
10
+ :password_confirmation => "password1"
11
+ }
12
+ end
13
+
14
+ after :all do
15
+ clean_all_data
16
+ end
17
+
18
+ it "should not allow mass assignment for role" do
19
+ begin
20
+ User.new(@params.merge({:role => "super_admin"}) )
21
+ rescue => e
22
+ e.class.should == ActiveModel::MassAssignmentSecurity::Error
23
+ end
24
+ end
25
+
26
+ it "should validate password format (must be a minimum of 6 characters in length, contain at least 1 letter and at least 1 number)" do
27
+ valid_user = User.new(@params)
28
+ valid_user.role = "super_admin"
29
+
30
+ valid_user.valid?.should == true
31
+
32
+
33
+ invalid_user = User.new(@params.merge({:password => "password", :password_confirmation => "password"}))
34
+ invalid_user.role = "super_admin"
35
+ invalid_user.valid?.should == false
36
+
37
+ invalid_user = User.new(@params.merge({:password => "pass1", :password_confirmation => "pass1"}))
38
+ invalid_user.role = "super_admin"
39
+ invalid_user.valid?.should == false
40
+
41
+ invalid_user = User.new(@params.merge({:password => "~!#-^&*()", :password_confirmation => "~!#-^&*()"}))
42
+ invalid_user.role = "super_admin"
43
+ invalid_user.valid?.should == false
44
+
45
+ invalid_user = User.new(@params.merge({:password => "pas1#", :password_confirmation => "pas1#"}))
46
+ invalid_user.role = "super_admin"
47
+ invalid_user.valid?.should == false
48
+
49
+ valid_user = User.new(@params.merge({:password => "pass1!@#", :password_confirmation => "pass1!@#"}))
50
+ valid_user.role = "super_admin"
51
+ valid_user.valid?.should == true
52
+ end
53
+
54
+
55
+ it "should validate presense of first_name" do
56
+ valid_user = User.new(@params)
57
+ valid_user.role = "super_admin"
58
+
59
+ valid_user.first_name = nil
60
+ valid_user.valid?.should == false
61
+ end
62
+
63
+ it "should validate presense of email" do
64
+ valid_user = User.new(@params)
65
+ valid_user.role = "super_admin"
66
+ valid_user.email = nil
67
+ valid_user.valid?.should == false
68
+ end
69
+
70
+ it "should validate presense of role" do
71
+ valid_user = User.new(@params)
72
+ valid_user.role = "super_admin"
73
+
74
+ valid_user.role = nil
75
+ valid_user.valid?.should == false
76
+ end
77
+
78
+ it "user_valid_roles should return correct roles list " do
79
+ current_user = User.new(@params.merge(:email =>"current_user@test.com"))
80
+ current_user.role = "super_admin"
81
+ current_user.save
82
+
83
+ user = User.new(@params.merge(:email =>"current_user@test.com"))
84
+ user.role = "super_admin"
85
+ user.save
86
+
87
+ current_user.role = "super_admin"
88
+ current_user.user_valid_roles(user).should == @all_roles
89
+ current_user.user_valid_roles(current_user).should == []
90
+
91
+ current_user.role = "admin"
92
+ current_user.user_valid_roles(user).should == ["admin", 'editor', "contributor", "sales", "accounts"]
93
+ current_user.user_valid_roles(current_user).should == []
94
+
95
+ current_user.role = "contributor"
96
+ current_user.user_valid_roles(user).should == ["contributor"]
97
+ current_user.user_valid_roles(current_user).should == []
98
+
99
+ current_user.destroy
100
+ user.destroy
101
+ end
102
+
103
+
104
+ it "should ask for password_confirmation if password is present" do
105
+ params = {
106
+ :first_name => "First",
107
+ :email => "test1@test.com",
108
+ :password => "password1"
109
+ }
110
+ user = User.new(params)
111
+ user.role = "super_admin"
112
+ user.valid?.should == false
113
+ end
114
+
115
+ it "should be able to add new user roles" do
116
+ User.user_roles.should == @all_roles
117
+ end
118
+
119
+ it "should correctly search users based on current_user role" do
120
+ params = {
121
+ :first_name => "First",
122
+ :email => "user1@test.com",
123
+ :password => "password1",
124
+ :password_confirmation => "password1"
125
+ }
126
+ user1 = User.new(params)
127
+ user1.role = "super_admin"
128
+ user1.save
129
+
130
+ user2 = User.new(params.merge(:email => "user2@test.com"))
131
+ user2.role = "super_admin"
132
+ user2.save
133
+
134
+ user3 = User.new(params.merge(:email => "user3@test.com"))
135
+ user3.role = "admin"
136
+ user3.save
137
+
138
+ user4 = User.new(params.merge(:email => "user4@test.com"))
139
+ user4.role = "admin"
140
+ user4.save
141
+
142
+ user5 = User.new(params.merge(:email => "user5@test.com"))
143
+ user5.role = "contributor"
144
+ user5.save
145
+
146
+ user6 = User.new(params.merge(:email => "user6@test.com"))
147
+ user6.role = "contributor"
148
+ user6.save
149
+
150
+ user7 = User.new(params.merge(:email => "user7@test.com"))
151
+ user7.role = "sales"
152
+ user7.save
153
+
154
+ user8 = User.new(params.merge(:email => "user8@test.com"))
155
+ user8.role = "sales"
156
+ user8.save
157
+
158
+ #super admin searching
159
+ User.search_users("First", user1, "updated_at DESC").length.should == 8
160
+ User.search_users("user1", user1, "updated_at DESC").length.should == 1
161
+ User.search_users("user2", user1, "updated_at DESC").length.should == 1
162
+
163
+ #admin searching
164
+ User.search_users("First", user3, "updated_at DESC").length.should == 6
165
+ User.search_users("user2", user3, "updated_at DESC").length.should == 0
166
+ User.search_users("user3", user3, "updated_at DESC").length.should == 1
167
+ User.search_users("user4", user3, "updated_at DESC").length.should == 1
168
+
169
+ #contributor searching
170
+ User.search_users("First", user5, "updated_at DESC").length.should == 1
171
+ User.search_users("user2", user5, "updated_at DESC").length.should == 0
172
+ User.search_users("user3", user5, "updated_at DESC").length.should == 0
173
+ User.search_users("user5", user5, "updated_at DESC").length.should == 1
174
+ User.search_users("user6", user5, "updated_at DESC").length.should == 0
175
+
176
+ #sales searching
177
+ User.search_users("First", user7, "updated_at DESC").length.should == 1
178
+ User.search_users("user2", user7, "updated_at DESC").length.should == 0
179
+ User.search_users("user3", user7, "updated_at DESC").length.should == 0
180
+ User.search_users("user7", user7, "updated_at DESC").length.should == 1
181
+ User.search_users("user8", user7, "updated_at DESC").length.should == 0
182
+
183
+ user1.destroy
184
+ user2.destroy
185
+ user3.destroy
186
+ user4.destroy
187
+ user5.destroy
188
+ user6.destroy
189
+ user7.destroy
190
+ user8.destroy
191
+ end
192
+
193
+ it "should correctly find user based on current_user role" do
194
+ params = {
195
+ :first_name => "First",
196
+ :email => "user1@test.com",
197
+ :password => "password1",
198
+ :password_confirmation => "password1"
199
+ }
200
+ user1 = User.new(params)
201
+ user1.role = "super_admin"
202
+ user1.save
203
+
204
+ user2 = User.new(params.merge(:email => "user2@test.com"))
205
+ user2.role = "super_admin"
206
+ user2.save
207
+
208
+ user3 = User.new(params.merge(:email => "user3@test.com"))
209
+ user3.role = "admin"
210
+ user3.save
211
+
212
+ user4 = User.new(params.merge(:email => "user4@test.com"))
213
+ user4.role = "admin"
214
+ user4.save
215
+
216
+ user5 = User.new(params.merge(:email => "user5@test.com"))
217
+ user5.role = "contributor"
218
+ user5.save
219
+
220
+ user6 = User.new(params.merge(:email => "user6@test.com"))
221
+ user6.role = "contributor"
222
+ user6.save
223
+
224
+ user7 = User.new(params.merge(:email => "user7@test.com"))
225
+ user7.role = "sales"
226
+ user7.save
227
+
228
+ user8 = User.new(params.merge(:email => "user8@test.com"))
229
+ user8.role = "sales"
230
+ user8.save
231
+
232
+ #super admin searching
233
+ User.find_user(user1.id, user1).blank?.should == false
234
+ User.find_user(user2.id, user1).blank?.should == false
235
+ User.find_user(user3.id, user1).blank?.should == false
236
+ User.find_user(user5.id, user1).blank?.should == false
237
+ User.find_user(user7.id, user1).blank?.should == false
238
+
239
+ #admin searching
240
+ User.find_user(user1.id, user3).blank?.should == true
241
+ User.find_user(user3.id, user3).blank?.should == false
242
+ User.find_user(user4.id, user3).blank?.should == false
243
+ User.find_user(user5.id, user3).blank?.should == false
244
+ User.find_user(user7.id, user3).blank?.should == false
245
+
246
+ #contributor searching
247
+ User.find_user(user1.id, user5).blank?.should == true
248
+ User.find_user(user3.id, user5).blank?.should == true
249
+ User.find_user(user5.id, user5).blank?.should == false
250
+ User.find_user(user6.id, user5).blank?.should == true
251
+ User.find_user(user7.id, user5).blank?.should == true
252
+
253
+ #sales searching
254
+ User.find_user(user1.id, user7).blank?.should == true
255
+ User.find_user(user3.id, user7).blank?.should == true
256
+ User.find_user(user5.id, user7).blank?.should == true
257
+ User.find_user(user7.id, user7).blank?.should == false
258
+ User.find_user(user8.id, user7).blank?.should == true
259
+
260
+ user1.destroy
261
+ user2.destroy
262
+ user3.destroy
263
+ user4.destroy
264
+ user5.destroy
265
+ user6.destroy
266
+ user7.destroy
267
+ user8.destroy
268
+ end
269
+
270
+
271
+ it "should authorize contributor for model and object access" do
272
+ @page = Gluttonberg::Page.create! :name => 'first name', :description_name => 'generic_page'
273
+ @page1 = Gluttonberg::Page.create! :name => 'first name', :description_name => 'generic_page', :parent_id => @page.id
274
+ @page2 = Gluttonberg::Page.create! :name => 'first name', :description_name => 'generic_page', :parent_id => @page1.id
275
+ @staff1 = StaffProfile.create! :name => "Abdul"
276
+ @staff2 = StaffProfile.create! :name => "Abdul"
277
+ @staff3 = StaffProfile.create! :name => "Abdul"
278
+ asset1 = create_image_asset
279
+ asset2 = create_image_asset
280
+
281
+ params = {
282
+ :first_name => "First",
283
+ :email => "super_admin@test.com",
284
+ :password => "password1",
285
+ :password_confirmation => "password1"
286
+ }
287
+ super_admin = User.new(params)
288
+ super_admin.role = "super_admin"
289
+ super_admin.save
290
+
291
+ admin = User.new(params.merge(:email => "admin@test.com"))
292
+ admin.role = "admin"
293
+ admin.save
294
+
295
+ editor = User.new(params.merge(:email => "editor@test.com"))
296
+ editor.role = "editor"
297
+ editor.save
298
+
299
+ contributor = User.new(params.merge(:email => "contributor@test.com"))
300
+ contributor.role = "contributor"
301
+ contributor.save
302
+
303
+ @staff1.user_id = contributor.id
304
+ @staff1.save
305
+ @staff2.user_id = contributor.id
306
+ @staff2.save
307
+ @staff3.user_id = editor.id
308
+ @staff3.save
309
+
310
+ @staff2.publish!
311
+
312
+ asset1.user_id = contributor.id
313
+ asset1.save
314
+ asset2.user_id = editor.id
315
+ asset2.save
316
+
317
+ #super admin authorization
318
+ super_admin.ability.can?(:manage_object, @page).should == true
319
+ super_admin.ability.can?(:manage_model, "StaffProfile").should == true
320
+
321
+ #admin authorization
322
+ admin.ability.can?(:manage_object, @page).should == true
323
+ admin.ability.can?(:manage_model, "StaffProfile").should == true
324
+
325
+
326
+ #editor authorization
327
+ editor.ability.can?(:manage_object, @page).should == true
328
+ editor.ability.can?(:manage_object, @page).should == true
329
+ editor.ability.can?(:manage_object, @page1).should == true
330
+ editor.ability.can?(:manage_object, @page2).should == true
331
+ editor.can_view_page(@page).should == true
332
+ editor.can_view_page(@page1).should == true
333
+ editor.can_view_page(@page2).should == true
334
+ editor.ability.can?(:manage_model, "StaffProfile").should == true
335
+ editor.ability.can?(:destroy, @staff1).should == true
336
+ editor.ability.can?(:destroy, @staff2).should == true
337
+ editor.ability.can?(:destroy, @staff3).should == true
338
+ editor.ability.can?(:destroy, @page).should == true
339
+
340
+ editor.ability.can?(:destroy, asset1).should == true
341
+ editor.ability.can?(:destroy, asset2).should == true
342
+
343
+
344
+ #contributor authorization
345
+ contributor.ability.can?(:manage_object, @page).should == false
346
+ contributor.ability.can?(:manage_model, "StaffProfile").should == false
347
+
348
+ contributor.authorizations.create(:authorizable_type => "StaffProfile")
349
+ contributor.ability.can?(:manage_model, "StaffProfile").should == false
350
+ contributor.authorizations.first.update_attributes(:allow => true)
351
+ contributor.ability.can?(:destroy, @staff).should == false
352
+ contributor.ability.can?(:destroy, @staff1).should == true
353
+ contributor.ability.can?(:destroy, @staff2).should == false
354
+ contributor.ability.can?(:destroy, @staff3).should == false
355
+ contributor.ability.can?(:destroy, @page).should == false
356
+ contributor.ability.can?(:manage_model, "StaffProfile").should == true
357
+ contributor.authorizations.first.destroy
358
+ contributor.ability.can?(:manage_model, "StaffProfile").should == false
359
+
360
+ contributor.authorizations.create(:authorizable_type => "Gluttonberg::Page")
361
+ contributor.ability.can?(:manage_object, @page).should == false
362
+ contributor.ability.can?(:manage_object, @page1).should == false
363
+ contributor.ability.can?(:manage_object, @page2).should == false
364
+ contributor.can_view_page(@page).should == false
365
+ contributor.can_view_page(@page1).should == false
366
+ contributor.can_view_page(@page2).should == false
367
+ contributor.authorizations.first.update_attributes(:authorizable_id => @page1.id)
368
+ contributor.ability.can?(:manage_object, @page).should == false
369
+ contributor.ability.can?(:manage_object, @page1).should == true
370
+ contributor.ability.can?(:manage_object, @page2).should == true
371
+
372
+ contributor.can_view_page(@page).should == true
373
+ contributor.can_view_page(@page1).should == true
374
+ contributor.can_view_page(@page2).should == true
375
+
376
+ contributor.ability.can?(:destroy, asset1).should == true
377
+ contributor.ability.can?(:destroy, asset2).should == false
378
+
379
+ super_admin.destroy
380
+ admin.destroy
381
+ editor.destroy
382
+ contributor.destroy
383
+ end
384
+
385
+ end