gs_graph 2.6.5

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 (348) hide show
  1. data/.document +5 -0
  2. data/.gitattributes +22 -0
  3. data/.gitignore +26 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +3 -0
  6. data/Gemfile +11 -0
  7. data/Gemfile.lock +95 -0
  8. data/LICENSE +20 -0
  9. data/README.rdoc +314 -0
  10. data/Rakefile +25 -0
  11. data/VERSION +1 -0
  12. data/assets/fb_graph.ai +1726 -6
  13. data/assets/fb_graph.png +0 -0
  14. data/gs_graph.gemspec +28 -0
  15. data/lib/gs_graph.rb +174 -0
  16. data/lib/gs_graph/achievement.rb +44 -0
  17. data/lib/gs_graph/action.rb +12 -0
  18. data/lib/gs_graph/ad_account.rb +51 -0
  19. data/lib/gs_graph/ad_campaign.rb +39 -0
  20. data/lib/gs_graph/ad_campaign_stat.rb +22 -0
  21. data/lib/gs_graph/ad_connection_object.rb +53 -0
  22. data/lib/gs_graph/ad_creative.rb +44 -0
  23. data/lib/gs_graph/ad_group.rb +51 -0
  24. data/lib/gs_graph/ad_group_stat.rb +22 -0
  25. data/lib/gs_graph/ad_keyword.rb +20 -0
  26. data/lib/gs_graph/ad_keyword_suggestion.rb +8 -0
  27. data/lib/gs_graph/ad_keyword_valid.rb +23 -0
  28. data/lib/gs_graph/ad_preview.rb +10 -0
  29. data/lib/gs_graph/ad_user.rb +58 -0
  30. data/lib/gs_graph/age_range.rb +12 -0
  31. data/lib/gs_graph/album.rb +59 -0
  32. data/lib/gs_graph/app_request.rb +24 -0
  33. data/lib/gs_graph/application.rb +119 -0
  34. data/lib/gs_graph/auth.rb +88 -0
  35. data/lib/gs_graph/auth/cookie.rb +20 -0
  36. data/lib/gs_graph/auth/signed_request.rb +44 -0
  37. data/lib/gs_graph/broad_targeting_category.rb +13 -0
  38. data/lib/gs_graph/checkin.rb +51 -0
  39. data/lib/gs_graph/collection.rb +55 -0
  40. data/lib/gs_graph/comment.rb +24 -0
  41. data/lib/gs_graph/comparison.rb +13 -0
  42. data/lib/gs_graph/connection.rb +37 -0
  43. data/lib/gs_graph/connections.rb +3 -0
  44. data/lib/gs_graph/connections/accounts.rb +23 -0
  45. data/lib/gs_graph/connections/achievements.rb +21 -0
  46. data/lib/gs_graph/connections/activities.rb +14 -0
  47. data/lib/gs_graph/connections/ad_accounts.rb +15 -0
  48. data/lib/gs_graph/connections/ad_campaign_stats.rb +22 -0
  49. data/lib/gs_graph/connections/ad_campaigns.rb +30 -0
  50. data/lib/gs_graph/connections/ad_connection_objects.rb +14 -0
  51. data/lib/gs_graph/connections/ad_creatives.rb +14 -0
  52. data/lib/gs_graph/connections/ad_group_stats.rb +22 -0
  53. data/lib/gs_graph/connections/ad_groups.rb +35 -0
  54. data/lib/gs_graph/connections/ad_previews.rb +10 -0
  55. data/lib/gs_graph/connections/admins.rb +10 -0
  56. data/lib/gs_graph/connections/albums.rb +21 -0
  57. data/lib/gs_graph/connections/app_notifications.rb +10 -0
  58. data/lib/gs_graph/connections/app_requests.rb +21 -0
  59. data/lib/gs_graph/connections/attending.rb +26 -0
  60. data/lib/gs_graph/connections/banned.rb +31 -0
  61. data/lib/gs_graph/connections/blocked.rb +36 -0
  62. data/lib/gs_graph/connections/books.rb +14 -0
  63. data/lib/gs_graph/connections/broad_targeting_categories.rb +14 -0
  64. data/lib/gs_graph/connections/checkins.rb +21 -0
  65. data/lib/gs_graph/connections/comments.rb +21 -0
  66. data/lib/gs_graph/connections/conversations.rb +14 -0
  67. data/lib/gs_graph/connections/declined.rb +25 -0
  68. data/lib/gs_graph/connections/docs.rb +14 -0
  69. data/lib/gs_graph/connections/events.rb +21 -0
  70. data/lib/gs_graph/connections/family.rb +14 -0
  71. data/lib/gs_graph/connections/feed.rb +21 -0
  72. data/lib/gs_graph/connections/former_participants.rb +14 -0
  73. data/lib/gs_graph/connections/friend_lists.rb +21 -0
  74. data/lib/gs_graph/connections/friend_requests.rb +12 -0
  75. data/lib/gs_graph/connections/friends.rb +14 -0
  76. data/lib/gs_graph/connections/games.rb +14 -0
  77. data/lib/gs_graph/connections/groups.rb +14 -0
  78. data/lib/gs_graph/connections/home.rb +14 -0
  79. data/lib/gs_graph/connections/inbox.rb +20 -0
  80. data/lib/gs_graph/connections/insights.rb +27 -0
  81. data/lib/gs_graph/connections/interests.rb +14 -0
  82. data/lib/gs_graph/connections/invited.rb +36 -0
  83. data/lib/gs_graph/connections/likes.rb +29 -0
  84. data/lib/gs_graph/connections/links.rb +21 -0
  85. data/lib/gs_graph/connections/maybe.rb +25 -0
  86. data/lib/gs_graph/connections/members.rb +22 -0
  87. data/lib/gs_graph/connections/messages.rb +22 -0
  88. data/lib/gs_graph/connections/milestones.rb +21 -0
  89. data/lib/gs_graph/connections/movies.rb +14 -0
  90. data/lib/gs_graph/connections/music.rb +14 -0
  91. data/lib/gs_graph/connections/mutual_friends.rb +26 -0
  92. data/lib/gs_graph/connections/noreply.rb +23 -0
  93. data/lib/gs_graph/connections/notes.rb +21 -0
  94. data/lib/gs_graph/connections/notifications.rb +18 -0
  95. data/lib/gs_graph/connections/offers.rb +22 -0
  96. data/lib/gs_graph/connections/outbox.rb +20 -0
  97. data/lib/gs_graph/connections/participants.rb +14 -0
  98. data/lib/gs_graph/connections/payments.rb +14 -0
  99. data/lib/gs_graph/connections/permissions.rb +16 -0
  100. data/lib/gs_graph/connections/photos.rb +21 -0
  101. data/lib/gs_graph/connections/picture.rb +39 -0
  102. data/lib/gs_graph/connections/pokes.rb +12 -0
  103. data/lib/gs_graph/connections/posts.rb +14 -0
  104. data/lib/gs_graph/connections/promotable_posts.rb +14 -0
  105. data/lib/gs_graph/connections/question_options.rb +14 -0
  106. data/lib/gs_graph/connections/questions.rb +22 -0
  107. data/lib/gs_graph/connections/reach_estimates.rb +12 -0
  108. data/lib/gs_graph/connections/roles.rb +36 -0
  109. data/lib/gs_graph/connections/scores.rb +22 -0
  110. data/lib/gs_graph/connections/senders.rb +14 -0
  111. data/lib/gs_graph/connections/settings.rb +65 -0
  112. data/lib/gs_graph/connections/statuses.rb +14 -0
  113. data/lib/gs_graph/connections/subscribed_to.rb +14 -0
  114. data/lib/gs_graph/connections/subscribers.rb +14 -0
  115. data/lib/gs_graph/connections/subscriptions.rb +53 -0
  116. data/lib/gs_graph/connections/tabs.rb +23 -0
  117. data/lib/gs_graph/connections/tagged.rb +14 -0
  118. data/lib/gs_graph/connections/tags.rb +23 -0
  119. data/lib/gs_graph/connections/television.rb +14 -0
  120. data/lib/gs_graph/connections/test_users.rb +19 -0
  121. data/lib/gs_graph/connections/threads.rb +14 -0
  122. data/lib/gs_graph/connections/user_achievements.rb +22 -0
  123. data/lib/gs_graph/connections/user_likes.rb +19 -0
  124. data/lib/gs_graph/connections/videos.rb +21 -0
  125. data/lib/gs_graph/connections/votes.rb +9 -0
  126. data/lib/gs_graph/cover.rb +10 -0
  127. data/lib/gs_graph/debugger.rb +28 -0
  128. data/lib/gs_graph/device.rb +11 -0
  129. data/lib/gs_graph/doc.rb +18 -0
  130. data/lib/gs_graph/domain.rb +32 -0
  131. data/lib/gs_graph/education.rb +32 -0
  132. data/lib/gs_graph/event.rb +52 -0
  133. data/lib/gs_graph/exception.rb +139 -0
  134. data/lib/gs_graph/friend_list.rb +13 -0
  135. data/lib/gs_graph/friend_request.rb +14 -0
  136. data/lib/gs_graph/group.rb +29 -0
  137. data/lib/gs_graph/image.rb +11 -0
  138. data/lib/gs_graph/insight.rb +13 -0
  139. data/lib/gs_graph/klass.rb +31 -0
  140. data/lib/gs_graph/link.rb +32 -0
  141. data/lib/gs_graph/location.rb +20 -0
  142. data/lib/gs_graph/message.rb +30 -0
  143. data/lib/gs_graph/milestone.rb +26 -0
  144. data/lib/gs_graph/node.rb +149 -0
  145. data/lib/gs_graph/note.rb +32 -0
  146. data/lib/gs_graph/notification.rb +32 -0
  147. data/lib/gs_graph/offer.rb +33 -0
  148. data/lib/gs_graph/open_graph.rb +3 -0
  149. data/lib/gs_graph/open_graph/action.rb +42 -0
  150. data/lib/gs_graph/open_graph/application_context.rb +10 -0
  151. data/lib/gs_graph/open_graph/object.rb +29 -0
  152. data/lib/gs_graph/open_graph/user_context.rb +21 -0
  153. data/lib/gs_graph/order.rb +55 -0
  154. data/lib/gs_graph/page.rb +57 -0
  155. data/lib/gs_graph/page/category_attributes.rb +117 -0
  156. data/lib/gs_graph/photo.rb +48 -0
  157. data/lib/gs_graph/picture.rb +14 -0
  158. data/lib/gs_graph/place.rb +7 -0
  159. data/lib/gs_graph/poke.rb +19 -0
  160. data/lib/gs_graph/post.rb +117 -0
  161. data/lib/gs_graph/privacy.rb +27 -0
  162. data/lib/gs_graph/project.rb +4 -0
  163. data/lib/gs_graph/promotable_post.rb +34 -0
  164. data/lib/gs_graph/property.rb +13 -0
  165. data/lib/gs_graph/query.rb +47 -0
  166. data/lib/gs_graph/question.rb +26 -0
  167. data/lib/gs_graph/question_option.rb +22 -0
  168. data/lib/gs_graph/reach_estimate.rb +22 -0
  169. data/lib/gs_graph/role.rb +13 -0
  170. data/lib/gs_graph/score.rb +16 -0
  171. data/lib/gs_graph/searchable.rb +33 -0
  172. data/lib/gs_graph/searchable/result.rb +31 -0
  173. data/lib/gs_graph/serialization.rb +19 -0
  174. data/lib/gs_graph/status.rb +27 -0
  175. data/lib/gs_graph/subscription.rb +14 -0
  176. data/lib/gs_graph/tab.rb +17 -0
  177. data/lib/gs_graph/tag.rb +30 -0
  178. data/lib/gs_graph/tagged_object.rb +23 -0
  179. data/lib/gs_graph/targeting.rb +23 -0
  180. data/lib/gs_graph/test_user.rb +24 -0
  181. data/lib/gs_graph/thread.rb +71 -0
  182. data/lib/gs_graph/user.rb +153 -0
  183. data/lib/gs_graph/user_achievement.rb +35 -0
  184. data/lib/gs_graph/venue.rb +14 -0
  185. data/lib/gs_graph/video.rb +41 -0
  186. data/lib/gs_graph/work.rb +48 -0
  187. data/lib/patch/rack/oauth2/access_token.rb +11 -0
  188. data/lib/patch/rack/oauth2/access_token/introspectable.rb +37 -0
  189. data/lib/patch/rack/oauth2/client.rb +13 -0
  190. data/lib/patch/rack/oauth2/grant/fb_exchange_token.rb +11 -0
  191. data/lib/patch/rack/oauth2/util.rb +14 -0
  192. data/spec/gs_graph/achievement_spec.rb +59 -0
  193. data/spec/gs_graph/ad_account_spec.rb +124 -0
  194. data/spec/gs_graph/ad_campaign_spec.rb +99 -0
  195. data/spec/gs_graph/ad_connection_object_spec.rb +71 -0
  196. data/spec/gs_graph/ad_creative_spec.rb +87 -0
  197. data/spec/gs_graph/ad_group_spec.rb +95 -0
  198. data/spec/gs_graph/ad_keyword_spec.rb +27 -0
  199. data/spec/gs_graph/ad_keyword_suggestion_spec.rb +17 -0
  200. data/spec/gs_graph/ad_keyword_valid_spec.rb +19 -0
  201. data/spec/gs_graph/ad_user_spec.rb +67 -0
  202. data/spec/gs_graph/album_spec.rb +93 -0
  203. data/spec/gs_graph/app_request_spec.rb +40 -0
  204. data/spec/gs_graph/application_spec.rb +251 -0
  205. data/spec/gs_graph/auth/cookie_spec.rb +29 -0
  206. data/spec/gs_graph/auth/signed_request_spec.rb +22 -0
  207. data/spec/gs_graph/auth_spec.rb +223 -0
  208. data/spec/gs_graph/broad_targeting_category_spec.rb +17 -0
  209. data/spec/gs_graph/checkin_spec.rb +42 -0
  210. data/spec/gs_graph/collection_spec.rb +50 -0
  211. data/spec/gs_graph/comment_spec.rb +31 -0
  212. data/spec/gs_graph/connection_spec.rb +42 -0
  213. data/spec/gs_graph/connections/accounts_spec.rb +78 -0
  214. data/spec/gs_graph/connections/achievements_spec.rb +27 -0
  215. data/spec/gs_graph/connections/activities_spec.rb +34 -0
  216. data/spec/gs_graph/connections/ad_accounts_spec.rb +28 -0
  217. data/spec/gs_graph/connections/ad_campaign_stat_spec.rb +35 -0
  218. data/spec/gs_graph/connections/ad_campaigns_spec.rb +36 -0
  219. data/spec/gs_graph/connections/ad_connection_objects_spec.rb +20 -0
  220. data/spec/gs_graph/connections/ad_creatives_spec.rb +29 -0
  221. data/spec/gs_graph/connections/ad_group_stat_spec.rb +54 -0
  222. data/spec/gs_graph/connections/ad_groups_spec.rb +92 -0
  223. data/spec/gs_graph/connections/ad_previews_spec.rb +18 -0
  224. data/spec/gs_graph/connections/admins_spec.rb +20 -0
  225. data/spec/gs_graph/connections/albums_spec.rb +63 -0
  226. data/spec/gs_graph/connections/app_notifications_spec.rb +23 -0
  227. data/spec/gs_graph/connections/app_requests_spec.rb +28 -0
  228. data/spec/gs_graph/connections/attending_spec.rb +47 -0
  229. data/spec/gs_graph/connections/banned_spec.rb +63 -0
  230. data/spec/gs_graph/connections/blocked_spec.rb +56 -0
  231. data/spec/gs_graph/connections/books_spec.rb +32 -0
  232. data/spec/gs_graph/connections/broad_targeting_categories_spec.rb +18 -0
  233. data/spec/gs_graph/connections/checkins_spec.rb +153 -0
  234. data/spec/gs_graph/connections/comments_spec.rb +75 -0
  235. data/spec/gs_graph/connections/conversations_spec.rb +19 -0
  236. data/spec/gs_graph/connections/declined_spec.rb +47 -0
  237. data/spec/gs_graph/connections/docs_spec.rb +14 -0
  238. data/spec/gs_graph/connections/events_spec.rb +52 -0
  239. data/spec/gs_graph/connections/family_spec.rb +32 -0
  240. data/spec/gs_graph/connections/feed_spec.rb +124 -0
  241. data/spec/gs_graph/connections/former_participants_spec.rb +44 -0
  242. data/spec/gs_graph/connections/friend_lists_spec.rb +26 -0
  243. data/spec/gs_graph/connections/friend_requests_spec.rb +16 -0
  244. data/spec/gs_graph/connections/friends_spec.rb +51 -0
  245. data/spec/gs_graph/connections/games_spec.rb +20 -0
  246. data/spec/gs_graph/connections/groups_spec.rb +31 -0
  247. data/spec/gs_graph/connections/home_spec.rb +62 -0
  248. data/spec/gs_graph/connections/inbox_spec.rb +16 -0
  249. data/spec/gs_graph/connections/insights_spec.rb +104 -0
  250. data/spec/gs_graph/connections/interests_spec.rb +12 -0
  251. data/spec/gs_graph/connections/invited_spec.rb +84 -0
  252. data/spec/gs_graph/connections/likes_spec.rb +127 -0
  253. data/spec/gs_graph/connections/links_spec.rb +31 -0
  254. data/spec/gs_graph/connections/maybe_spec.rb +47 -0
  255. data/spec/gs_graph/connections/members_spec.rb +57 -0
  256. data/spec/gs_graph/connections/messages_spec.rb +58 -0
  257. data/spec/gs_graph/connections/milestones_spec.rb +40 -0
  258. data/spec/gs_graph/connections/movies_spec.rb +12 -0
  259. data/spec/gs_graph/connections/music_spec.rb +12 -0
  260. data/spec/gs_graph/connections/mutual_friends_spec.rb +28 -0
  261. data/spec/gs_graph/connections/noreply_spec.rb +39 -0
  262. data/spec/gs_graph/connections/notes_spec.rb +31 -0
  263. data/spec/gs_graph/connections/notifications_spec.rb +30 -0
  264. data/spec/gs_graph/connections/outbox_spec.rb +16 -0
  265. data/spec/gs_graph/connections/participants_spec.rb +42 -0
  266. data/spec/gs_graph/connections/payments_spec.rb +17 -0
  267. data/spec/gs_graph/connections/permissions_spec.rb +44 -0
  268. data/spec/gs_graph/connections/photos_spec.rb +39 -0
  269. data/spec/gs_graph/connections/picture_spec.rb +92 -0
  270. data/spec/gs_graph/connections/pokes_spec.rb +16 -0
  271. data/spec/gs_graph/connections/posts_spec.rb +34 -0
  272. data/spec/gs_graph/connections/promotable_posts_spec.rb +24 -0
  273. data/spec/gs_graph/connections/question_options_spec.rb +14 -0
  274. data/spec/gs_graph/connections/questions_spec.rb +31 -0
  275. data/spec/gs_graph/connections/reach_estimates_spec.rb +18 -0
  276. data/spec/gs_graph/connections/roles_spec.rb +59 -0
  277. data/spec/gs_graph/connections/scores_spec.rb +40 -0
  278. data/spec/gs_graph/connections/senders_spec.rb +42 -0
  279. data/spec/gs_graph/connections/settings_spec.rb +62 -0
  280. data/spec/gs_graph/connections/statuses_spec.rb +72 -0
  281. data/spec/gs_graph/connections/subscribed_to_spec.rb +12 -0
  282. data/spec/gs_graph/connections/subscribers_spec.rb +12 -0
  283. data/spec/gs_graph/connections/subscriptions_spec.rb +47 -0
  284. data/spec/gs_graph/connections/tabs_spec.rb +47 -0
  285. data/spec/gs_graph/connections/tagged_spec.rb +42 -0
  286. data/spec/gs_graph/connections/tags_spec.rb +30 -0
  287. data/spec/gs_graph/connections/television_spec.rb +12 -0
  288. data/spec/gs_graph/connections/test_users_spec.rb +65 -0
  289. data/spec/gs_graph/connections/threads_spec.rb +12 -0
  290. data/spec/gs_graph/connections/user_achievements_spec.rb +37 -0
  291. data/spec/gs_graph/connections/user_likes_spec.rb +55 -0
  292. data/spec/gs_graph/connections/videos_spec.rb +27 -0
  293. data/spec/gs_graph/connections/votes_spec.rb +15 -0
  294. data/spec/gs_graph/debugger_spec.rb +33 -0
  295. data/spec/gs_graph/doc_spec.rb +27 -0
  296. data/spec/gs_graph/domain_spec.rb +23 -0
  297. data/spec/gs_graph/education_spec.rb +61 -0
  298. data/spec/gs_graph/event_spec.rb +70 -0
  299. data/spec/gs_graph/exception_spec.rb +310 -0
  300. data/spec/gs_graph/friend_list_spec.rb +22 -0
  301. data/spec/gs_graph/group_spec.rb +28 -0
  302. data/spec/gs_graph/image_spec.rb +16 -0
  303. data/spec/gs_graph/insight_spec.rb +18 -0
  304. data/spec/gs_graph/link_spec.rb +41 -0
  305. data/spec/gs_graph/location_spec.rb +28 -0
  306. data/spec/gs_graph/message_spec.rb +47 -0
  307. data/spec/gs_graph/node_spec.rb +91 -0
  308. data/spec/gs_graph/note_spec.rb +37 -0
  309. data/spec/gs_graph/notification_spec.rb +59 -0
  310. data/spec/gs_graph/offer_spec.rb +30 -0
  311. data/spec/gs_graph/open_graph/action_spec.rb +112 -0
  312. data/spec/gs_graph/open_graph/application_context_spec.rb +28 -0
  313. data/spec/gs_graph/open_graph/object_spec.rb +76 -0
  314. data/spec/gs_graph/open_graph/user_context_spec.rb +33 -0
  315. data/spec/gs_graph/order_spec.rb +66 -0
  316. data/spec/gs_graph/page/local_business_spec.rb +88 -0
  317. data/spec/gs_graph/page/movie_spec.rb +25 -0
  318. data/spec/gs_graph/page/music_spec.rb +25 -0
  319. data/spec/gs_graph/page/person_spec.rb +23 -0
  320. data/spec/gs_graph/page/product_spec.rb +36 -0
  321. data/spec/gs_graph/page_spec.rb +81 -0
  322. data/spec/gs_graph/photo_spec.rb +85 -0
  323. data/spec/gs_graph/place_spec.rb +8 -0
  324. data/spec/gs_graph/post_spec.rb +238 -0
  325. data/spec/gs_graph/privacy_spec.rb +33 -0
  326. data/spec/gs_graph/project_spec.rb +46 -0
  327. data/spec/gs_graph/promotable_post_spec.rb +57 -0
  328. data/spec/gs_graph/qeustion_option_spec.rb +35 -0
  329. data/spec/gs_graph/query_spec.rb +73 -0
  330. data/spec/gs_graph/question_spec.rb +73 -0
  331. data/spec/gs_graph/reach_estimate_spec.rb +48 -0
  332. data/spec/gs_graph/searchable_spec.rb +47 -0
  333. data/spec/gs_graph/seriarization_spec.rb +29 -0
  334. data/spec/gs_graph/status_spec.rb +31 -0
  335. data/spec/gs_graph/subscription_spec.rb +5 -0
  336. data/spec/gs_graph/tag_spec.rb +34 -0
  337. data/spec/gs_graph/tagged_object_spec.rb +45 -0
  338. data/spec/gs_graph/targeting_spec.rb +34 -0
  339. data/spec/gs_graph/test_user_spec.rb +50 -0
  340. data/spec/gs_graph/thread_spec.rb +86 -0
  341. data/spec/gs_graph/user_achievement_spec.rb +53 -0
  342. data/spec/gs_graph/user_spec.rb +185 -0
  343. data/spec/gs_graph/venue_spec.rb +23 -0
  344. data/spec/gs_graph/video_spec.rb +31 -0
  345. data/spec/gs_graph/work_spec.rb +101 -0
  346. data/spec/gs_graph_spec.rb +57 -0
  347. data/spec/spec_helper.rb +9 -0
  348. metadata +538 -0
@@ -0,0 +1,48 @@
1
+ module GSGraph
2
+ class Photo < Node
3
+ include Connections::Comments
4
+ include Connections::Likes
5
+ include Connections::Likes::Likable
6
+ include Connections::Picture
7
+ include Connections::Tags
8
+ include Connections::Tags::Taggable
9
+
10
+ attr_accessor :from, :name, :icon, :source, :height, :width, :images, :link, :created_time, :updated_time, :position
11
+
12
+ def initialize(identifier, attributes = {})
13
+ super
14
+ if (from = attributes[:from])
15
+ @from = if from[:category]
16
+ Page.new(from[:id], from)
17
+ else
18
+ User.new(from[:id], from)
19
+ end
20
+ end
21
+ # NOTE:
22
+ # for some reason, facebook uses different parameter names.
23
+ # "name" in GET & "message" in POST
24
+ @name = attributes[:name] || attributes[:message]
25
+ @icon = attributes[:icon]
26
+ @source = attributes[:source]
27
+ @height = attributes[:height]
28
+ @width = attributes[:width]
29
+ @link = attributes[:link]
30
+ @position = attributes[:position]
31
+ @images = []
32
+ if attributes[:images]
33
+ attributes[:images].each do |image|
34
+ @images << Image.new(image)
35
+ end
36
+ end
37
+ if attributes[:created_time]
38
+ @created_time = Time.parse(attributes[:created_time]).utc
39
+ end
40
+ if attributes[:updated_time]
41
+ @updated_time = Time.parse(attributes[:updated_time]).utc
42
+ end
43
+
44
+ # cached connection
45
+ cache_collections attributes, :comments, :likes, :tags
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,14 @@
1
+ module GSGraph
2
+ class Picture
3
+ include Comparison
4
+
5
+ @@attributes = [:is_silhouette, :url, :height, :width]
6
+ attr_accessor *@@attributes
7
+
8
+ def initialize(attributes = {})
9
+ @@attributes.each do |key|
10
+ self.send :"#{key}=", attributes[key]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module GSGraph
2
+ class Place < Page
3
+ def to_json(options = {})
4
+ self.identifier
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module GSGraph
2
+ class Poke
3
+ include Comparison
4
+
5
+ attr_accessor :from, :to, :created_time
6
+
7
+ def initialize(attributes = {})
8
+ if from = attributes[:from]
9
+ @from = User.new from[:id], from
10
+ end
11
+ if to = attributes[:to]
12
+ @to = User.new to[:id], to
13
+ end
14
+ if attributes[:created_time]
15
+ @created_time = Time.parse attributes[:created_time]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,117 @@
1
+ module GSGraph
2
+ class Post < Node
3
+ include Connections::Comments
4
+ include Connections::Insights
5
+ include Connections::Likes
6
+ include Connections::Likes::Likable
7
+ extend Searchable
8
+
9
+ attr_accessor :from, :to, :with_tags, :message, :message_tags, :picture, :link, :name, :caption, :description, :source, :properties, :icon, :actions, :privacy, :type, :graph_object_id, :application, :targeting, :created_time, :updated_time, :story, :story_tags, :place
10
+
11
+ def initialize(identifier, attributes = {})
12
+ super
13
+ if (from = attributes[:from])
14
+ @from = if from[:category]
15
+ Page.new(from[:id], from)
16
+ else
17
+ User.new(from[:id], from)
18
+ end
19
+ end
20
+ @to = []
21
+ if attributes[:to]
22
+ Collection.new(attributes[:to]).each do |to|
23
+ @to << if to[:category]
24
+ Page.new(to[:id], to)
25
+ elsif to[:start_time]
26
+ Event.new(to[:id], to)
27
+ elsif to[:version]
28
+ Group.new(to[:id], to)
29
+ else
30
+ User.new(to[:id], to)
31
+ end
32
+ end
33
+ end
34
+ @with_tags = []
35
+ if attributes[:with_tags]
36
+ Collection.new(attributes[:with_tags]).each do |tagged|
37
+ @with_tags << User.new(tagged[:id], tagged)
38
+ end
39
+ end
40
+ @message = attributes[:message]
41
+ @message_tags = []
42
+ if (message_tags = attributes[:message_tags])
43
+ message_tags.each do |index, message_tag|
44
+ message_tag.each do |_message_tag_|
45
+ @message_tags << TaggedObject.new(_message_tag_[:id], _message_tag_)
46
+ end
47
+ end
48
+ end
49
+ @picture = attributes[:picture]
50
+ @link = attributes[:link]
51
+ @name = attributes[:name]
52
+ @caption = attributes[:caption]
53
+ @description = attributes[:description]
54
+ @source = attributes[:source]
55
+ @properties = []
56
+ if attributes[:properties]
57
+ attributes[:properties].each do |property|
58
+ @properties << Property.new(property)
59
+ end
60
+ end
61
+ @icon = attributes[:icon]
62
+ @actions = []
63
+ if attributes[:actions]
64
+ attributes[:actions].each do |action|
65
+ @actions << Action.new(action)
66
+ end
67
+ end
68
+ if attributes[:privacy]
69
+ @privacy = if attributes[:privacy].is_a?(Privacy)
70
+ attributes[:privacy]
71
+ else
72
+ Privacy.new(attributes[:privacy])
73
+ end
74
+ end
75
+ @type = attributes[:type]
76
+ @graph_object_id = attributes[:object_id]
77
+ if attributes[:application]
78
+ @application = Application.new(attributes[:application][:id], attributes[:application])
79
+ end
80
+ if attributes[:targeting]
81
+ @targeting = if attributes[:targeting].is_a?(Targeting)
82
+ attributes[:targeting]
83
+ else
84
+ Targeting.new(attributes[:targeting])
85
+ end
86
+ end
87
+ if attributes[:created_time]
88
+ @created_time = Time.parse(attributes[:created_time]).utc
89
+ end
90
+ if attributes[:updated_time]
91
+ @updated_time = Time.parse(attributes[:updated_time]).utc
92
+ end
93
+ @story = attributes[:story]
94
+ @story_tags = []
95
+ if story_tags = attributes[:story_tags]
96
+ story_tags.each do |index, story_tag|
97
+ story_tag.each do |_story_tag_|
98
+ @story_tags << TaggedObject.new(_story_tag_[:id], _story_tag_)
99
+ end
100
+ end
101
+ end
102
+ if (place = attributes[:place])
103
+ @place = case place
104
+ when Place
105
+ place
106
+ when String, Integer
107
+ Place.new(place)
108
+ when Hash
109
+ Place.new(place[:id], place)
110
+ end
111
+ end
112
+
113
+ # cached connection
114
+ cache_collections attributes, :comments, :likes
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,27 @@
1
+ module GSGraph
2
+ class Privacy
3
+ include Comparison
4
+ include Serialization
5
+
6
+ attr_accessor :value, :friends, :networks, :allow, :deny
7
+
8
+ def initialize(attributes = {})
9
+ @value = attributes[:value]
10
+ @description = attributes[:description]
11
+ @friends = attributes[:friends]
12
+ @networks = attributes[:networks]
13
+ @allow = attributes[:allow]
14
+ @deny = attributes[:deny]
15
+ end
16
+
17
+ def to_hash(options = {})
18
+ {
19
+ :value => self.value,
20
+ :friends => self.friends,
21
+ :networks => self.networks,
22
+ :allow => self.allow,
23
+ :deny => self.deny
24
+ }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ module GSGraph
2
+ class Project < Klass
3
+ end
4
+ end
@@ -0,0 +1,34 @@
1
+ module GSGraph
2
+ class PromotablePost < Post
3
+ attr_accessor :is_published, :scheduled_publish_time
4
+
5
+ def initialize(identifier, attributes = {})
6
+ super
7
+ @is_published = attributes[:is_published]
8
+ @scheduled_publish_time = if attributes[:scheduled_publish_time]
9
+ Time.at attributes[:scheduled_publish_time]
10
+ end
11
+ end
12
+
13
+ def publishable?
14
+ !@is_published
15
+ end
16
+ alias_method :schedulable?, :publishable?
17
+
18
+ def scheduled?
19
+ !!scheduled_publish_time
20
+ end
21
+
22
+ def publish!(options = {})
23
+ update options.merge(:is_published => true)
24
+ end
25
+
26
+ def schedule!(time, options = {})
27
+ update options.merge(:scheduled_publish_time => time.to_i)
28
+ end
29
+
30
+ def unschedule!(options = {})
31
+ schedule! nil, options
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ module GSGraph
2
+ class Property
3
+ include Comparison
4
+
5
+ attr_accessor :name, :text, :href
6
+
7
+ def initialize(attributes = {})
8
+ @name = attributes[:name]
9
+ @text = attributes[:text]
10
+ @href = attributes[:href]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,47 @@
1
+ module GSGraph
2
+ class Query < Node
3
+ attr_accessor :query
4
+
5
+ def initialize(query, access_token = nil)
6
+ super 'fql', :access_token => access_token
7
+ @query = query
8
+ end
9
+
10
+ def fetch(access_token = nil)
11
+ handle_response do
12
+ http_client.get endpoint, :query => build_params(access_token)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def build_params(access_token)
19
+ _query_ = if query.is_a?(Hash)
20
+ query.to_json
21
+ else
22
+ query
23
+ end
24
+ super(
25
+ :q => _query_,
26
+ :access_token => access_token || self.access_token
27
+ )
28
+ end
29
+
30
+ def handle_response
31
+ response = super do
32
+ yield
33
+ end
34
+ collection = Collection.new response
35
+ if self.query.is_a?(Hash)
36
+ collection.inject({}) do |results, result|
37
+ results.merge(
38
+ result['name'] => result['fql_result_set']
39
+ )
40
+ end.with_indifferent_access
41
+ else
42
+ collection
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,26 @@
1
+ module GSGraph
2
+ class Question < Node
3
+ include Connections::QuestionOptions
4
+
5
+ attr_accessor :from, :question, :created_time, :updated_time
6
+
7
+ def initialize(identifier, attributes = {})
8
+ super
9
+ @from = if attributes[:from]
10
+ User.new(attributes[:from][:id], attributes[:from])
11
+ end
12
+ @question = attributes[:question]
13
+ @created_time = if attributes[:created_time]
14
+ Time.parse(attributes[:created_time]).utc
15
+ end
16
+ @updated_time = if attributes[:updated_time]
17
+ Time.parse(attributes[:updated_time]).utc
18
+ end
19
+
20
+ # cached connection
21
+ if attributes[:options]
22
+ cache_collection attributes, :options
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module GSGraph
2
+ class QuestionOption < Node
3
+ include Connections::Votes
4
+
5
+ attr_accessor :from, :name, :vote_count, :object, :created_time
6
+
7
+ def initialize(identifier, attributes = {})
8
+ super
9
+ @from = if attributes[:from]
10
+ User.new(attributes[:from][:id], attributes[:from])
11
+ end
12
+ @name = attributes[:name]
13
+ @vote_count = attributes[:votes]
14
+ @object = if attributes[:object]
15
+ Page.new(attributes[:object][:id], attributes[:object])
16
+ end
17
+ @created_time = if attributes[:created_time]
18
+ Time.parse(attributes[:created_time]).utc
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module GSGraph
2
+ class ReachEstimate < Node
3
+
4
+ attr_accessor :users, :cpc_max, :cpc_median, :cpc_min, :cpm_max, :cpm_median, :cpm_min
5
+
6
+ def initialize(attributes = {})
7
+ super
8
+
9
+ # everything in a data node when getting reach estimate through an AdGroup
10
+ attributes = attributes[:data] if attributes[:data]
11
+
12
+ %w(users).each do |field|
13
+ send("#{field}=", attributes[field.to_sym])
14
+ end
15
+
16
+ %w(cpc_min cpc_median cpc_max cpm_min cpm_median cpm_max).each do |field|
17
+ send("#{field}=", attributes[:bid_estimations][0][field.to_sym])
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,13 @@
1
+ module GSGraph
2
+ class Role
3
+ include Comparison
4
+
5
+ attr_accessor :role, :user, :application
6
+
7
+ def initialize(attributes = {})
8
+ @role = attributes[:role]
9
+ @user = User.new attributes[:user]
10
+ @application = Application.new attributes[:app_id]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module GSGraph
2
+ class Score < Node
3
+ attr_accessor :user, :score, :application
4
+
5
+ def initialize(identifier, attributes = {})
6
+ super
7
+ if user = attributes[:user]
8
+ @user = User.new(user[:id], user)
9
+ end
10
+ if app = attributes[:application]
11
+ @application = Application.new(app[:id], app)
12
+ end
13
+ @score = attributes[:score]
14
+ end
15
+ end
16
+ end