fb_graph 0.3.0 → 0.4.0

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.
data/Rakefile CHANGED
@@ -13,6 +13,7 @@ begin
13
13
  gem.add_dependency 'json'
14
14
  gem.add_dependency 'activesupport'
15
15
  gem.add_dependency 'rest-client', '>= 1.4'
16
+ gem.add_dependency 'oauth2', '>= 0.0.10'
16
17
  gem.add_development_dependency 'rspec'
17
18
  gem.add_development_dependency 'rcov'
18
19
  gem.add_development_dependency 'fakeweb'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
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.3.0"
8
+ s.version = "0.4.0"
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-08-04}
12
+ s.date = %q{2010-08-05}
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 = [
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
28
28
  "fb_graph.gemspec",
29
29
  "lib/fb_graph.rb",
30
30
  "lib/fb_graph/album.rb",
31
+ "lib/fb_graph/auth.rb",
32
+ "lib/fb_graph/auth/cookie.rb",
31
33
  "lib/fb_graph/collection.rb",
32
34
  "lib/fb_graph/comment.rb",
33
35
  "lib/fb_graph/comparison.rb",
@@ -262,6 +264,7 @@ Gem::Specification.new do |s|
262
264
  s.add_runtime_dependency(%q<json>, [">= 0"])
263
265
  s.add_runtime_dependency(%q<activesupport>, [">= 0"])
264
266
  s.add_runtime_dependency(%q<rest-client>, [">= 1.4"])
267
+ s.add_runtime_dependency(%q<oauth2>, [">= 0.0.10"])
265
268
  s.add_development_dependency(%q<rspec>, [">= 0"])
266
269
  s.add_development_dependency(%q<rcov>, [">= 0"])
267
270
  s.add_development_dependency(%q<fakeweb>, [">= 0"])
@@ -269,6 +272,7 @@ Gem::Specification.new do |s|
269
272
  s.add_dependency(%q<json>, [">= 0"])
270
273
  s.add_dependency(%q<activesupport>, [">= 0"])
271
274
  s.add_dependency(%q<rest-client>, [">= 1.4"])
275
+ s.add_dependency(%q<oauth2>, [">= 0.0.10"])
272
276
  s.add_dependency(%q<rspec>, [">= 0"])
273
277
  s.add_dependency(%q<rcov>, [">= 0"])
274
278
  s.add_dependency(%q<fakeweb>, [">= 0"])
@@ -277,6 +281,7 @@ Gem::Specification.new do |s|
277
281
  s.add_dependency(%q<json>, [">= 0"])
278
282
  s.add_dependency(%q<activesupport>, [">= 0"])
279
283
  s.add_dependency(%q<rest-client>, [">= 1.4"])
284
+ s.add_dependency(%q<oauth2>, [">= 0.0.10"])
280
285
  s.add_dependency(%q<rspec>, [">= 0"])
281
286
  s.add_dependency(%q<rcov>, [">= 0"])
282
287
  s.add_dependency(%q<fakeweb>, [">= 0"])
data/lib/fb_graph.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'json'
3
3
  require 'restclient'
4
+ require 'oauth2'
4
5
 
5
6
  # NOTE:
6
7
  # For some reason, ActiveSupport 3.0.0 doesn'tj load whole code.
@@ -37,6 +38,7 @@ module FbGraph
37
38
 
38
39
  end
39
40
 
41
+ require 'fb_graph/auth'
40
42
  require 'fb_graph/comparison'
41
43
  require 'fb_graph/collection'
42
44
  require 'fb_graph/connections'
@@ -0,0 +1,32 @@
1
+ module FbGraph
2
+ class Auth
3
+ class VerificationFailed < FbGraph::Exception; end
4
+
5
+ attr_accessor :client, :access_token, :user
6
+
7
+ def initialize(client_id, client_secret, options = {})
8
+ @client = OAuth2::Client.new(client_id, client_secret, options.merge(
9
+ :site => FbGraph::ROOT_URL
10
+ ))
11
+ if options[:cookie].present?
12
+ from_cookie(options[:cookie])
13
+ end
14
+ end
15
+
16
+ def from_cookie(cookie)
17
+ cookie = FbGraph::Auth::Cookie.parse(self.client, cookie)
18
+ self.access_token = OAuth2::AccessToken.new(
19
+ self.client,
20
+ cookie[:access_token],
21
+ cookie[:refresh_token],
22
+ cookie[:expires]
23
+ )
24
+ self.user = FbGraph::User.new(cookie[:uid], :access_token => self.access_token)
25
+ self
26
+ end
27
+ end
28
+ end
29
+
30
+ Dir[File.dirname(__FILE__) + '/auth/*.rb'].each do |file|
31
+ require file
32
+ end
@@ -0,0 +1,41 @@
1
+ require 'digest/md5'
2
+
3
+ module FbGraph
4
+ class Auth
5
+ class Cookie
6
+ def self.parse(client, cookie)
7
+ fb_cookie_string = if cookie.is_a?(Hash)
8
+ cookie["fbs_#{client.id}"]
9
+ else
10
+ cookie
11
+ end
12
+
13
+ raise VerificationFailed.new(401, 'Facebook cookie not found') if fb_cookie_string.blank?
14
+
15
+ fb_cookie_string.gsub!(/[\\"]/, '')
16
+ signature, fb_cookie = '', {}
17
+ fb_cookie_string.split('&').each do |kv|
18
+ k, v = kv.split('=')
19
+ if k == 'sig'
20
+ signature = v
21
+ else
22
+ v = v.to_i if ['uid', 'expires'].include?(k)
23
+ fb_cookie[k] = v
24
+ end
25
+ end
26
+
27
+ signature_base_string = fb_cookie.to_a.sort do |a, b|
28
+ a[0] <=> b[0] || a[1] <=> b[1]
29
+ end.map do |(k, v)|
30
+ "#{k}=#{v}"
31
+ end.join
32
+
33
+ unless Digest::MD5.hexdigest("#{signature_base_string}#{client.secret}") == signature
34
+ raise VerificationFailed.new(401, 'Facebook cookie signature invalid')
35
+ end
36
+
37
+ fb_cookie.with_indifferent_access
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/fb_graph/node.rb CHANGED
@@ -13,7 +13,7 @@ module FbGraph
13
13
  def fetch(options = {})
14
14
  options[:access_token] ||= self.access_token if self.access_token
15
15
  _fetched_ = get(options)
16
- self.class.new(_fetched_.delete(:id), _fetched_)
16
+ self.class.new(_fetched_.delete(:id), _fetched_.merge(:access_token => options[:access_token]))
17
17
  end
18
18
 
19
19
  def self.fetch(identifier, options = {})
@@ -59,7 +59,12 @@ module FbGraph
59
59
  else
60
60
  self.endpoint
61
61
  end
62
+
62
63
  params[:access_token] ||= self.access_token
64
+ if params[:access_token].is_a?(OAuth2::AccessToken)
65
+ params[:access_token] = params[:access_token].token
66
+ end
67
+
63
68
  params.delete_if do |k, v|
64
69
  v.blank?
65
70
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - nov matake
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-04 00:00:00 +09:00
17
+ date: 2010-08-05 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -55,7 +55,7 @@ dependencies:
55
55
  type: :runtime
56
56
  version_requirements: *id003
57
57
  - !ruby/object:Gem::Dependency
58
- name: rspec
58
+ name: oauth2
59
59
  prerelease: false
60
60
  requirement: &id004 !ruby/object:Gem::Requirement
61
61
  requirements:
@@ -63,11 +63,13 @@ dependencies:
63
63
  - !ruby/object:Gem::Version
64
64
  segments:
65
65
  - 0
66
- version: "0"
67
- type: :development
66
+ - 0
67
+ - 10
68
+ version: 0.0.10
69
+ type: :runtime
68
70
  version_requirements: *id004
69
71
  - !ruby/object:Gem::Dependency
70
- name: rcov
72
+ name: rspec
71
73
  prerelease: false
72
74
  requirement: &id005 !ruby/object:Gem::Requirement
73
75
  requirements:
@@ -79,7 +81,7 @@ dependencies:
79
81
  type: :development
80
82
  version_requirements: *id005
81
83
  - !ruby/object:Gem::Dependency
82
- name: fakeweb
84
+ name: rcov
83
85
  prerelease: false
84
86
  requirement: &id006 !ruby/object:Gem::Requirement
85
87
  requirements:
@@ -90,6 +92,18 @@ dependencies:
90
92
  version: "0"
91
93
  type: :development
92
94
  version_requirements: *id006
95
+ - !ruby/object:Gem::Dependency
96
+ name: fakeweb
97
+ prerelease: false
98
+ requirement: &id007 !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :development
106
+ version_requirements: *id007
93
107
  description: A Ruby wrapper for Facebook Graph API
94
108
  email: nov@matake.jp
95
109
  executables: []
@@ -111,6 +125,8 @@ files:
111
125
  - fb_graph.gemspec
112
126
  - lib/fb_graph.rb
113
127
  - lib/fb_graph/album.rb
128
+ - lib/fb_graph/auth.rb
129
+ - lib/fb_graph/auth/cookie.rb
114
130
  - lib/fb_graph/collection.rb
115
131
  - lib/fb_graph/comment.rb
116
132
  - lib/fb_graph/comparison.rb