fb_graph 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +37 -5
- data/VERSION +1 -1
- data/fb_graph.gemspec +11 -2
- data/lib/fb_graph/album.rb +18 -12
- data/lib/fb_graph/application.rb +19 -8
- data/lib/fb_graph/auth.rb +1 -3
- data/lib/fb_graph/checkin.rb +15 -0
- data/lib/fb_graph/comment.rb +5 -5
- data/lib/fb_graph/event.rb +12 -12
- data/lib/fb_graph/insight.rb +2 -1
- data/lib/fb_graph/link.rb +11 -7
- data/lib/fb_graph/note.rb +11 -9
- data/lib/fb_graph/page.rb +13 -4
- data/lib/fb_graph/photo.rb +15 -14
- data/lib/fb_graph/post.rb +21 -20
- data/lib/fb_graph/searchable/result.rb +31 -0
- data/lib/fb_graph/searchable.rb +3 -29
- data/lib/fb_graph/status.rb +1 -0
- data/lib/fb_graph/subscription.rb +10 -0
- data/lib/fb_graph/user.rb +8 -1
- data/lib/fb_graph/video.rb +1 -0
- data/spec/fake_json/pages/platform_private.json +2 -2
- data/spec/fake_json/pages/platform_public.json +2 -2
- data/spec/fb_graph/application_spec.rb +23 -0
- data/spec/fb_graph/auth_spec.rb +35 -0
- data/spec/fb_graph/connections/albums_spec.rb +1 -0
- data/spec/fb_graph/insight_spec.rb +17 -0
- data/spec/fb_graph/link_spec.rb +2 -2
- metadata +13 -4
data/README.rdoc
CHANGED
@@ -20,11 +20,6 @@ Almost all connections for each object are also supported. (Private message co
|
|
20
20
|
|
21
21
|
Plus, you can play an Rails sample app here. http://fbgraphsample.heroku.com/
|
22
22
|
|
23
|
-
=== Authentication
|
24
|
-
|
25
|
-
Both Facebook JavaScript SDK and normal OAuth2 flow is supported.
|
26
|
-
See http://github.com/nov/fb_graph_sample
|
27
|
-
|
28
23
|
=== GET
|
29
24
|
|
30
25
|
==== Basic Objects
|
@@ -190,6 +185,43 @@ See http://github.com/nov/fb_graph_sample
|
|
190
185
|
post.unlike!(:access_token => ACCESS_TOKEN)
|
191
186
|
post.destroy(:access_token => ACCESS_TOKEN)
|
192
187
|
|
188
|
+
=== Authentication
|
189
|
+
|
190
|
+
Both Facebook JavaScript SDK and normal OAuth2 flow is supported.
|
191
|
+
Below I show simple sample code.
|
192
|
+
You can also see http://github.com/nov/fb_graph_sample for more details Rails3 sample application.
|
193
|
+
|
194
|
+
==== JavaScript SDK
|
195
|
+
|
196
|
+
fb_auth = FbGraph::Auth.new(YOUR_APP_ID, YOUR_APPLICATION_SECRET)
|
197
|
+
fb_auth.client # => OAuth2::Client
|
198
|
+
|
199
|
+
# get Facebook's auth cookie in advance using their JS SDK
|
200
|
+
fb_auth.from_cookie(cookies)
|
201
|
+
fb_auth.access_token # => OAuth2::AccessToken
|
202
|
+
fb_auth.user # => FbGraph::User (only basic attributes)
|
203
|
+
fb_auth.user.fetch # => fetch more details
|
204
|
+
|
205
|
+
==== Normal OAuth2 Flow
|
206
|
+
|
207
|
+
# redirect user to facebook
|
208
|
+
redirect_to fb_auth.client.web_server.authorize_url(
|
209
|
+
:redirect_uri => "http://your.client.com/facebook/callback",
|
210
|
+
:scope => "email,read_stream,offline_access"
|
211
|
+
)
|
212
|
+
|
213
|
+
# in callback
|
214
|
+
fb_auth.client.web_server.get_access_token(
|
215
|
+
params[:code],
|
216
|
+
:redirect_uri => callback_facebook_url
|
217
|
+
) # => OAuth2::AccessToken
|
218
|
+
FbGraph::User.me(access_token).fetch # => fetch user
|
219
|
+
|
220
|
+
=== Analytics
|
221
|
+
|
222
|
+
app = FbGraph::Application.new(YOUR_APP_ID, :secret => YOUR_APPLICATION_SECRET)
|
223
|
+
app.insights # => Array of FbGraph::Insight
|
224
|
+
|
193
225
|
== Note on Patches/Pull Requests
|
194
226
|
|
195
227
|
* Fork the project.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.1
|
data/fb_graph.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fb_graph}
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["nov matake"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-04}
|
13
13
|
s.description = %q{A Ruby wrapper for Facebook Graph API}
|
14
14
|
s.email = %q{nov@matake.jp}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/fb_graph/application.rb",
|
32
32
|
"lib/fb_graph/auth.rb",
|
33
33
|
"lib/fb_graph/auth/cookie.rb",
|
34
|
+
"lib/fb_graph/checkin.rb",
|
34
35
|
"lib/fb_graph/collection.rb",
|
35
36
|
"lib/fb_graph/comment.rb",
|
36
37
|
"lib/fb_graph/comparison.rb",
|
@@ -76,7 +77,9 @@ Gem::Specification.new do |s|
|
|
76
77
|
"lib/fb_graph/photo.rb",
|
77
78
|
"lib/fb_graph/post.rb",
|
78
79
|
"lib/fb_graph/searchable.rb",
|
80
|
+
"lib/fb_graph/searchable/result.rb",
|
79
81
|
"lib/fb_graph/status.rb",
|
82
|
+
"lib/fb_graph/subscription.rb",
|
80
83
|
"lib/fb_graph/tag.rb",
|
81
84
|
"lib/fb_graph/user.rb",
|
82
85
|
"lib/fb_graph/venue.rb",
|
@@ -154,6 +157,8 @@ Gem::Specification.new do |s|
|
|
154
157
|
"spec/fake_json/users/television/matake_private.json",
|
155
158
|
"spec/fake_json/users/videos/kirk_private.json",
|
156
159
|
"spec/fb_graph/album_spec.rb",
|
160
|
+
"spec/fb_graph/application_spec.rb",
|
161
|
+
"spec/fb_graph/auth_spec.rb",
|
157
162
|
"spec/fb_graph/collection_spec.rb",
|
158
163
|
"spec/fb_graph/comment_spec.rb",
|
159
164
|
"spec/fb_graph/connection_spec.rb",
|
@@ -188,6 +193,7 @@ Gem::Specification.new do |s|
|
|
188
193
|
"spec/fb_graph/education_spec.rb",
|
189
194
|
"spec/fb_graph/event_spec.rb",
|
190
195
|
"spec/fb_graph/group_spec.rb",
|
196
|
+
"spec/fb_graph/insight_spec.rb",
|
191
197
|
"spec/fb_graph/link_spec.rb",
|
192
198
|
"spec/fb_graph/node_spec.rb",
|
193
199
|
"spec/fb_graph/note_spec.rb",
|
@@ -211,6 +217,8 @@ Gem::Specification.new do |s|
|
|
211
217
|
s.summary = %q{A Ruby wrapper for Facebook Graph API}
|
212
218
|
s.test_files = [
|
213
219
|
"spec/fb_graph/album_spec.rb",
|
220
|
+
"spec/fb_graph/application_spec.rb",
|
221
|
+
"spec/fb_graph/auth_spec.rb",
|
214
222
|
"spec/fb_graph/collection_spec.rb",
|
215
223
|
"spec/fb_graph/comment_spec.rb",
|
216
224
|
"spec/fb_graph/connection_spec.rb",
|
@@ -245,6 +253,7 @@ Gem::Specification.new do |s|
|
|
245
253
|
"spec/fb_graph/education_spec.rb",
|
246
254
|
"spec/fb_graph/event_spec.rb",
|
247
255
|
"spec/fb_graph/group_spec.rb",
|
256
|
+
"spec/fb_graph/insight_spec.rb",
|
248
257
|
"spec/fb_graph/link_spec.rb",
|
249
258
|
"spec/fb_graph/node_spec.rb",
|
250
259
|
"spec/fb_graph/note_spec.rb",
|
data/lib/fb_graph/album.rb
CHANGED
@@ -3,31 +3,37 @@ module FbGraph
|
|
3
3
|
include Connections::Photos
|
4
4
|
include Connections::Comments
|
5
5
|
|
6
|
-
attr_accessor :from, :name, :description, :location, :link, :count, :created_time, :updated_time
|
6
|
+
attr_accessor :from, :name, :description, :location, :link, :privacy, :count, :created_time, :updated_time, :comments
|
7
7
|
|
8
|
-
def initialize(identifier,
|
8
|
+
def initialize(identifier, attributes = {})
|
9
9
|
super
|
10
|
-
if (from =
|
10
|
+
if (from = attributes[:from])
|
11
11
|
@from = if from[:category]
|
12
12
|
FbGraph::Page.new(from.delete(:id), from)
|
13
13
|
else
|
14
14
|
FbGraph::User.new(from.delete(:id), from)
|
15
15
|
end
|
16
16
|
end
|
17
|
-
@name
|
17
|
+
@name = attributes[:name]
|
18
18
|
# NOTE:
|
19
19
|
# for some reason, facebook uses different parameter names.
|
20
20
|
# "description" in GET & "message" in POST
|
21
|
-
|
22
|
-
|
23
|
-
@
|
24
|
-
@
|
25
|
-
|
26
|
-
|
21
|
+
# TODO:
|
22
|
+
# check whether this issue is solved or not
|
23
|
+
@description = attributes[:description] || attributes[:message]
|
24
|
+
@location = attributes[:location]
|
25
|
+
@link = attributes[:link]
|
26
|
+
@privacy = attributes[:privacy]
|
27
|
+
@count = attributes[:count]
|
28
|
+
if attributes[:created_time]
|
29
|
+
@created_time = Time.parse(attributes[:created_time]).utc
|
27
30
|
end
|
28
|
-
if
|
29
|
-
@updated_time = Time.parse(
|
31
|
+
if attributes[:updated_time]
|
32
|
+
@updated_time = Time.parse(attributes[:updated_time]).utc
|
30
33
|
end
|
34
|
+
|
35
|
+
# cached connection
|
36
|
+
@_comments_ = FbGraph::Collection.new(attributes[:comments])
|
31
37
|
end
|
32
38
|
end
|
33
39
|
end
|
data/lib/fb_graph/application.rb
CHANGED
@@ -1,17 +1,28 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class Application < Node
|
3
|
+
include Connections::Feed
|
4
|
+
include Connections::Posts
|
5
|
+
include Connections::Picture
|
6
|
+
include Connections::Tagged
|
7
|
+
include Connections::Links
|
8
|
+
include Connections::Photos
|
9
|
+
include Connections::Albums
|
10
|
+
include Connections::Statuses
|
11
|
+
include Connections::Videos
|
12
|
+
include Connections::Notes
|
13
|
+
include Connections::Events
|
14
|
+
# include Connections::Subscriptions # TODO
|
3
15
|
include Connections::Insights
|
4
16
|
|
5
|
-
attr_accessor :name, :description, :category, :
|
17
|
+
attr_accessor :name, :description, :category, :link, :secret
|
6
18
|
|
7
|
-
def initialize(client_id,
|
19
|
+
def initialize(client_id, attributes = {})
|
8
20
|
super
|
9
|
-
@name =
|
10
|
-
@description =
|
11
|
-
@category =
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@secret = options[:secret]
|
21
|
+
@name = attributes[:name]
|
22
|
+
@description = attributes[:description]
|
23
|
+
@category = attributes[:category]
|
24
|
+
@link = attributes[:link]
|
25
|
+
@secret = attributes[:secret]
|
15
26
|
end
|
16
27
|
|
17
28
|
def get_access_token(secret = nil)
|
data/lib/fb_graph/auth.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
module FbGraph
|
2
|
+
class Event < Node
|
3
|
+
attr_accessor :from, :tags, :place, :message, :coordinates, :application, :created_time
|
4
|
+
|
5
|
+
def initialize(identifier, attributes = {})
|
6
|
+
super
|
7
|
+
if (from = attributes[:from])
|
8
|
+
@from = FbGraph::User.new(from.delete(:id), from)
|
9
|
+
end
|
10
|
+
# TODO
|
11
|
+
# Checkin isn't available in Japan yet, so I can't use this feature yet.
|
12
|
+
# I'm very glad if someone helps me here.
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/fb_graph/comment.rb
CHANGED
@@ -2,18 +2,18 @@ module FbGraph
|
|
2
2
|
class Comment < Node
|
3
3
|
attr_accessor :from, :message, :created_time
|
4
4
|
|
5
|
-
def initialize(identifier,
|
5
|
+
def initialize(identifier, attributes = {})
|
6
6
|
super
|
7
|
-
if (from =
|
7
|
+
if (from = attributes[:from])
|
8
8
|
@from = if from[:category]
|
9
9
|
FbGraph::Page.new(from.delete(:id), from)
|
10
10
|
else
|
11
11
|
FbGraph::User.new(from.delete(:id), from)
|
12
12
|
end
|
13
13
|
end
|
14
|
-
@message =
|
15
|
-
if
|
16
|
-
@created_time = Time.parse(
|
14
|
+
@message = attributes[:message]
|
15
|
+
if attributes[:created_time]
|
16
|
+
@created_time = Time.parse(attributes[:created_time]).utc
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
data/lib/fb_graph/event.rb
CHANGED
@@ -11,16 +11,16 @@ module FbGraph
|
|
11
11
|
|
12
12
|
attr_accessor :owner, :name, :description, :start_time, :end_time, :location, :venue, :privacy, :updated_time
|
13
13
|
|
14
|
-
def initialize(identifier,
|
14
|
+
def initialize(identifier, attributes = {})
|
15
15
|
super
|
16
|
-
if (owner =
|
16
|
+
if (owner = attributes[:owner])
|
17
17
|
@owner = FbGraph::User.new(owner.delete(:id), owner)
|
18
18
|
end
|
19
|
-
@name =
|
20
|
-
@description =
|
21
|
-
@location =
|
22
|
-
@privacy =
|
23
|
-
if (start_time =
|
19
|
+
@name = attributes[:name]
|
20
|
+
@description = attributes[:description]
|
21
|
+
@location = attributes[:location]
|
22
|
+
@privacy = attributes[:privacy]
|
23
|
+
if (start_time = attributes[:start_time])
|
24
24
|
@start_time = case start_time
|
25
25
|
when String
|
26
26
|
Time.parse(start_time).utc
|
@@ -28,7 +28,7 @@ module FbGraph
|
|
28
28
|
Time.at(start_time).utc
|
29
29
|
end
|
30
30
|
end
|
31
|
-
if (end_time =
|
31
|
+
if (end_time = attributes[:end_time])
|
32
32
|
@end_time = case end_time
|
33
33
|
when String
|
34
34
|
Time.parse(end_time).utc
|
@@ -36,11 +36,11 @@ module FbGraph
|
|
36
36
|
Time.at(end_time).utc
|
37
37
|
end
|
38
38
|
end
|
39
|
-
if
|
40
|
-
@venue = FbGraph::Venue.new(
|
39
|
+
if attributes[:venue]
|
40
|
+
@venue = FbGraph::Venue.new(attributes[:venue])
|
41
41
|
end
|
42
|
-
if
|
43
|
-
@updated_time = Time.parse(
|
42
|
+
if attributes[:updated_time]
|
43
|
+
@updated_time = Time.parse(attributes[:updated_time]).utc
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
data/lib/fb_graph/insight.rb
CHANGED
@@ -2,12 +2,13 @@ module FbGraph
|
|
2
2
|
class Insight
|
3
3
|
include FbGraph::Comparison
|
4
4
|
|
5
|
-
attr_accessor :name, :period, :values
|
5
|
+
attr_accessor :name, :period, :values, :description
|
6
6
|
|
7
7
|
def initialize(attributes = {})
|
8
8
|
@name = attributes[:name]
|
9
9
|
@period = attributes[:period]
|
10
10
|
@values = attributes[:values].collect(&:with_indifferent_access)
|
11
|
+
@description = attributes[:description]
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
data/lib/fb_graph/link.rb
CHANGED
@@ -2,21 +2,25 @@ module FbGraph
|
|
2
2
|
class Link < Node
|
3
3
|
include Connections::Comments
|
4
4
|
|
5
|
-
attr_accessor :from, :link, :message, :
|
5
|
+
attr_accessor :from, :link, :caption, :description, :icon, :picture, :message, :created_time
|
6
6
|
|
7
|
-
def initialize(identifier,
|
7
|
+
def initialize(identifier, attributes = {})
|
8
8
|
super
|
9
|
-
if (from =
|
9
|
+
if (from = attributes[:from])
|
10
10
|
@from = if from[:category]
|
11
11
|
FbGraph::Page.new(from.delete(:id), from)
|
12
12
|
else
|
13
13
|
FbGraph::User.new(from.delete(:id), from)
|
14
14
|
end
|
15
15
|
end
|
16
|
-
@link
|
17
|
-
@
|
18
|
-
|
19
|
-
|
16
|
+
@link = attributes[:link]
|
17
|
+
@caption = attributes[:caption]
|
18
|
+
@description = attributes[:description]
|
19
|
+
@icon = attributes[:icon]
|
20
|
+
@picture = attributes[:picture]
|
21
|
+
@message = attributes[:message]
|
22
|
+
if attributes[:created_time]
|
23
|
+
@created_time = Time.parse(attributes[:created_time]).utc
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
data/lib/fb_graph/note.rb
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class Note < Node
|
3
3
|
include Connections::Comments
|
4
|
+
include Connections::Likes
|
4
5
|
|
5
|
-
attr_accessor :from, :subject, :message, :created_time, :updated_time
|
6
|
+
attr_accessor :from, :subject, :message, :created_time, :updated_time, :icon
|
6
7
|
|
7
|
-
def initialize(identifier,
|
8
|
+
def initialize(identifier, attributes = {})
|
8
9
|
super
|
9
|
-
if (from =
|
10
|
+
if (from = attributes[:from])
|
10
11
|
@from = if from[:category]
|
11
12
|
FbGraph::Page.new(from.delete(:id), from)
|
12
13
|
else
|
13
14
|
FbGraph::User.new(from.delete(:id), from)
|
14
15
|
end
|
15
16
|
end
|
16
|
-
@subject
|
17
|
-
@message
|
18
|
-
if
|
19
|
-
@created_time = Time.parse(
|
17
|
+
@subject = attributes[:subject]
|
18
|
+
@message = attributes[:message]
|
19
|
+
if attributes[:created_time]
|
20
|
+
@created_time = Time.parse(attributes[:created_time]).utc
|
20
21
|
end
|
21
|
-
if
|
22
|
-
@updated_time = Time.parse(
|
22
|
+
if attributes[:updated_time]
|
23
|
+
@updated_time = Time.parse(attributes[:updated_time]).utc
|
23
24
|
end
|
25
|
+
@icon = attributes[:icon]
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
data/lib/fb_graph/page.rb
CHANGED
@@ -11,15 +11,24 @@ module FbGraph
|
|
11
11
|
include Connections::Videos
|
12
12
|
include Connections::Notes
|
13
13
|
include Connections::Posts
|
14
|
+
include Connections::Members
|
14
15
|
include Connections::Events
|
15
16
|
extend Searchable
|
16
17
|
|
17
|
-
attr_accessor :name, :category
|
18
|
+
attr_accessor :name, :link, :category, :founded, :company_overview, :mission, :products, :fan_count
|
18
19
|
|
19
|
-
def initialize(identifier,
|
20
|
+
def initialize(identifier, attributes = {})
|
20
21
|
super
|
21
|
-
@name =
|
22
|
-
@
|
22
|
+
@name = attributes[:name]
|
23
|
+
@link = attributes[:link]
|
24
|
+
@category = attributes[:category]
|
25
|
+
@founded = attributes[:founded]
|
26
|
+
@company_overview = attributes[:company_overview]
|
27
|
+
@mission = attributes[:mission]
|
28
|
+
if (products = attributes[:products])
|
29
|
+
@products = products.split "\n"
|
30
|
+
end
|
31
|
+
@fan_count = attributes[:fan_count]
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
data/lib/fb_graph/photo.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class Photo < Node
|
3
3
|
include Connections::Comments
|
4
|
+
include Connections::Likes
|
4
5
|
|
5
6
|
attr_accessor :from, :tags, :name, :picture, :source, :height, :width, :link, :created_time, :updated_time
|
6
7
|
|
7
|
-
def initialize(identifier,
|
8
|
+
def initialize(identifier, attributes = {})
|
8
9
|
super
|
9
|
-
if (from =
|
10
|
+
if (from = attributes[:from])
|
10
11
|
@from = if from[:category]
|
11
12
|
FbGraph::Page.new(from.delete(:id), from)
|
12
13
|
else
|
@@ -14,25 +15,25 @@ module FbGraph
|
|
14
15
|
end
|
15
16
|
end
|
16
17
|
@tags = []
|
17
|
-
if
|
18
|
-
FbGraph::Collection.new(
|
18
|
+
if attributes[:tags]
|
19
|
+
FbGraph::Collection.new(attributes[:tags]).each do |tag|
|
19
20
|
@tags << FbGraph::Tag.new(tag.delete(:id), tag)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
# NOTE:
|
23
24
|
# for some reason, facebook uses different parameter names.
|
24
25
|
# "name" in GET & "message" in POST
|
25
|
-
@name =
|
26
|
-
@picture =
|
27
|
-
@source =
|
28
|
-
@height =
|
29
|
-
@width =
|
30
|
-
@link =
|
31
|
-
if
|
32
|
-
@created_time = Time.parse(
|
26
|
+
@name = attributes[:name] || attributes[:message]
|
27
|
+
@picture = attributes[:picture]
|
28
|
+
@source = attributes[:source]
|
29
|
+
@height = attributes[:height]
|
30
|
+
@width = attributes[:width]
|
31
|
+
@link = attributes[:link]
|
32
|
+
if attributes[:created_time]
|
33
|
+
@created_time = Time.parse(attributes[:created_time]).utc
|
33
34
|
end
|
34
|
-
if
|
35
|
-
@updated_time = Time.parse(
|
35
|
+
if attributes[:updated_time]
|
36
|
+
@updated_time = Time.parse(attributes[:updated_time]).utc
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
data/lib/fb_graph/post.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class Post < Node
|
3
3
|
include Connections::Comments
|
4
|
+
include Connections::Likes
|
4
5
|
extend Searchable
|
5
6
|
|
6
7
|
attr_accessor :from, :to, :message, :picture, :link, :name, :caption, :description, :source, :icon, :attribution, :actions, :likes, :created_time, :updated_time
|
7
8
|
|
8
|
-
def initialize(identifier,
|
9
|
+
def initialize(identifier, attributes = {})
|
9
10
|
super
|
10
|
-
if (from =
|
11
|
+
if (from = attributes[:from])
|
11
12
|
@from = if from[:category]
|
12
13
|
FbGraph::Page.new(from.delete(:id), from)
|
13
14
|
else
|
@@ -15,8 +16,8 @@ module FbGraph
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
@to = []
|
18
|
-
if
|
19
|
-
FbGraph::Collection.new(
|
19
|
+
if attributes[:to]
|
20
|
+
FbGraph::Collection.new(attributes[:to]).each do |to|
|
20
21
|
@to << if to[:category]
|
21
22
|
FbGraph::Page.new(to.delete(:id), to)
|
22
23
|
else
|
@@ -24,26 +25,26 @@ module FbGraph
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
27
|
-
@message =
|
28
|
-
@picture =
|
29
|
-
@link =
|
30
|
-
@name =
|
31
|
-
@caption =
|
32
|
-
@description =
|
33
|
-
@source =
|
34
|
-
@icon =
|
35
|
-
@attribution =
|
36
|
-
@actions =
|
37
|
-
@likes =
|
38
|
-
if
|
39
|
-
@created_time = Time.parse(
|
28
|
+
@message = attributes[:message]
|
29
|
+
@picture = attributes[:picture]
|
30
|
+
@link = attributes[:link]
|
31
|
+
@name = attributes[:name]
|
32
|
+
@caption = attributes[:caption]
|
33
|
+
@description = attributes[:description]
|
34
|
+
@source = attributes[:source]
|
35
|
+
@icon = attributes[:icon]
|
36
|
+
@attribution = attributes[:attribution]
|
37
|
+
@actions = attributes[:actions]
|
38
|
+
@likes = attributes[:likes]
|
39
|
+
if attributes[:created_time]
|
40
|
+
@created_time = Time.parse(attributes[:created_time]).utc
|
40
41
|
end
|
41
|
-
if
|
42
|
-
@updated_time = Time.parse(
|
42
|
+
if attributes[:updated_time]
|
43
|
+
@updated_time = Time.parse(attributes[:updated_time]).utc
|
43
44
|
end
|
44
45
|
|
45
46
|
# cached connection
|
46
|
-
@_comments_ = FbGraph::Collection.new(
|
47
|
+
@_comments_ = FbGraph::Collection.new(attributes[:comments])
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module FbGraph
|
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) || FbGraph::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.klassf.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
|
data/lib/fb_graph/searchable.rb
CHANGED
@@ -19,33 +19,7 @@ module FbGraph
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
23
|
-
class Result < Collection
|
24
|
-
attr_accessor :query, :klass, :collection, :options
|
25
|
-
|
26
|
-
def initialize(query, klass, options = {})
|
27
|
-
@klass = klass
|
28
|
-
@query = query
|
29
|
-
@options = options
|
30
|
-
@collection = options.delete(:collection) || FbGraph::Collection.new
|
31
|
-
replace @collection
|
32
|
-
end
|
33
|
-
|
34
|
-
def next(_options_ = {})
|
35
|
-
if self.collection.next.present?
|
36
|
-
self.klass.search(self.query, self.options.merge(_options_).merge(self.collection.next))
|
37
|
-
else
|
38
|
-
self.class.new(self.query, self.klass)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def previous(_options_ = {})
|
43
|
-
if self.collection.previous.present?
|
44
|
-
self.klassf.search(self.query, self.options.merge(_options_).merge(self.collection.previous))
|
45
|
-
else
|
46
|
-
self.class.new(self.query, self.klass)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
22
|
end
|
51
|
-
end
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'fb_graph/searchable/result'
|
data/lib/fb_graph/status.rb
CHANGED
data/lib/fb_graph/user.rb
CHANGED
@@ -21,6 +21,11 @@ module FbGraph
|
|
21
21
|
include Connections::Links
|
22
22
|
include Connections::Notes
|
23
23
|
include Connections::Events
|
24
|
+
# TODO
|
25
|
+
# include Connections::Inbox
|
26
|
+
# include Connections::Outbox
|
27
|
+
# include Connections::Updates
|
28
|
+
# include Connections::Accounts
|
24
29
|
extend Searchable
|
25
30
|
|
26
31
|
# TODO:
|
@@ -28,7 +33,7 @@ module FbGraph
|
|
28
33
|
# include Connections::Outbox
|
29
34
|
# include Connections::Updates
|
30
35
|
|
31
|
-
attr_accessor :first_name, :last_name, :name, :link, :about, :birthday, :work, :education, :email, :website, :hometown, :location, :gender, :interested_in, :meeting_for, :relationship_status, :religion, :political, :verified, :significant_other, :timezone, :updated_time
|
36
|
+
attr_accessor :first_name, :last_name, :name, :link, :about, :birthday, :work, :education, :email, :website, :hometown, :location, :bio, :quotes, :gender, :interested_in, :meeting_for, :relationship_status, :religion, :political, :verified, :significant_other, :timezone, :updated_time
|
32
37
|
|
33
38
|
def initialize(identifier, options = {})
|
34
39
|
super
|
@@ -62,6 +67,8 @@ module FbGraph
|
|
62
67
|
if (location = options[:location])
|
63
68
|
@location = FbGraph::Page.new(location.delete(:id), location)
|
64
69
|
end
|
70
|
+
@bio = options[:bio]
|
71
|
+
@quotes = options[:quotes]
|
65
72
|
@gender = options[:gender]
|
66
73
|
@interested_in = Array(options[:interested_in])
|
67
74
|
@meeting_for = Array(options[:meeting_for])
|
data/lib/fb_graph/video.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"id": "19292868552",
|
3
3
|
"name": "Facebook Platform",
|
4
|
-
"picture": "http://profile.ak.fbcdn.net/object3/1566/8/s19292868552_1660.jpg",
|
4
|
+
"picture": "http://profile.ak.fbcdn.net/profile-ak-snc1/object3/1566/8/s19292868552_1660.jpg",
|
5
5
|
"link": "http://www.facebook.com/platform",
|
6
6
|
"category": "Technology",
|
7
7
|
"username": "platform",
|
@@ -9,5 +9,5 @@
|
|
9
9
|
"company_overview": "Facebook Platform enables anyone to build social applications on Facebook and the web.",
|
10
10
|
"mission": "To make the web more open and social.",
|
11
11
|
"products": "Facebook Application Programming Interface (API)\nFacebook Query Language (FQL)\nFacebook Markup Language (FBML)\nFacebook JavaScript (FBJS)\nFacebook Connect\n",
|
12
|
-
"fan_count":
|
12
|
+
"fan_count": 578214
|
13
13
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"id": "19292868552",
|
3
3
|
"name": "Facebook Platform",
|
4
|
-
"picture": "http://profile.ak.fbcdn.net/object3/1566/8/s19292868552_1660.jpg",
|
4
|
+
"picture": "http://profile.ak.fbcdn.net/profile-ak-snc1/object3/1566/8/s19292868552_1660.jpg",
|
5
5
|
"link": "http://www.facebook.com/platform",
|
6
6
|
"category": "Technology",
|
7
7
|
"username": "platform",
|
@@ -9,5 +9,5 @@
|
|
9
9
|
"company_overview": "Facebook Platform enables anyone to build social applications on Facebook and the web.",
|
10
10
|
"mission": "To make the web more open and social.",
|
11
11
|
"products": "Facebook Application Programming Interface (API)\nFacebook Query Language (FQL)\nFacebook Markup Language (FBML)\nFacebook JavaScript (FBJS)\nFacebook Connect\n",
|
12
|
-
"fan_count":
|
12
|
+
"fan_count": 578214
|
13
13
|
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../spec_helper')
|
2
|
+
|
3
|
+
describe FbGraph::Application, '.new' do
|
4
|
+
|
5
|
+
it 'should setup all supported attributes' do
|
6
|
+
attributes = {
|
7
|
+
:id => '12345',
|
8
|
+
:name => 'FbGraph',
|
9
|
+
:description => 'Owsome Facebook Graph Wrapper',
|
10
|
+
:category => 'Programming',
|
11
|
+
:link => 'http://github.com/nov/fb_graph',
|
12
|
+
:secret => 'sec sec'
|
13
|
+
}
|
14
|
+
app = FbGraph::Application.new(attributes.delete(:id), attributes)
|
15
|
+
app.identifier.should == '12345'
|
16
|
+
app.name.should == 'FbGraph'
|
17
|
+
app.description.should == 'Owsome Facebook Graph Wrapper'
|
18
|
+
app.category.should == 'Programming'
|
19
|
+
app.link.should == 'http://github.com/nov/fb_graph'
|
20
|
+
app.secret.should == 'sec sec'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../spec_helper')
|
2
|
+
|
3
|
+
describe FbGraph::Auth, '.new' do
|
4
|
+
|
5
|
+
it 'should setup OAuth2::Client' do
|
6
|
+
auth = FbGraph::Auth.new('client_id', 'client_secret')
|
7
|
+
auth.client.should be_a(OAuth2::Client)
|
8
|
+
auth.client.id.should == 'client_id'
|
9
|
+
auth.client.secret.should == 'client_secret'
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'when invalid cookie given' do
|
13
|
+
it 'should raise FbGraph::VerificationFailed' do
|
14
|
+
lambda do
|
15
|
+
FbGraph::Auth.new('client_id', 'client_secret', :cookie => 'invalid')
|
16
|
+
end.should raise_exception(FbGraph::Auth::VerificationFailed)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe FbGraph::Auth, '.from_cookie' do
|
23
|
+
before do
|
24
|
+
@auth = FbGraph::Auth.new('client_id', 'client_secret')
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when invalid cookie given' do
|
28
|
+
it 'should raise FbGraph::VerificationFailed' do
|
29
|
+
lambda do
|
30
|
+
@auth.from_cookie('invalid')
|
31
|
+
end.should raise_exception(FbGraph::Auth::VerificationFailed)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -28,6 +28,7 @@ context 'when included by FbGraph::User' do
|
|
28
28
|
:name => 'モバイルアップロード',
|
29
29
|
:link => 'http://www.facebook.com/album.php?aid=25463&id=579612276',
|
30
30
|
:count => 3,
|
31
|
+
:privacy => 'everyone',
|
31
32
|
:created_time => '2008-07-27T11:38:15+0000',
|
32
33
|
:updated_time => '2009-02-07T16:09:53+0000'
|
33
34
|
)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../spec_helper')
|
2
|
+
|
3
|
+
describe FbGraph::Insight, '.new' do
|
4
|
+
|
5
|
+
it 'should setup all supported attributes' do
|
6
|
+
attributes = {
|
7
|
+
:name => 'name_for_the_stats',
|
8
|
+
:period => 'day',
|
9
|
+
:values => [{'key1' => 'value2'}, {'key2' => 'value2'}]
|
10
|
+
}
|
11
|
+
insight = FbGraph::Insight.new(attributes)
|
12
|
+
insight.period.should == 'day'
|
13
|
+
insight.values.should == [{'key1' => 'value2'}, {'key2' => 'value2'}]
|
14
|
+
insight.values.first[:key1].should == 'value2'
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/spec/fb_graph/link_spec.rb
CHANGED
@@ -11,14 +11,14 @@ describe FbGraph::Link, '.new' do
|
|
11
11
|
},
|
12
12
|
:link => 'http://www.facebook.com/link/12345',
|
13
13
|
:message => 'check this out!',
|
14
|
-
:
|
14
|
+
:created_time => '2010-01-02T15:37:41+0000'
|
15
15
|
}
|
16
16
|
link = FbGraph::Link.new(attributes.delete(:id), attributes)
|
17
17
|
link.identifier.should == '12345'
|
18
18
|
link.from.should == FbGraph::User.new('23456', :name => 'nov matake')
|
19
19
|
link.link.should == 'http://www.facebook.com/link/12345'
|
20
20
|
link.message.should == 'check this out!'
|
21
|
-
link.
|
21
|
+
link.created_time.should == Time.parse('2010-01-02T15:37:41+0000')
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should support page as from' do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fb_graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 1
|
10
|
+
version: 0.7.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- nov matake
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-04 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/fb_graph/application.rb
|
144
144
|
- lib/fb_graph/auth.rb
|
145
145
|
- lib/fb_graph/auth/cookie.rb
|
146
|
+
- lib/fb_graph/checkin.rb
|
146
147
|
- lib/fb_graph/collection.rb
|
147
148
|
- lib/fb_graph/comment.rb
|
148
149
|
- lib/fb_graph/comparison.rb
|
@@ -188,7 +189,9 @@ files:
|
|
188
189
|
- lib/fb_graph/photo.rb
|
189
190
|
- lib/fb_graph/post.rb
|
190
191
|
- lib/fb_graph/searchable.rb
|
192
|
+
- lib/fb_graph/searchable/result.rb
|
191
193
|
- lib/fb_graph/status.rb
|
194
|
+
- lib/fb_graph/subscription.rb
|
192
195
|
- lib/fb_graph/tag.rb
|
193
196
|
- lib/fb_graph/user.rb
|
194
197
|
- lib/fb_graph/venue.rb
|
@@ -266,6 +269,8 @@ files:
|
|
266
269
|
- spec/fake_json/users/television/matake_private.json
|
267
270
|
- spec/fake_json/users/videos/kirk_private.json
|
268
271
|
- spec/fb_graph/album_spec.rb
|
272
|
+
- spec/fb_graph/application_spec.rb
|
273
|
+
- spec/fb_graph/auth_spec.rb
|
269
274
|
- spec/fb_graph/collection_spec.rb
|
270
275
|
- spec/fb_graph/comment_spec.rb
|
271
276
|
- spec/fb_graph/connection_spec.rb
|
@@ -300,6 +305,7 @@ files:
|
|
300
305
|
- spec/fb_graph/education_spec.rb
|
301
306
|
- spec/fb_graph/event_spec.rb
|
302
307
|
- spec/fb_graph/group_spec.rb
|
308
|
+
- spec/fb_graph/insight_spec.rb
|
303
309
|
- spec/fb_graph/link_spec.rb
|
304
310
|
- spec/fb_graph/node_spec.rb
|
305
311
|
- spec/fb_graph/note_spec.rb
|
@@ -351,6 +357,8 @@ specification_version: 3
|
|
351
357
|
summary: A Ruby wrapper for Facebook Graph API
|
352
358
|
test_files:
|
353
359
|
- spec/fb_graph/album_spec.rb
|
360
|
+
- spec/fb_graph/application_spec.rb
|
361
|
+
- spec/fb_graph/auth_spec.rb
|
354
362
|
- spec/fb_graph/collection_spec.rb
|
355
363
|
- spec/fb_graph/comment_spec.rb
|
356
364
|
- spec/fb_graph/connection_spec.rb
|
@@ -385,6 +393,7 @@ test_files:
|
|
385
393
|
- spec/fb_graph/education_spec.rb
|
386
394
|
- spec/fb_graph/event_spec.rb
|
387
395
|
- spec/fb_graph/group_spec.rb
|
396
|
+
- spec/fb_graph/insight_spec.rb
|
388
397
|
- spec/fb_graph/link_spec.rb
|
389
398
|
- spec/fb_graph/node_spec.rb
|
390
399
|
- spec/fb_graph/note_spec.rb
|