fb_graph 2.5.9 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (230) hide show
  1. data/Gemfile +4 -0
  2. data/Gemfile.lock +12 -7
  3. data/VERSION +1 -1
  4. data/fb_graph.gemspec +2 -2
  5. data/lib/fb_graph/auth/signed_request.rb +1 -1
  6. data/lib/fb_graph/connections/offers.rb +22 -0
  7. data/lib/fb_graph/exception.rb +1 -1
  8. data/lib/fb_graph/node.rb +2 -2
  9. data/lib/fb_graph/offer.rb +33 -0
  10. data/lib/fb_graph/page.rb +8 -1
  11. data/lib/fb_graph.rb +2 -1
  12. data/spec/fb_graph/offer_spec.rb +30 -0
  13. data/spec/fb_graph/open_graph/action_spec.rb +1 -1
  14. data/spec/fb_graph/open_graph/object_spec.rb +1 -1
  15. data/spec/fb_graph/tagged_object_spec.rb +1 -1
  16. data/spec/fb_graph/targeting_spec.rb +1 -1
  17. data/spec/spec_helper.rb +3 -1
  18. metadata +16 -430
  19. data/spec/helpers/webmock_helper.rb +0 -74
  20. data/spec/mock_json/ad_accounts/ad_campaign_stats/test_ad_campaign_stats.json +0 -42
  21. data/spec/mock_json/ad_accounts/ad_campaigns/post_with_redownload.json +0 -19
  22. data/spec/mock_json/ad_accounts/ad_campaigns/post_with_valid_access_token.json +0 -3
  23. data/spec/mock_json/ad_accounts/ad_connection_objects/test_connection_objects.json +0 -34
  24. data/spec/mock_json/ad_accounts/ad_group_stats/test_ad_group_stats.json +0 -62
  25. data/spec/mock_json/ad_accounts/ad_groups/post_with_redownload.json +0 -51
  26. data/spec/mock_json/ad_accounts/ad_groups/post_with_valid_access_token.json +0 -1
  27. data/spec/mock_json/ad_accounts/broad_targeting_categories/test_bct.json +0 -19
  28. data/spec/mock_json/ad_accounts/previews/test_ad_previews.json +0 -7
  29. data/spec/mock_json/ad_accounts/reach_estimates/test_reach_estimates.json +0 -31
  30. data/spec/mock_json/ad_accounts/test_ad_account.json +0 -37
  31. data/spec/mock_json/ad_campaigns/ad_groups/22334455_ad_groups.json +0 -67
  32. data/spec/mock_json/ad_campaigns/test_ad_campaign.json +0 -11
  33. data/spec/mock_json/ad_campaigns/test_ad_campaign_update_with_redownload.json +0 -19
  34. data/spec/mock_json/ad_creatives/test_ad_creative.json +0 -16
  35. data/spec/mock_json/ad_groups/ad_creatives/22334455_ad_creatives.json +0 -18
  36. data/spec/mock_json/ad_groups/test_ad_group.json +0 -14
  37. data/spec/mock_json/ad_groups/test_ad_group_update_with_redownload.json +0 -51
  38. data/spec/mock_json/ad_keyword_suggestions/buffy_suggestions.json +0 -40
  39. data/spec/mock_json/ad_keyword_valids/tige_search.json +0 -14
  40. data/spec/mock_json/ad_keywords/buffy_search.json +0 -42
  41. data/spec/mock_json/albums/photos/matake_private.json +0 -97
  42. data/spec/mock_json/albums/photos/post_with_valid_access_token.json +0 -1
  43. data/spec/mock_json/albums/picture/success.json +0 -5
  44. data/spec/mock_json/app_token_response.json +0 -1
  45. data/spec/mock_json/applications/accounts/private.json +0 -9
  46. data/spec/mock_json/applications/achievements/sample.json +0 -24
  47. data/spec/mock_json/applications/banned/banned_user.json +0 -9
  48. data/spec/mock_json/applications/banned/list.json +0 -13
  49. data/spec/mock_json/applications/fbgraphsample.json +0 -13
  50. data/spec/mock_json/applications/payments/sample.json +0 -25
  51. data/spec/mock_json/applications/roles/list.json +0 -1
  52. data/spec/mock_json/applications/subscriptions/fb_graph_private.json +0 -12
  53. data/spec/mock_json/applications/test_users/created.json +0 -5
  54. data/spec/mock_json/applications/test_users/private.json +0 -14
  55. data/spec/mock_json/blank.json +0 -0
  56. data/spec/mock_json/checkins/search_private.json +0 -54
  57. data/spec/mock_json/checkins/search_public.json +0 -6
  58. data/spec/mock_json/domains/search_public.json +0 -10
  59. data/spec/mock_json/empty.json +0 -1
  60. data/spec/mock_json/events/attending/post_with_valid_access_token.json +0 -1
  61. data/spec/mock_json/events/attending/smartday_private.json +0 -44
  62. data/spec/mock_json/events/declined/post_with_valid_access_token.json +0 -1
  63. data/spec/mock_json/events/declined/smartday_private.json +0 -720
  64. data/spec/mock_json/events/invited/attending.json +0 -7
  65. data/spec/mock_json/events/invited/declined.json +0 -7
  66. data/spec/mock_json/events/invited/not_replied.json +0 -7
  67. data/spec/mock_json/events/invited/smartday_private.json +0 -7092
  68. data/spec/mock_json/events/invited/unsure.json +0 -7
  69. data/spec/mock_json/events/maybe/post_with_valid_access_token.json +0 -1
  70. data/spec/mock_json/events/maybe/smartday_private.json +0 -956
  71. data/spec/mock_json/events/noreply/smartday_private.json +0 -896
  72. data/spec/mock_json/events/with_venue_as_page.json +0 -17
  73. data/spec/mock_json/friend_lists/members/sample.json +0 -82
  74. data/spec/mock_json/groups/docs/private.json +0 -31
  75. data/spec/mock_json/groups/members/emacs_private.json +0 -1996
  76. data/spec/mock_json/open_graph/created.json +0 -1
  77. data/spec/mock_json/open_graph/custom_actions.json +0 -62
  78. data/spec/mock_json/open_graph/play_actions.json +0 -89
  79. data/spec/mock_json/pages/admins/blank.json +0 -3
  80. data/spec/mock_json/pages/admins/sample.json +0 -8
  81. data/spec/mock_json/pages/blocked/create.json +0 -1
  82. data/spec/mock_json/pages/blocked/index.json +0 -10
  83. data/spec/mock_json/pages/blocked/show_blocked.json +0 -6
  84. data/spec/mock_json/pages/blocked/show_non_blocked.json +0 -1
  85. data/spec/mock_json/pages/categories/local_business.json +0 -56
  86. data/spec/mock_json/pages/categories/local_business_fixnum.json +0 -56
  87. data/spec/mock_json/pages/categories/movie.json +0 -15
  88. data/spec/mock_json/pages/categories/music.json +0 -16
  89. data/spec/mock_json/pages/categories/person.json +0 -12
  90. data/spec/mock_json/pages/categories/product.json +0 -15
  91. data/spec/mock_json/pages/checkins/gowalla_private.json +0 -113
  92. data/spec/mock_json/pages/checkins/gowalla_public.json +0 -6
  93. data/spec/mock_json/pages/conversations/list.json +0 -83
  94. data/spec/mock_json/pages/insights/FbGraph_private.json +0 -858
  95. data/spec/mock_json/pages/insights/FbGraph_public.json +0 -6
  96. data/spec/mock_json/pages/insights/page_like_adds/FbGraph_private.json +0 -28
  97. data/spec/mock_json/pages/insights/page_like_adds/day/FbGraph_private.json +0 -28
  98. data/spec/mock_json/pages/milestones/created.json +0 -1
  99. data/spec/mock_json/pages/milestones/list.json +0 -103
  100. data/spec/mock_json/pages/notes/post_with_valid_access_token.json +0 -1
  101. data/spec/mock_json/pages/platform_private.json +0 -13
  102. data/spec/mock_json/pages/platform_public.json +0 -18
  103. data/spec/mock_json/pages/promotable_posts/sample.json +0 -168
  104. data/spec/mock_json/pages/search_fb_graph.json +0 -9
  105. data/spec/mock_json/pages/search_google.json +0 -133
  106. data/spec/mock_json/pages/settings/all_enabled.json +0 -20
  107. data/spec/mock_json/pages/settings/sample.json +0 -20
  108. data/spec/mock_json/pages/statuses/platform_private.json +0 -258
  109. data/spec/mock_json/pages/statuses/platform_public.json +0 -6
  110. data/spec/mock_json/pages/tabs/blank.json +0 -3
  111. data/spec/mock_json/pages/tabs/fb_graph.json +0 -28
  112. data/spec/mock_json/pages/tabs/wall.json +0 -12
  113. data/spec/mock_json/pages/with_token.json +0 -1
  114. data/spec/mock_json/photos/sample.json +0 -270
  115. data/spec/mock_json/photos/with_tags.json +0 -46
  116. data/spec/mock_json/posts/comments/post_with_invalid_access_token.json +0 -1
  117. data/spec/mock_json/posts/comments/post_with_valid_access_token.json +0 -1
  118. data/spec/mock_json/posts/comments/post_without_access_token.json +0 -1
  119. data/spec/mock_json/posts/liked_by_page.json +0 -35
  120. data/spec/mock_json/posts/likes/post_with_invalid_access_token.json +0 -1
  121. data/spec/mock_json/posts/likes/post_with_valid_access_token.json +0 -1
  122. data/spec/mock_json/posts/likes/post_without_access_token.json +0 -1
  123. data/spec/mock_json/posts/no_comments.json +0 -30
  124. data/spec/mock_json/posts/platform_private.json +0 -96
  125. data/spec/mock_json/posts/platform_public.json +0 -60
  126. data/spec/mock_json/posts/to_application.json +0 -17
  127. data/spec/mock_json/posts/to_event.json +0 -20
  128. data/spec/mock_json/posts/to_group.json +0 -78
  129. data/spec/mock_json/posts/with_message.json +0 -40
  130. data/spec/mock_json/posts/with_place.json +0 -33
  131. data/spec/mock_json/posts/with_story.json +0 -28
  132. data/spec/mock_json/query/user/multi_query.json +0 -14
  133. data/spec/mock_json/query/user/with_invalid_token.json +0 -1
  134. data/spec/mock_json/query/user/with_valid_token.json +0 -1
  135. data/spec/mock_json/query/user/without_token.json +0 -1
  136. data/spec/mock_json/questions/options/matake_private.json +0 -52
  137. data/spec/mock_json/questions/options/votes/matake_private.json +0 -15
  138. data/spec/mock_json/statuses/with_likes.json +0 -17
  139. data/spec/mock_json/success.json +0 -1
  140. data/spec/mock_json/thread/former_participants/private.json +0 -14
  141. data/spec/mock_json/thread/messages/created.json +0 -1
  142. data/spec/mock_json/thread/messages/private.json +0 -43
  143. data/spec/mock_json/thread/participants/private.json +0 -14
  144. data/spec/mock_json/thread/senders/private.json +0 -14
  145. data/spec/mock_json/token_introspection/invalid.json +0 -15
  146. data/spec/mock_json/token_introspection/valid.json +0 -10
  147. data/spec/mock_json/token_response.json +0 -1
  148. data/spec/mock_json/token_with_expiry.json +0 -1
  149. data/spec/mock_json/true.json +0 -1
  150. data/spec/mock_json/users/accounts/matake_private.json +0 -157
  151. data/spec/mock_json/users/accounts/matake_private_with_manage_pages_permission.json +0 -16
  152. data/spec/mock_json/users/accounts/matake_public.json +0 -6
  153. data/spec/mock_json/users/activities/arjun_private.json +0 -24
  154. data/spec/mock_json/users/activities/arjun_public.json +0 -6
  155. data/spec/mock_json/users/ad_accounts/me_ad_accounts.json +0 -28
  156. data/spec/mock_json/users/albums/matake_private.json +0 -36
  157. data/spec/mock_json/users/albums/matake_public.json +0 -6
  158. data/spec/mock_json/users/albums/post_with_valid_access_token.json +0 -1
  159. data/spec/mock_json/users/app_requests/created.json +0 -1
  160. data/spec/mock_json/users/app_requests/me_private.json +0 -40
  161. data/spec/mock_json/users/arjun_private.json +0 -109
  162. data/spec/mock_json/users/arjun_public.json +0 -12
  163. data/spec/mock_json/users/books/matake_private.json +0 -9
  164. data/spec/mock_json/users/books/matake_public.json +0 -6
  165. data/spec/mock_json/users/checkins/mattt_private.json +0 -389
  166. data/spec/mock_json/users/checkins/mattt_public.json +0 -6
  167. data/spec/mock_json/users/checkins/posted.json +0 -1
  168. data/spec/mock_json/users/events/matake_private.json +0 -71
  169. data/spec/mock_json/users/events/matake_public.json +0 -6
  170. data/spec/mock_json/users/events/post_with_valid_access_token.json +0 -1
  171. data/spec/mock_json/users/family/family_without_access_token.json +0 -6
  172. data/spec/mock_json/users/family/me_public.json +0 -19
  173. data/spec/mock_json/users/feed/arjun_private.json +0 -508
  174. data/spec/mock_json/users/feed/arjun_public.json +0 -508
  175. data/spec/mock_json/users/feed/post_with_invalid_access_token.json +0 -1
  176. data/spec/mock_json/users/feed/post_with_valid_access_token.json +0 -1
  177. data/spec/mock_json/users/feed/post_without_access_token.json +0 -1
  178. data/spec/mock_json/users/friend_lists/created.json +0 -1
  179. data/spec/mock_json/users/friend_lists/matake.json +0 -20
  180. data/spec/mock_json/users/friend_requests/sample.json +0 -19
  181. data/spec/mock_json/users/friends/arjun_private.json +0 -6
  182. data/spec/mock_json/users/friends/arjun_public.json +0 -6
  183. data/spec/mock_json/users/friends/me_private.json +0 -524
  184. data/spec/mock_json/users/friends/me_public.json +0 -6
  185. data/spec/mock_json/users/games/matake_private.json +0 -10
  186. data/spec/mock_json/users/groups/matake_private.json +0 -48
  187. data/spec/mock_json/users/groups/matake_public.json +0 -6
  188. data/spec/mock_json/users/home/arjun_private.json +0 -6
  189. data/spec/mock_json/users/home/arjun_public.json +0 -6
  190. data/spec/mock_json/users/home/me_private.json +0 -438
  191. data/spec/mock_json/users/home/me_private_next.json +0 -357
  192. data/spec/mock_json/users/home/me_private_previous.json +0 -35
  193. data/spec/mock_json/users/home/me_public.json +0 -6
  194. data/spec/mock_json/users/inbox/before_transition.json +0 -37
  195. data/spec/mock_json/users/interests/matake_private.json +0 -14
  196. data/spec/mock_json/users/likes/arjun_private.json +0 -1394
  197. data/spec/mock_json/users/likes/arjun_public.json +0 -6
  198. data/spec/mock_json/users/likes/fb_graph.json +0 -1
  199. data/spec/mock_json/users/likes/poken.json +0 -1
  200. data/spec/mock_json/users/links/matake_private.json +0 -221
  201. data/spec/mock_json/users/links/post_with_valid_access_token.json +0 -1
  202. data/spec/mock_json/users/me_private.json +0 -233
  203. data/spec/mock_json/users/me_public.json +0 -6
  204. data/spec/mock_json/users/movies/matake_private.json +0 -9
  205. data/spec/mock_json/users/music/matake_private.json +0 -34
  206. data/spec/mock_json/users/mutual_friends/me_and_agektmr.json +0 -126
  207. data/spec/mock_json/users/notes/matake_private.json +0 -308
  208. data/spec/mock_json/users/notifications/all.json +0 -407
  209. data/spec/mock_json/users/outbox/me_private.json +0 -37
  210. data/spec/mock_json/users/permissions/me_private.json +0 -70
  211. data/spec/mock_json/users/picture/success.json +0 -6
  212. data/spec/mock_json/users/pokes/sample.json +0 -1
  213. data/spec/mock_json/users/posts/arjun_private.json +0 -373
  214. data/spec/mock_json/users/posts/arjun_public.json +0 -373
  215. data/spec/mock_json/users/questions/created.json +0 -1
  216. data/spec/mock_json/users/questions/sample.json +0 -465
  217. data/spec/mock_json/users/scores/sample.json +0 -14
  218. data/spec/mock_json/users/statuses/arjun_private.json +0 -233
  219. data/spec/mock_json/users/statuses/arjun_public.json +0 -6
  220. data/spec/mock_json/users/subscribed_to/sample.json +0 -11
  221. data/spec/mock_json/users/subscribers/sample.json +0 -15
  222. data/spec/mock_json/users/tagged/arjun_private.json +0 -303
  223. data/spec/mock_json/users/tagged/arjun_public.json +0 -303
  224. data/spec/mock_json/users/television/matake_private.json +0 -9
  225. data/spec/mock_json/users/threads/me_private.json +0 -91
  226. data/spec/mock_json/users/user_achievements/created.json +0 -1
  227. data/spec/mock_json/users/user_achievements/sample.json +0 -31
  228. data/spec/mock_json/users/videos/kirk_private.json +0 -41
  229. data/spec/mock_json/users/videos/posted.json +0 -1
  230. data/spec/mock_json/videos/private.json +0 -78
data/Gemfile CHANGED
@@ -4,4 +4,8 @@ platforms :jruby do
4
4
  gem 'jruby-openssl', '>= 0.7'
5
5
  end
6
6
 
7
+ group :test do
8
+ gem 'oj'
9
+ end
10
+
7
11
  gemspec
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fb_graph (2.5.8)
4
+ fb_graph (2.6.0)
5
5
  httpclient (>= 2.2.0.2)
6
- json
6
+ multi_json
7
7
  rack-oauth2 (>= 0.14.4)
8
8
  tzinfo
9
9
 
@@ -37,13 +37,17 @@ GEM
37
37
  crack (0.3.1)
38
38
  diff-lcs (1.1.3)
39
39
  erubis (2.7.0)
40
+ fb_graph-mock (0.0.3)
41
+ fb_graph
42
+ rspec
43
+ webmock
40
44
  hashie (1.2.0)
41
45
  hike (1.2.1)
42
46
  httpclient (2.3.0.1)
43
47
  i18n (0.6.1)
44
48
  journey (1.0.4)
45
- json (1.7.5)
46
- multi_json (1.4.0)
49
+ multi_json (1.5.0)
50
+ oj (1.4.7)
47
51
  rack (1.4.1)
48
52
  rack-cache (1.2)
49
53
  rack (>= 0.4)
@@ -56,12 +60,12 @@ GEM
56
60
  rack (>= 1.1)
57
61
  rack-test (0.6.2)
58
62
  rack (>= 1.0)
59
- rake (10.0.2)
63
+ rake (10.0.3)
60
64
  rspec (2.12.0)
61
65
  rspec-core (~> 2.12.0)
62
66
  rspec-expectations (~> 2.12.0)
63
67
  rspec-mocks (~> 2.12.0)
64
- rspec-core (2.12.0)
68
+ rspec-core (2.12.2)
65
69
  rspec-expectations (2.12.0)
66
70
  diff-lcs (~> 1.1.3)
67
71
  rspec-mocks (2.12.0)
@@ -84,7 +88,8 @@ DEPENDENCIES
84
88
  actionpack (>= 3.0.6)
85
89
  cover_me (>= 1.2.0)
86
90
  fb_graph!
91
+ fb_graph-mock
87
92
  jruby-openssl (>= 0.7)
93
+ oj
88
94
  rake (>= 0.8)
89
95
  rspec (>= 2)
90
- webmock (>= 1.6.2)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.5.9
1
+ 2.6.0
data/fb_graph.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.add_runtime_dependency "httpclient", ">= 2.2.0.2"
16
16
  s.add_runtime_dependency "rack-oauth2", ">= 0.14.4"
17
17
  s.add_runtime_dependency "tzinfo"
18
- s.add_runtime_dependency "json"
18
+ s.add_runtime_dependency "multi_json"
19
19
  s.add_development_dependency "rake", ">= 0.8"
20
20
  if RUBY_VERSION >= '1.9'
21
21
  s.add_development_dependency "cover_me", ">= 1.2.0"
@@ -23,6 +23,6 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency "rcov", ">= 0.9"
24
24
  end
25
25
  s.add_development_dependency "rspec", ">= 2"
26
- s.add_development_dependency "webmock", ">= 1.6.2"
26
+ s.add_development_dependency "fb_graph-mock"
27
27
  s.add_development_dependency "actionpack", ">= 3.0.6"
28
28
  end
@@ -26,7 +26,7 @@ module FbGraph
26
26
  end
27
27
 
28
28
  def self.decode_json(json)
29
- JSON.parse(json).with_indifferent_access
29
+ MultiJson::load(json).with_indifferent_access
30
30
  rescue => e
31
31
  raise VerificationFailed.new('Invalid JSON')
32
32
  end
@@ -0,0 +1,22 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Offers
4
+ def offers(options = {})
5
+ offers = self.connection :offers, options
6
+ offers.map! do |offer|
7
+ Offer.new offer[:id], offer.merge(
8
+ :access_token => options[:access_token] || self.access_token
9
+ )
10
+ end
11
+ end
12
+
13
+ def offer!(options = {})
14
+ # A page access token is required to change an associated offer
15
+ offer = post options.merge(:connection => :offers).merge(:access_token => self.page_access_token)
16
+ Offer.new offer[:id], options.merge(offer).merge(
17
+ :access_token => options[:access_token] || self.access_token
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
@@ -81,7 +81,7 @@ module FbGraph
81
81
  def initialize(code, message, body = '')
82
82
  @code = code
83
83
  if body.present?
84
- response = JSON.parse(body).with_indifferent_access
84
+ response = MultiJson::load(body).with_indifferent_access
85
85
  message = response[:error][:message]
86
86
  @type = response[:error][:type]
87
87
  end
data/lib/fb_graph/node.rb CHANGED
@@ -135,14 +135,14 @@ module FbGraph
135
135
  when 'null'
136
136
  nil
137
137
  else
138
- _response_ = JSON.parse(response.body).with_indifferent_access
138
+ _response_ = MultiJson::load(response.body).with_indifferent_access
139
139
  if (200...300).include?(response.status)
140
140
  _response_
141
141
  else
142
142
  Exception.handle_httpclient_error(_response_, response.headers)
143
143
  end
144
144
  end
145
- rescue JSON::ParserError
145
+ rescue MultiJson::DecodeError
146
146
  raise Exception.new(response.status, "Unparsable Response: #{response.body}")
147
147
  end
148
148
  end
@@ -0,0 +1,33 @@
1
+ module FbGraph
2
+ class Offer < Node
3
+ extend Searchable
4
+
5
+ ATTRS = [ :from,
6
+ :title,
7
+ :created_time,
8
+ :expiration_time,
9
+ :terms,
10
+ :image_url,
11
+ :coupon_type,
12
+ :claim_limit,
13
+ :redemption_link,
14
+ :redemption_code]
15
+
16
+ attr_accessor *ATTRS
17
+
18
+ def initialize(identifier, attributes = {})
19
+ super
20
+
21
+ @from = Page.new(attributes[:from][:id], attributes[:from]) if attributes[:from]
22
+ @title = attributes[:title]
23
+ @created_time = Time.parse(attributes[:created_time]).utc if attributes[:created_time]
24
+ @expiration_time = Time.parse(attributes[:expiration_time]).utc
25
+ @terms = attributes[:terms] if attributes[:terms]
26
+ @image_url = attributes[:image_url] if attributes[:image_url]
27
+ @coupon_type = attributes[:coupon_type] if attributes[:coupon_type]
28
+ @claim_limit = attributes[:claim_limit] if attributes[:claim_limit]
29
+ @redemption_link = attributes[:redemption_link] if attributes[:redemption_link]
30
+ @redemption_code = attributes[:redemption_code] if attributes[:redemption_code]
31
+ end
32
+ end
33
+ end
data/lib/fb_graph/page.rb CHANGED
@@ -24,6 +24,7 @@ module FbGraph
24
24
  include Connections::Tabs
25
25
  include Connections::Tagged
26
26
  include Connections::Videos
27
+ include Connections::Offers
27
28
  extend Searchable
28
29
 
29
30
  @@attributes = {
@@ -44,7 +45,13 @@ module FbGraph
44
45
  Cover.new cover[:cover_id], cover
45
46
  end
46
47
  end
48
+
49
+ protected
50
+
51
+ def page_access_token
52
+ get({:fields => "access_token"})["access_token"]
53
+ end
47
54
  end
48
55
  end
49
56
 
50
- require 'fb_graph/page/category_attributes'
57
+ require 'fb_graph/page/category_attributes'
data/lib/fb_graph.rb CHANGED
@@ -131,6 +131,7 @@ require 'fb_graph/thread'
131
131
  require 'fb_graph/user'
132
132
  require 'fb_graph/user_achievement'
133
133
  require 'fb_graph/video'
134
+ require 'fb_graph/offer'
134
135
 
135
136
  # Load after FbGraph::User
136
137
  require 'fb_graph/ad_user'
@@ -141,4 +142,4 @@ require 'fb_graph/project'
141
142
 
142
143
  require 'fb_graph/query'
143
144
 
144
- require 'patch/rack/oauth2/access_token/introspectable'
145
+ require 'patch/rack/oauth2/access_token/introspectable'
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph::Offer do
4
+ let(:offer) { mock_graph(:get, '23456/offers', 'offers/private', :access_token => 'access_token') { offer = page.offers[0] }}
5
+ let(:page) { FbGraph::Page.new('23456', {:name => 'page_name', :category => 'page_cat', :access_token => 'access_token'}) }
6
+
7
+ describe '.new' do
8
+ it 'should setup all supported attributes' do
9
+ offer.identifier.should == '12345'
10
+ offer.from.should == FbGraph::Page.new('23456', {:name => 'page_name', :category => 'page_cat'})
11
+ offer.title.should == 'offer 1'
12
+ offer.created_time.should == Time.parse('2011-10-14T21:00:00+0000').utc
13
+ offer.expiration_time.should == Time.parse('2018-03-15T00:30:00+0000').utc
14
+ offer.terms.should == 'One offer per customer'
15
+ offer.image_url.should == 'http://example.org/image.png'
16
+ offer.coupon_type.should == 'online_only'
17
+ offer.claim_limit.should == 1000
18
+ offer.redemption_link.should == 'http://example.org/redeem'
19
+ offer.redemption_code.should == nil
20
+ end
21
+ end
22
+
23
+ describe '#update' do
24
+ it 'should update existing offer' do
25
+ lambda do
26
+ offer.update(:terms => 'Two offers per customer', :access_token => 'access_token')
27
+ end.should request_to('12345', :post)
28
+ end
29
+ end
30
+ end
@@ -5,7 +5,7 @@ describe FbGraph::OpenGraph::Action do
5
5
  FbGraph::OpenGraph::Action.new attributes[:id], attributes
6
6
  end
7
7
  let :attributes do
8
- JSON.parse(json).with_indifferent_access
8
+ MultiJson::load(json).with_indifferent_access
9
9
  end
10
10
  shared_examples_for :og_action_initialized do
11
11
  its(:from) do
@@ -5,7 +5,7 @@ describe FbGraph::OpenGraph::Object do
5
5
  FbGraph::OpenGraph::Object.new attributes[:id], attributes
6
6
  end
7
7
  let :attributes do
8
- JSON.parse(json).with_indifferent_access
8
+ MultiJson::load(json).with_indifferent_access
9
9
  end
10
10
 
11
11
  context 'with play action' do
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe FbGraph::TaggedObject do
4
4
  let :attributes do
5
- JSON.parse(json).with_indifferent_access
5
+ MultiJson::load(json).with_indifferent_access
6
6
  end
7
7
  let :json do
8
8
  <<-JSON
@@ -25,7 +25,7 @@ describe FbGraph::Targeting, '.to_json' do
25
25
  :region => 'Tokyo'
26
26
  }
27
27
  targeting = FbGraph::Targeting.new(attributes)
28
- hash = JSON.parse(targeting.to_json).with_indifferent_access
28
+ hash = MultiJson::load(targeting.to_json).with_indifferent_access
29
29
  hash[:country].should == attributes[:country]
30
30
  hash[:city].should == attributes[:city]
31
31
  hash[:locale].should == attributes[:locale]
data/spec/spec_helper.rb CHANGED
@@ -4,4 +4,6 @@ end
4
4
 
5
5
  require 'rspec'
6
6
  require 'fb_graph'
7
- require 'helpers/webmock_helper'
7
+ require 'fb_graph/mock'
8
+ include FbGraph::Mock
9
+ WebMock.disable_net_connect!