fb_graph2 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/fb_graph2/collection.rb +11 -3
- data/lib/fb_graph2/edge.rb +1 -0
- data/lib/fb_graph2/node.rb +1 -1
- data/spec/fb_graph2/edge/comments_spec.rb +12 -0
- data/spec/fb_graph2/edge_spec.rb +148 -0
- data/spec/fb_graph2/node_spec.rb +52 -0
- data/spec/mock_json/post/comments_with_summary.json +57 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d528a57c6a1d1e118bbe59cf75db11d833aeecb
|
4
|
+
data.tar.gz: 228de293b5fd4060274d3bcdf1571befd5b14b80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be86b435cffbc372cc7bef1dc88ca93c8e453d04056cce7ee04511cddad54b307e52fbd05b043e6733baa747e02aa70d742f0a37a3671a4e3aadd340ecfd03b9
|
7
|
+
data.tar.gz: 90e6bbfa860cc9ce11f0c1cf04926e01733553ecff8cb23009d6b541ab4115290df89568de57526da8326a59e634d5bcc1d8fad11954fdbea3a876a00ae68927
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/lib/fb_graph2/collection.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module FbGraph2
|
2
2
|
class Collection < Array
|
3
|
-
attr_accessor :before, :after, :next, :previous
|
3
|
+
attr_accessor :before, :after, :next, :previous, :order, :total_count
|
4
4
|
|
5
5
|
def initialize(collection = [])
|
6
6
|
collection = normalize collection
|
7
|
-
|
7
|
+
paginate collection[:paging]
|
8
|
+
summarize collection[:summary]
|
8
9
|
replace Array(collection[:data])
|
9
10
|
end
|
10
11
|
|
@@ -24,7 +25,7 @@ module FbGraph2
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
|
-
def
|
28
|
+
def paginate(paging)
|
28
29
|
cursors = paging.try(:[], :cursors)
|
29
30
|
self.before = cursors.try(:[], :before)
|
30
31
|
self.after = cursors.try(:[], :after)
|
@@ -32,6 +33,13 @@ module FbGraph2
|
|
32
33
|
self.previous = params_in paging.try(:[], :previous)
|
33
34
|
end
|
34
35
|
|
36
|
+
def summarize(summary)
|
37
|
+
# NOTE: notifications edge returns "summary" as a blank Array.
|
38
|
+
summary = Hash(summary)
|
39
|
+
self.order = summary.try(:[], :order)
|
40
|
+
self.total_count = summary.try(:[], :total_count)
|
41
|
+
end
|
42
|
+
|
35
43
|
def params_in(url)
|
36
44
|
if url
|
37
45
|
Rack::Utils.parse_nested_query(
|
data/lib/fb_graph2/edge.rb
CHANGED
data/lib/fb_graph2/node.rb
CHANGED
@@ -41,7 +41,7 @@ module FbGraph2
|
|
41
41
|
def edges
|
42
42
|
@edges ||= self.class.included_modules.select do |_module_|
|
43
43
|
_module_.name =~ /FbGraph2::Edge/
|
44
|
-
end.collect(&:instance_methods).sort
|
44
|
+
end.collect(&:instance_methods).flatten.sort
|
45
45
|
end
|
46
46
|
|
47
47
|
def update(params = {}, options = {})
|
@@ -41,6 +41,18 @@ describe FbGraph2::Edge::Comments do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
|
+
|
45
|
+
context 'when summary requested' do
|
46
|
+
it 'should be summarized' do
|
47
|
+
comments = mock_graph :get, 'post_id/comments', 'post/comments_with_summary', access_token: 'token', params: {
|
48
|
+
summary: true
|
49
|
+
} do
|
50
|
+
post.comments(summary: true)
|
51
|
+
end
|
52
|
+
comments.order.should == 'chronological'
|
53
|
+
comments.total_count.should == 4
|
54
|
+
end
|
55
|
+
end
|
44
56
|
end
|
45
57
|
|
46
58
|
describe '#comment!' do
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FbGraph2::Edge do
|
4
|
+
let(:me) { FbGraph2::User.me 'access_token' }
|
5
|
+
let(:post) { FbGraph2::Post.new 'post_id', access_token: 'access_token' }
|
6
|
+
let(:feed) do
|
7
|
+
mock_graph :get, 'me/feed', 'user/feed', access_token: 'access_token' do
|
8
|
+
me.feed
|
9
|
+
end
|
10
|
+
end
|
11
|
+
let(:comments) do
|
12
|
+
mock_graph :get, 'post_id/comments', 'post/comments_with_summary', access_token: 'access_token' do
|
13
|
+
post.comments
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'summary' do
|
18
|
+
subject { comments }
|
19
|
+
its(:order) { should == 'chronological' }
|
20
|
+
its(:total_count) { should == 4 }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'pagination' do
|
24
|
+
context 'when next/previous-url-based' do
|
25
|
+
describe 'next' do
|
26
|
+
context 'when next page exists' do
|
27
|
+
it 'should fetch next page' do
|
28
|
+
feed.collection.next.should match(limit: '25', until: '1400651347')
|
29
|
+
_next_ = mock_graph :get, 'me/feed', 'blank_collection', access_token: 'access_token', params: {
|
30
|
+
limit: 25,
|
31
|
+
until: '1400651347'
|
32
|
+
} do
|
33
|
+
feed.next
|
34
|
+
end
|
35
|
+
_next_.should be_instance_of FbGraph2::Edge
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'otherwise' do
|
40
|
+
let(:without_next) do
|
41
|
+
mock_graph :get, 'me/feed', 'blank_collection', access_token: 'access_token', params: {
|
42
|
+
limit: 25,
|
43
|
+
until: '1400651347'
|
44
|
+
} do
|
45
|
+
feed.next
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it do
|
50
|
+
without_next.collection.next.should be_blank
|
51
|
+
without_next.next.should be_blank
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'previous' do
|
57
|
+
context 'when previous page exists' do
|
58
|
+
it 'should fetch previous page' do
|
59
|
+
feed.collection.previous.should match(limit: '25', since: '1401410484')
|
60
|
+
previous = mock_graph :get, 'me/feed', 'blank_collection', access_token: 'access_token', params: {
|
61
|
+
limit: 25,
|
62
|
+
since: '1401410484'
|
63
|
+
} do
|
64
|
+
feed.previous
|
65
|
+
end
|
66
|
+
previous.should be_instance_of FbGraph2::Edge
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'otherwise' do
|
71
|
+
let(:without_previous) do
|
72
|
+
mock_graph :get, 'me/feed', 'blank_collection', access_token: 'access_token', params: {
|
73
|
+
limit: 25,
|
74
|
+
since: '1401410484'
|
75
|
+
} do
|
76
|
+
feed.previous
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it do
|
81
|
+
without_previous.collection.previous.should be_blank
|
82
|
+
without_previous.previous.should be_blank
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'when cursors-based' do
|
89
|
+
describe 'next' do
|
90
|
+
context 'when after cursor exists' do
|
91
|
+
it 'should fetch next page' do
|
92
|
+
comments.collection.after.should == 'NA=='
|
93
|
+
_next_ = mock_graph :get, 'post_id/comments', 'blank_collection', access_token: 'access_token', params: {
|
94
|
+
after: 'NA=='
|
95
|
+
} do
|
96
|
+
comments.next
|
97
|
+
end
|
98
|
+
_next_.should be_instance_of FbGraph2::Edge
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'otherwise' do
|
103
|
+
let(:without_next) do
|
104
|
+
mock_graph :get, 'post_id/comments', 'blank_collection', access_token: 'access_token', params: {
|
105
|
+
after: 'NA=='
|
106
|
+
} do
|
107
|
+
comments.next
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
it do
|
112
|
+
without_next.collection.after.should be_blank
|
113
|
+
without_next.next.should be_blank
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'previous' do
|
119
|
+
context 'when before cursor exists' do
|
120
|
+
it 'should fetch previous page' do
|
121
|
+
comments.collection.before.should == 'MQ=='
|
122
|
+
previous = mock_graph :get, 'post_id/comments', 'blank_collection', access_token: 'access_token', params: {
|
123
|
+
before: 'MQ=='
|
124
|
+
} do
|
125
|
+
comments.previous
|
126
|
+
end
|
127
|
+
previous.should be_instance_of FbGraph2::Edge
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'otherwise' do
|
132
|
+
let(:without_previous) do
|
133
|
+
mock_graph :get, 'post_id/comments', 'blank_collection', access_token: 'access_token', params: {
|
134
|
+
before: 'MQ=='
|
135
|
+
} do
|
136
|
+
comments.previous
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
it do
|
141
|
+
without_previous.collection.before.should be_blank
|
142
|
+
without_previous.previous.should be_blank
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/spec/fb_graph2/node_spec.rb
CHANGED
@@ -86,6 +86,26 @@ describe FbGraph2::Node do
|
|
86
86
|
its(:access_token) { should == 'access_token' }
|
87
87
|
end
|
88
88
|
|
89
|
+
describe '#edges' do
|
90
|
+
it do
|
91
|
+
instance.edges.should be_blank
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'for FbGraph2::User' do
|
95
|
+
it do
|
96
|
+
FbGraph2::User.me('token').edges.should include :accounts, :feed, :feed!
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe '#update' do
|
102
|
+
it 'should call API with POST method' do
|
103
|
+
expect do
|
104
|
+
instance.update
|
105
|
+
end.to request_to 'identifier', :post
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
89
109
|
describe '#destroy' do
|
90
110
|
it 'should call API with DELETE method' do
|
91
111
|
expect do
|
@@ -94,6 +114,38 @@ describe FbGraph2::Node do
|
|
94
114
|
end
|
95
115
|
end
|
96
116
|
|
117
|
+
describe '#build_params' do
|
118
|
+
context 'when an array of strings given' do
|
119
|
+
it 'should join fields option' do
|
120
|
+
mock_graph :get, 'identifier', 'user/me', params: {
|
121
|
+
fields: 'f1,f2,f3'
|
122
|
+
} do
|
123
|
+
instance.fetch(fields: ['f1', 'f2', 'f3'])
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'when an array of symbols given' do
|
129
|
+
it 'should join fields option' do
|
130
|
+
mock_graph :get, 'identifier', 'user/me', params: {
|
131
|
+
fields: 'f1,f2,f3'
|
132
|
+
} do
|
133
|
+
instance.fetch(fields: [:f1, :f2, :f3])
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'when a string given' do
|
139
|
+
it 'should join fields option' do
|
140
|
+
mock_graph :get, 'identifier', 'user/me', params: {
|
141
|
+
fields: 'f1,f2,f3'
|
142
|
+
} do
|
143
|
+
instance.fetch(fields: 'f1,f2,f3')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
97
149
|
describe '#handle_response' do
|
98
150
|
context 'when error' do
|
99
151
|
context 'when valid json' do
|
@@ -0,0 +1,57 @@
|
|
1
|
+
{
|
2
|
+
"data": [{
|
3
|
+
"id": "10152662663892277_10152662666892277",
|
4
|
+
"from": {
|
5
|
+
"id": "579612276",
|
6
|
+
"name": "Nov Matake"
|
7
|
+
},
|
8
|
+
"message": "hummm, it's not \"post\"...",
|
9
|
+
"can_remove": true,
|
10
|
+
"created_time": "2014-08-20T05:34:21+0000",
|
11
|
+
"like_count": 0,
|
12
|
+
"user_likes": false
|
13
|
+
}, {
|
14
|
+
"id": "10152662663892277_10152662686952277",
|
15
|
+
"from": {
|
16
|
+
"id": "579612276",
|
17
|
+
"name": "Nov Matake"
|
18
|
+
},
|
19
|
+
"message": "579612276_10152662663892277 = post\n10152662663892277 = status",
|
20
|
+
"can_remove": true,
|
21
|
+
"created_time": "2014-08-20T05:57:11+0000",
|
22
|
+
"like_count": 0,
|
23
|
+
"user_likes": false
|
24
|
+
}, {
|
25
|
+
"id": "10152662663892277_10152662687272277",
|
26
|
+
"from": {
|
27
|
+
"id": "579612276",
|
28
|
+
"name": "Nov Matake"
|
29
|
+
},
|
30
|
+
"message": "でも多分v2.1完成してない。 http://stackoverflow.com/questions/25270649/facebook-graph-api-v2-1-all-post-photos",
|
31
|
+
"can_remove": true,
|
32
|
+
"created_time": "2014-08-20T05:57:31+0000",
|
33
|
+
"like_count": 0,
|
34
|
+
"user_likes": false
|
35
|
+
}, {
|
36
|
+
"id": "10152662663892277_10152662687387277",
|
37
|
+
"from": {
|
38
|
+
"id": "579612276",
|
39
|
+
"name": "Nov Matake"
|
40
|
+
},
|
41
|
+
"message": "完成さしてからだせや!!",
|
42
|
+
"can_remove": true,
|
43
|
+
"created_time": "2014-08-20T05:57:48+0000",
|
44
|
+
"like_count": 0,
|
45
|
+
"user_likes": false
|
46
|
+
}],
|
47
|
+
"paging": {
|
48
|
+
"cursors": {
|
49
|
+
"after": "NA==",
|
50
|
+
"before": "MQ=="
|
51
|
+
}
|
52
|
+
},
|
53
|
+
"summary": {
|
54
|
+
"order": "chronological",
|
55
|
+
"total_count": 4
|
56
|
+
}
|
57
|
+
}
|
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.
|
4
|
+
version: 0.1.2
|
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-
|
11
|
+
date: 2014-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -321,6 +321,7 @@ files:
|
|
321
321
|
- spec/fb_graph2/edge/television_spec.rb
|
322
322
|
- spec/fb_graph2/edge/test_users_spec.rb
|
323
323
|
- spec/fb_graph2/edge/videos_spec.rb
|
324
|
+
- spec/fb_graph2/edge_spec.rb
|
324
325
|
- spec/fb_graph2/node_spec.rb
|
325
326
|
- spec/fb_graph2/node_subclass_spec.rb
|
326
327
|
- spec/fb_graph2/request_filter/authenticator_spec.rb
|
@@ -340,6 +341,7 @@ files:
|
|
340
341
|
- spec/mock_json/page/milestones.json
|
341
342
|
- spec/mock_json/page/promotable_posts.json
|
342
343
|
- spec/mock_json/post/comments.json
|
344
|
+
- spec/mock_json/post/comments_with_summary.json
|
343
345
|
- spec/mock_json/post/liked_and_commented.json
|
344
346
|
- spec/mock_json/post/likes.json
|
345
347
|
- spec/mock_json/post/shared_posts.json
|