gluttonberg-core 2.6.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,133 @@
1
+ module Gluttonberg
2
+ module Library
3
+ module QuickMagick
4
+ module Draw
5
+ extend ActiveSupport::Concern
6
+
7
+ # Instance Methods
8
+ # The shape primitives are drawn in the color specified by the preceding -fill setting.
9
+ # For unfilled shapes, use -fill none.
10
+ # You can optionally control the stroke (the "outline" of a shape) with the -stroke and -strokewidth settings.
11
+
12
+ # draws a point at the given location in pixels
13
+ # A point primitive is specified by a single point in the pixel plane, that is, by an ordered pair
14
+ # of integer coordinates, x,y.
15
+ # (As it involves only a single pixel, a point primitive is not affected by -stroke or -strokewidth.)
16
+ def draw_point(x, y, options={})
17
+ _draw(options, "point #{x},#{y}")
18
+ end
19
+
20
+ # draws a line between the given two points
21
+ # A line primitive requires a start point and end point.
22
+ def draw_line(x0, y0, x1, y1, options={})
23
+ _draw_4_points("line", x0, y0, x1, y1, options)
24
+ end
25
+
26
+ # draw a rectangle with the given two corners
27
+ # A rectangle primitive is specified by the pair of points at the upper left and lower right corners.
28
+ def draw_rectangle(x0, y0, x1, y1, options={})
29
+ _draw_4_points("rectangle", x0, y0, x1, y1, options)
30
+ end
31
+
32
+ # draw a rounded rectangle with the given two corners
33
+ # wc and hc are the width and height of the arc
34
+ # A roundRectangle primitive takes the same corner points as a rectangle
35
+ # followed by the width and height of the rounded corners to be removed.
36
+ def draw_round_rectangle(x0, y0, x1, y1, wc, hc, options={})
37
+ _draw_6_points("roundRectangle", x0, y0, x1, y1, wc, hc, options)
38
+ end
39
+
40
+ # The arc primitive is used to inscribe an elliptical segment in to a given rectangle.
41
+ # An arc requires the two corners used for rectangle (see above) followed by
42
+ # the start and end angles of the arc of the segment segment (e.g. 130,30 200,100 45,90).
43
+ # The start and end points produced are then joined with a line segment and the resulting segment of an ellipse is filled.
44
+ def draw_arc(x0, y0, x1, y1, a0, a1, options={})
45
+ _draw_6_points("arc", x0, y0, x1, y1, a0, a1, options)
46
+ end
47
+
48
+ # Use ellipse to draw a partial (or whole) ellipse.
49
+ # Give the center point, the horizontal and vertical "radii"
50
+ # (the semi-axes of the ellipse) and start and end angles in degrees (e.g. 100,100 100,150 0,360).
51
+ def draw_ellipse(x0, y0, rx, ry, a0, a1, options={})
52
+ _draw_6_points("ellipse", x0, y0, rx, ry, a0, a1, options)
53
+ end
54
+
55
+ # The circle primitive makes a disk (filled) or circle (unfilled). Give the center and any point on the perimeter (boundary).
56
+ def draw_circle(x0, y0, x1, y1, options={})
57
+ _draw_4_points("circle", x0, y0, x1, y1, options)
58
+ end
59
+
60
+ # The polyline primitive requires three or more points to define their perimeters.
61
+ # A polyline is simply a polygon in which the final point is not stroked to the start point.
62
+ # When unfilled, this is a polygonal line. If the -stroke setting is none (the default), then a polyline is identical to a polygon.
63
+ # points - A single array with each pair forming a coordinate in the form (x, y).
64
+ # e.g. [0,0,100,100,100,0] will draw a polyline between points (0,0)-(100,100)-(100,0)
65
+ def draw_polyline(points, options={})
66
+ _draw(options, "polyline #{points_to_str(points)}")
67
+ end
68
+
69
+ # The polygon primitive requires three or more points to define their perimeters.
70
+ # A polyline is simply a polygon in which the final point is not stroked to the start point.
71
+ # When unfilled, this is a polygonal line. If the -stroke setting is none (the default), then a polyline is identical to a polygon.
72
+ # points - A single array with each pair forming a coordinate in the form (x, y).
73
+ # e.g. [0,0,100,100,100,0] will draw a polygon between points (0,0)-(100,100)-(100,0)
74
+ def draw_polygon(points, options={})
75
+ _draw(options, "polygon #{points_to_str(points)}")
76
+ end
77
+
78
+ # The Bezier primitive creates a spline curve and requires three or points to define its shape.
79
+ # The first and last points are the knots and these points are attained by the curve,
80
+ # while any intermediate coordinates are control points.
81
+ # If two control points are specified, the line between each end knot and its sequentially
82
+ # respective control point determines the tangent direction of the curve at that end.
83
+ # If one control point is specified, the lines from the end knots to the one control point
84
+ # determines the tangent directions of the curve at each end.
85
+ # If more than two control points are specified, then the additional control points
86
+ # act in combination to determine the intermediate shape of the curve.
87
+ # In order to draw complex curves, it is highly recommended either to use the path primitive
88
+ # or to draw multiple four-point bezier segments with the start and end knots of each successive segment repeated.
89
+ def draw_bezier(points, options={})
90
+ _draw(options, "bezier #{points_to_str(points)}")
91
+ end
92
+
93
+ # A path represents an outline of an object, defined in terms of moveto
94
+ # (set a new current point), lineto (draw a straight line), curveto (draw a Bezier curve),
95
+ # arc (elliptical or circular arc) and closepath (close the current shape by drawing a
96
+ # line to the last moveto) elements.
97
+ # Compound paths (i.e., a path with subpaths, each consisting of a single moveto followed by
98
+ # one or more line or curve operations) are possible to allow effects such as donut holes in objects.
99
+ # (See http://www.w3.org/TR/SVG/paths.html)
100
+ def draw_path(path_spec, options={})
101
+ _draw(options, "path #{path_spec}")
102
+ end
103
+
104
+ # Use image to composite an image with another image. Follow the image keyword
105
+ # with the composite operator, image location, image size, and filename
106
+ # You can use 0,0 for the image size, which means to use the actual dimensions found in the image header.
107
+ # Otherwise, it is scaled to the given dimensions. See -compose for a description of the composite operators.
108
+ def draw_image(operator, x0, y0, w, h, image_filename, options={})
109
+ _draw(options, "image #{operator} #{x0},#{y0} #{w},#{h} \"#{image_filename}\"")
110
+ end
111
+
112
+ # Use text to annotate an image with text. Follow the text coordinates with a string.
113
+ def draw_text(x0, y0, text, options={})
114
+ _draw(options, "text #{x0},#{y0} '#{text}'")
115
+ end
116
+
117
+ private
118
+ def _draw(options, draw_command_postfix)
119
+ append_to_operators("draw", "#{options_to_str(options)} #{draw_command_postfix}")
120
+ end
121
+
122
+ # draw_ellipse, draw_arc, draw_round_rectangle
123
+ def _draw_6_points(shape, x0, y0, rx, ry, a0, a1, options={})
124
+ _draw(options, "#{shape} #{x0},#{y0} #{rx},#{ry} #{a0},#{a1}")
125
+ end
126
+
127
+ def _draw_4_points(shape, x0, y0, x1, y1, options={})
128
+ _draw(options, "#{shape} #{x0},#{y0} #{x1},#{y1}")
129
+ end
130
+ end #Draw
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,78 @@
1
+ module Gluttonberg
2
+ module Library
3
+ module QuickMagick
4
+ module OperatorsAndSettings
5
+ extend ActiveSupport::Concern
6
+
7
+ # InstanceMethods
8
+ # Image operators supported by ImageMagick
9
+ IMAGE_OPERATORS_METHODS = %w{
10
+ alpha auto-orient bench black-threshold bordercolor charcoal clip clip-mask clip-path colorize
11
+ contrast convolve cycle decipher deskew despeckle distort edge encipher emboss enhance equalize
12
+ evaluate flip flop function gamma identify implode layers level level-colors median modulate monochrome
13
+ negate noise normalize opaque ordered-dither NxN paint polaroid posterize print profile quantize
14
+ radial-blur Raise random-threshold recolor render rotate segment sepia-tone set shade solarize
15
+ sparse-color spread strip swirl threshold tile tint transform transparent transpose transverse trim
16
+ type unique-colors white-threshold
17
+
18
+ adaptive-blur adaptive-resize adaptive-sharpen annotate blur border chop contrast-stretch extent
19
+ extract frame gaussian-blur geometry lat linear-stretch liquid-rescale motion-blur region repage
20
+ resample resize roll sample scale selective-blur shadow sharpen shave shear sigmoidal-contrast
21
+ sketch splice thumbnail unsharp vignette wave
22
+
23
+ append average clut coalesce combine composite deconstruct flatten fx hald-clut morph mosaic process reverse separate write
24
+ crop
25
+ }
26
+
27
+ # methods that are called with (=)
28
+ WITH_EQUAL_METHODS =
29
+ %w{alpha background bias black-point-compensation blue-primary border bordercolor caption
30
+ cahnnel colors colorspace comment compose compress depth density encoding endian family fill filter
31
+ font format frame fuzz geometry gravity label mattecolor page pointsize quality stroke strokewidth
32
+ undercolor units weight
33
+ brodercolor transparent type size}
34
+
35
+ # methods that takes geometry options
36
+ WITH_GEOMETRY_METHODS =
37
+ %w{density page sampling-factor size tile-offset adaptive-blur adaptive-resize adaptive-sharpen
38
+ annotate blur border chop contrast-stretch extent extract frame gaussian-blur
39
+ geometry lat linear-stretch liquid-rescale motion-blur region repage resample resize roll
40
+ sample scale selective-blur shadow sharpen shave shear sigmoidal-contrast sketch
41
+ splice thumbnail unsharp vignette wave crop}
42
+
43
+ # Methods that need special treatment. This array is used just to keep track of them.
44
+ SPECIAL_COMMANDS =
45
+ %w{floodfill antialias draw}
46
+
47
+ # Image settings supported by ImageMagick
48
+ IMAGE_SETTINGS_METHODS = %w{
49
+ adjoin affine alpha authenticate attenuate background bias black-point-compensation
50
+ blue-primary bordercolor caption channel colors colorspace comment compose compress define
51
+ delay depth display dispose dither encoding endian family fill filter font format fuzz gravity
52
+ green-primary intent interlace interpolate interword-spacing kerning label limit loop mask
53
+ mattecolor monitor orient ping pointsize preview quality quiet red-primary regard-warnings
54
+ remap respect-parentheses scene seed stretch stroke strokewidth style taint texture treedepth
55
+ transparent-color undercolor units verbose view virtual-pixel weight white-point
56
+
57
+ density page sampling-factor size tile-offset
58
+ }
59
+
60
+ (IMAGE_OPERATORS_METHODS + IMAGE_SETTINGS_METHODS).flatten.each do |method|
61
+ if WITH_EQUAL_METHODS.include?(method)
62
+ define_method((method+'=').to_sym) do |arg|
63
+ append_to_settings(method, arg)
64
+ end
65
+ elsif WITH_GEOMETRY_METHODS.include?(method)
66
+ define_method((method).to_sym) do |*args|
67
+ append_to_settings(method, QuickMagick::geometry(*args) )
68
+ end
69
+ else
70
+ define_method(method.to_sym) do |*args|
71
+ append_to_settings(method, args.join(" "))
72
+ end
73
+ end
74
+ end
75
+ end #Operators
76
+ end #QuickMagick
77
+ end
78
+ end
@@ -0,0 +1,79 @@
1
+ module Gluttonberg
2
+ module Library
3
+ module QuickMagick
4
+ module Serialization
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ # create an array of images from the given blob data
9
+ def from_blob(blob, &proc)
10
+ file = Tempfile.new(QuickMagick::random_string)
11
+ file.binmode
12
+ file.write(blob)
13
+ file.close
14
+ self.read(file.path, &proc)
15
+ end
16
+
17
+ # create an array of images from the given file
18
+ def read(filename, &proc)
19
+ info = identify(%Q<"#{filename}">)
20
+ info_lines = info.split(/[\r\n]/)
21
+ images = []
22
+ info_lines.each_with_index do |info_line, i|
23
+ images << Image.new("#{filename}", i, info_line)
24
+ end
25
+ images.each(&proc) if block_given?
26
+ return images
27
+ end
28
+
29
+ alias open read
30
+ end #ClassMethods
31
+
32
+ # InstanceMethods
33
+ # saves the current image to the given filename
34
+ def save(output_filename)
35
+ result = QuickMagick.exec3 "convert #{command_line} #{QuickMagick.c output_filename}"
36
+ if @pseudo_image
37
+ # since it's been saved, convert it to normal image (not pseudo)
38
+ initialize(output_filename)
39
+ revert!
40
+ end
41
+ return result
42
+ end
43
+
44
+ alias write save
45
+ alias convert save
46
+
47
+ # saves the current image overwriting the original image file
48
+ def save!
49
+ raise QuickMagick::QuickMagickError, "Cannot mogrify a pseudo image" if @pseudo_image
50
+ result = QuickMagick.exec3 "mogrify #{command_line}"
51
+ # remove all operations to avoid duplicate operations
52
+ revert!
53
+ return result
54
+ end
55
+
56
+ alias write! save!
57
+ alias mogrify! save!
58
+
59
+ def to_blob
60
+ tmp_file = Tempfile.new(QuickMagick::random_string)
61
+ if command_line =~ /-format\s(\S+)\s/
62
+ # use format set up by user
63
+ blob_format = $1
64
+ elsif !@pseudo_image
65
+ # use original image format
66
+ blob_format = self.format
67
+ else
68
+ # default format is jpg
69
+ blob_format = 'jpg'
70
+ end
71
+ save "#{blob_format}:#{tmp_file.path}"
72
+ blob = nil
73
+ File.open(tmp_file.path, 'rb') { |f| blob = f.read}
74
+ blob
75
+ end
76
+ end #Settings
77
+ end #QuickMagick
78
+ end
79
+ end
@@ -1,6 +1,5 @@
1
1
  module Gluttonberg
2
2
  module Library
3
-
4
3
  module QuickMagick
5
4
  class ImageList
6
5
 
@@ -2,73 +2,72 @@ module Gluttonberg
2
2
  module Library
3
3
  module Storage
4
4
  module Filesystem
5
-
5
+ extend ActiveSupport::Concern
6
6
  module ClassMethods
7
7
  # It run when the engine is loaded. It makes sure that all the required
8
8
  # directories for storing assets are in the public dir, creating them if
9
9
  # they are missing. It also stores the various paths so they can be
10
10
  # retreived using the assets_dir method.
11
- def self.storage_setup
12
- Library.set_asset_root("public/user_assets", "public/user_assets", "public/test_assets")
11
+ def storage_setup
12
+ Library.set_asset_root(File.join(Rails.root, "public/user_assets"), File.join(Rails.root, "public/user_assets"), File.join(Rails.root, "public/test_assets"))
13
13
  FileUtils.mkdir(Library.root) unless File.exists?(Library.root) || File.symlink?(Library.root)
14
14
  end
15
15
  end
16
16
 
17
- module InstanceMethods
18
17
 
19
- # The generated directory where this file is located. If it is an image
20
- # it’s thumbnails will be stored here as well.
21
- def directory
22
- Filesystem::ClassMethods.storage_setup if Library.root.blank?
23
- Library.root + "/" + self.asset_hash
24
- end
18
+ # The generated directory where this file is located. If it is an image
19
+ # it’s thumbnails will be stored here as well.
20
+ def directory
21
+ self.class.storage_setup if Library.root.blank?
22
+ Library.root + "/" + self.asset_hash
23
+ end
25
24
 
26
- def tmp_directory
27
- Filesystem::ClassMethods.storage_setup if Library.tmp_root.blank?
28
- Library.tmp_root + "/" + self.asset_hash
29
- end
25
+ def tmp_directory
26
+ self.class.storage_setup if Library.tmp_root.blank?
27
+ Library.tmp_root + "/" + self.asset_hash
28
+ end
30
29
 
31
- def assets_directory_public_url
32
- "/user_assets"
33
- end
30
+ def assets_directory_public_url
31
+ "/user_assets"
32
+ end
34
33
 
35
- def make_backup
36
- unless File.exist?(original_file_on_disk)
37
- FileUtils.cp location_on_disk, original_file_on_disk
38
- FileUtils.chmod(0755,original_file_on_disk)
39
- end
40
- end
34
+ def make_backup(replace_backup=true)
35
+ FileUtils.rm(original_file_on_disk) if replace_backup && File.exist?(original_file_on_disk)
36
+ FileUtils.cp location_on_disk, original_file_on_disk unless File.exist?(original_file_on_disk)
37
+ FileUtils.chmod(0755,original_file_on_disk)
38
+ end
41
39
 
42
- def remove_file_from_storage
43
- if File.exists?(directory)
44
- FileUtils.rm_r(directory)
45
- end
40
+ def remove_file_from_storage
41
+ if File.exists?(directory)
42
+ FileUtils.rm_r(directory)
46
43
  end
44
+ end
47
45
 
48
- def remove_file_from_tmp_storage
49
- # just dummy method. As we don't need to remove because tmp and actual folder is same for filesystem
50
- end
46
+ def remove_file_from_tmp_storage
47
+ # just dummy method. As we don't need to remove because tmp and actual folder is same for filesystem
48
+ end
49
+
50
+ def download_asset_to_tmp_file
51
+ # just dummy method. As we don't need to download file for filesystem storage
52
+ end
51
53
 
52
- def update_file_on_storage
53
- if file
54
- FileUtils.mkdir(directory) unless File.exists?(directory)
55
- FileUtils.cp file.tempfile.path, location_on_disk
56
- FileUtils.chmod(0755, location_on_disk)
54
+ def update_file_on_storage
55
+ if file
56
+ FileUtils.mkdir(directory) unless File.exists?(directory)
57
+ FileUtils.rm(location_on_disk) if File.exists?(location_on_disk)
58
+ FileUtils.cp file.tempfile.path, location_on_disk
59
+ FileUtils.chmod(0755, location_on_disk)
57
60
 
58
- # new file has been upload, if its image generate thumbnails, if mp3 collect sound info.
59
- asset_processing
60
- end
61
+ # new file has been upload, if its image generate thumbnails, if mp3 collect sound info.
62
+ asset_processing
61
63
  end
64
+ end
62
65
 
63
- def move_tmp_file_to_actual_directory(file_name , tmp_file_dirty=true)
64
- if self.file_dirty == true
65
- self.file_dirty = false
66
- end
66
+ def move_tmp_file_to_actual_directory(file_name , tmp_file_dirty=true)
67
+ if self.file_dirty == true
68
+ self.file_dirty = false
67
69
  end
68
-
69
- # def write_file_to_disc(src_file_path , )
70
- # end
71
- end #InstanceMethods
70
+ end
72
71
 
73
72
  end #Filesystem
74
73
  end #Storage
@@ -2,41 +2,47 @@ module Gluttonberg
2
2
  module Library
3
3
  module Storage
4
4
  module S3
5
+ extend ActiveSupport::Concern
6
+
5
7
  module ClassMethods
6
8
  # It run when the engine is loaded. It makes sure that all the required
7
9
  # directories for storing assets are in the public dir, creating them if
8
10
  # they are missing. It also stores the various paths so they can be
9
11
  # retreived using the assets_dir method.
10
12
  TEMP_ASSET_DIRECTORY = "tmp/user_assets"
11
- def self.storage_setup
13
+ def storage_setup
12
14
  Library.set_asset_root("user_assets", TEMP_ASSET_DIRECTORY, "public/test_assets")
13
15
  FileUtils.mkdir(Library.root) unless File.exists?(Library.root) || File.symlink?(Library.root)
14
16
  FileUtils.mkdir(Library.tmp_root) unless File.exists?(Library.tmp_root) || File.symlink?(Library.tmp_root)
15
17
  end
16
18
 
17
- def self.s3_server_url
19
+ def s3_server_url
18
20
  Gluttonberg::Setting.get_setting("s3_server_url")
19
21
  end
20
22
 
21
- def self.s3_bucket_name
23
+ def s3_bucket_name
22
24
  Gluttonberg::Setting.get_setting("s3_bucket")
23
25
  end
24
26
 
25
- def self.s3_server_key_id
27
+ def s3_server_key_id
26
28
  Gluttonberg::Setting.get_setting("s3_key_id")
27
29
  end
28
30
 
29
- def self.s3_server_access_key
31
+ def s3_server_access_key
30
32
  Gluttonberg::Setting.get_setting("s3_access_key")
31
33
  end
32
34
 
33
- def self.bucket_handle
34
- key_id = S3::ClassMethods.s3_server_key_id
35
- key_val = S3::ClassMethods.s3_server_access_key
36
- s3_server_url = S3::ClassMethods.s3_server_url
37
- s3_bucket = S3::ClassMethods.s3_bucket_name
35
+ def bucket_handle
36
+ key_id = self.s3_server_key_id
37
+ key_val = self.s3_server_access_key
38
+ s3_server_url = self.s3_server_url
39
+ s3_bucket = self.s3_bucket_name
38
40
  if !key_id.blank? && !key_val.blank? && !s3_server_url.blank? && !s3_bucket.blank?
39
- s3 = AWS::S3.new({ :access_key_id => key_id, :secret_access_key => key_val , :server => s3_server_url})
41
+ s3 = AWS::S3.new({
42
+ :access_key_id => key_id,
43
+ :secret_access_key => key_val,
44
+ :server => s3_server_url
45
+ })
40
46
  bucket = s3.buckets[s3_bucket]
41
47
  else
42
48
  nil
@@ -44,149 +50,149 @@ module Gluttonberg
44
50
  end
45
51
 
46
52
  #takes file from public/assets folder and upload to s3 if s3 info is given in CMS settings
47
- def self.migrate_file_to_s3(asset_hash , file_name, mime_type='')
53
+ def migrate_file_to_s3(asset_hash , file_name, mime_type='')
48
54
  bucket = bucket_handle
49
- unless bucket.blank?
50
- local_file = "public/user_assets/" + asset_hash + "/" + file_name
55
+ if bucket != nil
51
56
  key_for_s3 = "user_assets/" + asset_hash + "/" + file_name
52
- date = Time.now+1.years
53
- key = bucket.objects[key_for_s3]
54
57
  asset = Gluttonberg::Asset.where(:asset_hash => asset_hash).first
55
58
  unless asset.blank?
56
- puts " Copying #{local_file} to #{S3::ClassMethods.s3_bucket_name}"
57
-
58
- mime_type = asset.mime_type if mime_type.blank?
59
-
60
- unless mime_type.blank?
61
- key.write(File.open(local_file), {:expires => date.rfc2822, :content_type => mime_type , :acl => :public_read })
62
- else
63
- key.write(File.open(local_file) , {:expires => date.rfc2822 , :acl => :public_read })
64
- end
59
+ local_file = asset.tmp_directory + "/" + file_name
60
+ local_file = "public/user_assets/" + asset_hash + "/" + file_name unless File.exist?(local_file)
61
+ puts " Copying #{local_file} to #{self.s3_bucket_name}"
62
+ self.upload_file_to(asset, bucket.objects[key_for_s3], mime_type, local_file)
65
63
  asset.update_attributes(:copied_to_s3 => true)
66
- puts "Copied"
67
64
  end
68
65
  end
69
66
  end
70
67
 
68
+ def upload_file_to(asset, bucket_key, mime_type, local_file)
69
+ options = {
70
+ :expires => (Time.now+1.years).rfc2822,
71
+ :acl => :public_read
72
+ }
73
+ mime_type = asset.mime_type if mime_type.blank?
74
+ options[:content_type] = mime_type unless mime_type.blank?
75
+ response = bucket_key.write(File.open(File.join((Rails.env == 'test' ? Engine.root : Rails.root),local_file)), options)
76
+ puts "Copied"
77
+ end
78
+
71
79
  end
72
80
 
73
- module InstanceMethods
74
81
 
75
- def bucket_handle
76
- unless @bucket.blank?
77
- @bucket
78
- else
79
- @bucket = S3::ClassMethods.bucket_handle
80
- end
81
- end
82
+ # InstanceMethods
82
83
 
83
- # The generated directory where this file is located.
84
- def directory
85
- S3::ClassMethods.storage_setup if Library.root.blank?
86
- Library.root + "/" + self.asset_hash
87
- end
84
+ def bucket_handle
85
+ @bucket ||= self.class.bucket_handle
86
+ end
88
87
 
89
- # The generated tmp directory where we will locate this file temporarily for processing.
90
- def tmp_directory
91
- S3::ClassMethods.storage_setup if Library.tmp_root.blank?
92
- Library.tmp_root + "/" + self.asset_hash
93
- end
88
+ def bucket_handle=(handle)
89
+ @bucket = handle
90
+ end
94
91
 
95
- def s3_bucket_root_url
96
- "http://#{S3::ClassMethods.s3_server_url}/#{S3::ClassMethods.s3_bucket_name}"
97
- end
92
+ # The generated directory where this file is located.
93
+ def directory
94
+ self.class.storage_setup if Library.root.blank?
95
+ Library.root + "/" + self.asset_hash
96
+ end
98
97
 
99
- def assets_directory_public_url
100
- "#{s3_bucket_root_url}/user_assets"
101
- end
98
+ # The generated tmp directory where we will locate this file temporarily for processing.
99
+ def tmp_directory
100
+ self.class.storage_setup if Library.tmp_root.blank?
101
+ Library.tmp_root + "/" + self.asset_hash
102
+ end
102
103
 
103
- def make_backup
104
- unless File.exist?(tmp_original_file_on_disk)
105
- FileUtils.cp tmp_location_on_disk, tmp_original_file_on_disk
106
- FileUtils.chmod(0755,tmp_original_file_on_disk)
107
- move_tmp_file_to_actual_directory("original_" + file_name , true)
108
- end
109
- end
104
+ def s3_bucket_root_url
105
+ "http://#{self.class.s3_server_url}/#{self.class.s3_bucket_name}"
106
+ end
110
107
 
111
- def remove_file_from_storage
112
- remove_file_from_tmp_storage
113
- remove_asset_folder_from_s3
108
+ def assets_directory_public_url
109
+ "#{s3_bucket_root_url}/user_assets"
110
+ end
111
+
112
+ def make_backup(replace_backup=true)
113
+ unless File.exist?(tmp_original_file_on_disk)
114
+ FileUtils.cp tmp_location_on_disk, tmp_original_file_on_disk
115
+ FileUtils.chmod(0755,tmp_original_file_on_disk)
116
+ move_tmp_file_to_actual_directory("original_" + file_name , true)
114
117
  end
118
+ end
115
119
 
116
- def remove_file_from_tmp_storage
117
- if File.exists?(tmp_directory)
118
- puts "Remove assset folder from tmp storage (#{tmp_directory})"
119
- FileUtils.rm_r(tmp_directory)
120
- end
120
+ def remove_file_from_storage
121
+ remove_file_from_tmp_storage
122
+ remove_asset_folder_from_s3
123
+ end
124
+
125
+ def remove_file_from_tmp_storage
126
+ if File.exists?(tmp_directory)
127
+ puts "Remove assset folder from tmp storage (#{tmp_directory})"
128
+ FileUtils.rm_r(tmp_directory)
121
129
  end
130
+ end
122
131
 
123
- def update_file_on_storage
124
- if file
125
- FileUtils.mkdir(tmp_directory) unless File.exists?(tmp_directory)
126
- FileUtils.cp file.tempfile.path, tmp_location_on_disk
127
- FileUtils.chmod(0755, tmp_location_on_disk)
128
-
129
- move_tmp_file_to_actual_directory(file_name , false)
130
- # new file has been upload, if its image generate thumbnails, if mp3 collect sound info.
131
- asset_processing
132
- # delete local tmp folder
133
- remove_file_from_tmp_storage
134
- end
132
+ def update_file_on_storage
133
+ if file
134
+ FileUtils.mkdir(tmp_directory) unless File.exists?(tmp_directory)
135
+ FileUtils.cp file.tempfile.path, tmp_location_on_disk
136
+ FileUtils.chmod(0755, tmp_location_on_disk)
137
+
138
+ move_tmp_file_to_actual_directory(file_name , false)
139
+ # new file has been upload, if its image generate thumbnails, if mp3 collect sound info.
140
+ asset_processing
141
+ # delete local tmp folder
142
+ remove_file_from_tmp_storage unless self.asset_type.asset_category.name == "video"
135
143
  end
144
+ end
136
145
 
137
- def move_tmp_file_to_actual_directory(file_name , tmp_file_dirty=true)
138
- if self.file_dirty == true || tmp_file_dirty == true
139
- copy_file_to_s3(file_name)
140
- self.file_dirty = false
141
- end
146
+ def move_tmp_file_to_actual_directory(file_name , tmp_file_dirty=true)
147
+ if self.file_dirty == true || tmp_file_dirty == true
148
+ copy_file_to_s3(file_name)
149
+ self.file_dirty = false
142
150
  end
151
+ end
143
152
 
144
- #takes file from tmp folder and upload to s3 if s3 info is given in CMS settings
145
- def copy_file_to_s3(file_name)
146
- bucket = bucket_handle
147
- unless bucket.blank?
148
- local_file = self.tmp_directory + "/" + file_name
149
- folder = self.asset_hash
150
- date = Time.now+1.years
151
- puts "Copying #{file_name} (#{local_file}) to #{S3::ClassMethods.s3_bucket_name}"
152
- key = bucket.objects[self.directory + "/" + file_name]
153
- unless self.mime_type.blank?
154
- key.write(File.open(local_file), {:expires => date.rfc2822, :content_type => self.mime_type , :acl => :public_read })
155
- else
156
- key.write(File.open(local_file) , {:expires => date.rfc2822 , :acl => :public_read })
157
- end
158
- self.update_column(:copied_to_s3 , true)
159
- puts "Copied"
160
- end
153
+ #takes file from tmp folder and upload to s3 if s3 info is given in CMS settings
154
+ def copy_file_to_s3(file_name)
155
+ bucket = bucket_handle
156
+ if bucket
157
+ local_file = self.tmp_directory + "/" + file_name
158
+ puts "Copying #{file_name} (#{local_file}) to #{self.class.s3_bucket_name}"
159
+ bucket_key = bucket.objects[self.directory + "/" + file_name]
160
+ self.class.upload_file_to(self, bucket_key, self.mime_type, local_file)
161
+ self.update_column(:copied_to_s3 , true)
161
162
  end
163
+ end
162
164
 
165
+ # This method is used for delayed job
166
+ def copy_audios_to_s3
167
+ copy_file_to_s3(self.file_name)
168
+ end
163
169
 
170
+ # TODO
171
+ def remove_file_from_s3(file_name)
172
+ end
164
173
 
165
- # TODO
166
- def remove_file_from_s3(file_name)
174
+ def remove_asset_folder_from_s3
175
+ bucket = bucket_handle
176
+ unless bucket.blank?
177
+ bucket.objects.with_prefix(self.directory).delete_all
167
178
  end
179
+ end
168
180
 
169
- def remove_asset_folder_from_s3
170
- bucket = bucket_handle
171
- unless bucket.blank?
172
- bucket.objects.with_prefix(self.directory).delete_all
173
- end
174
- end
181
+ def download_asset_to_tmp_file
182
+ download_orginal_file_from_s3
183
+ end
175
184
 
176
- def download_asset_to_tmp_file
177
- download_orginal_file_from_s3
178
- end
185
+ def download_orginal_file_from_s3
186
+ FileUtils.mkdir(self.tmp_directory) unless File.exists?(self.tmp_directory)
187
+ _download_file_from_s3(self.location_on_disk, self.tmp_location_on_disk)
188
+ _download_file_from_s3(self.original_file_on_disk, self.tmp_original_file_on_disk)
189
+ end
179
190
 
180
- def download_orginal_file_from_s3
191
+ private
192
+ def _download_file_from_s3(src, dest)
181
193
  FileUtils.mkdir(self.tmp_directory) unless File.exists?(self.tmp_directory)
182
194
  bucket = bucket_handle
183
195
  key = bucket.objects[self.location_on_disk]
184
- File.open(self.tmp_location_on_disk, "w", encoding: "ASCII-8BIT") do |f|
185
- key.read do |chunk|
186
- f.write(chunk)
187
- end
188
- end
189
- key = bucket.objects[self.original_file_on_disk]
190
196
  if key.exists?
191
197
  File.open(self.tmp_original_file_on_disk, "w", encoding: "ASCII-8BIT") do |f|
192
198
  key.read do |chunk|
@@ -195,8 +201,6 @@ module Gluttonberg
195
201
  end
196
202
  end
197
203
  end
198
-
199
- end #InstanceMethods
200
204
  end #S3
201
205
  end #Storage
202
206
  end #Library