fb_graph2 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d528a57c6a1d1e118bbe59cf75db11d833aeecb
4
- data.tar.gz: 228de293b5fd4060274d3bcdf1571befd5b14b80
3
+ metadata.gz: 7000a466f8c2cf12f0fca401eb5fdd1651745392
4
+ data.tar.gz: 4cc82ba45ae78798767f6f2191e5d9496d790442
5
5
  SHA512:
6
- metadata.gz: be86b435cffbc372cc7bef1dc88ca93c8e453d04056cce7ee04511cddad54b307e52fbd05b043e6733baa747e02aa70d742f0a37a3671a4e3aadd340ecfd03b9
7
- data.tar.gz: 90e6bbfa860cc9ce11f0c1cf04926e01733553ecff8cb23009d6b541ab4115290df89568de57526da8326a59e634d5bcc1d8fad11954fdbea3a876a00ae68927
6
+ metadata.gz: bd8d385375e635ee8655d78e60dcfb1f1722765f4296b110a7257d6180ffde0a87ae5bd43c445738524885e84e38f16068c76ad707ab1b21088960d5063bec34
7
+ data.tar.gz: a942c1adad9ecf5b3c29713e61a43805fa82d59060609e6a42aa7d878b302af5423a924ddd105cf8b137ad9e7175af1464e281b79d4e6f2681003e0596b93f2b
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -27,7 +27,7 @@ module FbGraph2
27
27
  client_auth_method: :body
28
28
  )
29
29
  rescue Rack::OAuth2::Client::Error => e
30
- raise Exception.detect_from_status(e.status).new(e.message)
30
+ raise Exception.detect(e.status, e.response)
31
31
  end
32
32
  end
33
33
  end
@@ -1,6 +1,6 @@
1
1
  module FbGraph2
2
2
  class Collection < Array
3
- attr_accessor :before, :after, :next, :previous, :order, :total_count
3
+ attr_accessor :before, :after, :next, :previous, :order, :total_count, :summary
4
4
 
5
5
  def initialize(collection = [])
6
6
  collection = normalize collection
@@ -34,8 +34,7 @@ module FbGraph2
34
34
  end
35
35
 
36
36
  def summarize(summary)
37
- # NOTE: notifications edge returns "summary" as a blank Array.
38
- summary = Hash(summary)
37
+ self.summary = summary
39
38
  self.order = summary.try(:[], :order)
40
39
  self.total_count = summary.try(:[], :total_count)
41
40
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FbGraph2::User do
3
+ describe FbGraph2::App do
4
4
  describe '.app' do
5
5
  let(:klass) { FbGraph2::App }
6
6
 
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph2::Auth do
4
+ describe '.app' do
5
+ subject { instance }
6
+ let(:instance) { FbGraph2::Auth.new 'client_id', 'client_secret' }
7
+
8
+ it { should be_a Rack::OAuth2::Client }
9
+
10
+ describe 'fb_exchange_token grant' do
11
+ it do
12
+ instance.fb_exchange_token = 'short_lived_access_token'
13
+ access_token = mock_graph :post, 'oauth/access_token', 'token_response', params: {
14
+ grant_type: 'fb_exchange_token',
15
+ fb_exchange_token: 'short_lived_access_token',
16
+ client_id: 'client_id',
17
+ client_secret: 'client_secret'
18
+ }, disable_api_versioning: true do
19
+ instance.access_token!
20
+ end
21
+ access_token.should be_instance_of Rack::OAuth2::AccessToken::Legacy
22
+ end
23
+ end
24
+
25
+ context 'when error occured' do
26
+ it do
27
+ expect do
28
+ mock_graph :post, 'oauth/access_token', 'error/400/191', status: [400, 'Bad Request'], disable_api_versioning: true do
29
+ instance.authorization_code = 'auth_code'
30
+ instance.access_token!
31
+ end
32
+ end.to raise_error(FbGraph2::Exception) do |e|
33
+ e.message.should == 'Missing redirect_uri parameter.'
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -22,7 +22,7 @@ describe FbGraph2::Node do
22
22
  it 'should use api_version globally' do
23
23
  expect do
24
24
  instance.fetch
25
- end.to request_to 'v2.x/identifier', :get, api_version_in_path: true
25
+ end.to request_to 'v2.x/identifier', :get, disable_api_versioning: true
26
26
  end
27
27
  end
28
28
 
@@ -30,7 +30,7 @@ describe FbGraph2::Node do
30
30
  it 'should use api_version globally' do
31
31
  expect do
32
32
  instance.edge :foo
33
- end.to request_to 'v2.x/identifier/foo', :get, api_version_in_path: true
33
+ end.to request_to 'v2.x/identifier/foo', :get, disable_api_versioning: true
34
34
  end
35
35
  end
36
36
  end
@@ -40,7 +40,7 @@ describe FbGraph2::Node do
40
40
  it 'should use api_version locally' do
41
41
  expect do
42
42
  instance.fetch nil, api_version: 'v2.y'
43
- end.to request_to 'v2.y/identifier', :get, api_version_in_path: true
43
+ end.to request_to 'v2.y/identifier', :get, disable_api_versioning: true
44
44
  FbGraph2.api_version.should == @original
45
45
  end
46
46
  end
@@ -49,7 +49,7 @@ describe FbGraph2::Node do
49
49
  it 'should use api_version locally' do
50
50
  expect do
51
51
  instance.edge :foo, {}, api_version: 'v2.y'
52
- end.to request_to 'v2.y/identifier/foo', :get, api_version_in_path: true
52
+ end.to request_to 'v2.y/identifier/foo', :get, disable_api_versioning: true
53
53
  FbGraph2.api_version.should == @original
54
54
  end
55
55
  end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph2::Page do
4
+ context 'with optional fields' do
5
+ subject { page }
6
+ let(:page) do
7
+ attributes = mock_json 'page/with_optional_fields'
8
+ FbGraph2::Page.new attributes[:id], attributes
9
+ end
10
+
11
+ describe '#context' do
12
+ subject { page.context }
13
+ it { should be_instance_of FbGraph2::Struct::Context::PageContext }
14
+
15
+ describe 'friends_who_like' do
16
+ subject { page.context.friends_who_like }
17
+ it { should be_instance_of FbGraph2::Collection }
18
+ it { should be_blank }
19
+ its(:total_count) { should == 14 }
20
+ its(:summary) { should include :social_sentence }
21
+ end
22
+ end
23
+
24
+ describe '#parking' do
25
+ subject { page.parking }
26
+ [:street, :lot, :valet].each do |key|
27
+ its(key) { should == false }
28
+ end
29
+ end
30
+
31
+ describe '#restaurant_services' do
32
+ subject { page.restaurant_services }
33
+ [:kids, :delivery, :catering, :waiter, :outdoor, :takeout].each do |key|
34
+ its(key) { should == false }
35
+ end
36
+ [:groups, :reserve, :walkins].each do |key|
37
+ its(key) { should == true }
38
+ end
39
+ end
40
+
41
+ describe '#restaurant_specialties' do
42
+ subject { page.restaurant_specialties }
43
+ [:coffee, :drinks, :breakfast, :lunch].each do |key|
44
+ its(key) { should == false }
45
+ end
46
+ [:dinner].each do |key|
47
+ its(key) { should == true }
48
+ end
49
+ end
50
+
51
+ describe '#payment_options' do
52
+ subject { page.payment_options }
53
+ [:cash_only, :discover].each do |key|
54
+ its(key) { should == false }
55
+ end
56
+ [:amex, :mastercard, :visa].each do |key|
57
+ its(key) { should == true }
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,7 @@
1
+ {
2
+ "error": {
3
+ "message": "Missing redirect_uri parameter.",
4
+ "type": "OAuthException",
5
+ "code": 191
6
+ }
7
+ }
@@ -1,11 +1,9 @@
1
1
  {
2
- "data": [
3
- {
4
- "name": "Jr Nov",
5
- "id": "1575327134"
6
- }
7
- ],
2
+ "data": [{
3
+ "name": "Jr Nov",
4
+ "id": "1575327134"
5
+ }],
8
6
  "paging": {
9
7
  "next": "https://graph.facebook.com/v2.0/117513961602338/blocked?limit=5000&offset=5000&__after_id=enc_AewU3hSo5zqbS5KA0i0lJYmPrLn57SMSo645aYB7BTPg1PSawPvlM9mRI_3Y_dcpeDI"
10
8
  }
11
- }
9
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "context": {
3
+ "friends_who_like": {
4
+ "data": [],
5
+ "summary": {
6
+ "social_sentence": "14 of your friends like this.",
7
+ "total_count": 14
8
+ }
9
+ }
10
+ },
11
+ "parking": {
12
+ "lot": 0,
13
+ "street": 0,
14
+ "valet": 0
15
+ },
16
+ "restaurant_services": {
17
+ "delivery": 0,
18
+ "catering": 0,
19
+ "groups": 1,
20
+ "kids": 0,
21
+ "outdoor": 0,
22
+ "reserve": 1,
23
+ "takeout": 0,
24
+ "waiter": 0,
25
+ "walkins": 1
26
+ },
27
+ "restaurant_specialties": {
28
+ "breakfast": 0,
29
+ "coffee": 0,
30
+ "dinner": 1,
31
+ "drinks": 0,
32
+ "lunch": 0
33
+ },
34
+ "payment_options": {
35
+ "amex": 1,
36
+ "cash_only": 0,
37
+ "discover": 0,
38
+ "mastercard": 1,
39
+ "visa": 1
40
+ },
41
+ "id": "139296106095829"
42
+ }
@@ -0,0 +1 @@
1
+ access_token=access_token&expires=5183975
@@ -1,111 +1,45 @@
1
1
  {
2
2
  "data": [{
3
- "id": "notif_579612276_360745635",
3
+ "id": "notif_579612276_373456430",
4
4
  "from": {
5
- "id": "10203663293120616",
6
- "name": "Tatsuya Kurosaka"
5
+ "id": "583017165143721",
6
+ "name": "Akira Otaishi"
7
7
  },
8
8
  "to": {
9
9
  "id": "579612276",
10
10
  "name": "Nov Matake"
11
11
  },
12
- "created_time": "2014-06-03T03:20:28+0000",
13
- "updated_time": "2014-06-03T03:54:10+0000",
14
- "title": "Tatsuya Kurosaka posted in クロサカさんの仕事部屋.",
15
- "link": "http://www.facebook.com/groups/597190250369020/632381620183216/",
12
+ "created_time": "2014-08-27T18:48:07+0000",
13
+ "updated_time": "2014-08-27T18:48:07+0000",
14
+ "title": "Akira Otaishi invited you to his event あんしんかんcafe vol.4 ~ネット選挙をめぐるビジネス&セキュリティ~.",
15
+ "link": "http://www.facebook.com/events/339815099528481/",
16
16
  "application": {
17
- "name": "Groups",
18
- "id": "2361831622"
19
- },
20
- "unread": 1,
21
- "object": {
22
- "name": "クロサカさんの仕事部屋",
23
- "id": "597190250369020"
24
- }
25
- }, {
26
- "id": "notif_579612276_360668511",
27
- "from": {
28
- "id": "824378870925480",
29
- "name": "ちゃちゃき まさゆき"
30
- },
31
- "to": {
32
- "id": "579612276",
33
- "name": "Nov Matake"
34
- },
35
- "created_time": "2014-06-02T14:57:39+0000",
36
- "updated_time": "2014-06-02T14:57:39+0000",
37
- "title": "ちゃちゃき まさゆき posted in DevLOVE Park: \"こんにちは。..\"",
38
- "link": "http://www.facebook.com/groups/devlovepark/763062600400231/",
39
- "application": {
40
- "name": "Groups",
41
- "id": "2361831622"
17
+ "name": "Events",
18
+ "id": "141157392619610"
42
19
  },
43
20
  "unread": 1
44
21
  }, {
45
- "id": "notif_579612276_360654609",
22
+ "id": "notif_579612276_373364015",
46
23
  "from": {
47
- "id": "689134294485152",
48
- "name": "Shunya Iriki"
24
+ "id": "631020523647805",
25
+ "name": "Shota Kawaminami"
49
26
  },
50
27
  "to": {
51
28
  "id": "579612276",
52
29
  "name": "Nov Matake"
53
30
  },
54
- "created_time": "2014-06-02T12:46:26+0000",
55
- "updated_time": "2014-06-02T12:46:26+0000",
56
- "title": "Shunya Iriki shared your link.",
57
- "link": "http://www.facebook.com/shunya.iriki/posts/695439827187932",
31
+ "created_time": "2014-08-27T05:28:07+0000",
32
+ "updated_time": "2014-08-27T05:28:07+0000",
33
+ "title": "Shota Kawaminami shared your link.",
34
+ "link": "http://www.facebook.com/shota.kawaminami/posts/700333850049805",
58
35
  "application": {
59
36
  "name": "Links",
60
37
  "id": "2309869772"
61
38
  },
62
- "unread": 1,
63
- "object": {
64
- "id": "689134294485152_695439827187932",
65
- "from": {
66
- "id": "689134294485152",
67
- "name": "Shunya Iriki"
68
- },
69
- "story": "Shunya Iriki shared a link.",
70
- "story_tags": {
71
- "0": [{
72
- "id": "689134294485152",
73
- "name": "Shunya Iriki",
74
- "offset": 0,
75
- "length": 12,
76
- "type": "user"
77
- }]
78
- },
79
- "picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQCtEdPdezKIoUxo&w=154&h=154&url=http%3A%2F%2Fi.yimg.jp%2Fi%2Fdocs%2Frelease%2Ffbicon.jpg",
80
- "link": "http://docs.yahoo.co.jp/docs/info/terms/chapter1.html#cf2nd",
81
- "name": "ヤフー株式会社 - サービス利用規約 第1編 基本ガイドライン",
82
- "caption": "docs.yahoo.co.jp",
83
- "description": "Yahoo! JAPANのサービス利用規約、第1編 基本ガイドラインは当社のサービスをご利用になるすべての方に共通して適用されます。",
84
- "icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yD/r/aS8ecmYRys0.gif",
85
- "actions": [{
86
- "name": "Comment",
87
- "link": "https://www.facebook.com/100001657627507/posts/695439827187932"
88
- }, {
89
- "name": "Like",
90
- "link": "https://www.facebook.com/100001657627507/posts/695439827187932"
91
- }],
92
- "privacy": {
93
- "value": ""
94
- },
95
- "type": "link",
96
- "status_type": "shared_story",
97
- "application": {
98
- "name": "Facebook for iPhone",
99
- "namespace": "fbiphone",
100
- "id": "6628568379"
101
- },
102
- "created_time": "2014-06-02T12:46:26+0000",
103
- "updated_time": "2014-06-02T12:46:26+0000"
104
- }
39
+ "unread": 1
105
40
  }],
106
41
  "paging": {
107
- "previous": "https://graph.facebook.com/v2.0/579612276/notifications?limit=5000&since=1401765628&__paging_token=enc_Aeym53-nXWoBenYHHSSltWVXrHRbkZ5EGNZqVaacQApfA_a2VF0iAvQcjVx-jwo_UTLcO4e3kI7LJdGCggqD2OBS",
108
- "next": "https://graph.facebook.com/v2.0/579612276/notifications?limit=5000&until=1401236040&__paging_token=enc_AexWonNPHkycgkJiATXUJ_5MzIfU8dVfjvWB0MxLEXkSEAByVh8rT8gqpKb29rj5O2TpyohRzt0iyg-Tcu6U7ImO"
109
- },
110
- "summary": []
42
+ "previous": "https://graph.facebook.com/v2.1/579612276/notifications?limit=5000&since=1409272999&__paging_token=enc_Aewp7NBZ5fIN12MTyeJziuFNDceCydTGsvVqg-hwrjPZBCnWi-W_fjsS1bNaXkZ9K-tS8wFhFQw4pOajivn20h3c",
43
+ "next": "https://graph.facebook.com/v2.1/579612276/notifications?limit=5000&until=1408919679&__paging_token=enc_Aey6fAeKsVGCSCKsplC0g1FGjchGgmGajndTVwb-tzE0q7A8nT6C_1iVdwBRzXWdt3zKHh3yOjq6caxNtsTrD58s"
44
+ }
111
45
  }
@@ -14,7 +14,7 @@ module MockGraph
14
14
  response = yield
15
15
  a_request(
16
16
  method,
17
- endpoint_for(path)
17
+ endpoint_for(path, options)
18
18
  ).with(
19
19
  request_for(method, options)
20
20
  ).should have_been_made.once
@@ -40,7 +40,7 @@ module MockGraph
40
40
  private
41
41
 
42
42
  def endpoint_for(path, options = {})
43
- api_version = unless options[:api_version_in_path]
43
+ api_version = unless options[:disable_api_versioning]
44
44
  options[:api_version] || FbGraph2.api_version
45
45
  end
46
46
  File.join FbGraph2.root_url, api_version.to_s, path
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fb_graph2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov matake
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-20 00:00:00.000000000 Z
11
+ date: 2014-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -283,7 +283,8 @@ files:
283
283
  - lib/fb_graph2/user.rb
284
284
  - lib/fb_graph2/util.rb
285
285
  - lib/fb_graph2/video.rb
286
- - spec/fb_graph2/application_spec.rb
286
+ - spec/fb_graph2/app_spec.rb
287
+ - spec/fb_graph2/auth_spec.rb
287
288
  - spec/fb_graph2/collection_spec.rb
288
289
  - spec/fb_graph2/edge/accounts_spec.rb
289
290
  - spec/fb_graph2/edge/achievements_spec.rb
@@ -324,6 +325,7 @@ files:
324
325
  - spec/fb_graph2/edge_spec.rb
325
326
  - spec/fb_graph2/node_spec.rb
326
327
  - spec/fb_graph2/node_subclass_spec.rb
328
+ - spec/fb_graph2/page_spec.rb
327
329
  - spec/fb_graph2/request_filter/authenticator_spec.rb
328
330
  - spec/fb_graph2/request_filter/debugger_spec.rb
329
331
  - spec/fb_graph2/user_spec.rb
@@ -333,6 +335,7 @@ files:
333
335
  - spec/mock_json/app/subscriptions.json
334
336
  - spec/mock_json/app/test_users.json
335
337
  - spec/mock_json/blank_collection.json
338
+ - spec/mock_json/error/400/191.json
336
339
  - spec/mock_json/error/400/2500.json
337
340
  - spec/mock_json/error/invalid_format.json
338
341
  - spec/mock_json/page/admins.json
@@ -340,6 +343,7 @@ files:
340
343
  - spec/mock_json/page/blocked.json
341
344
  - spec/mock_json/page/milestones.json
342
345
  - spec/mock_json/page/promotable_posts.json
346
+ - spec/mock_json/page/with_optional_fields.json
343
347
  - spec/mock_json/post/comments.json
344
348
  - spec/mock_json/post/comments_with_summary.json
345
349
  - spec/mock_json/post/liked_and_commented.json
@@ -347,6 +351,7 @@ files:
347
351
  - spec/mock_json/post/shared_posts.json
348
352
  - spec/mock_json/success_true.json
349
353
  - spec/mock_json/success_with_id.json
354
+ - spec/mock_json/token_response.json
350
355
  - spec/mock_json/true.json
351
356
  - spec/mock_json/user/accounts.json
352
357
  - spec/mock_json/user/achievements.json