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
@@ -0,0 +1,75 @@
1
+ Factory.sequence :email do |n|
2
+ "somebody#{n}@example.com"
3
+ end
4
+
5
+ Factory.sequence :login do |n|
6
+ "inquire#{n}"
7
+ end
8
+
9
+ Factory.sequence :name do |n|
10
+ "a_name#{n}"
11
+ end
12
+
13
+ Factory.sequence :title do |n|
14
+ "a_title#{n}"
15
+ end
16
+
17
+ Factory.sequence :abbr do |n|
18
+ "abbr#{n}"
19
+ end
20
+
21
+ Factory.sequence :description do |n|
22
+ "This is the description: #{n}"
23
+ end
24
+
25
+ Factory.sequence :uri do |n|
26
+ "n#{n}.example.com"
27
+ end
28
+
29
+ Factory.define :state do |f|
30
+ f.name { Factory.next(:name) }
31
+ f.abbreviation { Factory.next(:abbr) }
32
+ f.country {|a| a.association(:country) }
33
+ end
34
+
35
+ Factory.define :country do |f|
36
+ f.name { Factory.next(:name) }
37
+ f.abbreviation { Factory.next(:abbr) }
38
+ end
39
+
40
+ Factory.define :user do |f|
41
+ f.login { Factory.next(:login) }
42
+ f.email { Factory.next(:email) }
43
+ f.password 'inquire_pass'
44
+ f.password_confirmation 'inquire_pass'
45
+ f.first_name 'test'
46
+ f.last_name 'guy'
47
+ f.terms_of_service true
48
+ f.activated_at DateTime.now
49
+ end
50
+
51
+ Factory.define :permission do |f|
52
+ f.role {|a| a.association(:role)}
53
+ f.user {|a| a.association(:user)}
54
+ end
55
+
56
+ Factory.define :role do |f|
57
+ f.rolename 'administrator'
58
+ end
59
+
60
+ Factory.define :comment do |f|
61
+ f.body { Factory.next(:description) }
62
+ f.user {|a| a.association(:user)}
63
+ f.commentable {|a| a.association(:user)}
64
+ end
65
+
66
+ Factory.define :domain_theme do |f|
67
+ f.name { Factory.next(:name) }
68
+ f.uri { Factory.next(:uri) }
69
+ end
70
+
71
+ Factory.define :theme do |f|
72
+ f.name { Factory.next(:name) }
73
+ end
74
+
75
+
File without changes
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class Muck::CommentsControllerTest < ActionController::TestCase
4
+
5
+ tests Muck::CommentsController
6
+
7
+ context "comments controller" do
8
+ setup do
9
+ @user = Factory(:user)
10
+ end
11
+
12
+ context "GET new" do
13
+ setup do
14
+ get :new, make_parent_params(@user)
15
+ end
16
+ should_not_set_the_flash
17
+ should_respond_with :success
18
+ should_render_template :new
19
+ end
20
+
21
+ context "GET index using comment" do
22
+ setup do
23
+ @comment = Factory(:comment, :commentable => @user)
24
+ child = Factory(:comment, :commentable => @user)
25
+ child.move_to_child_of(@comment)
26
+ get :index, :format => 'html', :id => @comment.id
27
+ end
28
+ should_not_set_the_flash
29
+ should_respond_with :success
30
+ should_render_template :index
31
+ end
32
+
33
+ context "GET index using parent" do
34
+ setup do
35
+ # create a few comments to be displayed
36
+ comment = Factory(:comment, :commentable => @user)
37
+ child = Factory(:comment, :commentable => @user)
38
+ child.move_to_child_of(comment)
39
+ get :index, make_parent_params(@user).merge(:format => 'html')
40
+ end
41
+ should_not_set_the_flash
42
+ should_respond_with :success
43
+ should_render_template :index
44
+ end
45
+
46
+ context "logged in" do
47
+ setup do
48
+ activate_authlogic
49
+ login_as @user
50
+ @comment = Factory(:comment, :user => @user)
51
+ end
52
+ context "delete comment" do
53
+ should "delete comment" do
54
+ assert_difference "Comment.count", -1 do
55
+ delete :destroy, { :id => @comment.to_param, :format => 'json' }
56
+ assert @response.body.include?(I18n.t('muck.comments.comment_removed'))
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ context "create comment" do
63
+ should " be able to create a comment" do
64
+ assert_difference "Comment.count" do
65
+ post :create, make_parent_params(@user).merge(:format => 'json', :comment => { :body => 'test' })
66
+ end
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ end
File without changes
File without changes
@@ -0,0 +1,49 @@
1
+ module MuckControllerMacros
2
+
3
+ def should_require_login(*args)
4
+ args = Hash[*args]
5
+ login_url = args.delete :login_url
6
+ args.each do |action, verb|
7
+ should "Require login for '#{action}' action" do
8
+ if [:put, :delete].include?(verb) # put and delete require an id even if it is a bogus one
9
+ send(verb, action, :id => 1)
10
+ else
11
+ send(verb, action)
12
+ end
13
+ assert_redirected_to(login_url)
14
+ end
15
+ end
16
+ end
17
+
18
+ def should_require_role(role, redirect_url, *actions)
19
+ actions.each do |action|
20
+ should "require role for '#{action}' action" do
21
+ get(action)
22
+ ensure_flash(/permission/i)
23
+ assert_response :redirect
24
+ end
25
+ end
26
+ end
27
+
28
+ #from: http://blog.internautdesign.com/2008/9/11/more-on-custom-shoulda-macros-scoping-of-instance-variables
29
+ def should_not_allow action, object, url= "/login", msg=nil
30
+ msg ||= "a #{object.class.to_s.downcase}"
31
+ should "not be able to #{action} #{msg}" do
32
+ object = eval(object, self.send(:binding), __FILE__, __LINE__)
33
+ get action, :id => object.id
34
+ assert_redirected_to url
35
+ end
36
+ end
37
+
38
+ def should_allow action, object, msg=nil
39
+ msg ||= "a #{object.class.to_s.downcase}"
40
+ should "be able to #{action} #{msg}" do
41
+ object = eval(object, self.send(:binding), __FILE__, __LINE__)
42
+ get action, :id => object.id
43
+ assert_response :success
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ ActionController::TestCase.extend(MuckControllerMacros)
@@ -0,0 +1,32 @@
1
+ module ShouldaFormMacros
2
+ def self.should_have_form(opts)
3
+ model = self.name.gsub(/ControllerTest$/, '').singularize.downcase
4
+ model = model[model.rindex('::')+2..model.size] if model.include?('::')
5
+ http_method, hidden_http_method = form_http_method opts[:method]
6
+ should "have a #{model} form" do
7
+ assert_select "form[action=?][method=#{http_method}]", eval(opts[:action]) do
8
+ if hidden_http_method
9
+ assert_select "input[type=hidden][name=_method][value=#{hidden_http_method}]"
10
+ end
11
+ opts[:fields].each do |attribute, type|
12
+ attribute = attribute.is_a?(Symbol) ? "#{model}[#{attribute.to_s}]" : attribute
13
+ assert_select "input[type=#{type.to_s}][name=?]", attribute
14
+ end
15
+ assert_select "input[type=submit]"
16
+ end
17
+ end
18
+ end
19
+
20
+ def self.form_http_method(http_method)
21
+ http_method = http_method.nil? ? 'post' : http_method.to_s
22
+ if http_method == "post" || http_method == "get"
23
+ return http_method, nil
24
+ else
25
+ return "post", http_method
26
+ end
27
+ end
28
+ end
29
+
30
+ class ActiveSupport::TestCase
31
+ extend ShouldaFormMacros
32
+ end
@@ -0,0 +1,50 @@
1
+ module ShouldaModelMacros
2
+
3
+ def should_sanitize(*attributes)
4
+ bad_scripts = [
5
+ %|';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>|,
6
+ %|'';!--"<XSS>=&{()}|,
7
+ %|<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>|,
8
+ %|<IMG SRC="javascript:alert('XSS');">|,
9
+ %|<IMG SRC=javascript:alert('XSS')>|,
10
+ %|<IMG SRC=JaVaScRiPt:alert('XSS')>|,
11
+ %|<IMG SRC=JaVaScRiPt:alert('XSS')>|,
12
+ %|<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>|,
13
+ %|<IMG """><SCRIPT>alert("XSS")</SCRIPT>">|,
14
+ %|<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>|,
15
+ %|<A HREF="h
16
+ tt p://6&#9;6.000146.0x7.147/">XSS</A>|,
17
+ %|<script>alert('message');</script>| ]
18
+
19
+ klass = model_class
20
+ attributes.each do |attribute|
21
+ attribute = attribute.to_sym
22
+ should "white list #{attribute}" do
23
+ assert object = klass.find(:first), "Can't find first #{klass}"
24
+ bad_scripts.each do |bad_value|
25
+ object.send("#{attribute}=", bad_value)
26
+ object.save
27
+ clean_value = object.send("#{attribute}")
28
+ assert !clean_value.include?(bad_value), "#{attribute} is not white listed. #{bad_value} made it through"
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def should_accept_nested_attributes_for(*attr_names)
35
+ klass = self.name.gsub(/Test$/, '').constantize
36
+
37
+ context "#{klass}" do
38
+ attr_names.each do |association_name|
39
+ should "accept nested attrs for #{association_name}" do
40
+ assert klass.instance_methods.include?("#{association_name}_attributes="),
41
+ "#{klass} does not accept nested attributes for #{association_name}"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ class ActiveSupport::TestCase
49
+ extend ShouldaModelMacros
50
+ end
@@ -0,0 +1,53 @@
1
+ module ShouldaPaginationMacros
2
+ # Example:
3
+ # context "a GET to index logged in as admin" do
4
+ # setup do
5
+ # login_as_admin
6
+ # get :index
7
+ # end
8
+ # should_paginate_collection :users
9
+ # should_display_pagination
10
+ # end
11
+ def self.should_paginate_collection(collection_name)
12
+ should "paginate #{collection_name}" do
13
+ assert collection = assigns(collection_name),
14
+ "Controller isn't assigning to @#{collection_name.to_s}."
15
+ assert_kind_of WillPaginate::Collection, collection,
16
+ "@#{collection_name.to_s} isn't a WillPaginate collection."
17
+ end
18
+ end
19
+
20
+ def self.should_display_pagination
21
+ should "display pagination" do
22
+ assert_select "div.pagination", { :minimum => 1 },
23
+ "View isn't displaying pagination. Add <%= will_paginate @collection %>."
24
+ end
25
+ end
26
+
27
+ # Example:
28
+ # context "a GET to index not logged in as admin" do
29
+ # setup { get :index }
30
+ # should_not_paginate_collection :users
31
+ # should_not_display_pagination
32
+ # end
33
+ def self.should_not_paginate_collection(collection_name)
34
+ should "not paginate #{collection_name}" do
35
+ assert collection = assigns(collection_name),
36
+ "Controller isn't assigning to @#{collection_name.to_s}."
37
+ assert_not_equal WillPaginate::Collection, collection.class,
38
+ "@#{collection_name.to_s} is a WillPaginate collection."
39
+ end
40
+ end
41
+
42
+ def self.should_not_display_pagination
43
+ should "not display pagination" do
44
+ assert_select "div.pagination", { :count => 0 },
45
+ "View is displaying pagination. Check your logic."
46
+ end
47
+ end
48
+ end
49
+
50
+
51
+ class ActiveSupport::TestCase
52
+ extend ShouldaPaginationMacros
53
+ end
@@ -0,0 +1,34 @@
1
+ module ShouldaPluginMacros
2
+
3
+ def self.should_act_as_taggable_on_steroids
4
+ klass = self.name.gsub(/Test$/, '').constantize
5
+
6
+ should "include ActsAsTaggableOnSteroids methods" do
7
+ assert klass.extended_by.include?(ActiveRecord::Acts::Taggable::ClassMethods)
8
+ assert klass.extended_by.include?(ActiveRecord::Acts::Taggable::SingletonMethods)
9
+ assert klass.include?(ActiveRecord::Acts::Taggable::InstanceMethods)
10
+ end
11
+
12
+ should_have_many :taggings, :tags
13
+ end
14
+
15
+
16
+ def self.should_act_as_list
17
+ klass = self.name.gsub(/Test$/, '').constantize
18
+
19
+ context "To support acts_as_list" do
20
+ should_have_db_column('position', :type => :integer)
21
+ end
22
+
23
+ should "include ActsAsList methods" do
24
+ assert klass.include?(ActiveRecord::Acts::List::InstanceMethods)
25
+ end
26
+
27
+ should_have_instance_methods :acts_as_list_class, :position_column, :scope_condition
28
+ end
29
+
30
+ end
31
+
32
+ ActiveSupport::TestCase.extend(ShouldaPluginMacros)
33
+ Test::Unit::TestCase.extend(ShouldaPluginMacros)
34
+ ActionController::TestCase.extend(ShouldaPluginMacros)
@@ -0,0 +1,48 @@
1
+ $:.reject! { |e| e.include? 'TextMate' }
2
+ ENV["RAILS_ENV"] = "test"
3
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
4
+ require 'test_help'
5
+ require 'ruby-debug'
6
+ gem 'thoughtbot-factory_girl' # from github
7
+ require 'factory_girl'
8
+ require 'authlogic/test_case'
9
+ require 'redgreen' rescue LoadError
10
+ require File.expand_path(File.dirname(__FILE__) + '/factories')
11
+ require File.join(File.dirname(__FILE__), 'shoulda_macros', 'controller')
12
+ require File.join(File.dirname(__FILE__), 'shoulda_macros', 'models')
13
+
14
+ class ActiveSupport::TestCase
15
+ self.use_transactional_fixtures = true
16
+ self.use_instantiated_fixtures = false
17
+
18
+ include Authlogic::TestCase
19
+
20
+ def login_as(user)
21
+ success = UserSession.create(user)
22
+ if !success
23
+ errors = user.errors.full_messages.to_sentence
24
+ message = 'User has not been activated' if !user.active?
25
+ raise "could not login as #{user.to_param}. Please make sure the user is valid. #{message} #{errors}"
26
+ end
27
+ UserSession.find
28
+ end
29
+
30
+ def assure_logout
31
+ user_session = UserSession.find
32
+ user_session.destroy if user_session
33
+ end
34
+
35
+ def ensure_flash(val)
36
+ assert_contains flash.values, val, ", Flash: #{flash.inspect}"
37
+ end
38
+
39
+ # For Selenium
40
+ # setup do |session|
41
+ # session.host! "localhost:3001"
42
+ # end
43
+
44
+ def make_parent_params(parent)
45
+ { :parent_id => parent.id, :parent_type => parent.class.to_s }
46
+ end
47
+
48
+ end
File without changes
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CommentTest < ActiveSupport::TestCase
4
+
5
+ context "Comment" do
6
+ setup do
7
+ @user = Factory(:user)
8
+ @comment = @user.comments.build(:body => 'a test comment')
9
+ @comment.user = @user
10
+ @comment.save!
11
+ end
12
+
13
+ should_validate_presence_of :body
14
+ should_belong_to :user
15
+ should_belong_to :commentable
16
+
17
+ should_have_named_scope :by_newest
18
+ should_have_named_scope :by_oldest
19
+ should_have_named_scope :recent
20
+
21
+ should "require body" do
22
+ assert_no_difference 'Comment.count' do
23
+ u = Factory.build(:comment, :body => nil)
24
+ assert !u.valid?
25
+ assert u.errors.on(:body)
26
+ end
27
+ end
28
+
29
+ should "not have a parent if it is a root Comment" do
30
+ assert_nil @comment.parent
31
+ end
32
+
33
+ should " be able to see how many child Comments it has" do
34
+ assert_equal @comment.children.size, 0
35
+ end
36
+
37
+ should "be able to add child Comments" do
38
+ # Set commentable to be the same for each comment or else you will get 'Impossible move, target node cannot be inside moved tree.' since the comments would be in a different scope. (Comments are scoped to commentable)
39
+ parent = Factory(:comment, :commentable => @user)
40
+ child = Factory(:comment, :commentable => @user)
41
+ child.move_to_child_of(parent)
42
+ assert_equal parent.children.size, 1
43
+ end
44
+
45
+ context "after having a child added" do
46
+ setup do
47
+ # Set commentable to be the same for each comment or else you will get 'Impossible move, target node cannot be inside moved tree.' since the comments would be in a different scope. (Comments are scoped to commentable)
48
+ @child = Factory(:comment, :commentable => @user)
49
+ @child.move_to_child_of(@comment)
50
+ end
51
+
52
+ should "be able to be referenced by its child" do
53
+ assert_equal @child.parent, @comment
54
+ end
55
+
56
+ should "be able to see its child" do
57
+ assert_equal @comment.children.first, @child
58
+ end
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ # Used to test muck_friend_user
4
+ class UserTest < ActiveSupport::TestCase
5
+
6
+ context "A class that is commentable" do
7
+ setup do
8
+ @user = Factory(:user)
9
+ @comment = @user.comments.build(:body => 'a test comment')
10
+ @comment.user = @user
11
+ @comment.save!
12
+ end
13
+
14
+ should "have comments" do
15
+ assert_equal 1, @user.comments.length
16
+ end
17
+ should "have comment cache" do
18
+ @user.reload
19
+ assert_equal 1, @user.comment_count
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,43 @@
1
+ SSL Requirement
2
+ ===============
3
+
4
+ SSL requirement adds a declarative way of specifying that certain actions
5
+ should only be allowed to run under SSL, and if they're accessed without it,
6
+ they should be redirected.
7
+
8
+ Example:
9
+
10
+ class ApplicationController < ActiveRecord::Base
11
+ include SslRequirement
12
+ end
13
+
14
+ class AccountController < ApplicationController
15
+ ssl_required :signup, :payment
16
+ ssl_allowed :index
17
+
18
+ def signup
19
+ # Non-SSL access will be redirected to SSL
20
+ end
21
+
22
+ def payment
23
+ # Non-SSL access will be redirected to SSL
24
+ end
25
+
26
+ def index
27
+ # This action will work either with or without SSL
28
+ end
29
+
30
+ def other
31
+ # SSL access will be redirected to non-SSL
32
+ end
33
+ end
34
+
35
+ You can overwrite the protected method ssl_required? to rely on other things
36
+ than just the declarative specification. Say, only premium accounts get SSL.
37
+
38
+ P.S.: Beware when you include the SslRequirement module. At the time of
39
+ inclusion, it'll add the before_filter that validates the declarations. Some
40
+ times you'll want to run other before_filters before that. They should then be
41
+ declared ahead of including this module.
42
+
43
+ Copyright (c) 2005 David Heinemeier Hansson, released under the MIT license
@@ -0,0 +1,62 @@
1
+ # Copyright (c) 2005 David Heinemeier Hansson
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+ module SslRequirement
22
+ def self.included(controller)
23
+ controller.extend(ClassMethods)
24
+ controller.before_filter(:ensure_proper_protocol)
25
+ end
26
+
27
+ module ClassMethods
28
+ # Specifies that the named actions requires an SSL connection to be performed (which is enforced by ensure_proper_protocol).
29
+ def ssl_required(*actions)
30
+ write_inheritable_array(:ssl_required_actions, actions)
31
+ end
32
+
33
+ def ssl_allowed(*actions)
34
+ write_inheritable_array(:ssl_allowed_actions, actions)
35
+ end
36
+ end
37
+
38
+ protected
39
+ # Returns true if the current action is supposed to run as SSL
40
+ def ssl_required?
41
+ (self.class.read_inheritable_attribute(:ssl_required_actions) || []).include?(action_name.to_sym)
42
+ end
43
+
44
+ def ssl_allowed?
45
+ (self.class.read_inheritable_attribute(:ssl_allowed_actions) || []).include?(action_name.to_sym)
46
+ end
47
+
48
+ private
49
+ def ensure_proper_protocol
50
+ return true if ssl_allowed?
51
+
52
+ if ssl_required? && !request.ssl?
53
+ redirect_to "https://" + request.host + request.request_uri
54
+ flash.keep
55
+ return false
56
+ elsif request.ssl? && !ssl_required?
57
+ redirect_to "http://" + request.host + request.request_uri
58
+ flash.keep
59
+ return false
60
+ end
61
+ end
62
+ end