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,33 @@
1
+ module GSGraph
2
+ module Searchable
3
+ def self.search(query, options = {})
4
+ klass = options.delete(:class) || Searchable
5
+ query_param = klass.search_query_param
6
+ collection = Collection.new(
7
+ Node.new(:search).send(:get, options.merge(query_param.to_sym => query))
8
+ )
9
+ yield collection if block_given?
10
+ Searchable::Result.new(query, klass, options.merge(:collection => collection))
11
+ end
12
+
13
+ def search(query, options = {})
14
+ type = self.to_s.underscore.split('/').last.gsub("_", "")
15
+ Searchable.search(query, options.merge(:type => type, :class => self)) do |collection|
16
+ collection.map! do |obj|
17
+ self.new(obj[:id], obj.merge(
18
+ :access_token => options[:access_token]
19
+ ))
20
+ end
21
+ end
22
+ end
23
+
24
+ # The majority of Graph API searches use 'q' but some, like AdKeywordSuggestion
25
+ # use an alternate search query param
26
+ def self.search_query_param
27
+ :q
28
+ end
29
+ delegate :search_query_param, :to => Searchable
30
+ end
31
+ end
32
+
33
+ require 'gs_graph/searchable/result'
@@ -0,0 +1,31 @@
1
+ module GSGraph
2
+ module Searchable
3
+ class Result < Collection
4
+ attr_accessor :query, :klass, :collection, :options
5
+
6
+ def initialize(query, klass, options = {})
7
+ @klass = klass
8
+ @query = query
9
+ @options = options
10
+ @collection = options.delete(:collection) || Collection.new
11
+ replace @collection
12
+ end
13
+
14
+ def next(_options_ = {})
15
+ if self.collection.next.present?
16
+ self.klass.search(self.query, self.options.merge(_options_).merge(self.collection.next))
17
+ else
18
+ self.class.new(self.query, self.klass)
19
+ end
20
+ end
21
+
22
+ def previous(_options_ = {})
23
+ if self.collection.previous.present?
24
+ self.klass.search(self.query, self.options.merge(_options_).merge(self.collection.previous))
25
+ else
26
+ self.class.new(self.query, self.klass)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module GSGraph
2
+ module Serialization
3
+ def to_hash(options = {})
4
+ raise "Define #{self.class}#to_hash!"
5
+ end
6
+
7
+ def as_json(options = {})
8
+ hash = self.to_hash options
9
+ hash.delete_if do |k, v|
10
+ v.blank?
11
+ end
12
+ hash
13
+ end
14
+
15
+ def to_json(options = {})
16
+ as_json.to_json options
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ module GSGraph
2
+ class Status < Node
3
+ include Connections::Comments
4
+ include Connections::Likes
5
+ include Connections::Likes::Likable
6
+
7
+ attr_accessor :from, :message, :updated_time
8
+
9
+ def initialize(identifier, attributes = {})
10
+ super
11
+ if (from = attributes[:from])
12
+ @from = if from[:category]
13
+ Page.new(from[:id], from)
14
+ else
15
+ User.new(from[:id], from)
16
+ end
17
+ end
18
+ @message = attributes[:message]
19
+ if (updated_time = attributes[:updated_time])
20
+ @updated_time = Time.parse(updated_time).utc
21
+ end
22
+
23
+ # cached connection
24
+ cache_collections attributes, :comments, :likes
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ module GSGraph
2
+ class Subscription
3
+ include Comparison
4
+
5
+ attr_accessor :object, :fields, :callback_url, :active
6
+
7
+ def initialize(attributes = {})
8
+ @object = attributes[:object]
9
+ @fields = attributes[:fields]
10
+ @callback_url = attributes[:callback_url]
11
+ @active = attributes[:active]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module GSGraph
2
+ class Tab < Node
3
+ attr_accessor :link, :application, :custom_name, :is_permanent, :position, :is_non_connection_landing_tab
4
+
5
+ def initialize(identifier, attributes = {})
6
+ super
7
+ @link = attributes[:link]
8
+ @application = if attributes[:application]
9
+ Application.new(attributes[:application][:id], attributes[:application])
10
+ end
11
+ @custom_name = attributes[:custom_name]
12
+ @is_permanent = attributes[:is_permanent]
13
+ @position = attributes[:position]
14
+ @is_non_connection_landing_tab = attributes[:is_non_connection_landing_tab]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ module GSGraph
2
+ class Tag
3
+ include Comparison
4
+ include Serialization
5
+
6
+ attr_accessor :user, :name, :x, :y, :created_time
7
+
8
+ def initialize(attributes = {})
9
+ @x = attributes[:x]
10
+ @y = attributes[:y]
11
+ if attributes[:created_time]
12
+ @created_time = Time.parse(attributes[:created_time]).utc
13
+ end
14
+ if attributes[:id].present?
15
+ @user = User.new(attributes[:id], attributes)
16
+ end
17
+ @name = attributes[:name]
18
+ end
19
+
20
+ def to_hash(options = {})
21
+ hash = {
22
+ :tag_text => self.name,
23
+ :x => self.x,
24
+ :y => self.y
25
+ }
26
+ hash[:tag_uid] = self.user.identifier if self.user
27
+ hash
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ module GSGraph
2
+ class TaggedObject < Node
3
+ attr_accessor :name, :offset, :length
4
+
5
+ def initialize(identifier, attributes = {})
6
+ super
7
+ [:name, :offset, :length].each do |key|
8
+ self.send("#{key}=", attributes[key])
9
+ end
10
+ end
11
+
12
+ def fetch_with_class_determination
13
+ attributes = fetch_without_class_determination.raw_attributes
14
+ klass = if attributes[:category]
15
+ Page
16
+ else
17
+ User
18
+ end
19
+ klass.new attributes[:id], attributes
20
+ end
21
+ alias_method_chain :fetch, :class_determination
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module GSGraph
2
+ class Targeting
3
+ include Comparison
4
+
5
+ attr_accessor :country, :city, :region, :locale
6
+
7
+ def initialize(attributes = {})
8
+ @country = attributes[:country]
9
+ @city = attributes[:city]
10
+ @region = attributes[:region]
11
+ @locale = attributes[:locale]
12
+ end
13
+
14
+ def to_hash(options = {})
15
+ {
16
+ :country => self.country,
17
+ :city => self.city,
18
+ :region => self.region,
19
+ :locale => self.locale
20
+ }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module GSGraph
2
+ class TestUser < User
3
+ attr_accessor :login_url, :password
4
+
5
+ def initialize(identifier, attributes = {})
6
+ super
7
+ @login_url = attributes[:login_url]
8
+ @password = attributes[:password]
9
+ end
10
+
11
+ def friend!(test_user)
12
+ post(
13
+ :access_token => self.access_token,
14
+ :connection => :friends,
15
+ :connection_scope => test_user.identifier
16
+ )
17
+ test_user.send :post, {
18
+ :access_token => test_user.access_token,
19
+ :connection => :friends,
20
+ :connection_scope => self.identifier
21
+ }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,71 @@
1
+ module GSGraph
2
+ class Thread < Node
3
+ include Connections::Messages
4
+ include Connections::Participants
5
+ include Connections::FormerParticipants
6
+ include Connections::Senders
7
+ include Connections::Tags
8
+
9
+ attr_accessor :snippet, :message_count, :unread_count, :updated_time
10
+
11
+ def initialize(identifier, attributes = {})
12
+ super
13
+ @snippet = attributes[:snippet]
14
+ @message_count = attributes[:message_count]
15
+ @unread_count = attributes[:unread_count].to_i
16
+ if attributes[:updated_time]
17
+ @updated_time = Time.parse(attributes[:updated_time]).utc
18
+ end
19
+
20
+ # cached connection
21
+ cache_collections attributes, :messages, :participants, :former_participants, :senders, :tags
22
+ end
23
+
24
+ # NOTE:
25
+ # Facebook is under transision of their message platform.
26
+ # This is current thread model in Graph API.
27
+ # In near future, this will be replaced with GSGraph::Thread model.
28
+ class BeforeTransition < Node
29
+ attr_accessor :subject, :message, :from, :to, :unread, :unseen, :updated_time
30
+
31
+ def initialize(identifier, attributes = {})
32
+ super
33
+ @subject = attributes[:subject]
34
+ @message = attributes[:message]
35
+ if (from = attributes[:from])
36
+ @from = if from[:start_time]
37
+ Event.new(from[:id], from)
38
+ else
39
+ User.new(from[:id], from)
40
+ end
41
+ end
42
+ @to = []
43
+ Collection.new(attributes[:to]).each do |to|
44
+ @to << User.new(to[:id], to)
45
+ end
46
+ if attributes[:updated_time]
47
+ @created_time = Time.parse(attributes[:updated_time]).utc
48
+ end
49
+ @unread = attributes[:unread] == 1
50
+ @unseen = attributes[:unseen] == 1
51
+
52
+ # cached connection
53
+ cache_collection attributes, :comments
54
+ end
55
+
56
+ # NOTE:
57
+ # This is a connection named "comments" but returns "messages" and different from normal "comments" connection.
58
+ # Therefore I put this connection here not under GSGraph::Connections.
59
+ def messages(options = {})
60
+ messages = self.connection(:comments, options)
61
+ messages.map! do |message|
62
+ Message.new(message[:id], message.merge(
63
+ :access_token => options[:access_token] || self.access_token
64
+ ))
65
+ end
66
+ end
67
+ # for pagination, a method which name is same as the connection name is needed.
68
+ alias_method :comments, :messages
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,153 @@
1
+ module GSGraph
2
+ class User < Node
3
+ include Connections::Accounts
4
+ include Connections::AdAccounts
5
+ include Connections::Activities
6
+ include Connections::Albums
7
+ include Connections::AppRequests
8
+ include Connections::Books
9
+ include Connections::Checkins
10
+ include Connections::Events
11
+ include Connections::Feed
12
+ include Connections::FriendLists
13
+ include Connections::FriendRequests
14
+ include Connections::Friends
15
+ include Connections::Family
16
+ include Connections::Games
17
+ include Connections::Groups
18
+ include Connections::Home
19
+ include Connections::Inbox
20
+ include Connections::Interests
21
+ include Connections::Likes
22
+ include Connections::Links
23
+ include Connections::Movies
24
+ include Connections::Music
25
+ include Connections::MutualFriends
26
+ include Connections::Notes
27
+ include Connections::Notifications
28
+ include Connections::Outbox
29
+ include Connections::Payments
30
+ include Connections::Permissions
31
+ include Connections::Photos
32
+ include Connections::Picture
33
+ include Connections::Pokes
34
+ include Connections::Posts
35
+ include Connections::Questions
36
+ include Connections::Scores
37
+ include Connections::Statuses
38
+ include Connections::SubscribedTo
39
+ include Connections::Subscribers
40
+ include Connections::Tagged
41
+ include Connections::Television
42
+ include Connections::Threads
43
+ include Connections::UserAchievements
44
+ include Connections::UserLikes
45
+ include Connections::Videos
46
+ include OpenGraph::UserContext
47
+ extend Searchable
48
+
49
+ @@attributes = {
50
+ :raw => [
51
+ :name, :first_name, :middle_name, :last_name, :gender,
52
+ :locale, :link, :username, :third_party_id, :timezone,
53
+ :verified, :about, :bio, :email, :political, :quotes,
54
+ :relationship_status, :relationship, :video_upload_limits,
55
+ :website, :mobile_phone, :installed, :rsvp_status,
56
+ :security_settings, :currency, :religion
57
+ ],
58
+ :custom => [
59
+ :languages, :like_count, :updated_time,
60
+ :birthday, :education, :hometown, :interested_in, :location,
61
+ :favorite_teams, :age_range, :significant_other,
62
+ :work, :devices, :sports, :favorite_athletes, :inspirational_people,
63
+ :address, :mobile_phone
64
+ ]
65
+ }
66
+
67
+ attr_accessor *@@attributes.values.flatten
68
+
69
+ def initialize(identifier, attributes = {})
70
+ super
71
+ @@attributes[:raw].each do |key|
72
+ self.send :"#{key}=", attributes[key]
73
+ end
74
+ @languages = []
75
+ if attributes[:languages]
76
+ attributes[:languages].each do |language|
77
+ @languages << Page.new(language[:id], language)
78
+ end
79
+ end
80
+ if attributes[:updated_time]
81
+ @updated_time = Time.parse(attributes[:updated_time]).utc
82
+ end
83
+ if attributes[:birthday]
84
+ month, day, year = attributes[:birthday].split('/').collect(&:to_i)
85
+ year ||= 0
86
+ @birthday = Date.new(year, month, day)
87
+ end
88
+ @education = []
89
+ if attributes[:education]
90
+ attributes[:education].each do |education|
91
+ @education << Education.new(education)
92
+ end
93
+ end
94
+ if (hometown = attributes[:hometown])
95
+ @hometown = Page.new(hometown[:id], hometown)
96
+ end
97
+ @interested_in = Array(attributes[:interested_in])
98
+ if (location = attributes[:location])
99
+ @location = Page.new(location[:id], location)
100
+ end
101
+ @favorite_teams = []
102
+ if attributes[:favorite_teams]
103
+ attributes[:favorite_teams].each do |favorite_team|
104
+ @favorite_teams << Page.new(favorite_team[:id], favorite_team)
105
+ end
106
+ end
107
+ if (significant_other = attributes[:significant_other])
108
+ @significant_other = User.new(significant_other[:id], significant_other)
109
+ end
110
+ @work = []
111
+ if attributes[:work]
112
+ attributes[:work].each do |work|
113
+ @work << Work.new(work)
114
+ end
115
+ end
116
+ @devices = []
117
+ if attributes[:devices]
118
+ attributes[:devices].each do |device|
119
+ @devices << Device.new(device)
120
+ end
121
+ end
122
+ @security_settings = attributes[:security_settings]
123
+ if attributes[:age_range]
124
+ @age_range = AgeRange.new(attributes[:age_range])
125
+ end
126
+ @sports = []
127
+ if (sports = attributes[:sports])
128
+ sports.each do |sport|
129
+ @sports << Page.new(sport[:id], sport)
130
+ end
131
+ end
132
+ @favorite_athletes = []
133
+ if attributes[:favorite_athletes]
134
+ attributes[:favorite_athletes].each do |favorite_athlete|
135
+ @favorite_athletes << Page.new(favorite_athlete[:id], favorite_athlete)
136
+ end
137
+ end
138
+ @inspirational_people = []
139
+ if attributes[:inspirational_people]
140
+ attributes[:inspirational_people].each do |inspirational_person|
141
+ @inspirational_people << Page.new(inspirational_person[:id], inspirational_person)
142
+ end
143
+ end
144
+ if attributes[:address]
145
+ @address = Venue.new(attributes[:address])
146
+ end
147
+ end
148
+
149
+ def self.me(access_token)
150
+ new('me', :access_token => access_token)
151
+ end
152
+ end
153
+ end