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,109 @@
1
+ # Don't change this file!
2
+ # Configure your app in config/environment.rb and config/environments/*.rb
3
+
4
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
5
+
6
+ module Rails
7
+ class << self
8
+ def boot!
9
+ unless booted?
10
+ preinitialize
11
+ pick_boot.run
12
+ end
13
+ end
14
+
15
+ def booted?
16
+ defined? Rails::Initializer
17
+ end
18
+
19
+ def pick_boot
20
+ (vendor_rails? ? VendorBoot : GemBoot).new
21
+ end
22
+
23
+ def vendor_rails?
24
+ File.exist?("#{RAILS_ROOT}/vendor/rails")
25
+ end
26
+
27
+ def preinitialize
28
+ load(preinitializer_path) if File.exist?(preinitializer_path)
29
+ end
30
+
31
+ def preinitializer_path
32
+ "#{RAILS_ROOT}/config/preinitializer.rb"
33
+ end
34
+ end
35
+
36
+ class Boot
37
+ def run
38
+ load_initializer
39
+ Rails::Initializer.run(:set_load_path)
40
+ end
41
+ end
42
+
43
+ class VendorBoot < Boot
44
+ def load_initializer
45
+ require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
46
+ Rails::Initializer.run(:install_gem_spec_stubs)
47
+ end
48
+ end
49
+
50
+ class GemBoot < Boot
51
+ def load_initializer
52
+ self.class.load_rubygems
53
+ load_rails_gem
54
+ require 'initializer'
55
+ end
56
+
57
+ def load_rails_gem
58
+ if version = self.class.gem_version
59
+ gem 'rails', version
60
+ else
61
+ gem 'rails'
62
+ end
63
+ rescue Gem::LoadError => load_error
64
+ $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
65
+ exit 1
66
+ end
67
+
68
+ class << self
69
+ def rubygems_version
70
+ Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
71
+ end
72
+
73
+ def gem_version
74
+ if defined? RAILS_GEM_VERSION
75
+ RAILS_GEM_VERSION
76
+ elsif ENV.include?('RAILS_GEM_VERSION')
77
+ ENV['RAILS_GEM_VERSION']
78
+ else
79
+ parse_gem_version(read_environment_rb)
80
+ end
81
+ end
82
+
83
+ def load_rubygems
84
+ require 'rubygems'
85
+ min_version = '1.1.1'
86
+ unless rubygems_version >= min_version
87
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
88
+ exit 1
89
+ end
90
+
91
+ rescue LoadError
92
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
93
+ exit 1
94
+ end
95
+
96
+ def parse_gem_version(text)
97
+ $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
98
+ end
99
+
100
+ private
101
+ def read_environment_rb
102
+ File.read("#{RAILS_ROOT}/config/environment.rb")
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ # All that for this:
109
+ Rails.boot!
@@ -0,0 +1,23 @@
1
+ development:
2
+ adapter: sqlite3
3
+ database: db/development.sqlite3
4
+ timeout: 5000
5
+
6
+ test: &TEST
7
+ adapter: sqlite3
8
+ database: db/test.sqlite3
9
+ timeout: 5000
10
+
11
+ production:
12
+ adapter: sqlite3
13
+ database: db/production.sqlite3
14
+ timeout: 5000
15
+
16
+ cucumber:
17
+ <<: *TEST
18
+ cucumber:
19
+ <<: *TEST
20
+ cucumber:
21
+ <<: *TEST
22
+ cucumber:
23
+ <<: *TEST
@@ -0,0 +1,30 @@
1
+ RAILS_GEM_VERSION = '2.3.3' unless defined? RAILS_GEM_VERSION
2
+
3
+ require File.join(File.dirname(__FILE__), 'boot')
4
+
5
+ # Load a global constant so the initializers can use them
6
+ require 'ostruct'
7
+ require 'yaml'
8
+ ::GlobalConfig = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/global_config.yml")[RAILS_ENV])
9
+
10
+ class TestGemLocator < Rails::Plugin::Locator
11
+ def plugins
12
+ Rails::Plugin.new(File.join(File.dirname(__FILE__), *%w(.. .. ..)))
13
+ end
14
+ end
15
+
16
+ Rails::Initializer.run do |config|
17
+ config.time_zone = 'UTC'
18
+ config.gem 'mislav-will_paginate', :lib => 'will_paginate', :source => 'http://gems.github.com'
19
+ config.gem "binarylogic-authlogic", :lib => 'authlogic', :source => 'http://gems.github.com', :version => ">=2.1.0"
20
+ config.gem "binarylogic-searchlogic", :lib => 'searchlogic', :source => 'http://gems.github.com', :version => '~> 2.1.1'
21
+ config.gem "bcrypt-ruby", :lib => "bcrypt", :version => ">=2.0.5"
22
+ config.gem 'mbleigh-acts-as-taggable-on', :lib => "acts-as-taggable-on", :source => "http://gems.github.com"
23
+ config.gem "collectiveidea-awesome_nested_set", :lib => 'awesome_nested_set', :source => "http://gems.github.com"
24
+ config.gem "friendly_id", :version => '>=2.1.3'
25
+ config.gem "babelphish"
26
+ config.gem 'muck-engine', :lib => 'muck_engine'
27
+ config.gem 'muck-users', :lib => 'muck_users'
28
+ config.gem 'muck-activities', :lib => 'muck_activities'
29
+ config.plugin_locators << TestGemLocator
30
+ end
@@ -0,0 +1,38 @@
1
+ config.cache_classes = true # This must be true for Cucumber to operate correctly!
2
+
3
+ # Log error messages when you accidentally call methods on nil.
4
+ config.whiny_nils = true
5
+
6
+ # Show full error reports and disable caching
7
+ config.action_controller.consider_all_requests_local = true
8
+ config.action_controller.perform_caching = false
9
+ config.action_view.cache_template_loading = true
10
+
11
+ # Disable request forgery protection in test environment
12
+ config.action_controller.allow_forgery_protection = false
13
+
14
+ # Tell Action Mailer not to deliver emails to the real world.
15
+ # The :test delivery method accumulates sent emails in the
16
+ # ActionMailer::Base.deliveries array.
17
+ config.action_mailer.delivery_method = :test
18
+
19
+ config.gem 'thoughtbot-factory_girl', :lib => 'factory_girl', :source => 'http://gems.github.com'
20
+ config.gem 'thoughtbot-shoulda', :lib => 'shoulda', :source => 'http://gems.github.com'
21
+ config.gem "cucumber", :lib => false, :version => ">=0.3.92" unless File.directory?(File.join(Rails.root, 'vendor/plugins/cucumber'))
22
+ config.gem "webrat", :lib => false, :version => ">=0.4.4" unless File.directory?(File.join(Rails.root, 'vendor/plugins/webrat'))
23
+ config.gem "rspec", :lib => false, :version => ">=1.2.6" unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec'))
24
+ config.gem "rspec-rails", :lib => 'spec/rails', :version => ">=1.2.6" unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec-rails'))
25
+
26
+ # only required if you want to use selenium for testing
27
+ config.gem 'selenium-client', :lib => 'selenium/client'
28
+ config.gem 'bmabey-database_cleaner', :lib => 'database_cleaner', :source => 'http://gems.github.com'
29
+
30
+ config.gem 'term-ansicolor', :version => '>=1.0.3', :lib => 'term/ansicolor'
31
+
32
+ require 'factory_girl'
33
+ begin require 'redgreen'; rescue LoadError; end
34
+
35
+ config.action_controller.session = {
36
+ :key => GlobalConfig.session_key,
37
+ :secret => GlobalConfig.session_secret
38
+ }
@@ -0,0 +1,19 @@
1
+ # Settings specified here will take precedence over those in config/environment.rb
2
+
3
+ # In the development environment your application's code is reloaded on
4
+ # every request. This slows down response time but is perfect for development
5
+ # since you don't have to restart the webserver when you make code changes.
6
+ config.cache_classes = false
7
+
8
+ # Log error messages when you accidentally call methods on nil.
9
+ config.whiny_nils = true
10
+
11
+ # Show full error reports and disable caching
12
+ config.action_controller.consider_all_requests_local = true
13
+ config.action_controller.perform_caching = false
14
+ config.action_view.debug_rjs = true
15
+
16
+ # Don't care if the mailer can't send
17
+ config.action_mailer.raise_delivery_errors = false
18
+
19
+ HOST = "localhost"
@@ -0,0 +1 @@
1
+ HOST = "http://example.com"
@@ -0,0 +1,42 @@
1
+ # The test environment is used exclusively to run your application's
2
+ # test suite. You never need to work with it otherwise. Remember that
3
+ # your test database is "scratch space" for the test suite and is wiped
4
+ # and recreated between test runs. Don't rely on the data there!
5
+ config.cache_classes = true
6
+
7
+ # Log error messages when you accidentally call methods on nil.
8
+ config.whiny_nils = true
9
+
10
+ # Show full error reports and disable caching
11
+ config.action_controller.consider_all_requests_local = true
12
+ config.action_controller.perform_caching = false
13
+ config.action_view.cache_template_loading = true
14
+
15
+ # Disable request forgery protection in test environment
16
+ config.action_controller.allow_forgery_protection = false
17
+
18
+ # Tell Action Mailer not to deliver emails to the real world.
19
+ # The :test delivery method accumulates sent emails in the
20
+ # ActionMailer::Base.deliveries array.
21
+ config.action_mailer.delivery_method = :test
22
+
23
+ HOST = "localhost"
24
+
25
+ # Use SQL instead of Active Record's schema dumper when creating the test database.
26
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
27
+ # like if you have constraints or database-specific column types
28
+ # config.active_record.schema_format = :sql
29
+
30
+ config.gem 'thoughtbot-factory_girl', :lib => 'factory_girl', :source => 'http://gems.github.com'
31
+ config.gem 'thoughtbot-shoulda', :lib => 'shoulda', :source => 'http://gems.github.com'
32
+ config.gem 'treetop', :version => '>=1.2.4'
33
+ config.gem 'term-ansicolor', :version => '>=1.0.3', :lib => 'term/ansicolor'
34
+ config.gem 'polyglot', :version => '>=0.2.4'
35
+ config.gem "rcov", :version => '>=0.8.1.2.0'
36
+
37
+ # only required if you want to use selenium for testing
38
+ config.gem 'selenium-client', :lib => 'selenium/client'
39
+ config.gem 'bmabey-database_cleaner', :lib => 'database_cleaner', :source => 'http://gems.github.com'
40
+
41
+ require 'factory_girl'
42
+ begin require 'redgreen'; rescue LoadError; end
@@ -0,0 +1,77 @@
1
+ default: &DEFAULT
2
+
3
+ application_url: localhost:3000
4
+
5
+ # Sent in emails to users
6
+ application_name: 'example'
7
+ from_email: 'support@example.com' # Emails will come from this address
8
+ from_email_name: 'example' # This will show up as the name on emails. i.e. support@example.com <Example>
9
+ support_email: 'support@example.com'
10
+ admin_email: 'admin@example.com'
11
+ customer_service_number: '1-800-'
12
+
13
+ # Email charset
14
+ mail_charset: 'utf-8'
15
+
16
+ # Email server configuration
17
+ email_user_name: 'system@example.com'
18
+ email_password: 'test'
19
+ base_domain: 'example.com'
20
+
21
+ # sign up options
22
+ automatically_activate: true
23
+ automatically_login_after_account_create: true
24
+ send_welcome: true
25
+
26
+ application_url: localhost:3000
27
+
28
+ # if you use recaptcha you will need to also provide a public and private
29
+ # key available from http://recaptcha.net.
30
+ use_recaptcha: false
31
+ recaptcha_pub_key: GET_A_RECAPTCHA_KEY(TODO)
32
+ recaptcha_priv_key: GET_A_RECAPTCHA_KEY(TODO)
33
+
34
+ # jgrowl related settings
35
+ growl_enabled: false
36
+
37
+ # application configuration
38
+ let_users_delete_their_account: false # turn on/off ability for users to delete their own account
39
+
40
+ # activity configuration
41
+ enable_live_activity_updates: true # Turns on polling inside the user's activity feed so they constantly get updates from the site
42
+ live_activity_update_interval: 60 # time between updates to live activity feed in seconds
43
+ enable_activity_comments: true # Turn on comments in the activity feed
44
+
45
+ # Friend configuration
46
+ allow_following: true
47
+ enable_friend_activity: true
48
+
49
+ # ssl
50
+ enable_ssl: false
51
+
52
+ # session key information
53
+ session_key: _test_session
54
+ session_secret: 882585c5d472d21e832965410ab233be541ea626e50ed0eb68a00a2f49b59073480e58599404e3dc62105a803ee42d67872e3f95eb48e2d6508b42038436abd6
55
+
56
+ # Content options
57
+ content_git_repository: "#{File.join(RAILS_ROOT, 'repo', RAILS_ENV)}"
58
+ enable_auto_translations: true
59
+ content_enable_solr: true
60
+
61
+ production:
62
+ <<: *DEFAULT
63
+
64
+ development:
65
+ <<: *DEFAULT
66
+
67
+ test:
68
+ <<: *DEFAULT
69
+
70
+ # controls account activation and automatic login
71
+ automatically_activate: false
72
+ automatically_login_after_account_create: false
73
+
74
+ # turn off for testing
75
+ use_recaptcha: false
76
+
77
+ application_url: 'localhost:3000'
@@ -0,0 +1,10 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format
4
+ # (all these examples are active by default):
5
+ # Inflector.inflections do |inflect|
6
+ # inflect.plural /^(ox)$/i, '\1en'
7
+ # inflect.singular /^(ox)en/i, '\1'
8
+ # inflect.irregular 'person', 'people'
9
+ # inflect.uncountable %w( fish sheep )
10
+ # end
@@ -0,0 +1,5 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
5
+ # Mime::Type.register_alias "text/html", :iphone
@@ -0,0 +1,13 @@
1
+ Dir[File.join(RAILS_ROOT, 'lib', 'extensions', '*.rb')].each do |f|
2
+ require f
3
+ end
4
+
5
+ Dir[File.join(RAILS_ROOT, 'lib', '*.rb')].each do |f|
6
+ require f
7
+ end
8
+
9
+ # Rails 2 doesn't like mocks
10
+
11
+ Dir[File.join(RAILS_ROOT, 'test', 'mocks', RAILS_ENV, '*.rb')].each do |f|
12
+ require f
13
+ end
@@ -0,0 +1,8 @@
1
+ # Your secret key for verifying cookie session data integrity.
2
+ # If you change this key, all old sessions will become invalid!
3
+ # Make sure the secret is at least 30 characters and all random,
4
+ # no regular words or you'll be exposed to dictionary attacks.
5
+ ActionController::Base.session = {
6
+ :key => GlobalConfig.session_key,
7
+ :secret => GlobalConfig.session_secret
8
+ }
@@ -0,0 +1,4 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.root :controller => 'default', :action => 'index'
3
+ map.resource :users, :has_many => :comments
4
+ end
File without changes
@@ -0,0 +1,16 @@
1
+ class CreateMuckPermissionsAndRoles < ActiveRecord::Migration
2
+
3
+ create_table "permissions", :force => true do |t|
4
+ t.integer "role_id", :null => false
5
+ t.integer "user_id", :null => false
6
+ t.datetime "created_at"
7
+ t.datetime "updated_at"
8
+ end
9
+
10
+ create_table "roles", :force => true do |t|
11
+ t.string "rolename"
12
+ t.datetime "created_at"
13
+ t.datetime "updated_at"
14
+ end
15
+
16
+ end
@@ -0,0 +1,36 @@
1
+ class AddMuckActivities < ActiveRecord::Migration
2
+
3
+ def self.up
4
+
5
+ create_table :activities, :force => true do |t|
6
+ t.integer :item_id
7
+ t.string :item_type
8
+ t.string :template
9
+ t.integer :source_id
10
+ t.string :source_type
11
+ t.text :content
12
+ t.string :title
13
+ t.boolean :is_status_update, :default => false
14
+ t.boolean :is_public, :default => true
15
+ t.timestamps
16
+ end
17
+
18
+ add_index :activities, ["item_id", "item_type"]
19
+
20
+ create_table :activity_feeds, :force => true do |t|
21
+ t.integer :activity_id
22
+ t.integer :ownable_id
23
+ t.string :ownable_type
24
+ end
25
+
26
+ add_index :activity_feeds, ["activity_id"]
27
+ add_index :activity_feeds, ["ownable_id", "ownable_type"]
28
+
29
+ end
30
+
31
+ def self.down
32
+ drop_table :activities
33
+ drop_table :activity_feeds
34
+ end
35
+
36
+ end
@@ -0,0 +1,18 @@
1
+ class CreateLanguages < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :languages, :force => true do |t|
4
+ t.string :name
5
+ t.string :english_name
6
+ t.string :locale
7
+ t.boolean :supported, :default => true
8
+ t.integer :is_default, :default => false
9
+ end
10
+ add_index :languages, :name
11
+ add_index :languages, :locale
12
+ end
13
+
14
+ def self.down
15
+ drop_table :languages
16
+ end
17
+
18
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCountries < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :countries, :force => true do |t|
4
+ t.string "name", :limit => 128, :default => "", :null => false
5
+ t.string "abbreviation", :limit => 3, :default => "", :null => false
6
+ t.integer "sort", :default => 1000, :null => false
7
+ end
8
+ add_index :countries, :name
9
+ add_index :countries, :abbreviation
10
+ end
11
+
12
+ def self.down
13
+ drop_table :countries
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ class CreateStates < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :states, :force => true do |t|
4
+ t.string "name", :limit => 128, :default => "", :null => false
5
+ t.string "abbreviation", :limit => 3, :default => "", :null => false
6
+ t.integer "country_id", :limit => 8, :null => false
7
+ end
8
+
9
+ add_index :states, :country_id
10
+ add_index :states, :name
11
+ add_index :states, :abbreviation
12
+
13
+ end
14
+
15
+ def self.down
16
+ drop_table :states
17
+ end
18
+ end
@@ -0,0 +1,39 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :users, :force => true do |t|
5
+ t.string :login
6
+ t.string :email
7
+ t.string :first_name
8
+ t.string :last_name
9
+ t.string :crypted_password
10
+ t.string :password_salt
11
+ t.string :persistence_token
12
+ t.string :single_access_token
13
+ t.string :perishable_token
14
+ t.integer :login_count, :null => false, :default => 0
15
+ t.integer :failed_login_count, :null => false, :default => 0
16
+ t.datetime :last_request_at
17
+ t.datetime :last_login_at
18
+ t.datetime :current_login_at
19
+ t.string :current_login_ip
20
+ t.string :last_login_ip
21
+ t.boolean :terms_of_service, :default => false, :null => false
22
+ t.string :time_zone, :default => "UTC"
23
+ t.datetime :disabled_at
24
+ t.datetime :activated_at
25
+ t.timestamps
26
+ end
27
+
28
+ add_index :users, :login
29
+ add_index :users, :email
30
+ add_index :users, :persistence_token
31
+ add_index :users, :perishable_token
32
+ add_index :users, :single_access_token
33
+ add_index :users, :last_request_at
34
+ end
35
+
36
+ def self.down
37
+ drop_table :users
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ class CreateFriends < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :friends, :force => true do |t|
4
+ t.integer "inviter_id"
5
+ t.integer "invited_id"
6
+ t.integer "status", :default => 0
7
+ t.timestamps
8
+ end
9
+ add_index :friends, ["inviter_id", "invited_id"]
10
+ add_index :friends, ["invited_id", "inviter_id"]
11
+ end
12
+
13
+ def self.down
14
+ drop_table :friends
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ class CreateComments < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :comments, :force => true do |t|
4
+ t.integer :commentable_id, :default => 0
5
+ t.string :commentable_type, :limit => 15, :default => ""
6
+ t.text :body
7
+ t.integer :user_id, :default => 0, :null => false
8
+ t.integer :parent_id
9
+ t.integer :lft
10
+ t.integer :rgt
11
+ t.integer :is_denied, :default => 0, :null => false
12
+ t.boolean :is_reviewed, :default => false
13
+ t.timestamps
14
+ end
15
+
16
+ add_index :comments, ["user_id"]
17
+ add_index :comments, ["commentable_id", "commentable_type"]
18
+
19
+ end
20
+
21
+ def self.down
22
+ drop_table :comments
23
+ end
24
+ end
@@ -0,0 +1,49 @@
1
+ class AddContents < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :contents, :force => true do |t|
4
+ t.integer :creator_id
5
+ t.string :title
6
+ t.text :body
7
+ t.string :locale
8
+ t.text :body_raw
9
+ t.integer :contentable_id
10
+ t.string :contentable_type
11
+ t.integer :parent_id
12
+ t.integer :lft
13
+ t.integer :rgt
14
+ t.boolean :is_public
15
+ t.string :state
16
+ t.timestamps
17
+ end
18
+
19
+ create_table :content_translations, :force => true do |t|
20
+ t.integer :content_id
21
+ t.string :title
22
+ t.text :body
23
+ t.string :locale
24
+ t.boolean :user_edited, :default => false
25
+ t.timestamps
26
+ end
27
+
28
+ create_table :content_permissions, :force => true do |t|
29
+ t.integer :content_id
30
+ t.integer :user_id
31
+ t.timestamps
32
+ end
33
+
34
+ add_index :contents, :parent_id
35
+ add_index :contents, :creator_id
36
+
37
+ add_index :content_translations, :content_id
38
+ add_index :content_translations, :locale
39
+
40
+ add_index :content_permissions, [:content_id, :user_id]
41
+ end
42
+
43
+ def self.down
44
+ drop_table :content_versions
45
+ drop_table :contents
46
+ drop_table :content_translations
47
+ drop_table :content_permissions
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ class CreateSlugs < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :slugs do |t|
4
+ t.string :name
5
+ t.integer :sluggable_id
6
+ t.integer :sequence, :null => false, :default => 1
7
+ t.string :sluggable_type, :limit => 40
8
+ t.string :scope, :limit => 40
9
+ t.datetime :created_at
10
+ end
11
+ add_index :slugs, [:name, :sluggable_type, :scope, :sequence], :unique => true
12
+ add_index :slugs, :sluggable_id
13
+ end
14
+
15
+ def self.down
16
+ drop_table :slugs
17
+ end
18
+ end