muck-comments 0.1.6 → 0.1.7

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 (273) hide show
  1. data/.gitignore +1 -0
  2. data/README.rdoc +24 -0
  3. data/Rakefile +2 -11
  4. data/VERSION +1 -1
  5. data/app/controllers/muck/comments_controller.rb +66 -36
  6. data/app/helpers/muck_comments_helper.rb +23 -5
  7. data/app/views/activity_templates/_comment.html.erb +3 -9
  8. data/app/views/comments/_comment.html.erb +6 -25
  9. data/app/views/comments/_form.html.erb +2 -1
  10. data/app/views/comments/index.html.erb +3 -0
  11. data/app/views/comments/new.html.erb +5 -0
  12. data/db/migrate/20090730154102_allow_null_user.rb +9 -0
  13. data/lib/active_record/acts/muck_comment.rb +2 -2
  14. data/lib/acts_as_commentable_with_threading.rb +3 -3
  15. data/lib/muck_comments.rb +2 -0
  16. data/locales/en.yml +5 -1
  17. data/muck-comments.gemspec +307 -15
  18. data/test/rails_root/.gitignore +8 -0
  19. data/test/rails_root/.rake_tasks +103 -0
  20. data/test/rails_root/Capfile +3 -0
  21. data/test/rails_root/Rakefile +15 -0
  22. data/test/rails_root/app/controllers/application_controller.rb +21 -0
  23. data/test/rails_root/app/controllers/default_controller.rb +7 -0
  24. data/test/rails_root/app/helpers/application_helper.rb +3 -0
  25. data/test/rails_root/app/models/.keep +0 -0
  26. data/test/rails_root/app/models/comment.rb +3 -0
  27. data/test/rails_root/app/models/user.rb +8 -0
  28. data/test/rails_root/app/models/user_session.rb +2 -0
  29. data/test/rails_root/app/views/default/index.html.erb +0 -0
  30. data/test/rails_root/app/views/layouts/default.html.erb +26 -0
  31. data/test/rails_root/config/amazon_s3.yml +14 -0
  32. data/test/rails_root/config/boot.rb +109 -0
  33. data/test/rails_root/config/database.yml +23 -0
  34. data/test/rails_root/config/environment.rb +30 -0
  35. data/test/rails_root/config/environments/cucumber.rb +38 -0
  36. data/test/rails_root/config/environments/development.rb +19 -0
  37. data/test/rails_root/config/environments/production.rb +1 -0
  38. data/test/rails_root/config/environments/test.rb +42 -0
  39. data/test/rails_root/config/global_config.yml +77 -0
  40. data/test/rails_root/config/initializers/inflections.rb +10 -0
  41. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  42. data/test/rails_root/config/initializers/requires.rb +13 -0
  43. data/test/rails_root/config/initializers/session_store.rb +8 -0
  44. data/test/rails_root/config/routes.rb +4 -0
  45. data/test/rails_root/db/.keep +0 -0
  46. data/test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb +16 -0
  47. data/test/rails_root/db/migrate/20090402033319_add_muck_activities.rb +36 -0
  48. data/test/rails_root/db/migrate/20090402234137_create_languages.rb +18 -0
  49. data/test/rails_root/db/migrate/20090426041056_create_countries.rb +15 -0
  50. data/test/rails_root/db/migrate/20090426041103_create_states.rb +18 -0
  51. data/test/rails_root/db/migrate/20090602041838_create_users.rb +39 -0
  52. data/test/rails_root/db/migrate/20090608073052_create_friends.rb +16 -0
  53. data/test/rails_root/db/migrate/20090613173314_create_comments.rb +24 -0
  54. data/test/rails_root/db/migrate/20090703055724_add_contents.rb +49 -0
  55. data/test/rails_root/db/migrate/20090704220055_create_slugs.rb +18 -0
  56. data/test/rails_root/db/migrate/20090704220120_acts_as_taggable_on_migration.rb +29 -0
  57. data/test/rails_root/db/migrate/20090730044139_add_comment_cache.rb +9 -0
  58. data/test/rails_root/db/migrate/20090730074858_add_comment_count_to_users.rb +9 -0
  59. data/test/rails_root/db/migrate/20090730154102_allow_null_user.rb +9 -0
  60. data/test/rails_root/db/schema.rb +215 -0
  61. data/test/rails_root/features/comments.feature +21 -0
  62. data/test/rails_root/features/step_definitions/comment_steps.rb +11 -0
  63. data/test/rails_root/features/step_definitions/common_steps.rb +93 -0
  64. data/test/rails_root/features/step_definitions/webrat_steps.rb +128 -0
  65. data/test/rails_root/features/support/env.rb +49 -0
  66. data/test/rails_root/features/support/paths.rb +33 -0
  67. data/test/rails_root/lib/tasks/cucumber.rake +20 -0
  68. data/test/rails_root/public/.htaccess +40 -0
  69. data/test/rails_root/public/404.html +30 -0
  70. data/test/rails_root/public/422.html +30 -0
  71. data/test/rails_root/public/500.html +30 -0
  72. data/test/rails_root/public/dispatch.rb +10 -0
  73. data/test/rails_root/public/favicon.ico +0 -0
  74. data/test/rails_root/public/images/arrow_left.gif +0 -0
  75. data/test/rails_root/public/images/arrow_right.gif +0 -0
  76. data/test/rails_root/public/images/fancybox/fancy_closebox.png +0 -0
  77. data/test/rails_root/public/images/fancybox/fancy_left.png +0 -0
  78. data/test/rails_root/public/images/fancybox/fancy_progress.png +0 -0
  79. data/test/rails_root/public/images/fancybox/fancy_right.png +0 -0
  80. data/test/rails_root/public/images/fancybox/fancy_shadow_e.png +0 -0
  81. data/test/rails_root/public/images/fancybox/fancy_shadow_n.png +0 -0
  82. data/test/rails_root/public/images/fancybox/fancy_shadow_ne.png +0 -0
  83. data/test/rails_root/public/images/fancybox/fancy_shadow_nw.png +0 -0
  84. data/test/rails_root/public/images/fancybox/fancy_shadow_s.png +0 -0
  85. data/test/rails_root/public/images/fancybox/fancy_shadow_se.png +0 -0
  86. data/test/rails_root/public/images/fancybox/fancy_shadow_sw.png +0 -0
  87. data/test/rails_root/public/images/fancybox/fancy_shadow_w.png +0 -0
  88. data/test/rails_root/public/images/fancybox/fancy_title_left.png +0 -0
  89. data/test/rails_root/public/images/fancybox/fancy_title_main.png +0 -0
  90. data/test/rails_root/public/images/fancybox/fancy_title_right.png +0 -0
  91. data/test/rails_root/public/images/icons/accept.png +0 -0
  92. data/test/rails_root/public/images/icons/add.png +0 -0
  93. data/test/rails_root/public/images/icons/delete.png +0 -0
  94. data/test/rails_root/public/images/icons/vote.png +0 -0
  95. data/test/rails_root/public/images/loading.gif +0 -0
  96. data/test/rails_root/public/images/nothing.png +0 -0
  97. data/test/rails_root/public/images/profile_default.jpg +0 -0
  98. data/test/rails_root/public/images/rails.png +0 -0
  99. data/test/rails_root/public/images/spinner.gif +0 -0
  100. data/test/rails_root/public/images/sprites.png +0 -0
  101. data/test/rails_root/public/javascripts/application.js +2 -0
  102. data/test/rails_root/public/javascripts/builder.js +136 -0
  103. data/test/rails_root/public/javascripts/controls.js +963 -0
  104. data/test/rails_root/public/javascripts/dragdrop.js +972 -0
  105. data/test/rails_root/public/javascripts/effects.js +1120 -0
  106. data/test/rails_root/public/javascripts/fancyzoom.min.js +1 -0
  107. data/test/rails_root/public/javascripts/jquery/jquery-ui.js +273 -0
  108. data/test/rails_root/public/javascripts/jquery/jquery.easing.js +1 -0
  109. data/test/rails_root/public/javascripts/jquery/jquery.fancybox.js +9 -0
  110. data/test/rails_root/public/javascripts/jquery/jquery.form.js +637 -0
  111. data/test/rails_root/public/javascripts/jquery/jquery.jgrowl.js +2 -0
  112. data/test/rails_root/public/javascripts/jquery/jquery.js +19 -0
  113. data/test/rails_root/public/javascripts/jquery/jquery.tips.js +69 -0
  114. data/test/rails_root/public/javascripts/muck.js +80 -0
  115. data/test/rails_root/public/javascripts/muck_activities.js +108 -0
  116. data/test/rails_root/public/javascripts/prototype.js +4225 -0
  117. data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
  118. data/test/rails_root/public/javascripts/slider.js +277 -0
  119. data/test/rails_root/public/javascripts/sound.js +60 -0
  120. data/test/rails_root/public/robots.txt +1 -0
  121. data/test/rails_root/public/stylesheets/.keep +0 -0
  122. data/test/rails_root/public/stylesheets/admin.css +12 -0
  123. data/test/rails_root/public/stylesheets/blueprint/ie.css +26 -0
  124. data/test/rails_root/public/stylesheets/blueprint/liquid_screen.css +203 -0
  125. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
  126. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
  127. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
  128. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
  129. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
  130. data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
  131. data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
  132. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
  133. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
  134. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
  135. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
  136. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
  137. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  138. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
  139. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
  140. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
  141. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
  142. data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/liquid.css +134 -0
  143. data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/src/liquid.css +197 -0
  144. data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
  145. data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/screen.css +109 -0
  146. data/test/rails_root/public/stylesheets/blueprint/print.css +30 -0
  147. data/test/rails_root/public/stylesheets/blueprint/screen.css +251 -0
  148. data/test/rails_root/public/stylesheets/blueprint/sprite.css +1 -0
  149. data/test/rails_root/public/stylesheets/blueprint/src/forms.css +49 -0
  150. data/test/rails_root/public/stylesheets/blueprint/src/grid.css +213 -0
  151. data/test/rails_root/public/stylesheets/blueprint/src/grid.png +0 -0
  152. data/test/rails_root/public/stylesheets/blueprint/src/ie.css +59 -0
  153. data/test/rails_root/public/stylesheets/blueprint/src/print.css +85 -0
  154. data/test/rails_root/public/stylesheets/blueprint/src/reset.css +38 -0
  155. data/test/rails_root/public/stylesheets/blueprint/src/typography.css +105 -0
  156. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
  157. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
  158. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
  159. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
  160. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
  161. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
  162. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  163. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
  164. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
  165. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_222222_256x240.png +0 -0
  166. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2694e8_256x240.png +0 -0
  167. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2e83ff_256x240.png +0 -0
  168. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_72a7cf_256x240.png +0 -0
  169. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_888888_256x240.png +0 -0
  170. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_cd0a0a_256x240.png +0 -0
  171. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_ffffff_256x240.png +0 -0
  172. data/test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.1.custom.css +404 -0
  173. data/test/rails_root/public/stylesheets/jquery/jquery.fancybox.css +44 -0
  174. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  175. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  176. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  177. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  178. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  179. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  180. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  181. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  182. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_217bc0_256x240.png +0 -0
  183. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
  184. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_469bdd_256x240.png +0 -0
  185. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
  186. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
  187. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
  188. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
  189. data/test/rails_root/public/stylesheets/jquery/redmond/jquery-ui-1.7.1.custom.css +404 -0
  190. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  191. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  192. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  193. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  194. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  195. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  196. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  197. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  198. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_222222_256x240.png +0 -0
  199. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  200. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_454545_256x240.png +0 -0
  201. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_888888_256x240.png +0 -0
  202. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  203. data/test/rails_root/public/stylesheets/jquery/smoothness/jquery-ui-1.7.1.custom.css +404 -0
  204. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  205. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  206. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  207. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  208. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  209. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  210. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  211. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  212. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  213. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  214. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  215. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  216. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  217. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  218. data/test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
  219. data/test/rails_root/public/stylesheets/reset.css +0 -0
  220. data/test/rails_root/public/stylesheets/styles.css +89 -0
  221. data/test/rails_root/public/stylesheets/themes/blue/styles.css +1 -0
  222. data/test/rails_root/public/stylesheets/themes/red/styles.css +1 -0
  223. data/test/rails_root/script/about +3 -0
  224. data/test/rails_root/script/breakpointer +3 -0
  225. data/test/rails_root/script/console +3 -0
  226. data/test/rails_root/script/create_project.rb +52 -0
  227. data/test/rails_root/script/cucumber +8 -0
  228. data/test/rails_root/script/dbconsole +3 -0
  229. data/test/rails_root/script/destroy +3 -0
  230. data/test/rails_root/script/generate +3 -0
  231. data/test/rails_root/script/performance/benchmarker +3 -0
  232. data/test/rails_root/script/performance/profiler +3 -0
  233. data/test/rails_root/script/performance/request +3 -0
  234. data/test/rails_root/script/plugin +3 -0
  235. data/test/rails_root/script/process/inspector +3 -0
  236. data/test/rails_root/script/process/reaper +3 -0
  237. data/test/rails_root/script/process/spawner +3 -0
  238. data/test/rails_root/script/runner +3 -0
  239. data/test/rails_root/script/server +3 -0
  240. data/test/rails_root/test/factories.rb +75 -0
  241. data/test/rails_root/test/functional/.keep +0 -0
  242. data/test/rails_root/test/functional/comments_controller_test.rb +72 -0
  243. data/test/rails_root/test/mocks/development/.keep +0 -0
  244. data/test/rails_root/test/mocks/test/.keep +0 -0
  245. data/test/rails_root/test/shoulda_macros/controller.rb +49 -0
  246. data/test/rails_root/test/shoulda_macros/forms.rb +32 -0
  247. data/test/rails_root/test/shoulda_macros/models.rb +50 -0
  248. data/test/rails_root/test/shoulda_macros/pagination.rb +53 -0
  249. data/test/rails_root/test/shoulda_macros/plugins.rb +34 -0
  250. data/test/rails_root/test/test_helper.rb +48 -0
  251. data/test/rails_root/test/unit/.keep +0 -0
  252. data/test/rails_root/test/unit/comment_test.rb +63 -0
  253. data/test/rails_root/test/unit/user_test.rb +23 -0
  254. data/test/rails_root/vendor/plugins/ssl_requirement/README +43 -0
  255. data/test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb +62 -0
  256. data/test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb +132 -0
  257. data/test/rails_root/vendor/plugins/validation_reflection/CHANGELOG +24 -0
  258. data/test/rails_root/vendor/plugins/validation_reflection/LICENSE +20 -0
  259. data/test/rails_root/vendor/plugins/validation_reflection/README +64 -0
  260. data/test/rails_root/vendor/plugins/validation_reflection/Rakefile +22 -0
  261. data/test/rails_root/vendor/plugins/validation_reflection/about.yml +7 -0
  262. data/test/rails_root/vendor/plugins/validation_reflection/init.rb +8 -0
  263. data/test/rails_root/vendor/plugins/validation_reflection/lib/boiler_plate/validation_reflection.rb +129 -0
  264. data/test/rails_root/vendor/plugins/validation_reflection/test/test_helper.rb +36 -0
  265. data/test/rails_root/vendor/plugins/validation_reflection/test/validation_reflection_test.rb +126 -0
  266. metadata +307 -15
  267. data/test/db/database.yml +0 -18
  268. data/test/db/schema.rb +0 -25
  269. data/test/factories.rb +0 -8
  270. data/test/functional/comments_controller_test.rb +0 -34
  271. data/test/test_helper.rb +0 -44
  272. data/test/unit/comment_test.rb +0 -49
  273. data/test/unit/commentable_test.rb +0 -7
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  coverage
3
3
  rdoc
4
4
  pkg
5
+ log/*
data/README.rdoc CHANGED
@@ -38,6 +38,30 @@ Override the comments controller to change the the security model. For example:
38
38
 
39
39
  end
40
40
 
41
+ === Attach comments to a model:
42
+
43
+ For a given model add 'acts_as_commentable'
44
+ class Blog < ActiveRecord::Base
45
+ acts_as_commentable
46
+ end
47
+
48
+ 'acts_as_commentable' will automatically track the count, but you will need to add a column to your table called comment_count:
49
+
50
+ class AddCommentCache < ActiveRecord::Migration
51
+ def self.up
52
+ add_column :blogs, :comment_count, :integer, :default => 0
53
+ end
54
+
55
+ def self.down
56
+ remove_column :blogs, :comment_count
57
+ end
58
+ end
59
+
60
+ Then you will be able to do this to get a comment count:
61
+
62
+ @blog.comment_count
63
+
64
+
41
65
  === Comment partial
42
66
  When calling create in the comments controller with :format => 'json' the resulting json will include an 'html' field that contains
43
67
  a rendered version of the comment html. To facilitate this process be sure to create a partial called '_comment.html.erb' under a directory
data/Rakefile CHANGED
@@ -8,8 +8,8 @@ task :default => :test
8
8
  desc 'Test muck-comments.'
9
9
  Rake::TestTask.new(:test) do |t|
10
10
  t.libs << 'lib'
11
- t.libs << 'test'
12
- t.pattern = 'test/**/*_test.rb'
11
+ t.libs << 'test/rails_root/test'
12
+ t.pattern = 'test/rails_root/test/**/*_test.rb'
13
13
  t.verbose = true
14
14
  end
15
15
 
@@ -56,15 +56,6 @@ begin
56
56
  gemspec.rubyforge_project = 'muck-comments'
57
57
  gemspec.add_dependency "muck-engine"
58
58
  gemspec.add_dependency "muck-users"
59
- # gemspec.files.include %w( tasks/*
60
- # db/migrate/*.rb
61
- # app/**/**/**/*
62
- # config/*
63
- # locales/*
64
- # rails/*
65
- # test/*
66
- # lib/**/*
67
- # public/javascripts/* )
68
59
  end
69
60
  rescue LoadError
70
61
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6
1
+ 0.1.7
@@ -1,33 +1,50 @@
1
1
  class Muck::CommentsController < ApplicationController
2
2
  unloadable
3
3
 
4
- before_filter :get_parent, :only => [:create]
4
+ before_filter :setup_parent, :only => [:new, :create]
5
+ before_filter :has_permission?, :only => [:new, :create]
5
6
  before_filter :get_comment, :only => [:destroy]
6
-
7
+
8
+ def index
9
+ @parent = get_parent
10
+ @comment = Comment.find(params[:id]) rescue nil
11
+ @comments = @parent.comments.by_newest if !@parent.blank?
12
+ @comments ||= @comment.children if !@comment.blank?
13
+
14
+ respond_to do |format|
15
+ format.html { render :template => 'comments/index', :layout => 'popup' }
16
+ format.pjs { render :template => 'comments/index', :layout => false }
17
+ end
18
+ end
19
+
20
+ def new
21
+ title = @parent.title rescue ''
22
+ title ||= @parent.name rescue ''
23
+ if title.blank?
24
+ @page_title = t('muck.comments.new_comment_no_title')
25
+ else
26
+ @page_title = t('muck.comments.new_comment_with_title', :title => title)
27
+ end
28
+ respond_to do |format|
29
+ format.html { render :template => 'comments/new', :layout => 'popup' }
30
+ format.pjs { render :template => 'comments/new', :layout => false }
31
+ end
32
+ end
33
+
7
34
  def create
8
35
  @comment = @parent.comments.build(params[:comment])
9
36
  @comment.user = current_user
10
37
  @comment.save!
11
- respond_to do |format|
12
- format.html do
13
- redirect_back_or_default(@parent)
14
- end
15
- format.json { render :json => { :success => true, :comment => @comment, :parent_id => @parent.id, :html => get_parent_comment_html(@parent) } }
16
- end
38
+ message = t('muck.comments.create_success')
39
+ handle_after_create(true, message)
17
40
  rescue ActiveRecord::RecordInvalid => ex
18
41
  if @comment
19
- @errors = @comment.errors.full_messages.to_sentence
42
+ errors = @comment.errors.full_messages.to_sentence
20
43
  else
21
- @errors = ex
22
- end
23
- message = t('muck.comments.create_error', :errors => @errors)
24
- respond_to do |format|
25
- format.html do
26
- flash[:error] = message
27
- redirect_back_or_default(@parent)
28
- end
29
- format.json { render :json => { :success => false, :message => message, :errors => @errors } }
44
+ errors = ex
30
45
  end
46
+ message = t('muck.comments.create_error', :errors => errors)
47
+ handle_after_create(false, message)
31
48
  end
32
49
 
33
50
  def destroy
@@ -48,18 +65,30 @@ class Muck::CommentsController < ApplicationController
48
65
 
49
66
  protected
50
67
 
51
- def get_parent
52
- if !params[:parent_type] || !params[:parent_id]
53
- raise t('muck.comments.missing_parent_id_error')
54
- return
68
+ def handle_after_create(success, message = '')
69
+ if success
70
+ respond_to do |format|
71
+ format.html { do_after_create_action(success, message) }
72
+ format.json { render :json => { :success => true, :comment => @comment, :message => message, :parent_id => @parent.id, :html => get_parent_comment_html(@parent, @comment) } }
73
+ end
74
+ else
75
+ respond_to do |format|
76
+ format.html { do_after_create_action }
77
+ format.json { render :json => { :success => false, :message => message, :errors => @errors } }
78
+ end
55
79
  end
56
- @klass = params[:parent_type].to_s.constantize
57
- @parent = @klass.find(params[:parent_id])
58
- unless has_permission_to_comment(current_user, @parent)
59
- permission_denied
80
+ end
81
+
82
+ def do_after_create_action(success, message)
83
+ flash[:error] = message if !success
84
+ if "true" == params[:render_new]
85
+ flash[:notice] = message if success
86
+ render :template => 'comments/new'
87
+ else
88
+ redirect_back_or_default(@parent)
60
89
  end
61
90
  end
62
-
91
+
63
92
  def get_comment
64
93
  @comment = Comment.find(params[:id])
65
94
  unless @comment.can_edit?(current_user)
@@ -73,18 +102,19 @@ class Muck::CommentsController < ApplicationController
73
102
  end
74
103
  end
75
104
 
76
- def get_parent_comment_html(parent)
77
- old_format = @template.template_format
78
- @template.template_format = :html
79
- comment = render_to_string(:partial => "#{parent.class.to_s.tableize}/comment", :locals => {:comment_owner => parent})
80
- @template.template_format = old_format
81
- comment
105
+ def get_parent_comment_html(parent, comment)
106
+ render_as_html do
107
+ render_to_string(:partial => "#{parent.class.to_s.tableize}/comment", :object => comment, :locals => {:comment_owner => parent})
108
+ end
82
109
  rescue ActionView::MissingTemplate
83
- I18n.t('muck.comments.missing_comment_template_error', :partial => "#{parent.class.to_s.tableize}/comment")
110
+ render_as_html do
111
+ render_to_string(:partial => "comments/comment", :object => comment, :locals => {:comment_owner => parent})
112
+ end
113
+ #I18n.t('muck.comments.missing_comment_template_error', :partial => "#{parent.class.to_s.tableize}/comment")
84
114
  end
85
115
 
86
- def has_permission_to_comment(user, parent)
87
- parent.can_comment?(user)
116
+ def has_permission?
117
+ @parent.can_comment?(current_user)
88
118
  end
89
119
 
90
120
  end
@@ -1,17 +1,35 @@
1
1
  module MuckCommentsHelper
2
2
 
3
+ def show_comments(comments)
4
+ render :partial => 'comments/comment', :collection => comments
5
+ end
6
+
3
7
  # parent is the object to which the comments will be attached
4
8
  # comment is the optional parent comment for the new comment.
5
- def comment_form(parent, comment = nil)
6
- render :partial => 'comments/form', :locals => {:parent => parent, :comment => comment}
9
+ def comment_form(parent, comment = nil, render_new = false)
10
+ render :partial => 'comments/form', :locals => {:parent => parent,
11
+ :comment => comment,
12
+ :render_new => render_new}
7
13
  end
8
14
 
15
+ # make_muck_parent_params is defined in muck-engine and used by many of the engines.
16
+ # This will generate a url suitable for a form to post a create to.
9
17
  def new_comment_path_with_parent(parent)
10
- comments_path(make_parent_params(parent))
18
+ comments_path(make_muck_parent_params(parent))
19
+ end
20
+
21
+ # Generates a link to the 'new' page for a comment
22
+ def new_comment_for_path(parent)
23
+ new_comment_path(make_muck_parent_params(parent))
11
24
  end
12
25
 
13
- def make_parent_params(parent)
14
- { :parent_id => parent.id, :parent_type => parent.class.to_s }
26
+ # Renders a delete button for a comment
27
+ def delete_comment(comment, button_type = :button, button_text = t("muck.activities.delete"))
28
+ render :partial => 'shared/delete', :locals => { :delete_object => comment,
29
+ :button_type => button_type,
30
+ :button_text => button_text,
31
+ :form_class => 'comment-delete',
32
+ :delete_path => comment_path(comment, :format => 'js') }
15
33
  end
16
34
 
17
35
  end
@@ -1,9 +1,3 @@
1
- <div class="activity activity-status-update delete-container" id="<%= activity.dom_id %>">
2
- <div class="actor-icon"><%= icon activity.source %></div>
3
- <div class="activity-content">
4
- <% #TODO build out comment activity template %>
5
- <p><span class="actor"><%= link_to activity.source.display_name, activity.source %></span> <%= activity.content %></p>
6
- <span class="activity-time"><%= t("muck.activities.time_ago", :time_in_words => time_ago_in_words(activity.created_at)) %></span>
7
- <%= delete_activity(activity, :image) %>
8
- </div>
9
- </div>
1
+ <% activity_for(activity, :activity_css_class => 'activity-comment') do -%>
2
+ <%= activity.item.body %>
3
+ <% end -%>
@@ -1,26 +1,7 @@
1
- <%-
2
- comment ||= @comment
3
- return if comment.user.nil?
4
- truncate = false
5
- youtube_videos = comment.comment.scan(/\[youtube:+.+\]/)
6
- c = comment.comment.dup.gsub(/\[youtube:+.+\]/, '')
7
- -%>
8
-
9
- <div id="<%= comment.dom_id %>" class="comment_holder">
10
- <%= icon comment.user, :small, :class => 'left avatar_on_comment' %>
11
- <div class="date_details">
12
- <%= _("%{comment_age} ago %{user_name_link} wrote :") % {:comment_age => time_ago_in_words(comment.created_at), :user_name_link => (link_to h(comment.user.full_name), profile_path(comment.user))} %>
13
- </div>
14
- <div class="comment_message">
15
- <%= sanitize(textilize(c)) %>
16
- <%= x_comment_link(comment) -%>
17
- </div>
18
-
19
- <% unless youtube_videos.empty? %>
20
- <strong><%= pluralize youtube_videos.size, 'video' %>:</strong><br/>
21
- <% youtube_videos.each do |o| %>
22
- <%= tb_video_link(o.gsub!(/\[youtube\:|\]/, '')) %>
23
- <% end
24
- end %>
25
- <div class="clear"></div>
1
+ <div id="<%= comment.dom_id %>" class="comment_holder delete-container">
2
+ <div class="commentor-icon"><%= icon comment.user %></div>
3
+ <p><span class="commentor"><%= link_to comment.user.try(:display_name), comment.user %></span>
4
+ <%= h comment.body %></p>
5
+ <%= delete_comment(comment, :image) if comment.can_edit?(current_user) %>
6
+ <span class="comment-time"><%= t("muck.general.time_ago", :time_in_words => time_ago_in_words(comment.created_at)) %></span></p>
26
7
  </div>
@@ -2,6 +2,7 @@
2
2
  <% form_for(:comment, :url => new_comment_path_with_parent(parent), :html => { :id => "#{parent.dom_id}_comment_form", :class => "comment-form"} ) do |f| -%>
3
3
  <%= f.text_area :body, :class => 'min' %>
4
4
  <%= hidden_field_tag :parent_comment_id, comment.id unless comment.blank? -%>
5
- <%= f.submit t('muck.comments.add_comment'), :class => "button comment-submit", :id => "comment_submit_#{parent.dom_id}" %>
5
+ <%= hidden_field_tag :render_new, render_new -%>
6
+ <%= f.submit t('muck.comments.add_comment_button'), :class => "button comment-submit", :id => "comment_submit_#{parent.dom_id}" %>
6
7
  <% end -%>
7
8
  </div>
@@ -0,0 +1,3 @@
1
+ <%= output_errors(t('muck.comments.problem_adding_comment'), {:class => 'help-box'}, @comment) %>
2
+ <%= show_comments(@comments) unless @comments.blank? %>
3
+ <%= comment_form(@parent, nil, true) unless @parent.blank? %>
@@ -0,0 +1,5 @@
1
+ <div id="add_comment">
2
+ <h2><%= @page_title %><h2>
3
+ <%= output_errors(t('muck.comments.problem_adding_comment'), {:class => 'help-box'}, @comment) %>
4
+ <%= comment_form(@parent, nil, true) %>
5
+ </div>
@@ -0,0 +1,9 @@
1
+ class AllowNullUser < ActiveRecord::Migration
2
+ def self.up
3
+ change_column :comments, :user_id, :integer, :null => true, :default => nil
4
+ end
5
+
6
+ def self.down
7
+ change_column :comments, :user_id, :integer, :null => false, :default => 0
8
+ end
9
+ end
@@ -12,13 +12,13 @@ module ActiveRecord
12
12
  acts_as_nested_set :scope => [:commentable_id, :commentable_type]
13
13
  validates_presence_of :body
14
14
  belongs_to :user
15
- belongs_to :commentable, :polymorphic => true
15
+ belongs_to :commentable, :counter_cache => 'comment_count', :polymorphic => true
16
16
 
17
17
  named_scope :by_newest, :order => "created_at DESC"
18
+ named_scope :by_oldest, :order => "created_at ASC"
18
19
  named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }
19
20
 
20
21
  class_eval <<-EOV
21
-
22
22
  # prevents a user from submitting a crafted form that bypasses activation
23
23
  attr_protected :created_at, :updated_at
24
24
  EOV
@@ -21,7 +21,7 @@ module Acts #:nodoc:
21
21
  def find_comments_for(obj)
22
22
  commentable = ActiveRecord::Base.send(:class_name_of_active_record_descendant, self).to_s
23
23
 
24
- Comment.find(:all,
24
+ self.find(:all,
25
25
  :conditions => ["commentable_id = ? and commentable_type = ?", obj.id, commentable],
26
26
  :order => "created_at DESC"
27
27
  )
@@ -33,7 +33,7 @@ module Acts #:nodoc:
33
33
  def find_comments_by_user(user)
34
34
  commentable = ActiveRecord::Base.send(:class_name_of_active_record_descendant, self).to_s
35
35
 
36
- Comment.find(:all,
36
+ self.find(:all,
37
37
  :conditions => ["user_id = ? and commentable_type = ?", user.id, commentable],
38
38
  :order => "created_at DESC"
39
39
  )
@@ -50,7 +50,7 @@ module Acts #:nodoc:
50
50
 
51
51
  # Helper method to sort comments by date
52
52
  def comments_ordered_by_submitted
53
- Comment.find(:all,
53
+ self.class.find(:all,
54
54
  :conditions => ["commentable_id = ? and commentable_type = ?", id, self.class.name],
55
55
  :order => "created_at DESC"
56
56
  )
data/lib/muck_comments.rb CHANGED
@@ -3,3 +3,5 @@ require 'acts_as_commentable_with_threading'
3
3
  ActiveRecord::Base.class_eval { include ActiveRecord::Acts::MuckComment }
4
4
  ActionController::Base.send :helper, MuckCommentsHelper
5
5
  I18n.load_path += Dir[ File.join(File.dirname(__FILE__), '..', 'locales', '*.{rb,yml}') ]
6
+
7
+ Mime::Type.register "text/javascript", :pjs
data/locales/en.yml CHANGED
@@ -2,10 +2,14 @@ en:
2
2
  muck:
3
3
  comments:
4
4
  cant_delete_comment: "You don't have permission to delete that comment"
5
- missing_parent_id_error: "Please specify a parent object"
6
5
  comment_removed: "Comment successfully removed."
7
6
  create_error: "Could not create the comment {{errors}}"
7
+ create_success: "Successfully added comment"
8
8
  add_comment: "Comment"
9
+ add_comment_button: "Add Comment"
9
10
  missing_comment_template_error: "Could not find a partial named {{partial}}. Please create a comment partial and try again."
11
+ new_comment_no_title: "Add a new comment"
12
+ new_comment_with_title: "Add a new comment to {{title}}"
13
+ problem_adding_comment: "There was a problem adding your comment"
10
14
  activity_templates:
11
15
  comment: Comments