muck-friends 0.1.1

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 (294) hide show
  1. data/.gitignore +5 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +51 -0
  4. data/Rakefile +101 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/muck/friends_controller.rb +70 -0
  7. data/app/helpers/muck_friends_helper.rb +93 -0
  8. data/app/models/friend_mailer.rb +25 -0
  9. data/app/views/activity_templates/follow.html.erb +1 -0
  10. data/app/views/activity_templates/friends_with.html.erb +1 -0
  11. data/app/views/friend_mailer/follow.text.html.erb +8 -0
  12. data/app/views/friend_mailer/follow.text.plain.erb +8 -0
  13. data/app/views/friend_mailer/friend_request.text.html.erb +8 -0
  14. data/app/views/friend_mailer/friend_request.text.plain.erb +8 -0
  15. data/app/views/friends/_friend_simple.html.erb +4 -0
  16. data/app/views/friends/_friends.html.erb +8 -0
  17. data/app/views/friends/_notifications.html.erb +32 -0
  18. data/app/views/friends/friend_or_follow_request.html.erb +8 -0
  19. data/app/views/friends/index.html.erb +1 -0
  20. data/config/muck_friends_routes.rb +4 -0
  21. data/db/migrate/20090608073052_create_friends.rb +16 -0
  22. data/install.rb +1 -0
  23. data/lib/active_record/acts/muck_friend.rb +141 -0
  24. data/lib/active_record/acts/muck_friend_user.rb +103 -0
  25. data/lib/muck_friends.rb +12 -0
  26. data/lib/muck_friends/initialize_routes.rb +8 -0
  27. data/lib/muck_friends/tasks.rb +27 -0
  28. data/locales/ar.yml +31 -0
  29. data/locales/bg.yml +31 -0
  30. data/locales/ca.yml +31 -0
  31. data/locales/cs.yml +31 -0
  32. data/locales/da.yml +31 -0
  33. data/locales/de.yml +31 -0
  34. data/locales/el.yml +31 -0
  35. data/locales/en.yml +31 -0
  36. data/locales/es.yml +31 -0
  37. data/locales/et.yml +31 -0
  38. data/locales/fa.yml +31 -0
  39. data/locales/fi.yml +31 -0
  40. data/locales/fr.yml +31 -0
  41. data/locales/gl.yml +31 -0
  42. data/locales/hi.yml +31 -0
  43. data/locales/hr.yml +31 -0
  44. data/locales/hu.yml +31 -0
  45. data/locales/id.yml +31 -0
  46. data/locales/it.yml +31 -0
  47. data/locales/iw.yml +31 -0
  48. data/locales/ja.yml +31 -0
  49. data/locales/ko.yml +31 -0
  50. data/locales/lt.yml +31 -0
  51. data/locales/lv.yml +31 -0
  52. data/locales/mt.yml +31 -0
  53. data/locales/nl.yml +31 -0
  54. data/locales/no.yml +32 -0
  55. data/locales/pl.yml +31 -0
  56. data/locales/pt-PT.yml +31 -0
  57. data/locales/pt.yml +6 -0
  58. data/locales/ro.yml +31 -0
  59. data/locales/ru.yml +31 -0
  60. data/locales/sk.yml +31 -0
  61. data/locales/sl.yml +31 -0
  62. data/locales/sq.yml +31 -0
  63. data/locales/sr.yml +31 -0
  64. data/locales/sv.yml +31 -0
  65. data/locales/th.yml +31 -0
  66. data/locales/tl.yml +31 -0
  67. data/locales/tr.yml +31 -0
  68. data/locales/uk.yml +31 -0
  69. data/locales/vi.yml +31 -0
  70. data/locales/zh-CN.yml +31 -0
  71. data/locales/zh-TW.yml +31 -0
  72. data/locales/zh.yml +31 -0
  73. data/muck-friends.gemspec +381 -0
  74. data/rails/init.rb +4 -0
  75. data/tasks/rails.rake +1 -0
  76. data/test/rails_root/.gitignore +8 -0
  77. data/test/rails_root/.rake_tasks +103 -0
  78. data/test/rails_root/Capfile +3 -0
  79. data/test/rails_root/Rakefile +15 -0
  80. data/test/rails_root/app/controllers/application_controller.rb +21 -0
  81. data/test/rails_root/app/controllers/default_controller.rb +7 -0
  82. data/test/rails_root/app/helpers/application_helper.rb +3 -0
  83. data/test/rails_root/app/models/.keep +0 -0
  84. data/test/rails_root/app/models/activity.rb +3 -0
  85. data/test/rails_root/app/models/friend.rb +4 -0
  86. data/test/rails_root/app/models/user.rb +8 -0
  87. data/test/rails_root/app/models/user_session.rb +2 -0
  88. data/test/rails_root/app/views/default/index.html.erb +1 -0
  89. data/test/rails_root/app/views/layouts/default.html.erb +26 -0
  90. data/test/rails_root/config/amazon_s3.yml +14 -0
  91. data/test/rails_root/config/boot.rb +109 -0
  92. data/test/rails_root/config/database.yml +14 -0
  93. data/test/rails_root/config/environment.rb +27 -0
  94. data/test/rails_root/config/environments/development.rb +19 -0
  95. data/test/rails_root/config/environments/production.rb +1 -0
  96. data/test/rails_root/config/environments/test.rb +34 -0
  97. data/test/rails_root/config/global_config.yml +72 -0
  98. data/test/rails_root/config/initializers/inflections.rb +10 -0
  99. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  100. data/test/rails_root/config/initializers/requires.rb +13 -0
  101. data/test/rails_root/config/initializers/session_store.rb +8 -0
  102. data/test/rails_root/config/routes.rb +3 -0
  103. data/test/rails_root/db/.keep +0 -0
  104. data/test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb +16 -0
  105. data/test/rails_root/db/migrate/20090402033319_add_muck_activities.rb +36 -0
  106. data/test/rails_root/db/migrate/20090602041838_create_users.rb +39 -0
  107. data/test/rails_root/db/migrate/20090608073052_create_friends.rb +16 -0
  108. data/test/rails_root/features/step_definitions/webrat_steps.rb +99 -0
  109. data/test/rails_root/features/support/env.rb +14 -0
  110. data/test/rails_root/public/.htaccess +40 -0
  111. data/test/rails_root/public/404.html +30 -0
  112. data/test/rails_root/public/422.html +30 -0
  113. data/test/rails_root/public/500.html +30 -0
  114. data/test/rails_root/public/dispatch.rb +10 -0
  115. data/test/rails_root/public/favicon.ico +0 -0
  116. data/test/rails_root/public/images/arrow_left.gif +0 -0
  117. data/test/rails_root/public/images/arrow_right.gif +0 -0
  118. data/test/rails_root/public/images/blue/preview.gif +0 -0
  119. data/test/rails_root/public/images/icons/accept.png +0 -0
  120. data/test/rails_root/public/images/icons/add.png +0 -0
  121. data/test/rails_root/public/images/icons/delete.png +0 -0
  122. data/test/rails_root/public/images/icons/vote.png +0 -0
  123. data/test/rails_root/public/images/loading.gif +0 -0
  124. data/test/rails_root/public/images/profile_default.jpg +0 -0
  125. data/test/rails_root/public/images/rails.png +0 -0
  126. data/test/rails_root/public/images/red/preview.gif +0 -0
  127. data/test/rails_root/public/images/spinner.gif +0 -0
  128. data/test/rails_root/public/images/sprites.png +0 -0
  129. data/test/rails_root/public/javascripts/application.js +2 -0
  130. data/test/rails_root/public/javascripts/builder.js +136 -0
  131. data/test/rails_root/public/javascripts/controls.js +963 -0
  132. data/test/rails_root/public/javascripts/dragdrop.js +972 -0
  133. data/test/rails_root/public/javascripts/effects.js +1120 -0
  134. data/test/rails_root/public/javascripts/fancyzoom.min.js +1 -0
  135. data/test/rails_root/public/javascripts/jquery/jquery-ui.js +273 -0
  136. data/test/rails_root/public/javascripts/jquery/jquery.form.js +637 -0
  137. data/test/rails_root/public/javascripts/jquery/jquery.jgrowl.js +2 -0
  138. data/test/rails_root/public/javascripts/jquery/jquery.js +19 -0
  139. data/test/rails_root/public/javascripts/jquery/jquery.tips.js +69 -0
  140. data/test/rails_root/public/javascripts/muck.js +76 -0
  141. data/test/rails_root/public/javascripts/muck_activities.js +108 -0
  142. data/test/rails_root/public/javascripts/prototype.js +4225 -0
  143. data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
  144. data/test/rails_root/public/javascripts/slider.js +277 -0
  145. data/test/rails_root/public/javascripts/sound.js +60 -0
  146. data/test/rails_root/public/robots.txt +1 -0
  147. data/test/rails_root/public/stylesheets/.keep +0 -0
  148. data/test/rails_root/public/stylesheets/admin.css +12 -0
  149. data/test/rails_root/public/stylesheets/blueprint/ie.css +26 -0
  150. data/test/rails_root/public/stylesheets/blueprint/liquid_screen.css +203 -0
  151. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
  152. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
  153. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
  154. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
  155. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
  156. data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
  157. data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
  158. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
  159. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
  160. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
  161. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
  162. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
  163. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  164. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
  165. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
  166. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
  167. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
  168. data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/liquid.css +134 -0
  169. data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/src/liquid.css +197 -0
  170. data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
  171. data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/screen.css +109 -0
  172. data/test/rails_root/public/stylesheets/blueprint/print.css +30 -0
  173. data/test/rails_root/public/stylesheets/blueprint/screen.css +251 -0
  174. data/test/rails_root/public/stylesheets/blueprint/sprite.css +1 -0
  175. data/test/rails_root/public/stylesheets/blueprint/src/forms.css +49 -0
  176. data/test/rails_root/public/stylesheets/blueprint/src/grid.css +213 -0
  177. data/test/rails_root/public/stylesheets/blueprint/src/grid.png +0 -0
  178. data/test/rails_root/public/stylesheets/blueprint/src/ie.css +59 -0
  179. data/test/rails_root/public/stylesheets/blueprint/src/print.css +85 -0
  180. data/test/rails_root/public/stylesheets/blueprint/src/reset.css +38 -0
  181. data/test/rails_root/public/stylesheets/blueprint/src/typography.css +105 -0
  182. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
  183. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
  184. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
  185. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
  186. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
  187. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
  188. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  189. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
  190. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
  191. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_222222_256x240.png +0 -0
  192. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2694e8_256x240.png +0 -0
  193. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2e83ff_256x240.png +0 -0
  194. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_72a7cf_256x240.png +0 -0
  195. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_888888_256x240.png +0 -0
  196. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_cd0a0a_256x240.png +0 -0
  197. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_ffffff_256x240.png +0 -0
  198. data/test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.1.custom.css +404 -0
  199. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  200. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  201. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  202. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  203. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  204. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  205. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  206. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  207. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_217bc0_256x240.png +0 -0
  208. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
  209. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_469bdd_256x240.png +0 -0
  210. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
  211. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
  212. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
  213. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
  214. data/test/rails_root/public/stylesheets/jquery/redmond/jquery-ui-1.7.1.custom.css +404 -0
  215. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  216. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  217. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  218. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  219. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  220. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  221. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  222. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  223. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_222222_256x240.png +0 -0
  224. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  225. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_454545_256x240.png +0 -0
  226. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_888888_256x240.png +0 -0
  227. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  228. data/test/rails_root/public/stylesheets/jquery/smoothness/jquery-ui-1.7.1.custom.css +404 -0
  229. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  230. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  231. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  232. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  233. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  234. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  235. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  236. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  237. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  238. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  239. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  240. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  241. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  242. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  243. data/test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
  244. data/test/rails_root/public/stylesheets/reset.css +0 -0
  245. data/test/rails_root/public/stylesheets/styles.css +79 -0
  246. data/test/rails_root/public/stylesheets/themes/blue/styles.css +1 -0
  247. data/test/rails_root/public/stylesheets/themes/red/styles.css +1 -0
  248. data/test/rails_root/script/about +3 -0
  249. data/test/rails_root/script/breakpointer +3 -0
  250. data/test/rails_root/script/console +3 -0
  251. data/test/rails_root/script/create_project.rb +52 -0
  252. data/test/rails_root/script/cucumber +7 -0
  253. data/test/rails_root/script/dbconsole +3 -0
  254. data/test/rails_root/script/destroy +3 -0
  255. data/test/rails_root/script/generate +3 -0
  256. data/test/rails_root/script/performance/benchmarker +3 -0
  257. data/test/rails_root/script/performance/profiler +3 -0
  258. data/test/rails_root/script/performance/request +3 -0
  259. data/test/rails_root/script/plugin +3 -0
  260. data/test/rails_root/script/process/inspector +3 -0
  261. data/test/rails_root/script/process/reaper +3 -0
  262. data/test/rails_root/script/process/spawner +3 -0
  263. data/test/rails_root/script/runner +3 -0
  264. data/test/rails_root/script/server +3 -0
  265. data/test/rails_root/test/factories.rb +50 -0
  266. data/test/rails_root/test/functional/.keep +0 -0
  267. data/test/rails_root/test/functional/friends_controller_test.rb +171 -0
  268. data/test/rails_root/test/integration/.keep +0 -0
  269. data/test/rails_root/test/mocks/development/.keep +0 -0
  270. data/test/rails_root/test/mocks/test/.keep +0 -0
  271. data/test/rails_root/test/shoulda_macros/controller.rb +45 -0
  272. data/test/rails_root/test/shoulda_macros/forms.rb +32 -0
  273. data/test/rails_root/test/shoulda_macros/models.rb +50 -0
  274. data/test/rails_root/test/shoulda_macros/pagination.rb +53 -0
  275. data/test/rails_root/test/shoulda_macros/plugins.rb +34 -0
  276. data/test/rails_root/test/test_helper.rb +38 -0
  277. data/test/rails_root/test/unit/.keep +0 -0
  278. data/test/rails_root/test/unit/friend_mailer_test.rb +37 -0
  279. data/test/rails_root/test/unit/friend_test.rb +186 -0
  280. data/test/rails_root/test/unit/user_test.rb +170 -0
  281. data/test/rails_root/vendor/plugins/ssl_requirement/README +43 -0
  282. data/test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb +62 -0
  283. data/test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb +132 -0
  284. data/test/rails_root/vendor/plugins/validation_reflection/CHANGELOG +24 -0
  285. data/test/rails_root/vendor/plugins/validation_reflection/LICENSE +20 -0
  286. data/test/rails_root/vendor/plugins/validation_reflection/README +64 -0
  287. data/test/rails_root/vendor/plugins/validation_reflection/Rakefile +22 -0
  288. data/test/rails_root/vendor/plugins/validation_reflection/about.yml +7 -0
  289. data/test/rails_root/vendor/plugins/validation_reflection/init.rb +8 -0
  290. data/test/rails_root/vendor/plugins/validation_reflection/lib/boiler_plate/validation_reflection.rb +129 -0
  291. data/test/rails_root/vendor/plugins/validation_reflection/test/test_helper.rb +36 -0
  292. data/test/rails_root/vendor/plugins/validation_reflection/test/validation_reflection_test.rb +126 -0
  293. data/uninstall.rb +1 -0
  294. metadata +416 -0
@@ -0,0 +1,8 @@
1
+ <% if !GlobalConfig.allow_following -%>
2
+ <% @user.followers.each do |follower| %>
3
+ <li>
4
+ <%= _("%{profile} requests to be your Friend %{accept} %{ignore}") % {:profile => link_to(h(follower.full_name), profile_path(follower)),
5
+ :accept => accept_follower_link(current_user, follower),
6
+ :ignore => ignore_friend_request_link(current_user, follower) } -%></li>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= all_friends(current_user) %>
@@ -0,0 +1,4 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.resources :friends, :controller => 'muck/friends'
3
+ map.resources :users, :has_many => [:friends]
4
+ 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 @@
1
+ # Install hook code here
@@ -0,0 +1,141 @@
1
+ module ActiveRecord
2
+ module Acts #:nodoc:
3
+ module MuckFriend #:nodoc:
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+
11
+ def acts_as_muck_friend(options = {})
12
+
13
+ belongs_to :inviter, :class_name => 'User'
14
+ belongs_to :invited, :class_name => 'User'
15
+
16
+ include ActiveRecord::Acts::MuckFriend::InstanceMethods
17
+ extend ActiveRecord::Acts::MuckFriend::SingletonMethods
18
+
19
+ end
20
+ end
21
+
22
+ # class methods
23
+ module SingletonMethods
24
+
25
+ # When allow_following is true this will setup a follower. When allow_following is false
26
+ # the system only allows friends and so this becomes a friend request
27
+ def add_follower(inviter, invited)
28
+ return false if inviter.blank? || invited.blank? || inviter == invited
29
+ success = false
30
+ transaction do
31
+ friend = Friend.create(:inviter => inviter, :invited => invited, :status => MuckFriends::PENDING)
32
+ friend.add_follow_activity
33
+ success = !friend.new_record?
34
+ end
35
+ success
36
+ end
37
+
38
+ # Called after add_follower. This establishes a friend relationship between the two parties
39
+ def make_friends(user, target)
40
+ return false if user.blank? || target.blank? || user == target
41
+ transaction do
42
+ begin
43
+ Friend.find(:first, :conditions => {:inviter_id => user.id, :invited_id => target.id, :status => MuckFriends::PENDING}).update_attribute(:status, MuckFriends::ACCEPTED)
44
+ friend = Friend.create!(:inviter_id => target.id, :invited_id => user.id, :status => MuckFriends::ACCEPTED)
45
+ friend.add_friends_with_activity
46
+ rescue Exception
47
+ return make_friends(target, user) if user.followed_by?(target)
48
+ return add_follower(user, target)
49
+ end
50
+ end
51
+ true
52
+ end
53
+
54
+ # Destroy the frienship :(
55
+ def stop_being_friends(user, target)
56
+ return false if user.blank? || target.blank?
57
+ transaction do
58
+ begin
59
+ Friend.find(:first, :conditions => {:inviter_id => target.id, :invited_id => user.id}).destroy
60
+ Friend.find(:first, :conditions => {:inviter_id => user.id, :invited_id => target.id}).destroy
61
+ rescue Exception
62
+ return false
63
+ end
64
+ end
65
+ true
66
+ end
67
+
68
+ # Stop friendship with another user. This will turn the other user into a follower
69
+ def revert_to_follower(user, target)
70
+ return false if user.blank? || target.blank?
71
+ transaction do
72
+ begin
73
+ Friend.find(:first, :conditions => {:inviter_id => target.id, :invited_id => user.id}).update_attribute(:status, MuckFriends::PENDING)
74
+ Friend.find(:first, :conditions => {:inviter_id => user.id, :invited_id => target.id}).destroy
75
+ rescue Exception
76
+ return false
77
+ end
78
+ end
79
+ true
80
+ end
81
+
82
+ def stop_following(user, target)
83
+ return false if user.blank? || target.blank?
84
+ transaction do
85
+ begin
86
+ Friend.find(:first, :conditions => {:inviter_id => user.id, :invited_id => target.id}).destroy
87
+ rescue Exception
88
+ return false
89
+ end
90
+ end
91
+ true
92
+ end
93
+
94
+ def block_user(user, target)
95
+ return false if user.blank? || target.blank?
96
+ Friend.find(:first, :conditions => {:inviter_id => target.id, :invited_id => user.id}).update_attribute(:status, MuckFriends::BLOCKED)
97
+ friend = Friend.find(:first, :conditions => {:inviter_id => user.id, :invited_id => target.id})
98
+ friend.destroy if friend
99
+ end
100
+
101
+ def unblock_user(user, target)
102
+ return false if user.blank? || target.blank?
103
+ friend = Friend.find(:first, :conditions => {:inviter_id => target.id, :invited_id => user.id})
104
+ friend.update_attribute(:status, MuckFriends::PENDING) if friend
105
+ end
106
+
107
+ def has_network?(user)
108
+ !self.find(:first, :conditions => ["invited_id = ? or inviter_id = ?", user.id, user.id]).blank?
109
+ end
110
+
111
+ end
112
+
113
+ # All the methods available to a record that has had <tt>acts_as_muck_friend</tt> specified.
114
+ module InstanceMethods
115
+
116
+ def after_create
117
+ FriendMailer.deliver_follow(inviter, invited)
118
+ end
119
+
120
+ #
121
+ def add_follow_activity
122
+ return unless GlobalConfig.enable_friend_activity
123
+ content = I18n.t('muck.friends.follow_activity', :inviter => self.inviter.full_name, :invited => self.invited.full_name)
124
+ add_activity(self.inviter.feed_to, self.inviter, self, 'follow', '', content)
125
+ end
126
+
127
+ # Add an activity that indicates the users have become friends
128
+ def add_friends_with_activity
129
+ return unless GlobalConfig.enable_friend_activity
130
+ content = I18n.t('muck.friends.friends_with', :inviter => self.inviter.full_name, :invited => self.invited.full_name)
131
+ add_activity(self.inviter.feed_to + self.invited.feed_to, self.inviter, self, 'friends_with', '', content)
132
+ end
133
+
134
+ def validate
135
+ errors.add('inviter', I18n.t('muck.friends.same_inviter_error_message')) if invited == inviter
136
+ end
137
+
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,103 @@
1
+ module ActiveRecord
2
+ module Acts #:nodoc:
3
+ module MuckFriendUser #:nodoc:
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+
11
+ def acts_as_muck_friend_user(options = {})
12
+
13
+ has_many :friendships, :class_name => "Friend", :foreign_key => 'inviter_id', :conditions => "status = #{MuckFriends::ACCEPTED}", :dependent => :destroy
14
+ has_many :follower_friends, :class_name => "Friend", :foreign_key => "invited_id", :conditions => "status = #{MuckFriends::PENDING}", :dependent => :destroy
15
+ has_many :following_friends, :class_name => "Friend", :foreign_key => "inviter_id", :conditions => "status = #{MuckFriends::PENDING}", :dependent => :destroy
16
+ has_many :blocked_friends, :class_name => "Friend", :foreign_key => "invited_id", :conditions => "status = #{MuckFriends::BLOCKED}", :dependent => :destroy
17
+
18
+ has_many :friends, :through => :friendships, :source => :invited
19
+ has_many :followers, :through => :follower_friends, :source => :inviter
20
+ has_many :followings, :through => :following_friends, :source => :invited
21
+ has_many :blocked_users, :through => :blocked_friends, :source => :inviter
22
+
23
+ has_many :initiated_by_me, :class_name => "Friend", :foreign_key => "inviter_id"
24
+ has_many :not_initiated_by_me, :class_name => "Friend", :foreign_key => "invited_id"
25
+
26
+ has_many :friendships_initiated_by_me, :through => :initiated_by_me, :source => :invited
27
+ has_many :friendships_not_initiated_by_me, :through => :not_initiated_by_me, :source => :inviter
28
+
29
+ has_many :occurances_as_friend, :class_name => "Friend", :foreign_key => "invited_id"
30
+
31
+ include ActiveRecord::Acts::MuckFriendUser::InstanceMethods
32
+ extend ActiveRecord::Acts::MuckFriendUser::SingletonMethods
33
+
34
+ end
35
+ end
36
+
37
+ # class methods
38
+ module SingletonMethods
39
+
40
+ end
41
+
42
+ # All the methods available to a record that has had <tt>acts_as_muck_friend</tt> specified.
43
+ module InstanceMethods
44
+
45
+ # Feed to friends and followers
46
+ def feed_to
47
+ @feed_to_users ||= [self] | self.friends | self.followers # prevent duplicates in the array
48
+ end
49
+
50
+ # Indicates whether or not the give user is a friend
51
+ def friend_of?(user)
52
+ friends.include?(user)
53
+ end
54
+
55
+ # Assume that 'user' is already following the current user
56
+ def become_friends_with(user)
57
+ Friend.make_friends(self, user)
58
+ end
59
+
60
+ # Follow the given user
61
+ def follow(user)
62
+ Friend.add_follower(self, user)
63
+ end
64
+
65
+ def stop_following(user)
66
+ Friend.stop_following(self, user)
67
+ end
68
+
69
+ def drop_friend(user)
70
+ if GlobalConfig.allow_following
71
+ Friend.revert_to_follower(self, user)
72
+ else
73
+ Friend.stop_being_friends(self, user)
74
+ end
75
+ end
76
+
77
+ def block_user(user)
78
+ Friend.block_user(self, user)
79
+ end
80
+
81
+ def unblock_user(user)
82
+ Friend.unblock_user(self, user)
83
+ end
84
+
85
+ # Indicates whether the given user is following the current user
86
+ def followed_by?(user)
87
+ followers.include?(user)
88
+ end
89
+
90
+ # Indicates whether the given user is being followed by the current user
91
+ def following?(user)
92
+ followings.include?(user)
93
+ end
94
+
95
+ # Indicates whether the user has any followers or friends or if they are following anybody
96
+ def has_network?
97
+ Friend.has_network?(self)
98
+ end
99
+
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,12 @@
1
+ module MuckFriends
2
+ # Statuses Array
3
+ BLOCKED = 2
4
+ ACCEPTED = 1
5
+ PENDING = 0
6
+ end
7
+
8
+ ActiveRecord::Base.class_eval { include ActiveRecord::Acts::MuckFriend }
9
+ ActiveRecord::Base.class_eval { include ActiveRecord::Acts::MuckFriendUser }
10
+ ActionController::Base.send :helper, MuckFriendsHelper
11
+
12
+ I18n.load_path += Dir[ File.join(File.dirname(__FILE__), '..', 'locales', '*.{rb,yml}') ]
@@ -0,0 +1,8 @@
1
+ class ActionController::Routing::RouteSet
2
+ def load_routes_with_muck_friends!
3
+ muck_friends_routes = File.join(File.dirname(__FILE__), *%w[.. .. config muck_friends_routes.rb])
4
+ add_configuration_file(muck_friends_routes) unless configuration_files.include? muck_friends_routes
5
+ load_routes_without_muck_friends!
6
+ end
7
+ alias_method_chain :load_routes!, :muck_friends
8
+ end
@@ -0,0 +1,27 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+ require 'fileutils'
4
+
5
+ module MuckFriends
6
+ class Tasks < ::Rake::TaskLib
7
+ def initialize
8
+ define
9
+ end
10
+
11
+ private
12
+ def define
13
+
14
+ namespace :muck do
15
+ namespace :friends do
16
+ desc "Sync files from muck friends."
17
+ task :sync do
18
+ path = File.join(File.dirname(__FILE__), *%w[.. ..])
19
+ system "rsync -ruv #{path}/db ."
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ MuckFriends::Tasks.new
@@ -0,0 +1,31 @@
1
+ ---
2
+ ar:
3
+ muck:
4
+ activity_templates:
5
+ follow: أتباع
6
+ friends_with: أصدقاء
7
+ friends:
8
+ acccept_friend_request: "قبول طلب صديق"
9
+ accept: (قبول)
10
+ delete: (حذف)
11
+ follow_activity: "{{inviter}} is now following {{invited}}"
12
+ following_you: "{{name}} is now following you on {{application_name}}"
13
+ friend_request: "طلب صديق"
14
+ friend_request_pending: "طلب صديق في انتظار {{link}}"
15
+ friend_request_sent: "تم إرسال طلب صديق"
16
+ friends_title: أصدقائي
17
+ friends_with: "{{inviter}} is now friends with {{invited}}"
18
+ ignore: (تجاهل)
19
+ no_followers: "أنت ليست لديها حاليا أي أتباع"
20
+ no_friends: "أنت ليست لديها حاليا أي الأصدقاء"
21
+ not_following_anyone: "انك لم تتابع حاليا أحدا"
22
+ problem_adding_follow: "هناك مشكلة واضاف {{user}}لمتابعة القائمة الخاصة بك. يرجى المحاولة مرة أخرى."
23
+ problem_sending_friend_request: "هناك مشكلة في ارسال طلب لصديق {{user}}. يرجى المحاولة مرة أخرى."
24
+ removed_friendship: "إزالة العلاقة صديق"
25
+ same_inviter_error_message: "المستخدم لا يمكن أن يصبح صديقا لذاتهما."
26
+ sign_up_to_follow: "تسجيل الدخول لمتابعة"
27
+ start_following: "وبعد بدء"
28
+ stop_being_friends: "الكف عن أصدقاء"
29
+ stop_following: "وبعد توقف"
30
+ view_all: "وبالنظر إلى جميع"
31
+ you_are_now_following: "أنت الآن بعد {{user}}"
@@ -0,0 +1,31 @@
1
+ ---
2
+ bg:
3
+ muck:
4
+ activity_templates:
5
+ follow: Последователи
6
+ friends_with: Приятели
7
+ friends:
8
+ acccept_friend_request: "Приеми приятел Запитване"
9
+ accept: (приеме)
10
+ delete: (изтриване)
11
+ follow_activity: "{{inviter}} is now following {{invited}}"
12
+ following_you: "{{name}} is now following you on {{application_name}}"
13
+ friend_request: "Приятел Запитване"
14
+ friend_request_pending: "Приятел запитване до {{link}}"
15
+ friend_request_sent: "Приятел Искане Изпратени"
16
+ friends_title: "Моите приятели"
17
+ friends_with: "{{inviter}} is now friends with {{invited}}"
18
+ ignore: (пренебрегни)
19
+ no_followers: "Не е в момента имате някакви последователите"
20
+ no_friends: "Вие в момента не са никакви приятели"
21
+ not_following_anyone: "Вие сте в момента не след никого"
22
+ problem_adding_follow: "Имаше проблем при добавянето {{user}} да ви следват списък. Моля опитайте отново."
23
+ problem_sending_friend_request: "Имаше проблем при изпращането на молба за приятелство с {{user}}. Моля опитайте отново."
24
+ removed_friendship: "Премахнато приятел отношения"
25
+ same_inviter_error_message: "Потребителят може да не станат приятели с themself."
26
+ sign_up_to_follow: "Sign-до Следвайте"
27
+ start_following: "Започнете След"
28
+ stop_being_friends: "Спри приятелство"
29
+ stop_following: "Спри След"
30
+ view_all: "View All"
31
+ you_are_now_following: "Сега след {{user}}"
@@ -0,0 +1,31 @@
1
+ ---
2
+ ca:
3
+ muck:
4
+ activity_templates:
5
+ follow: Seguidors
6
+ friends_with: Amics
7
+ friends:
8
+ acccept_friend_request: "Acceptar la sol licitud d&#39;amistat"
9
+ accept: (acceptar)
10
+ delete: (eliminar)
11
+ follow_activity: "{{inviter}} is now following {{invited}}"
12
+ following_you: "{{name}} is now following you on {{application_name}}"
13
+ friend_request: "Sol licitud amic"
14
+ friend_request_pending: "A l&#39;espera de sol licitud d&#39;amistat {{link}}"
15
+ friend_request_sent: "La sol licitud s&#39;ha enviat un amic"
16
+ friends_title: "Els meus amics"
17
+ friends_with: "{{inviter}} is now friends with {{invited}}"
18
+ ignore: (ignorar)
19
+ no_followers: "Que actualment no té cap seguidors"
20
+ no_friends: "Vostè no té actualment cap amic"
21
+ not_following_anyone: "Vostè no està actualment següents a ningú"
22
+ problem_adding_follow: "Hi ha hagut un problema {{user}} afegir a la seva llista de seguiment. Torneu-ho de nou."
23
+ problem_sending_friend_request: "Hi ha hagut un problema l&#39;enviament d&#39;una sol licitud d&#39;amistat {{user}}. Torneu-ho de nou."
24
+ removed_friendship: "Esborrat relació amic"
25
+ same_inviter_error_message: "L&#39;usuari no pot convertir-se en amics amb ell mateix."
26
+ sign_up_to_follow: "Subscriu-te a seguir"
27
+ start_following: "Després d&#39;iniciar"
28
+ stop_being_friends: "Deixar de ser amics"
29
+ stop_following: "Després de deixar de"
30
+ view_all: "Veure tots"
31
+ you_are_now_following: "Ara està després {{user}}"
@@ -0,0 +1,31 @@
1
+ ---
2
+ cs:
3
+ muck:
4
+ activity_templates:
5
+ follow: Následovníci
6
+ friends_with: Kamarádi
7
+ friends:
8
+ acccept_friend_request: "Přijměte přátelství"
9
+ accept: (přijmout)
10
+ delete: (smazat)
11
+ follow_activity: "{{inviter}} is now following {{invited}}"
12
+ following_you: "{{name}} is now following you on {{application_name}}"
13
+ friend_request: "Zaslat příteli"
14
+ friend_request_pending: "Přátelství čeká {{link}}"
15
+ friend_request_sent: "Zaslat příteli Posláno"
16
+ friends_title: "Moji kamarádi"
17
+ friends_with: "{{inviter}} is now friends with {{invited}}"
18
+ ignore: (ignorovat)
19
+ no_followers: "Nemusíte mít v současné době žádné následovníky"
20
+ no_friends: "Nemusíte mít v současné době žádné přátele"
21
+ not_following_anyone: "Ty v současné době nejsou tyto kdokoliv"
22
+ problem_adding_follow: "Došlo k problému {{user}} přidáte do svého seznamu následovat. Prosím, zkuste to znovu."
23
+ problem_sending_friend_request: "Došlo k problému při odesílání příteli žádost {{user}}. Prosím, zkuste to znovu."
24
+ removed_friendship: "Odstraněny příteli vztah"
25
+ same_inviter_error_message: "Uživatel se nemůže stát přítelem themself."
26
+ sign_up_to_follow: "Zaregistruj-až Následná"
27
+ start_following: "Start Po"
28
+ stop_being_friends: "Stop Být Přátelé"
29
+ stop_following: "Stop Po"
30
+ view_all: "Zobrazit vše"
31
+ you_are_now_following: "Ty jsou nyní tyto {{user}}"