muck-raker 0.1.26 → 0.1.27

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 (585) hide show
  1. data/.gitignore +1 -0
  2. data/README.rdoc +39 -4
  3. data/VERSION +1 -1
  4. data/app/controllers/muck/feeds_controller.rb +8 -2
  5. data/app/controllers/muck/identity_feeds_controller.rb +154 -0
  6. data/app/controllers/muck/visits_controller.rb +7 -1
  7. data/app/helpers/muck_raker_services_helper.rb +117 -0
  8. data/app/models/aggregation.rb +17 -0
  9. data/app/models/amazon.rb +59 -0
  10. data/app/models/amazon_request.rb +83 -0
  11. data/app/models/click.rb +0 -8
  12. data/app/models/entry.rb +2 -1
  13. data/app/models/feed.rb +53 -57
  14. data/app/models/feed_parent.rb +0 -5
  15. data/app/models/identity_feed.rb +26 -0
  16. data/app/models/recommendation.rb +0 -5
  17. data/app/models/service.rb +53 -8
  18. data/app/models/service_category.rb +14 -0
  19. data/app/models/tag_cloud.rb +0 -4
  20. data/app/views/activity_templates/_entry_comment.html.erb +8 -0
  21. data/app/views/activity_templates/_entry_share.html.erb +8 -0
  22. data/app/views/identity_feeds/_form.html.erb +20 -0
  23. data/app/views/identity_feeds/_service_categories.html.erb +13 -0
  24. data/app/views/identity_feeds/_services_for_user.html.erb +25 -0
  25. data/app/views/identity_feeds/edit.html.erb +2 -0
  26. data/app/views/identity_feeds/index.html.erb +32 -0
  27. data/app/views/identity_feeds/new.html.erb +1 -0
  28. data/app/views/parts/_add_extended_feed.html.erb +1 -1
  29. data/app/views/parts/_add_feed.html.erb +1 -1
  30. data/app/views/parts/_add_single_feed.html.erb +1 -1
  31. data/app/views/service_templates/_facebook.html.erb +4 -0
  32. data/app/views/service_templates/_friendfeed.html.erb +2 -0
  33. data/app/views/service_templates/_goodreads.html.erb +2 -0
  34. data/app/views/service_templates/_linkedin.html.erb +2 -0
  35. data/app/views/service_templates/_netflix.html.erb +2 -0
  36. data/app/views/service_templates/_polyvore.html.erb +2 -0
  37. data/app/views/service_templates/_zotero_group.html.erb +2 -0
  38. data/app/views/services/_edit_service.html.erb +1 -0
  39. data/app/views/services/_new_service.html.erb +1 -0
  40. data/app/views/services/_summary.html.erb +5 -0
  41. data/app/views/services/_view_service.html.erb +1 -0
  42. data/app/views/visits/_comments_tool.html.erb +19 -0
  43. data/app/views/visits/_frame_scripts.html.erb +26 -0
  44. data/app/views/visits/_share_tool.html.erb +22 -0
  45. data/app/views/visits/_toolbar.html.erb +25 -0
  46. data/app/views/visits/show.html.erb +4 -96
  47. data/config/muck_raker_routes.rb +2 -0
  48. data/db/bootstrap/service_categories.yml +40 -0
  49. data/db/bootstrap/services.yml +605 -153
  50. data/db/migrate/20090826220530_change_services_sequence_to_sort.rb +9 -0
  51. data/db/migrate/20090826225652_create_identity_feeds.rb +14 -0
  52. data/db/migrate/20090827005105_add_identity_fields_to_services.rb +13 -0
  53. data/db/migrate/20090827015308_create_service_categories.rb +12 -0
  54. data/db/migrate/20090827221502_add_prompt_and_template_to_services.rb +11 -0
  55. data/lib/active_record/acts/muck_feed_owner.rb +31 -0
  56. data/lib/active_record/acts/muck_feed_parent.rb +3 -2
  57. data/lib/active_record/acts/muck_raker_comment.rb +39 -0
  58. data/lib/active_record/acts/muck_raker_share.rb +32 -0
  59. data/lib/muck_raker/tasks.rb +19 -0
  60. data/lib/muck_raker.rb +6 -0
  61. data/locales/ar.yml +98 -61
  62. data/locales/bg.yml +90 -53
  63. data/locales/ca.yml +87 -50
  64. data/locales/cs.yml +82 -45
  65. data/locales/da.yml +69 -32
  66. data/locales/de.yml +75 -38
  67. data/locales/el.yml +78 -41
  68. data/locales/en.yml +39 -2
  69. data/locales/es.yml +82 -45
  70. data/locales/et.yml +89 -52
  71. data/locales/fa.yml +82 -45
  72. data/locales/fi.yml +95 -58
  73. data/locales/fr.yml +80 -43
  74. data/locales/gl.yml +94 -57
  75. data/locales/hi.yml +77 -40
  76. data/locales/hr.yml +84 -47
  77. data/locales/hu.yml +101 -64
  78. data/locales/id.yml +81 -44
  79. data/locales/it.yml +84 -47
  80. data/locales/iw.yml +91 -54
  81. data/locales/ja.yml +96 -59
  82. data/locales/ko.yml +77 -40
  83. data/locales/lt.yml +85 -48
  84. data/locales/lv.yml +87 -50
  85. data/locales/mt.yml +90 -53
  86. data/locales/nl.yml +75 -38
  87. data/locales/no.yml +77 -40
  88. data/locales/pl.yml +79 -42
  89. data/locales/pt-PT.yml +87 -50
  90. data/locales/ro.yml +100 -63
  91. data/locales/ru.yml +94 -57
  92. data/locales/sk.yml +83 -46
  93. data/locales/sl.yml +84 -47
  94. data/locales/sq.yml +101 -64
  95. data/locales/sr.yml +106 -69
  96. data/locales/sv.yml +87 -50
  97. data/locales/th.yml +100 -63
  98. data/locales/tl.yml +73 -36
  99. data/locales/tr.yml +84 -47
  100. data/locales/uk.yml +98 -61
  101. data/locales/vi.yml +87 -50
  102. data/locales/zh-CN.yml +82 -45
  103. data/locales/zh-TW.yml +82 -45
  104. data/locales/zh.yml +83 -46
  105. data/muck-raker.gemspec +517 -5
  106. data/public/ecs_to_rss-wishlist.xslt +41 -0
  107. data/public/images/service_icons/16/blogger.png +0 -0
  108. data/public/images/service_icons/16/citeulike.png +0 -0
  109. data/public/images/service_icons/16/clipmarks.png +0 -0
  110. data/public/images/service_icons/16/dailymotion.png +0 -0
  111. data/public/images/service_icons/16/delicious.png +0 -0
  112. data/public/images/service_icons/16/digg.png +0 -0
  113. data/public/images/service_icons/16/diigo.png +0 -0
  114. data/public/images/service_icons/16/facebook.png +0 -0
  115. data/public/images/service_icons/16/feed.png +0 -0
  116. data/public/images/service_icons/16/flickr.png +0 -0
  117. data/public/images/service_icons/16/fotolog.png +0 -0
  118. data/public/images/service_icons/16/friendfeed.png +0 -0
  119. data/public/images/service_icons/16/friendster.png +0 -0
  120. data/public/images/service_icons/16/furl.png +0 -0
  121. data/public/images/service_icons/16/goodreads.png +0 -0
  122. data/public/images/service_icons/16/google.png +0 -0
  123. data/public/images/service_icons/16/googleblog.png +0 -0
  124. data/public/images/service_icons/16/googlenews.png +0 -0
  125. data/public/images/service_icons/16/identica.png +0 -0
  126. data/public/images/service_icons/16/joost.png +0 -0
  127. data/public/images/service_icons/16/lastfm.png +0 -0
  128. data/public/images/service_icons/16/librarything.png +0 -0
  129. data/public/images/service_icons/16/linkedin.png +0 -0
  130. data/public/images/service_icons/16/livejournal.png +0 -0
  131. data/public/images/service_icons/16/magnolia.png +0 -0
  132. data/public/images/service_icons/16/mendeley.png +0 -0
  133. data/public/images/service_icons/16/mixx.png +0 -0
  134. data/public/images/service_icons/16/myspace.png +0 -0
  135. data/public/images/service_icons/16/netflix.png +0 -0
  136. data/public/images/service_icons/16/netvibes.png +0 -0
  137. data/public/images/service_icons/16/newsvine.png +0 -0
  138. data/public/images/service_icons/16/oai.png +0 -0
  139. data/public/images/service_icons/16/odeo.png +0 -0
  140. data/public/images/service_icons/16/opml.png +0 -0
  141. data/public/images/service_icons/16/pandora.png +0 -0
  142. data/public/images/service_icons/16/photobucket.png +0 -0
  143. data/public/images/service_icons/16/picasa.png +0 -0
  144. data/public/images/service_icons/16/polyvore.png +0 -0
  145. data/public/images/service_icons/16/pownce.png +0 -0
  146. data/public/images/service_icons/16/reddit.png +0 -0
  147. data/public/images/service_icons/16/simpy.png +0 -0
  148. data/public/images/service_icons/16/smugmug.png +0 -0
  149. data/public/images/service_icons/16/stumbleupon.png +0 -0
  150. data/public/images/service_icons/16/tag.png +0 -0
  151. data/public/images/service_icons/16/technorati.png +0 -0
  152. data/public/images/service_icons/16/tumblr.png +0 -0
  153. data/public/images/service_icons/16/twitter.png +0 -0
  154. data/public/images/service_icons/16/vimeo.png +0 -0
  155. data/public/images/service_icons/16/webshots.png +0 -0
  156. data/public/images/service_icons/16/wordpress.png +0 -0
  157. data/public/images/service_icons/16/xanga.png +0 -0
  158. data/public/images/service_icons/16/yahoo.png +0 -0
  159. data/public/images/service_icons/16/yelp.png +0 -0
  160. data/public/images/service_icons/16/youtube.png +0 -0
  161. data/public/images/service_icons/16/zooomr.png +0 -0
  162. data/public/images/service_icons/16/zotero.png +0 -0
  163. data/public/images/service_icons/24/amazon.png +0 -0
  164. data/public/images/service_icons/24/blogger.png +0 -0
  165. data/public/images/service_icons/24/citeulike.png +0 -0
  166. data/public/images/service_icons/24/clipmarks.png +0 -0
  167. data/public/images/service_icons/24/dailymotion.png +0 -0
  168. data/public/images/service_icons/24/delicious.png +0 -0
  169. data/public/images/service_icons/24/digg.png +0 -0
  170. data/public/images/service_icons/24/diigo.png +0 -0
  171. data/public/images/service_icons/24/facebook.png +0 -0
  172. data/public/images/service_icons/24/feed.png +0 -0
  173. data/public/images/service_icons/24/flickr.png +0 -0
  174. data/public/images/service_icons/24/fotolog.png +0 -0
  175. data/public/images/service_icons/24/friendfeed.png +0 -0
  176. data/public/images/service_icons/24/friendster.png +0 -0
  177. data/public/images/service_icons/24/furl.png +0 -0
  178. data/public/images/service_icons/24/goodreads.png +0 -0
  179. data/public/images/service_icons/24/google.png +0 -0
  180. data/public/images/service_icons/24/googleblog.png +0 -0
  181. data/public/images/service_icons/24/googlenews.png +0 -0
  182. data/public/images/service_icons/24/identica.png +0 -0
  183. data/public/images/service_icons/24/joost.png +0 -0
  184. data/public/images/service_icons/24/lastfm.png +0 -0
  185. data/public/images/service_icons/24/librarything.png +0 -0
  186. data/public/images/service_icons/24/linkedin.png +0 -0
  187. data/public/images/service_icons/24/livejournal.png +0 -0
  188. data/public/images/service_icons/24/magnolia.png +0 -0
  189. data/public/images/service_icons/24/mendeley.png +0 -0
  190. data/public/images/service_icons/24/mixx.png +0 -0
  191. data/public/images/service_icons/24/myspace.png +0 -0
  192. data/public/images/service_icons/24/netflix.png +0 -0
  193. data/public/images/service_icons/24/netvibes.png +0 -0
  194. data/public/images/service_icons/24/newsvine.png +0 -0
  195. data/public/images/service_icons/24/oai.png +0 -0
  196. data/public/images/service_icons/24/odeo.png +0 -0
  197. data/public/images/service_icons/24/opml.png +0 -0
  198. data/public/images/service_icons/24/pandora.png +0 -0
  199. data/public/images/service_icons/24/photobucket.png +0 -0
  200. data/public/images/service_icons/24/picasa.png +0 -0
  201. data/public/images/service_icons/24/polyvore.png +0 -0
  202. data/public/images/service_icons/24/pownce.png +0 -0
  203. data/public/images/service_icons/24/reddit.png +0 -0
  204. data/public/images/service_icons/24/simpy.png +0 -0
  205. data/public/images/service_icons/24/smugmug.png +0 -0
  206. data/public/images/service_icons/24/stumbleupon.png +0 -0
  207. data/public/images/service_icons/24/tag.png +0 -0
  208. data/public/images/service_icons/24/technorati.png +0 -0
  209. data/public/images/service_icons/24/tumblr.png +0 -0
  210. data/public/images/service_icons/24/twitter.png +0 -0
  211. data/public/images/service_icons/24/vimeo.png +0 -0
  212. data/public/images/service_icons/24/webshots.png +0 -0
  213. data/public/images/service_icons/24/wordpress.png +0 -0
  214. data/public/images/service_icons/24/xanga.png +0 -0
  215. data/public/images/service_icons/24/yahoo.png +0 -0
  216. data/public/images/service_icons/24/yelp.png +0 -0
  217. data/public/images/service_icons/24/youtube.png +0 -0
  218. data/public/images/service_icons/24/zooomr.png +0 -0
  219. data/public/images/service_icons/24/zotero.png +0 -0
  220. data/public/images/service_icons/48/amazon.png +0 -0
  221. data/public/images/service_icons/48/blogger.png +0 -0
  222. data/public/images/service_icons/48/citeulike.png +0 -0
  223. data/public/images/service_icons/48/clipmarks.png +0 -0
  224. data/public/images/service_icons/48/dailymotion.png +0 -0
  225. data/public/images/service_icons/48/delicious.png +0 -0
  226. data/public/images/service_icons/48/digg.png +0 -0
  227. data/public/images/service_icons/48/diigo.png +0 -0
  228. data/public/images/service_icons/48/facebook.png +0 -0
  229. data/public/images/service_icons/48/feed.png +0 -0
  230. data/public/images/service_icons/48/flickr.png +0 -0
  231. data/public/images/service_icons/48/fotolog.png +0 -0
  232. data/public/images/service_icons/48/friendfeed.png +0 -0
  233. data/public/images/service_icons/48/friendster.png +0 -0
  234. data/public/images/service_icons/48/furl.png +0 -0
  235. data/public/images/service_icons/48/goodreads.png +0 -0
  236. data/public/images/service_icons/48/google.png +0 -0
  237. data/public/images/service_icons/48/googleblog.png +0 -0
  238. data/public/images/service_icons/48/googlenews.png +0 -0
  239. data/public/images/service_icons/48/identica.png +0 -0
  240. data/public/images/service_icons/48/joost.png +0 -0
  241. data/public/images/service_icons/48/lastfm.png +0 -0
  242. data/public/images/service_icons/48/librarything.png +0 -0
  243. data/public/images/service_icons/48/linkedin.png +0 -0
  244. data/public/images/service_icons/48/livejournal.png +0 -0
  245. data/public/images/service_icons/48/magnolia.png +0 -0
  246. data/public/images/service_icons/48/mendeley.png +0 -0
  247. data/public/images/service_icons/48/mixx.png +0 -0
  248. data/public/images/service_icons/48/myspace.png +0 -0
  249. data/public/images/service_icons/48/netflix.png +0 -0
  250. data/public/images/service_icons/48/netvibes.png +0 -0
  251. data/public/images/service_icons/48/newsvine.png +0 -0
  252. data/public/images/service_icons/48/oai.png +0 -0
  253. data/public/images/service_icons/48/odeo.png +0 -0
  254. data/public/images/service_icons/48/opml.png +0 -0
  255. data/public/images/service_icons/48/pandora.png +0 -0
  256. data/public/images/service_icons/48/photobucket.png +0 -0
  257. data/public/images/service_icons/48/picasa.png +0 -0
  258. data/public/images/service_icons/48/polyvore.png +0 -0
  259. data/public/images/service_icons/48/pownce.png +0 -0
  260. data/public/images/service_icons/48/reddit.png +0 -0
  261. data/public/images/service_icons/48/simpy.png +0 -0
  262. data/public/images/service_icons/48/smugmug.png +0 -0
  263. data/public/images/service_icons/48/stumbleupon.png +0 -0
  264. data/public/images/service_icons/48/tag.png +0 -0
  265. data/public/images/service_icons/48/technorati.png +0 -0
  266. data/public/images/service_icons/48/tumblr.png +0 -0
  267. data/public/images/service_icons/48/twitter.png +0 -0
  268. data/public/images/service_icons/48/vimeo.png +0 -0
  269. data/public/images/service_icons/48/webshots.png +0 -0
  270. data/public/images/service_icons/48/wordpress.png +0 -0
  271. data/public/images/service_icons/48/xanga.png +0 -0
  272. data/public/images/service_icons/48/yahoo.png +0 -0
  273. data/public/images/service_icons/48/yelp.png +0 -0
  274. data/public/images/service_icons/48/youtube.png +0 -0
  275. data/public/images/service_icons/48/zooomr.png +0 -0
  276. data/public/images/service_icons/48/zotero.png +0 -0
  277. data/public/images/service_icons/60/amazon.png +0 -0
  278. data/public/images/service_icons/60/blogger.png +0 -0
  279. data/public/images/service_icons/60/citeulike.png +0 -0
  280. data/public/images/service_icons/60/clipmarks.png +0 -0
  281. data/public/images/service_icons/60/dailymotion.png +0 -0
  282. data/public/images/service_icons/60/delicious.png +0 -0
  283. data/public/images/service_icons/60/digg.png +0 -0
  284. data/public/images/service_icons/60/diigo.png +0 -0
  285. data/public/images/service_icons/60/facebook.png +0 -0
  286. data/public/images/service_icons/60/feed.png +0 -0
  287. data/public/images/service_icons/60/flickr.png +0 -0
  288. data/public/images/service_icons/60/fotolog.png +0 -0
  289. data/public/images/service_icons/60/friendfeed.png +0 -0
  290. data/public/images/service_icons/60/friendster.png +0 -0
  291. data/public/images/service_icons/60/furl.png +0 -0
  292. data/public/images/service_icons/60/goodreads.png +0 -0
  293. data/public/images/service_icons/60/google.png +0 -0
  294. data/public/images/service_icons/60/googleblog.png +0 -0
  295. data/public/images/service_icons/60/googlenews.png +0 -0
  296. data/public/images/service_icons/60/identica.png +0 -0
  297. data/public/images/service_icons/60/joost.png +0 -0
  298. data/public/images/service_icons/60/lastfm.png +0 -0
  299. data/public/images/service_icons/60/librarything.png +0 -0
  300. data/public/images/service_icons/60/linkedin.png +0 -0
  301. data/public/images/service_icons/60/livejournal.png +0 -0
  302. data/public/images/service_icons/60/magnolia.png +0 -0
  303. data/public/images/service_icons/60/mendeley.png +0 -0
  304. data/public/images/service_icons/60/mixx.png +0 -0
  305. data/public/images/service_icons/60/myspace.png +0 -0
  306. data/public/images/service_icons/60/netflix.png +0 -0
  307. data/public/images/service_icons/60/netvibes.png +0 -0
  308. data/public/images/service_icons/60/newsvine.png +0 -0
  309. data/public/images/service_icons/60/oai.png +0 -0
  310. data/public/images/service_icons/60/odeo.png +0 -0
  311. data/public/images/service_icons/60/opml.png +0 -0
  312. data/public/images/service_icons/60/pandora.png +0 -0
  313. data/public/images/service_icons/60/photobucket.png +0 -0
  314. data/public/images/service_icons/60/picasa.png +0 -0
  315. data/public/images/service_icons/60/polyvore.png +0 -0
  316. data/public/images/service_icons/60/pownce.png +0 -0
  317. data/public/images/service_icons/60/reddit.png +0 -0
  318. data/public/images/service_icons/60/simpy.png +0 -0
  319. data/public/images/service_icons/60/smugmug.png +0 -0
  320. data/public/images/service_icons/60/stumbleupon.png +0 -0
  321. data/public/images/service_icons/60/tag.png +0 -0
  322. data/public/images/service_icons/60/technorati.png +0 -0
  323. data/public/images/service_icons/60/tumblr.png +0 -0
  324. data/public/images/service_icons/60/twitter.png +0 -0
  325. data/public/images/service_icons/60/vimeo.png +0 -0
  326. data/public/images/service_icons/60/webshots.png +0 -0
  327. data/public/images/service_icons/60/wordpress.png +0 -0
  328. data/public/images/service_icons/60/xanga.png +0 -0
  329. data/public/images/service_icons/60/yahoo.png +0 -0
  330. data/public/images/service_icons/60/yelp.png +0 -0
  331. data/public/images/service_icons/60/youtube.png +0 -0
  332. data/public/images/service_icons/60/zooomr.png +0 -0
  333. data/public/images/service_icons/60/zotero.png +0 -0
  334. data/public/images/service_icons/amazon.png +0 -0
  335. data/public/images/service_icons/facebook_friend_links.jpg +0 -0
  336. data/public/images/service_icons/facebook_my_links.jpg +0 -0
  337. data/public/images/service_icons/source/Aquaticus_Social_Icon_template_by_jwloh.psd +0 -0
  338. data/public/images/service_icons/source/Google.psd +0 -0
  339. data/public/images/service_icons/source/Quake 9 Design.webloc +0 -0
  340. data/public/images/service_icons/source/ReadMe.rtf +52 -0
  341. data/public/images/service_icons/source/aquaticus.social.png +0 -0
  342. data/public/images/service_icons/source/citeulike.png +0 -0
  343. data/public/images/service_icons/source/clipmarks.png +0 -0
  344. data/public/images/service_icons/source/netflix.png +0 -0
  345. data/public/images/service_icons/source/oai.png +0 -0
  346. data/public/images/service_icons/source/odeo.png +0 -0
  347. data/public/images/service_icons/source/opml.png +0 -0
  348. data/public/images/service_icons/source/pandora.png +0 -0
  349. data/public/images/service_icons/source/simpy.png +0 -0
  350. data/public/images/service_icons/source/template.png +0 -0
  351. data/public/images/service_icons/source/xanga.png +0 -0
  352. data/public/javascripts/muck_raker.js +19 -5
  353. data/public/stylesheets/frame.css +52 -0
  354. data/raker/lib/aggregatord.jar +0 -0
  355. data/test/rails_root/app/controllers/application_controller.rb +2 -0
  356. data/test/rails_root/app/models/activity.rb +22 -1
  357. data/test/rails_root/app/models/comment.rb +21 -1
  358. data/test/rails_root/app/models/share.rb +19 -2
  359. data/test/rails_root/app/models/user.rb +2 -1
  360. data/test/rails_root/config/global_config.yml +4 -1
  361. data/test/rails_root/config/routes.rb +8 -1
  362. data/test/rails_root/db/bootstrap/service_categories.yml +40 -0
  363. data/test/rails_root/db/bootstrap/services.yml +605 -153
  364. data/test/rails_root/db/migrate/20090818204527_add_activity_indexes.rb +9 -0
  365. data/test/rails_root/db/migrate/20090819030523_add_attachable_to_activities.rb +13 -0
  366. data/test/rails_root/db/migrate/20090826220530_change_services_sequence_to_sort.rb +9 -0
  367. data/test/rails_root/db/migrate/20090826225652_create_identity_feeds.rb +14 -0
  368. data/test/rails_root/db/migrate/20090827005105_add_identity_fields_to_services.rb +13 -0
  369. data/test/rails_root/db/migrate/20090827015308_create_service_categories.rb +12 -0
  370. data/test/rails_root/db/migrate/20090827221502_add_prompt_and_template_to_services.rb +11 -0
  371. data/test/rails_root/public/ecs_to_rss-wishlist.xslt +41 -0
  372. data/test/rails_root/public/images/icons/comment.png +0 -0
  373. data/test/rails_root/public/images/service_icons/16/blogger.png +0 -0
  374. data/test/rails_root/public/images/service_icons/16/citeulike.png +0 -0
  375. data/test/rails_root/public/images/service_icons/16/clipmarks.png +0 -0
  376. data/test/rails_root/public/images/service_icons/16/delicious.png +0 -0
  377. data/test/rails_root/public/images/service_icons/16/digg.png +0 -0
  378. data/test/rails_root/public/images/service_icons/16/facebook.png +0 -0
  379. data/test/rails_root/public/images/service_icons/16/feed.png +0 -0
  380. data/test/rails_root/public/images/service_icons/16/flickr.png +0 -0
  381. data/test/rails_root/public/images/service_icons/16/friendfeed.png +0 -0
  382. data/test/rails_root/public/images/service_icons/16/friendster.png +0 -0
  383. data/test/rails_root/public/images/service_icons/16/furl.png +0 -0
  384. data/test/rails_root/public/images/service_icons/16/google.png +0 -0
  385. data/test/rails_root/public/images/service_icons/16/lastfm.png +0 -0
  386. data/test/rails_root/public/images/service_icons/16/linkedin.png +0 -0
  387. data/test/rails_root/public/images/service_icons/16/livejournal.png +0 -0
  388. data/test/rails_root/public/images/service_icons/16/magnolia.png +0 -0
  389. data/test/rails_root/public/images/service_icons/16/mixx.png +0 -0
  390. data/test/rails_root/public/images/service_icons/16/myspace.png +0 -0
  391. data/test/rails_root/public/images/service_icons/16/netflix.png +0 -0
  392. data/test/rails_root/public/images/service_icons/16/netvibes.png +0 -0
  393. data/test/rails_root/public/images/service_icons/16/newsvine.png +0 -0
  394. data/test/rails_root/public/images/service_icons/16/oai.png +0 -0
  395. data/test/rails_root/public/images/service_icons/16/odeo.png +0 -0
  396. data/test/rails_root/public/images/service_icons/16/opml.png +0 -0
  397. data/test/rails_root/public/images/service_icons/16/pandora.png +0 -0
  398. data/test/rails_root/public/images/service_icons/16/picasa.png +0 -0
  399. data/test/rails_root/public/images/service_icons/16/pownce.png +0 -0
  400. data/test/rails_root/public/images/service_icons/16/reddit.png +0 -0
  401. data/test/rails_root/public/images/service_icons/16/simpy.png +0 -0
  402. data/test/rails_root/public/images/service_icons/16/stumbleupon.png +0 -0
  403. data/test/rails_root/public/images/service_icons/16/technorati.png +0 -0
  404. data/test/rails_root/public/images/service_icons/16/twitter.png +0 -0
  405. data/test/rails_root/public/images/service_icons/16/vimeo.png +0 -0
  406. data/test/rails_root/public/images/service_icons/16/webshots.png +0 -0
  407. data/test/rails_root/public/images/service_icons/16/wordpress.png +0 -0
  408. data/test/rails_root/public/images/service_icons/16/xanga.png +0 -0
  409. data/test/rails_root/public/images/service_icons/16/yahoo.png +0 -0
  410. data/test/rails_root/public/images/service_icons/16/yelp.png +0 -0
  411. data/test/rails_root/public/images/service_icons/16/youtube.png +0 -0
  412. data/test/rails_root/public/images/service_icons/24/blogger.png +0 -0
  413. data/test/rails_root/public/images/service_icons/24/citeulike.png +0 -0
  414. data/test/rails_root/public/images/service_icons/24/clipmarks.png +0 -0
  415. data/test/rails_root/public/images/service_icons/24/delicious.png +0 -0
  416. data/test/rails_root/public/images/service_icons/24/digg.png +0 -0
  417. data/test/rails_root/public/images/service_icons/24/facebook.png +0 -0
  418. data/test/rails_root/public/images/service_icons/24/feed.png +0 -0
  419. data/test/rails_root/public/images/service_icons/24/flickr.png +0 -0
  420. data/test/rails_root/public/images/service_icons/24/friendfeed.png +0 -0
  421. data/test/rails_root/public/images/service_icons/24/friendster.png +0 -0
  422. data/test/rails_root/public/images/service_icons/24/furl.png +0 -0
  423. data/test/rails_root/public/images/service_icons/24/google.png +0 -0
  424. data/test/rails_root/public/images/service_icons/24/lastfm.png +0 -0
  425. data/test/rails_root/public/images/service_icons/24/linkedin.png +0 -0
  426. data/test/rails_root/public/images/service_icons/24/livejournal.png +0 -0
  427. data/test/rails_root/public/images/service_icons/24/magnolia.png +0 -0
  428. data/test/rails_root/public/images/service_icons/24/mixx.png +0 -0
  429. data/test/rails_root/public/images/service_icons/24/myspace.png +0 -0
  430. data/test/rails_root/public/images/service_icons/24/netflix.png +0 -0
  431. data/test/rails_root/public/images/service_icons/24/netvibes.png +0 -0
  432. data/test/rails_root/public/images/service_icons/24/newsvine.png +0 -0
  433. data/test/rails_root/public/images/service_icons/24/oai.png +0 -0
  434. data/test/rails_root/public/images/service_icons/24/odeo.png +0 -0
  435. data/test/rails_root/public/images/service_icons/24/opml.png +0 -0
  436. data/test/rails_root/public/images/service_icons/24/pandora.png +0 -0
  437. data/test/rails_root/public/images/service_icons/24/picasa.png +0 -0
  438. data/test/rails_root/public/images/service_icons/24/pownce.png +0 -0
  439. data/test/rails_root/public/images/service_icons/24/reddit.png +0 -0
  440. data/test/rails_root/public/images/service_icons/24/simpy.png +0 -0
  441. data/test/rails_root/public/images/service_icons/24/stumbleupon.png +0 -0
  442. data/test/rails_root/public/images/service_icons/24/technorati.png +0 -0
  443. data/test/rails_root/public/images/service_icons/24/twitter.png +0 -0
  444. data/test/rails_root/public/images/service_icons/24/vimeo.png +0 -0
  445. data/test/rails_root/public/images/service_icons/24/webshots.png +0 -0
  446. data/test/rails_root/public/images/service_icons/24/wordpress.png +0 -0
  447. data/test/rails_root/public/images/service_icons/24/xanga.png +0 -0
  448. data/test/rails_root/public/images/service_icons/24/yahoo.png +0 -0
  449. data/test/rails_root/public/images/service_icons/24/yelp.png +0 -0
  450. data/test/rails_root/public/images/service_icons/24/youtube.png +0 -0
  451. data/test/rails_root/public/images/service_icons/48/blogger.png +0 -0
  452. data/test/rails_root/public/images/service_icons/48/citeulike.png +0 -0
  453. data/test/rails_root/public/images/service_icons/48/clipmarks.png +0 -0
  454. data/test/rails_root/public/images/service_icons/48/delicious.png +0 -0
  455. data/test/rails_root/public/images/service_icons/48/digg.png +0 -0
  456. data/test/rails_root/public/images/service_icons/48/facebook.png +0 -0
  457. data/test/rails_root/public/images/service_icons/48/feed.png +0 -0
  458. data/test/rails_root/public/images/service_icons/48/flickr.png +0 -0
  459. data/test/rails_root/public/images/service_icons/48/friendfeed.png +0 -0
  460. data/test/rails_root/public/images/service_icons/48/friendster.png +0 -0
  461. data/test/rails_root/public/images/service_icons/48/furl.png +0 -0
  462. data/test/rails_root/public/images/service_icons/48/google.png +0 -0
  463. data/test/rails_root/public/images/service_icons/48/lastfm.png +0 -0
  464. data/test/rails_root/public/images/service_icons/48/linkedin.png +0 -0
  465. data/test/rails_root/public/images/service_icons/48/livejournal.png +0 -0
  466. data/test/rails_root/public/images/service_icons/48/magnolia.png +0 -0
  467. data/test/rails_root/public/images/service_icons/48/mixx.png +0 -0
  468. data/test/rails_root/public/images/service_icons/48/myspace.png +0 -0
  469. data/test/rails_root/public/images/service_icons/48/netflix.png +0 -0
  470. data/test/rails_root/public/images/service_icons/48/netvibes.png +0 -0
  471. data/test/rails_root/public/images/service_icons/48/newsvine.png +0 -0
  472. data/test/rails_root/public/images/service_icons/48/oai.png +0 -0
  473. data/test/rails_root/public/images/service_icons/48/odeo.png +0 -0
  474. data/test/rails_root/public/images/service_icons/48/opml.png +0 -0
  475. data/test/rails_root/public/images/service_icons/48/pandora.png +0 -0
  476. data/test/rails_root/public/images/service_icons/48/picasa.png +0 -0
  477. data/test/rails_root/public/images/service_icons/48/pownce.png +0 -0
  478. data/test/rails_root/public/images/service_icons/48/reddit.png +0 -0
  479. data/test/rails_root/public/images/service_icons/48/simpy.png +0 -0
  480. data/test/rails_root/public/images/service_icons/48/stumbleupon.png +0 -0
  481. data/test/rails_root/public/images/service_icons/48/technorati.png +0 -0
  482. data/test/rails_root/public/images/service_icons/48/twitter.png +0 -0
  483. data/test/rails_root/public/images/service_icons/48/vimeo.png +0 -0
  484. data/test/rails_root/public/images/service_icons/48/webshots.png +0 -0
  485. data/test/rails_root/public/images/service_icons/48/wordpress.png +0 -0
  486. data/test/rails_root/public/images/service_icons/48/xanga.png +0 -0
  487. data/test/rails_root/public/images/service_icons/48/yahoo.png +0 -0
  488. data/test/rails_root/public/images/service_icons/48/yelp.png +0 -0
  489. data/test/rails_root/public/images/service_icons/48/youtube.png +0 -0
  490. data/test/rails_root/public/images/service_icons/60/blogger.png +0 -0
  491. data/test/rails_root/public/images/service_icons/60/citeulike.png +0 -0
  492. data/test/rails_root/public/images/service_icons/60/clipmarks.png +0 -0
  493. data/test/rails_root/public/images/service_icons/60/delicious.png +0 -0
  494. data/test/rails_root/public/images/service_icons/60/digg.png +0 -0
  495. data/test/rails_root/public/images/service_icons/60/facebook.png +0 -0
  496. data/test/rails_root/public/images/service_icons/60/feed.png +0 -0
  497. data/test/rails_root/public/images/service_icons/60/flickr.png +0 -0
  498. data/test/rails_root/public/images/service_icons/60/friendfeed.png +0 -0
  499. data/test/rails_root/public/images/service_icons/60/friendster.png +0 -0
  500. data/test/rails_root/public/images/service_icons/60/furl.png +0 -0
  501. data/test/rails_root/public/images/service_icons/60/google.png +0 -0
  502. data/test/rails_root/public/images/service_icons/60/lastfm.png +0 -0
  503. data/test/rails_root/public/images/service_icons/60/linkedin.png +0 -0
  504. data/test/rails_root/public/images/service_icons/60/livejournal.png +0 -0
  505. data/test/rails_root/public/images/service_icons/60/magnolia.png +0 -0
  506. data/test/rails_root/public/images/service_icons/60/mixx.png +0 -0
  507. data/test/rails_root/public/images/service_icons/60/myspace.png +0 -0
  508. data/test/rails_root/public/images/service_icons/60/netflix.png +0 -0
  509. data/test/rails_root/public/images/service_icons/60/netvibes.png +0 -0
  510. data/test/rails_root/public/images/service_icons/60/newsvine.png +0 -0
  511. data/test/rails_root/public/images/service_icons/60/oai.png +0 -0
  512. data/test/rails_root/public/images/service_icons/60/odeo.png +0 -0
  513. data/test/rails_root/public/images/service_icons/60/opml.png +0 -0
  514. data/test/rails_root/public/images/service_icons/60/pandora.png +0 -0
  515. data/test/rails_root/public/images/service_icons/60/picasa.png +0 -0
  516. data/test/rails_root/public/images/service_icons/60/pownce.png +0 -0
  517. data/test/rails_root/public/images/service_icons/60/reddit.png +0 -0
  518. data/test/rails_root/public/images/service_icons/60/simpy.png +0 -0
  519. data/test/rails_root/public/images/service_icons/60/stumbleupon.png +0 -0
  520. data/test/rails_root/public/images/service_icons/60/technorati.png +0 -0
  521. data/test/rails_root/public/images/service_icons/60/twitter.png +0 -0
  522. data/test/rails_root/public/images/service_icons/60/vimeo.png +0 -0
  523. data/test/rails_root/public/images/service_icons/60/webshots.png +0 -0
  524. data/test/rails_root/public/images/service_icons/60/wordpress.png +0 -0
  525. data/test/rails_root/public/images/service_icons/60/xanga.png +0 -0
  526. data/test/rails_root/public/images/service_icons/60/yahoo.png +0 -0
  527. data/test/rails_root/public/images/service_icons/60/yelp.png +0 -0
  528. data/test/rails_root/public/images/service_icons/60/youtube.png +0 -0
  529. data/test/rails_root/public/images/service_icons/ReadMe.rtf +52 -0
  530. data/test/rails_root/public/images/service_icons/facebook_friend_links.jpg +0 -0
  531. data/test/rails_root/public/images/service_icons/facebook_my_links.jpg +0 -0
  532. data/test/rails_root/public/images/service_icons/source/Aquaticus_Social_Icon_template_by_jwloh.psd +0 -0
  533. data/test/rails_root/public/images/service_icons/source/Google.psd +0 -0
  534. data/test/rails_root/public/images/service_icons/source/Quake 9 Design.webloc +0 -0
  535. data/test/rails_root/public/images/service_icons/source/ReadMe.rtf +52 -0
  536. data/test/rails_root/public/images/service_icons/source/aquaticus.social.png +0 -0
  537. data/test/rails_root/public/images/service_icons/source/citeulike.png +0 -0
  538. data/test/rails_root/public/images/service_icons/source/clipmarks.png +0 -0
  539. data/test/rails_root/public/images/service_icons/source/netflix.png +0 -0
  540. data/test/rails_root/public/images/service_icons/source/oai.png +0 -0
  541. data/test/rails_root/public/images/service_icons/source/odeo.png +0 -0
  542. data/test/rails_root/public/images/service_icons/source/opml.png +0 -0
  543. data/test/rails_root/public/images/service_icons/source/pandora.png +0 -0
  544. data/test/rails_root/public/images/service_icons/source/simpy.png +0 -0
  545. data/test/rails_root/public/images/service_icons/source/template.png +0 -0
  546. data/test/rails_root/public/images/service_icons/source/xanga.png +0 -0
  547. data/test/rails_root/public/javascripts/jquery-ui.js +188 -0
  548. data/test/rails_root/public/javascripts/jquery.js +19 -0
  549. data/test/rails_root/public/javascripts/jrails.js +1 -0
  550. data/test/rails_root/public/javascripts/muck.js +5 -18
  551. data/test/rails_root/public/javascripts/muck_activities.js +3 -3
  552. data/test/rails_root/public/javascripts/muck_raker.js +19 -5
  553. data/test/rails_root/public/stylesheets/application.css +48 -2
  554. data/test/rails_root/public/stylesheets/frame.css +52 -0
  555. data/test/rails_root/public/stylesheets/styles.css +1 -1
  556. data/test/rails_root/test/factories.rb +16 -0
  557. data/test/rails_root/test/functional/feeds_controller_test.rb +2 -2
  558. data/test/rails_root/test/functional/identity_feeds_controller_test.rb +107 -0
  559. data/test/rails_root/test/test_helper.rb +1 -0
  560. data/test/rails_root/test/unit/comment_test.rb +38 -0
  561. data/test/rails_root/test/unit/feed_parent_test.rb +0 -5
  562. data/test/rails_root/test/unit/feed_test.rb +45 -7
  563. data/test/rails_root/test/unit/identity_feed_test.rb +8 -0
  564. data/test/rails_root/test/unit/service_category_test.rb +19 -0
  565. data/test/rails_root/test/unit/service_test.rb +68 -0
  566. data/test/rails_root/test/unit/share_test.rb +31 -0
  567. data/test/rails_root/test/unit/tag_cloud_test.rb +0 -4
  568. data/test/rails_root/test/unit/user_test.rb +30 -1
  569. data/test/rails_root/vendor/plugins/jrails/CHANGELOG +43 -0
  570. data/test/rails_root/vendor/plugins/jrails/LICENSE +18 -0
  571. data/test/rails_root/vendor/plugins/jrails/README.rdoc +21 -0
  572. data/test/rails_root/vendor/plugins/jrails/Rakefile +18 -0
  573. data/test/rails_root/vendor/plugins/jrails/VERSION.yml +4 -0
  574. data/test/rails_root/vendor/plugins/jrails/bin/jrails +30 -0
  575. data/test/rails_root/vendor/plugins/jrails/init.rb +1 -0
  576. data/test/rails_root/vendor/plugins/jrails/install.rb +9 -0
  577. data/test/rails_root/vendor/plugins/jrails/javascripts/jquery-ui.js +188 -0
  578. data/test/rails_root/vendor/plugins/jrails/javascripts/jquery.js +19 -0
  579. data/test/rails_root/vendor/plugins/jrails/javascripts/jrails.js +1 -0
  580. data/test/rails_root/vendor/plugins/jrails/javascripts/sources/jrails.js +197 -0
  581. data/test/rails_root/vendor/plugins/jrails/jrails.gemspec +50 -0
  582. data/test/rails_root/vendor/plugins/jrails/lib/jrails.rb +421 -0
  583. data/test/rails_root/vendor/plugins/jrails/rails/init.rb +15 -0
  584. data/test/rails_root/vendor/plugins/jrails/tasks/jrails.rake +25 -0
  585. metadata +519 -4
data/.gitignore CHANGED
@@ -27,3 +27,4 @@ pkg/*
27
27
  coverage
28
28
  rdoc
29
29
  pkg
30
+ test/feed_archive
data/README.rdoc CHANGED
@@ -22,11 +22,42 @@ After install acts-as-taggable-on be sure to include the helper in application_h
22
22
  include TagsHelper
23
23
  end
24
24
 
25
-
26
25
  Add rake tasks to your Rakefile
27
26
 
28
27
  require 'muck_raker/tasks'
29
28
 
29
+ Add routes
30
+ Depending on which features you use from muck raker you may need to add additional routes to your application. For example,
31
+ a user with has_muck_feeds and acts_as_muck_feed_owner the following routes would be required:
32
+
33
+ map.resources :users, :controller => 'muck/users' do |users|
34
+ # have to map into the muck/identity_feeds controller or rails can't find the identity_feeds
35
+ users.resources :identity_feeds, :controller => 'muck/identity_feeds'
36
+ users.resources :feeds, :controller => 'muck/feeds'
37
+ end
38
+
39
+ == Usage
40
+ Muck raker aggregates data feeds and analyzes the results to make recommendations.
41
+
42
+ === environment.rb
43
+ Add the following to environment.rb to include all the required gems:
44
+
45
+ config.gem "muck-feedbag", :lib => "feedbag", :source => "http://gems.github.com"
46
+ config.gem "pauldix-feedzirra", :lib => 'feedzirra', :source => "http://gems.github.com"
47
+ config.gem 'muck-engine', :lib => 'muck_engine'
48
+ config.gem 'muck-users', :lib => 'muck_users'
49
+ config.gem 'muck-solr', :lib => 'acts_as_solr'
50
+ # The following are optional but almost always used so you may as well pull them in.
51
+ config.gem 'muck-comments', :lib => 'muck_comments'
52
+ config.gem 'muck-activities', :lib => 'muck_activities'
53
+ config.gem 'muck-shares', :lib => 'muck_shares'
54
+
55
+
56
+
57
+ === Identity Feeds
58
+ Specific feeds can be attached to objects. For example, a user might produce a blog or a flickr photo stream. The identity feed system associated the resulting
59
+ data with the user so that recommendations can be improved.
60
+
30
61
  == Notes
31
62
  muck-raker uses muck-comments and muck-activities to add comments to entries in the 'visits' frame view. You can omit these gems if you don't desire comments.
32
63
  muck-raker also uses muck-shares and muck-activities to share entries with other users. Again you can omit these gems if you don't desire the share capability.
@@ -40,11 +71,15 @@ To install these gems:
40
71
  sudo gem install muck-activities
41
72
  sudo gem install muck-shares
42
73
 
74
+ If you enable comments you will need a comment model with 'acts_as_muck_raker_comment':
43
75
 
44
- == Example
45
-
76
+ class Comment < ActiveRecord::Base
77
+ acts_as_muck_comment
78
+ acts_as_muck_raker_comment
79
+ end
46
80
 
47
- == Development
81
+ === Frame css
82
+ There is an example css file for the framed page in frame.css.
48
83
 
49
84
  === Testing
50
85
  You will need to have mysql setup to run the migrations for the test database. Muck raker has a few customizations which require mysql.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.26
1
+ 0.1.27
@@ -51,7 +51,13 @@ class Muck::FeedsController < ApplicationController
51
51
  after_create_response(@feed.save)
52
52
  end
53
53
 
54
-
54
+ def edit
55
+ @feed = Feed.find(params[:id])
56
+ respond_to do |format|
57
+ format.html { render :template => 'feeds/edit', :layout => 'popup' }
58
+ end
59
+ end
60
+
55
61
  def update
56
62
  @feed = Feed.find(params[:id])
57
63
  after_update_response(@feed.update_attributes(params[:feed]))
@@ -124,5 +130,5 @@ class Muck::FeedsController < ApplicationController
124
130
  format.xml { head :ok }
125
131
  end
126
132
  end
127
-
133
+
128
134
  end
@@ -0,0 +1,154 @@
1
+ class Muck::IdentityFeedsController < ApplicationController
2
+
3
+ unloadable
4
+
5
+ before_filter :get_owner, :only => [:index, :new, :create]
6
+ before_filter :has_permission?, :only => [:index, :new, :create]
7
+
8
+ before_filter :get_identity_feed, :only => [:destroy, :update]
9
+ before_filter :has_identity_feed_permission?, :only => [:destroy, :update]
10
+
11
+ def index
12
+ @service_categories = ServiceCategory.sorted.find(:all, :include => [:identity_services])
13
+ @user_services = @parent.identity_feeds.find(:all, :include => [{:feed => :service}])
14
+ respond_to do |format|
15
+ format.html { render :template => 'identity_feeds/index' }
16
+ end
17
+ end
18
+
19
+ def new
20
+ @service = Service.find(params[:service_id])
21
+ @feed = Feed.new
22
+ respond_to do |format|
23
+ format.html { render :template => 'identity_feeds/new' }
24
+ format.pjs { render :text => get_new_html(@service, @parent, @feed) }
25
+ end
26
+ end
27
+
28
+ def create
29
+ @service = Service.find(params[:service_id])
30
+ @feed = Feed.new(:uri => params[:uri], :login => params[:username])
31
+ feeds = Feed.create_service_feeds(@service, params[:uri], params[:username], params[:password], current_user.id)
32
+ if feeds.blank?
33
+ success = false
34
+ if params[:username]
35
+ message = I18n.t('muck.raker.no_feeds_from_username')
36
+ else
37
+ message = I18n.t('muck.raker.no_feeds_at_uri')
38
+ end
39
+ else
40
+ success, messages = add_feeds_to_parent(@parent, feeds)
41
+ message = messages.join('<br />')
42
+ end
43
+ respond_to do |format|
44
+ format.html do
45
+ flash[:notice] = message if message
46
+ redirect_to polymorphic_url([@parent, :identity_feeds])
47
+ end
48
+ format.pjs do
49
+ flash[:notice] = message if message
50
+ render :template => 'identity_feeds/new', :layout => false
51
+ end
52
+ format.json do
53
+ render :json => {:parent => @parent, :service => @service, :feeds => feeds, :success => success, :message => message }.as_json
54
+ end
55
+ end
56
+ end
57
+
58
+ def edit
59
+ @identity_feed = IdentityFeed.find(params[:id])
60
+ respond_to do |format|
61
+ format.html { render :template => 'identity_feeds/edit' }
62
+ format.pjs { render :text => get_edit_html(@identity_feed) }
63
+ end
64
+ end
65
+
66
+ def update
67
+ end
68
+
69
+ def destroy
70
+ feed = @identity_feed.feed
71
+ @identity_feed.destroy
72
+ feed.delete_if_unused(current_user) # Delete the feed if there are no references to it
73
+ respond_to do |format|
74
+ format.html do
75
+ flash[:notice] = t("muck.raker.identity_feed_removed")
76
+ redirect_to polymorphic_url([@identity_feed.ownable, :identity_feeds])
77
+ end
78
+ format.js do
79
+ render(:update) do |page|
80
+ page << "jQuery('##{@identity_feed.dom_id}').fadeOut();"
81
+ end
82
+ end
83
+ format.json do
84
+ render :json => { :success => true,
85
+ :identity_feed => @identity_feed,
86
+ :message => t("muck.raker.identity_feed_removed") }
87
+ end
88
+ end
89
+ end
90
+
91
+ protected
92
+
93
+ def get_owner
94
+ setup_parent('service')
95
+ end
96
+
97
+ def get_identity_feed
98
+ @identity_feed = IdentityFeed.find(params[:id])
99
+ end
100
+
101
+ def has_identity_feed_permission?
102
+ if !@identity_feed.can_edit?(current_user)
103
+ message = I18n.t('muck.raker.cant_modify_identity_feed')
104
+ respond_to do |format|
105
+ format.html do
106
+ flash[:notice] = message
107
+ redirect_back_or_default current_user
108
+ end
109
+ format.js { render(:update){|page| page.alert message}}
110
+ end
111
+ end
112
+ end
113
+
114
+ def has_permission?
115
+ @parent.can_edit?(current_user)
116
+ end
117
+
118
+ def get_new_html(service, parent, feed)
119
+ render_as_html do
120
+ render_to_string(:partial=> 'identity_feeds/form', :locals => { :service => service, :parent => parent, :feed => feed })
121
+ end
122
+ end
123
+
124
+ def get_edit_html(identity_feed)
125
+ render_as_html do
126
+ render_to_string(:partial=> 'identity_feeds/form', :locals => { :service => identity_feed.feed.service, :parent => identity_feed.ownable, :feed => identity_feed.feed })
127
+ end
128
+ end
129
+
130
+ def add_feeds_to_parent(parent, feeds)
131
+ messages = []
132
+ success = false
133
+ feeds.each do |feed|
134
+ begin
135
+ parent.own_feeds << feed
136
+ success = true
137
+ if params[:username]
138
+ messages << I18n.t('muck.raker.successfully_added_username_feed', :service => feed.title || @service.name)
139
+ else
140
+ messages << I18n.t('muck.raker.successfully_added_uri_feed', :service => @service.name, :uri => feed.title || params[:uri])
141
+ end
142
+ rescue ActiveRecord::RecordInvalid => ex
143
+ if ex.to_s == 'Validation failed: Feed has already been taken'
144
+ if params[:username]
145
+ messages << I18n.t('muck.raker.already_added_username_feed', :service => feed.title || @service.name, :username => params[:username])
146
+ else
147
+ messages << I18n.t('muck.raker.already_added_uri_feed', :service => @service.name, :uri => feed.title || params[:uri])
148
+ end
149
+ end
150
+ end
151
+ end
152
+ [success, messages]
153
+ end
154
+ end
@@ -8,8 +8,14 @@ class Muck::VisitsController < ApplicationController
8
8
  @entry = Entry.find(params[:id])
9
9
  @page_title = @entry.title
10
10
  @resource_uri = @entry.resource_uri
11
- @comments = @entry.comments.by_newest if GlobalConfig.enable_raker_comments
12
11
  @share = Share.new(:title => @entry.title, :uri => @resource_uri, :entry_id => @entry.id) if GlobalConfig.enable_raker_shares
12
+
13
+ if GlobalConfig.enable_raker_comments
14
+ # Show the activities related to this entry
15
+ @activities = @entry.activities.oldest.only_public.find(:all, :include => ['comments'])
16
+ @comment_count = @activities.length + @activities.inject(0) {|n,activity| activity.comments.length + n }
17
+ end
18
+
13
19
  respond_to do |format|
14
20
  format.html { render :template => 'visits/show', :layout => 'frame' }
15
21
  format.pjs { render :template => 'visits/show', :layout => false }
@@ -0,0 +1,117 @@
1
+ module MuckRakerServicesHelper
2
+
3
+ # Render a summary of all services for the given parent. The parent should 'acts_as_muck_feed_owner'
4
+ def services_summary(parent)
5
+ identity_feeds = parent.identity_feeds.find(:all, :include => [{:feed => :service}])
6
+ render :partial => 'services/summary', :locals => { :identity_feeds => identity_feeds }
7
+ end
8
+
9
+ # Render a view with all services in categories.
10
+ # service_categories: Results from a query to service_categories. For performance try something like this:
11
+ # ServiceCategory.sorted.find(:all, :include => [:identity_services])
12
+ # title: Optional title. Default is 'Available Services' - from I18n.t('muck.raker.available_services')
13
+ # css: Optional css to be added to the div that surrounds the categories
14
+ def service_categories(service_categories, title = nil, css = '')
15
+ render :partial => 'identity_feeds/service_categories', :locals => { :service_categories => service_categories, :css => css, :title => title }
16
+ end
17
+
18
+ # Render a view with the user's registered services.
19
+ # identity_feeds: Results from a query to service_categories. For performance try something like this:
20
+ # @user.identity_feeds.find(:all, :include => [{:feed => :service}])
21
+ # title: Optional title. Default is 'My Services' - from I18n.t('muck.raker.my_services')
22
+ # css: Optional css to be added to the div that surrounds the categories
23
+ def services_for_user(identity_feeds, title = nil, css = '')
24
+ render :partial => 'identity_feeds/services_for_user', :locals => { :identity_feeds => identity_feeds, :css => css, :title => title, :edit => false }
25
+ end
26
+
27
+ # Render an edit view with the user's registered services.
28
+ # identity_feeds: Results from a query to service_categories. For performance try something like this:
29
+ # @user.identity_feeds.find(:all, :include => [{:feed => :service}])
30
+ # title: Optional title. Default is 'My Services' - from I18n.t('muck.raker.my_services')
31
+ # css: Optional css to be added to the div that surrounds the categories
32
+ def services_for_user_edit(identity_feeds, title = nil, css = '')
33
+ render :partial => 'identity_feeds/services_for_user', :locals => { :identity_feeds => identity_feeds, :css => css, :title => title, :edit => true }
34
+ end
35
+
36
+ # Renders an icon for the given service
37
+ # Name is the name of the image file associated with the service
38
+ # Size can be one of 16, 24, 48 or 60.
39
+ def service_icon(name, size = 24)
40
+ %Q{<img src="/images/service_icons/#{size}/#{name}" />}
41
+ end
42
+
43
+ def service_image(name, size = 24)
44
+ %Q{/images/service_icons/#{size}/#{name}}
45
+ end
46
+
47
+ # Renders name and icon for the service
48
+ def service_title(service)
49
+ %Q{<div class="identity-service-title" #{service_icon_background(service)}>#{service_prompt(service)}</div>}
50
+ end
51
+
52
+ # By default renders Service username e.g. Flickr username
53
+ # If the service has a 'prompt' set it will look for a value in the localization
54
+ # files. For example, setting service.prompt to 'blog_url' will cause this method
55
+ # to look for a translation at muck.raker.blog_url and will pass the name of the service
56
+ # using 'service' so your translation might look like:
57
+ # muck.raker.blog_url: "Blog Url" or
58
+ # muck.raker.facebook_prompt: "{{service}} Feeds"
59
+ def service_prompt(service)
60
+ if @service.prompt.blank?
61
+ I18n.t('muck.raker.service_username', :service => @service.name)
62
+ else
63
+ I18n.t("muck.raker.#{@service.prompt}", :service => @service.name)
64
+ end
65
+ end
66
+
67
+ # Renders a link for a new user service with class 'lightbox' or optional css set on the link.
68
+ def service_lightbox(parent, service, link_css = 'lightbox', wrapper = 'li')
69
+ path = new_polymorphic_url([parent, :identity_feed], :service_id => service.to_param)
70
+ service_link(path, service, link_css, wrapper, nil, nil, "#{service.name.parameterize}-link")
71
+ end
72
+
73
+ # Renders a link for editing a user feed with class 'lightbox' or optional css set on the link.
74
+ def service_lightbox_edit(parent, identity_feed, link_css = 'lightbox', wrapper = nil)
75
+ path = edit_polymorphic_url([parent, identity_feed])
76
+ link_text = identity_feed.feed.title unless identity_feed.feed.title.blank?
77
+ service_link(path, identity_feed.feed.service, link_css, wrapper, link_text)
78
+ end
79
+
80
+ def service_external_link(identity_feed, link_css = nil, wrapper = nil)
81
+ path = identity_feed.feed.display_uri || identity_feed.feed.uri
82
+ link_text = identity_feed.feed.title unless identity_feed.feed.title.blank?
83
+ service_link(path, identity_feed.feed.service, link_css, wrapper, link_text, 'blank')
84
+ end
85
+
86
+ # Renders a delete button for an identity_feed
87
+ def service_delete(identity_feed, button_type = :button, button_text = t("muck.general.delete"))
88
+ render :partial => 'shared/delete', :locals => { :delete_object => identity_feed,
89
+ :button_type => button_type,
90
+ :button_text => button_text,
91
+ :form_class => 'identity-feed-delete',
92
+ :delete_path => identity_feed_path(identity_feed, :format => 'js') }
93
+ end
94
+
95
+ # Renders a service link optionally wrapping it in the specified element
96
+ def service_link(path, service, link_css, wrapper, link_text = nil, target = nil, id = nil)
97
+ link = %Q{<a #{'id=' + id if id} href="#{path}" #{service_icon_background(service)} #{'target=' + target if target} class="service-link #{link_css}">#{link_text || service.name}</a>}
98
+ if wrapper
99
+ content_tag wrapper, link, :class => 'identity-service'
100
+ else
101
+ link
102
+ end
103
+ end
104
+
105
+ def service_icon_background(service)
106
+ %Q{style="background: transparent url('#{service_image(service.icon, 24)}') no-repeat scroll left top;"}
107
+ end
108
+
109
+ def url_by_identity_feed(owner, identity_feed, service)
110
+ if identity_feed
111
+ polymorphic_url([owner, @identity_feed], :service_id => service.to_param)
112
+ else
113
+ polymorphic_url([owner, :identity_feeds], :service_id => service.to_param)
114
+ end
115
+ end
116
+
117
+ end
@@ -0,0 +1,17 @@
1
+ class Aggregation < ActiveRecord::Base
2
+
3
+ # ##########################################################
4
+ # # adds a feed to an aggregation and saves the feed
5
+ # def add_feed_to_aggregation(aggregation, feed)
6
+ # if aggregation.feeds.include?(feed)
7
+ # self.already_feeds.push(feed)
8
+ # else
9
+ # if feed.save # have to save here so that feed has an id. Without id can't associate with aggregation
10
+ # feed.aggregations << aggregation
11
+ # self.added_feeds.push(feed )
12
+ # end
13
+ # end
14
+ # feed.save
15
+ # end
16
+
17
+ end
@@ -0,0 +1,59 @@
1
+ require 'openssl'
2
+
3
+ class Amazon
4
+
5
+ # Do we have support for the SHA-256 Secure Hash Algorithm?
6
+ # Note that Module#constants returns Strings in Ruby 1.8 and Symbols in 1.9.
7
+ DIGEST_SUPPORT = OpenSSL::Digest.constants.include?('SHA256') || OpenSSL::Digest.constants.include?(:SHA256)
8
+
9
+ # Requests are authenticated using the SHA-256 Secure Hash Algorithm.
10
+ DIGEST = OpenSSL::Digest::Digest.new('sha256') if DIGEST_SUPPORT
11
+
12
+ ECS_TO_RSS_WISHLIST = "http://www.folksemantic.com/ecs_to_rss-wishlist.xslt"
13
+
14
+ AMAZON_SITES = {
15
+ :ca => 'http://ecs.amazonaws.ca/onca/xml',
16
+ :de => 'http://ecs.amazonaws.de/onca/xml',
17
+ :fr => 'http://ecs.amazonaws.fr/onca/xml',
18
+ :jp => 'http://ecs.amazonaws.jp/onca/xml',
19
+ :uk => 'http://ecs.amazonaws.co.uk/onca/xml',
20
+ :us => 'http://ecs.amazonaws.com/onca/xml'
21
+ }
22
+
23
+ AMAZON_XSLT_SITES = {
24
+ :ca => 'http://xml-ca.amznxslt.com/onca/xml',
25
+ :de => 'http://xml-de.amznxslt.com/onca/xml',
26
+ :fr => 'http://xml-fr.amznxslt.com/onca/xml',
27
+ :jp => 'http://xml-jp.amznxslt.com/onca/xml',
28
+ :uk => 'http://xml-uk.amznxslt.com/onca/xml',
29
+ :us => 'http://xml-us.amznxslt.com/onca/xml'
30
+ }
31
+
32
+ # Sign an amazon query
33
+ # Requires openssl and that GlobalConfig.amazon_secret_access_key be defined.
34
+ # Based on ruby-aaws and documentation here
35
+ # http://www.caliban.org/ruby/ruby-aws/
36
+ # http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?RequestAuthenticationArticle.html
37
+ # Parameters
38
+ # query: The query to be signed
39
+ def self.sign_query(uri, query, amazon_secret_access_key)
40
+ raise 'SHA-256 not available in this version of openssl. Cannot sign Amazon requests.' unless DIGEST_SUPPORT
41
+ query << "&Timestamp=#{Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')}"
42
+ new_query = query.split('&').collect{|param| "#{param.split('=')[0]}=#{url_encode(param.split('=')[1])}"}.sort.join('&')
43
+ to_sign = "GET\n%s\n%s\n%s" % [uri.host, uri.path, new_query]
44
+ hmac = OpenSSL::HMAC.digest(DIGEST, amazon_secret_access_key, to_sign)
45
+ base64_hmac = [hmac].pack('m').chomp
46
+ signature = url_encode(base64_hmac)
47
+ new_query << "&Signature=#{signature}"
48
+ end
49
+
50
+ # Encode a string, such that it is suitable for HTTP transmission.
51
+ def self.url_encode(string)
52
+ return '' if string.nil?
53
+ # Shamelessly plagiarised from Wakou Aoyama's cgi.rb, but then altered slightly to please AWS.
54
+ string.gsub( /([^a-zA-Z0-9_.~-]+)/ ) do
55
+ '%' + $1.unpack( 'H2' * $1.bytesize ).join( '%' ).upcase
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,83 @@
1
+ class AmazonRequest
2
+ include HTTParty
3
+ format :xml
4
+
5
+ # Initialize Amazon Request. Obtain valid Amazon credentials from your developer account
6
+ # Parameters:
7
+ # amazon_access_key_id: Valid Amazon access key
8
+ # amazon_secret_access_key: Valid Amazon secret access key
9
+ # amazon_associate_tag: Valid Amazon associates tag (optional)
10
+ # locale: Locale for the specific amazon site to use valid values are :ca, :de, :fr, :jp, :uk, :us (optional, default is us)
11
+ def initialize(amazon_access_key_id, amazon_secret_access_key, amazon_associate_tag = nil, locale = :us)
12
+ @amazon_access_key_id = amazon_access_key_id
13
+ @amazon_secret_access_key = amazon_secret_access_key
14
+ @amazon_associate_tag = amazon_associate_tag
15
+ @locale = locale
16
+ end
17
+
18
+ # Generate rss feeds for the give email
19
+ # Parameters:
20
+ # email: email for which to find feeds.
21
+ def get_amazon_feeds(email)
22
+ wishlists = get_customer_wishlists(email)
23
+ if !wishlists.blank?
24
+ wishlist_ids = wishlists.collect{|list| list['ListId']}
25
+ generate_wishlist_rss(wishlist_ids)
26
+ end
27
+ end
28
+
29
+ # Get matching id for the given email
30
+ # Parameters:
31
+ # email: customer's email.
32
+ def get_customer_id(email)
33
+ query = "Operation=CustomerContentSearch&Email=#{email}"
34
+ result = make_request(query)
35
+ if result['CustomerContentSearchResponse']['Customers']['TotalResults'].to_i > 0
36
+ result['CustomerContentSearchResponse']['Customers']['Customer'][0]
37
+ end
38
+ end
39
+
40
+ # Get information for the given customer id
41
+ def get_customer_information(customer_id)
42
+ query = "Operation=CustomerContentLookup&ResponseGroup=CustomerLists&CustomerId=#{customer_id}"
43
+ make_request(query)
44
+ end
45
+
46
+ # Get customer's wishlist ids
47
+ def get_customer_wishlists(email)
48
+ query = "Operation=ListSearch&ListType=WishList&Email=#{email}"
49
+ result = make_request(query)
50
+ result['ListSearchResponse']['Lists']['List']
51
+ end
52
+
53
+ def generate_wishlist_rss(wishlist_ids)
54
+ feeds = []
55
+ wishlist_ids.each do |wishlist_id|
56
+ query = "Operation=ListLookup&ListType=WishList&ListId=#{wishlist_id}&ResponseGroup=ItemAttributes,ListItems,ListInfo,Offers&Sort=DateAdded&Style=#{Amazon::ECS_TO_RSS_WISHLIST}"
57
+ feeds << make_xslt_request(query)
58
+ end
59
+ feeds
60
+ end
61
+
62
+ protected
63
+ def make_request(query)
64
+ add_required_params(query)
65
+ uri = Amazon::AMAZON_SITES[@locale]
66
+ signed_query = Amazon.sign_query(URI.parse(uri), query, @amazon_secret_access_key)
67
+ AmazonRequest.get(uri, :query => signed_query)
68
+ end
69
+
70
+ def make_xslt_request(query)
71
+ add_required_params(query)
72
+ uri = Amazon::AMAZON_XSLT_SITES[@locale]
73
+ signed_query = Amazon.sign_query(URI.parse(uri), query, @amazon_secret_access_key)
74
+ "#{uri}?#{signed_query}"
75
+ end
76
+
77
+ def add_required_params(query)
78
+ query << "&Service=AWSECommerceService"
79
+ query << "&AWSAccessKeyId=#{@amazon_access_key_id}"
80
+ query << "&AssociateTag=#{@amazon_associate_tag}" if @amazon_associate_tag
81
+ query << "&Version=2009-07-01"
82
+ end
83
+ end
data/app/models/click.rb CHANGED
@@ -9,14 +9,6 @@
9
9
  # requester :string(255)
10
10
  # user_agent :string(2083)
11
11
  #
12
- # Indexes
13
- #
14
- # index_clicks_on_recommendation_id (recommendation_id)
15
- # index_clicks_on_referrer (referrer)
16
- # index_clicks_on_requester (requester)
17
- # index_clicks_on_user_agent (user_agent)
18
- # index_clicks_on_when (when)
19
- #
20
12
 
21
13
  class Click < ActiveRecord::Base
22
14
  end
data/app/models/entry.rb CHANGED
@@ -42,7 +42,8 @@ class Entry < ActiveRecord::Base
42
42
 
43
43
  belongs_to :feed
44
44
  belongs_to :language
45
-
45
+ has_many :activities, :as => :attachable, :dependent => :destroy
46
+ has_many :attentions, :dependent => :destroy
46
47
  acts_as_commentable
47
48
  acts_as_taggable
48
49