fb_graph 1.9.5 → 2.0.0.alpha

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fb_graph (1.9.4)
4
+ fb_graph (1.9.5)
5
5
  httpclient (>= 2.2.0.2)
6
6
  rack-oauth2 (>= 0.8.0)
7
7
 
@@ -37,10 +37,11 @@ GEM
37
37
  jruby-openssl (0.7.4)
38
38
  bouncy-castle-java
39
39
  json (1.5.3)
40
+ json (1.5.3-java)
40
41
  rack (1.2.3)
41
42
  rack-mount (0.6.14)
42
43
  rack (>= 1.0.0)
43
- rack-oauth2 (0.8.5)
44
+ rack-oauth2 (0.8.7)
44
45
  activesupport (>= 2.3)
45
46
  attr_required (>= 0.0.3)
46
47
  httpclient (>= 2.2.0.2)
@@ -50,8 +51,8 @@ GEM
50
51
  rack-test (0.5.7)
51
52
  rack (>= 1.0)
52
53
  rake (0.9.2)
53
- rcov (0.9.9)
54
- rcov (0.9.9-java)
54
+ rcov (0.9.10)
55
+ rcov (0.9.10-java)
55
56
  rspec (2.6.0)
56
57
  rspec-core (~> 2.6.0)
57
58
  rspec-expectations (~> 2.6.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.5
1
+ 2.0.0.alpha
@@ -6,38 +6,14 @@ module FbGraph
6
6
  # If you want access token, use FbGraph::Auth.new(APP_ID, APP_SECRET, :cookie => {..}) instead
7
7
  class Cookie
8
8
  def self.parse(client, cookie)
9
- fb_cookie_string = case cookie
9
+ signed_request = case cookie
10
10
  when String
11
11
  cookie
12
12
  else
13
- cookie["fbs_#{client.identifier}"]
13
+ cookie["fbsr_#{client.identifier}"]
14
14
  end
15
-
16
- raise VerificationFailed.new(401, 'Facebook cookie not found') if fb_cookie_string.blank?
17
-
18
- fb_cookie_string.gsub!(/[\\"]/, '')
19
- signature, fb_cookie = '', {}
20
- fb_cookie_string.split('&').each do |kv|
21
- k, v = kv.split('=')
22
- if k == 'sig'
23
- signature = v
24
- else
25
- v = v.to_i if k == 'expires'
26
- fb_cookie[k] = v
27
- end
28
- end
29
-
30
- signature_base_string = fb_cookie.to_a.sort do |a, b|
31
- a[0] <=> b[0] || a[1] <=> b[1]
32
- end.map do |(k, v)|
33
- "#{k}=#{v}"
34
- end.join
35
-
36
- unless Digest::MD5.hexdigest("#{signature_base_string}#{client.secret}") == signature
37
- raise VerificationFailed.new(401, 'Facebook cookie signature invalid')
38
- end
39
-
40
- fb_cookie.with_indifferent_access
15
+ raise VerificationFailed.new('Facebook cookie not found') if signed_request.blank?
16
+ SignedRequest.verify(client, signed_request)
41
17
  end
42
18
  end
43
19
  end
@@ -8,27 +8,27 @@ module FbGraph
8
8
 
9
9
  def self.verify(client, signed_request)
10
10
  signature, payload = signed_request.split('.')
11
- raise VerificationFailed.new(401, 'No Signature') if signature.blank?
12
- raise VerificationFailed.new(401, 'No Payload') if payload.blank?
11
+ raise VerificationFailed.new('No Signature') if signature.blank?
12
+ raise VerificationFailed.new('No Payload') if payload.blank?
13
13
  signature = base64_url_decode signature
14
14
  data = decode_json base64_url_decode(payload)
15
- raise VerificationFailed.new(401, 'Unexpected Signature Algorithm') unless data[:algorithm] == 'HMAC-SHA256'
15
+ raise VerificationFailed.new('Unexpected Signature Algorithm') unless data[:algorithm] == 'HMAC-SHA256'
16
16
  _signature_ = sign(client.secret, payload)
17
- raise VerificationFailed.new(401, 'Signature Invalid') unless signature == _signature_
17
+ raise VerificationFailed.new('Signature Invalid') unless signature == _signature_
18
18
  data
19
19
  end
20
20
 
21
21
  private
22
22
 
23
- def self.sign(key, data)
23
+ def self.sign(key, payload)
24
24
  klass = OpenSSL::Digest::SHA256.new
25
- OpenSSL::HMAC.digest(klass, key, data)
25
+ OpenSSL::HMAC.digest(klass, key, payload)
26
26
  end
27
27
 
28
28
  def self.decode_json(json)
29
29
  JSON.parse(json).with_indifferent_access
30
30
  rescue => e
31
- raise VerificationFailed.new(400, 'Invalid JSON')
31
+ raise VerificationFailed.new('Invalid JSON')
32
32
  end
33
33
 
34
34
  def self.base64_url_decode(str)
data/lib/fb_graph/auth.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module FbGraph
2
2
  class Auth
3
- class VerificationFailed < Exception; end
3
+ class VerificationFailed < BadRequest; end
4
4
 
5
5
  attr_accessor :client, :access_token, :user, :data
6
6
 
@@ -35,25 +35,31 @@ module FbGraph
35
35
  end
36
36
 
37
37
  def from_cookie(cookie)
38
- data = Cookie.parse(self.client, cookie)
39
- self.access_token = build_access_token(data)
40
- self.user = User.new(data[:uid], :access_token => self.access_token)
41
- self.data = data
38
+ self.data = Cookie.parse(client, cookie)
39
+ get_access_token! data[:code]
42
40
  self
43
41
  end
44
42
 
45
43
  def from_signed_request(signed_request)
46
- data = SignedRequest.verify(self.client, signed_request)
47
- if data[:oauth_token]
44
+ self.data = SignedRequest.verify(client, signed_request)
45
+ if self.data[:oauth_token]
48
46
  self.access_token = build_access_token(data)
49
47
  self.user = User.new(data[:user_id], :access_token => self.access_token)
50
48
  end
51
- self.data = data
52
49
  self
53
50
  end
54
51
 
55
52
  private
56
53
 
54
+ def get_access_token!(code)
55
+ raise Unauthorized.new('No Authorization Code') unless code
56
+ client.redirect_uri = ''
57
+ client.authorization_code = code
58
+ self.access_token = client.access_token!
59
+ self.user = User.new(data[:user_id], :access_token => access_token)
60
+ self
61
+ end
62
+
57
63
  def build_access_token(data)
58
64
  expires_in = unless data[:expires].zero?
59
65
  data[:expires] - Time.now.to_i
data/lib/fb_graph.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'httpclient'
2
2
  require 'rack/oauth2'
3
+ require 'patch/rack/oauth2/util'
3
4
 
4
5
  module FbGraph
5
6
  ROOT_URL = "https://graph.facebook.com"
@@ -0,0 +1,14 @@
1
+ # NOTE: Authorization code given via FB JS SDK needs blank string as redirect_uri
2
+ module Rack::OAuth2::Util
3
+ class << self
4
+ def compact_hash_with_blank_redirect_uri(hash)
5
+ original_redirect_uri = hash[:redirect_uri]
6
+ result = compact_hash_without_blank_redirect_uri hash
7
+ if original_redirect_uri
8
+ result[:redirect_uri] ||= original_redirect_uri
9
+ end
10
+ result
11
+ end
12
+ alias_method_chain :compact_hash, :blank_redirect_uri
13
+ end
14
+ end
@@ -1,30 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe FbGraph::Auth::Cookie, '.parse' do
4
- before do
5
- @client = Rack::OAuth2::Client.new(:identifier => 'client_id', :secret => 'client_secret')
6
- @cookie = {
7
- 'fbs_client_id' => "access_token=t&expires=0&secret=s&session_key=k&sig=f4bae8ec88ba11440e3bdcc1bcf78317&uid=12345"
4
+ let(:client) { Rack::OAuth2::Client.new(:identifier => 'client_id', :secret => 'client_secret') }
5
+ let :cookie do
6
+ {
7
+ 'fbsr_client_id' => "9heZHFs6tDH/Nif4CqmBaMQ8nKEOc5g2WgVJa10LF00.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiI4ZDYwZDY4NDA4MmQ1NjczMjY3MWUxNzAuMS01Nzk2MTIyNzZ8N2pkVlp6MlNLNUY2b0gtQ21FQWtZZVpuVjEwIiwiaXNzdWVkX2F0IjoxMzEyOTUzOTcxLCJ1c2VyX2lkIjo1Nzk2MTIyNzZ9"
8
8
  }
9
9
  end
10
10
 
11
11
  shared_examples_for :parsable_cookie do
12
12
  it 'should be parsable' do
13
- cookie[:access_token].should == 't'
14
- cookie[:expires].should == 0
15
- cookie[:secret].should == 's'
16
- cookie[:session_key].should == 'k'
17
- cookie[:uid].should == '12345'
13
+ data[:algorithm].should == 'HMAC-SHA256'
14
+ data[:code].should == '8d60d684082d56732671e170.1-579612276|7jdVZz2SK5F6oH-CmEAkYeZnV10'
15
+ data[:issued_at].should == 1312953971
16
+ data[:user_id].should == 579612276
18
17
  end
19
18
  end
20
19
 
21
20
  context 'when whole cookie is given' do
22
- let(:cookie) { FbGraph::Auth::Cookie.parse(@client, @cookie) }
21
+ let(:data) { FbGraph::Auth::Cookie.parse(client, cookie) }
23
22
  it_behaves_like :parsable_cookie
24
23
  end
25
24
 
26
25
  context 'when actual cookie string is given' do
27
- let(:cookie) { FbGraph::Auth::Cookie.parse(@client, @cookie['fbs_client_id']) }
26
+ let(:data) { FbGraph::Auth::Cookie.parse(client, cookie['fbsr_client_id']) }
28
27
  it_behaves_like :parsable_cookie
29
28
  end
30
29
  end
@@ -1,107 +1,52 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FbGraph::Auth, '.new' do
4
- it 'should setup Rack::OAuth2::Client' do
5
- auth = FbGraph::Auth.new('client_id', 'client_secret')
6
- auth.client.should be_a(Rack::OAuth2::Client)
7
- auth.client.identifier.should == 'client_id'
8
- auth.client.secret.should == 'client_secret'
3
+ describe FbGraph::Auth do
4
+ let :optional_attributes do
5
+ {}
9
6
  end
10
-
11
- context 'when invalid cookie given' do
12
- it 'should raise FbGraph::VerificationFailed' do
13
- lambda do
14
- FbGraph::Auth.new('client_id', 'client_secret', :cookie => 'invalid')
15
- end.should raise_exception(FbGraph::Auth::VerificationFailed)
16
- end
7
+ let(:auth) { FbGraph::Auth.new('client_id', 'client_secret', optional_attributes) }
8
+ subject { auth }
9
+
10
+ its(:client) { should be_a(Rack::OAuth2::Client) }
11
+ describe 'client' do
12
+ subject { auth.client }
13
+ its(:identifier) { should == 'client_id' }
14
+ its(:secret) { should == 'client_secret' }
17
15
  end
18
16
 
19
17
  context 'when invalid cookie given' do
18
+ let :optional_attributes do
19
+ {:cookie => 'invalid'}
20
+ end
20
21
  it 'should raise FbGraph::VerificationFailed' do
21
- lambda do
22
- FbGraph::Auth.new('client_id', 'client_secret', :signed_request => 'invalid')
22
+ expect do
23
+ auth
23
24
  end.should raise_exception(FbGraph::Auth::VerificationFailed)
24
25
  end
25
26
  end
26
- end
27
-
28
- describe FbGraph::Auth, '#from_cookie' do
29
- before do
30
- @auth = FbGraph::Auth.new('client_id', 'client_secret')
31
- @expires_at = Time.parse('2020-12-31 12:00:00')
32
- @cookie = {
33
- 'fbs_client_id' => "access_token=t&expires=#{@expires_at.to_i}&secret=s&session_key=k&sig=b06a0540959470e731cc3bc2ef31a007&uid=12345"
34
- }
35
- end
36
-
37
- it 'should fetch user and access_token from fbs_APP_ID cookie' do
38
- @auth.access_token.should be_nil
39
- @auth.user.should be_nil
40
- @auth.from_cookie(@cookie)
41
- @auth.access_token.access_token.should == 't'
42
- @auth.access_token.expires_in.should be_within(1).of(@expires_at - Time.now)
43
- @auth.user.identifier.should == '12345'
44
- @auth.user.access_token.access_token.should == 't'
45
- end
46
27
 
47
28
  context 'when invalid cookie given' do
48
- it 'should raise FbGraph::VerificationFailed' do
49
- lambda do
50
- @auth.from_cookie('invalid')
51
- end.should raise_exception(FbGraph::Auth::VerificationFailed)
29
+ let :optional_attributes do
30
+ {:signed_request => 'invalid'}
52
31
  end
53
- end
54
- end
55
32
 
56
- describe FbGraph::Auth, '#from_signed_request' do
57
- before do
58
- @signed_request = "LqsgnfcsRdfjOgyW6ZuSLpGBVsxUBegEqai4EcrWS0A=.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjAsImlzc3VlZF9hdCI6MTI5ODc4MzczOSwib2F1dGhfdG9rZW4iOiIxMzQxNDU2NDMyOTQzMjJ8MmI4YTZmOTc1NTJjNmRjZWQyMDU4MTBiLTU3OTYxMjI3NnxGS1o0akdKZ0JwN2k3bFlrOVhhUk1QZ3lhNnMiLCJ1c2VyIjp7ImNvdW50cnkiOiJqcCIsImxvY2FsZSI6ImVuX1VTIiwiYWdlIjp7Im1pbiI6MjF9fSwidXNlcl9pZCI6IjU3OTYxMjI3NiJ9"
59
- @auth = FbGraph::Auth.new('client_id', 'client_secret')
60
- end
61
-
62
- it 'should fetch user and access_token from signed_request' do
63
- @auth.access_token.should be_nil
64
- @auth.user.should be_nil
65
- @auth.from_signed_request(@signed_request)
66
- @auth.access_token.access_token.should == '134145643294322|2b8a6f97552c6dced205810b-579612276|FKZ4jGJgBp7i7lYk9XaRMPgya6s'
67
- @auth.user.identifier.should == '579612276'
68
- @auth.user.access_token.access_token.should == '134145643294322|2b8a6f97552c6dced205810b-579612276|FKZ4jGJgBp7i7lYk9XaRMPgya6s'
69
- @auth.data.should include(
70
- "expires"=>0,
71
- "algorithm"=>"HMAC-SHA256",
72
- "issued_at"=>1298783739
73
- )
74
- @auth.data['user'].should include(
75
- "country"=>"jp",
76
- "locale"=>"en_US",
77
- "age"=>{"min"=>21}
78
- )
79
- end
80
-
81
- context 'when invalid signed_request given' do
82
33
  it 'should raise FbGraph::VerificationFailed' do
83
- lambda do
84
- @auth.from_signed_request('invalid.signed_request')
34
+ expect do
35
+ auth
85
36
  end.should raise_exception(FbGraph::Auth::VerificationFailed)
86
37
  end
87
38
  end
88
- end
89
-
90
- describe FbGraph::Auth do
91
- let(:auth) { FbGraph::Auth.new('client_id', 'client_secret') }
92
39
 
93
40
  describe '#authorized?' do
94
- subject { auth.authorized? }
95
-
96
41
  context 'when access_token is given' do
97
42
  before do
98
43
  auth.access_token = 'access_token'
99
44
  end
100
- it { should be_true }
45
+ its(:authorized?) { should be_true }
101
46
  end
102
47
 
103
48
  context 'otherwise' do
104
- it { should be_false }
49
+ its(:authorized?) { should be_false }
105
50
  end
106
51
  end
107
52
 
@@ -115,5 +60,81 @@ describe FbGraph::Auth do
115
60
  it { should == "https://www.facebook.com/dialog/oauth?client_id=client_id&redirect_uri=#{CGI.escape canvas_uri}&scope=#{CGI.escape "scope1,scope2"}&state=state1" }
116
61
  end
117
62
  end
63
+
64
+ describe '#from_cookie' do
65
+ let :cookie do
66
+ {
67
+ 'fbsr_client_id' => "9heZHFs6tDH/Nif4CqmBaMQ8nKEOc5g2WgVJa10LF00.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiI4ZDYwZDY4NDA4MmQ1NjczMjY3MWUxNzAuMS01Nzk2MTIyNzZ8N2pkVlp6MlNLNUY2b0gtQ21FQWtZZVpuVjEwIiwiaXNzdWVkX2F0IjoxMzEyOTUzOTcxLCJ1c2VyX2lkIjo1Nzk2MTIyNzZ9"
68
+ }
69
+ end
70
+
71
+ it 'should exchange code with access token' do
72
+ expect {
73
+ auth.from_cookie(cookie)
74
+ }.should request_to '/oauth/access_token', :post
75
+ end
76
+
77
+ it 'should setup user and access_token' do
78
+ mock_graph :post, '/oauth/access_token', 'token_response' do
79
+ auth.access_token.should be_nil
80
+ auth.user.should be_nil
81
+ auth.from_cookie(cookie)
82
+ auth.access_token.should be_a Rack::OAuth2::AccessToken::Legacy
83
+ auth.access_token.access_token.should == 'token'
84
+ auth.user.should be_a FbGraph::User
85
+ auth.user.identifier.should == 579612276
86
+ auth.user.access_token.access_token.should == 'token'
87
+ auth.data.should == {
88
+ "algorithm" => "HMAC-SHA256",
89
+ "code" => "8d60d684082d56732671e170.1-579612276|7jdVZz2SK5F6oH-CmEAkYeZnV10",
90
+ "issued_at" => 1312953971,
91
+ "user_id" => 579612276
92
+ }
93
+ end
94
+ end
95
+
96
+ context 'when invalid cookie given' do
97
+ it 'should raise FbGraph::VerificationFailed' do
98
+ lambda do
99
+ auth.from_cookie('invalid')
100
+ end.should raise_exception(FbGraph::Auth::VerificationFailed)
101
+ end
102
+ end
103
+ end
104
+
105
+ describe '#from_signed_request' do
106
+ let :signed_request do
107
+ "LqsgnfcsRdfjOgyW6ZuSLpGBVsxUBegEqai4EcrWS0A=.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjAsImlzc3VlZF9hdCI6MTI5ODc4MzczOSwib2F1dGhfdG9rZW4iOiIxMzQxNDU2NDMyOTQzMjJ8MmI4YTZmOTc1NTJjNmRjZWQyMDU4MTBiLTU3OTYxMjI3NnxGS1o0akdKZ0JwN2k3bFlrOVhhUk1QZ3lhNnMiLCJ1c2VyIjp7ImNvdW50cnkiOiJqcCIsImxvY2FsZSI6ImVuX1VTIiwiYWdlIjp7Im1pbiI6MjF9fSwidXNlcl9pZCI6IjU3OTYxMjI3NiJ9"
108
+ end
109
+
110
+ it 'should setup user and access_token' do
111
+ auth.access_token.should be_nil
112
+ auth.user.should be_nil
113
+ auth.from_signed_request(signed_request)
114
+ auth.access_token.should be_a Rack::OAuth2::AccessToken::Legacy
115
+ auth.access_token.access_token.should == '134145643294322|2b8a6f97552c6dced205810b-579612276|FKZ4jGJgBp7i7lYk9XaRMPgya6s'
116
+ auth.user.should be_a FbGraph::User
117
+ auth.user.identifier.should == '579612276'
118
+ auth.user.access_token.access_token.should == '134145643294322|2b8a6f97552c6dced205810b-579612276|FKZ4jGJgBp7i7lYk9XaRMPgya6s'
119
+ auth.data.should include(
120
+ "expires"=>0,
121
+ "algorithm"=>"HMAC-SHA256",
122
+ "issued_at"=>1298783739
123
+ )
124
+ auth.data['user'].should include(
125
+ "country"=>"jp",
126
+ "locale"=>"en_US",
127
+ "age"=>{"min"=>21}
128
+ )
129
+ end
130
+
131
+ context 'when invalid signed_request given' do
132
+ it 'should raise FbGraph::VerificationFailed' do
133
+ lambda do
134
+ auth.from_signed_request('invalid.signed_request')
135
+ end.should raise_exception(FbGraph::Auth::VerificationFailed)
136
+ end
137
+ end
138
+ end
118
139
  end
119
140
 
metadata CHANGED
@@ -1,8 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fb_graph
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.9.5
4
+ hash: -1851332194
5
+ prerelease: 6
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 0
10
+ - alpha
11
+ version: 2.0.0.alpha
6
12
  platform: ruby
7
13
  authors:
8
14
  - nov matake
@@ -10,7 +16,7 @@ autorequire:
10
16
  bindir: bin
11
17
  cert_chain: []
12
18
 
13
- date: 2011-08-08 00:00:00 Z
19
+ date: 2011-08-10 00:00:00 Z
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: httpclient
@@ -20,6 +26,12 @@ dependencies:
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 123
30
+ segments:
31
+ - 2
32
+ - 2
33
+ - 0
34
+ - 2
23
35
  version: 2.2.0.2
24
36
  type: :runtime
25
37
  version_requirements: *id001
@@ -31,6 +43,11 @@ dependencies:
31
43
  requirements:
32
44
  - - ">="
33
45
  - !ruby/object:Gem::Version
46
+ hash: 63
47
+ segments:
48
+ - 0
49
+ - 8
50
+ - 0
34
51
  version: 0.8.0
35
52
  type: :runtime
36
53
  version_requirements: *id002
@@ -42,6 +59,10 @@ dependencies:
42
59
  requirements:
43
60
  - - ">="
44
61
  - !ruby/object:Gem::Version
62
+ hash: 27
63
+ segments:
64
+ - 0
65
+ - 8
45
66
  version: "0.8"
46
67
  type: :development
47
68
  version_requirements: *id003
@@ -53,6 +74,10 @@ dependencies:
53
74
  requirements:
54
75
  - - ">="
55
76
  - !ruby/object:Gem::Version
77
+ hash: 25
78
+ segments:
79
+ - 0
80
+ - 9
56
81
  version: "0.9"
57
82
  type: :development
58
83
  version_requirements: *id004
@@ -64,6 +89,9 @@ dependencies:
64
89
  requirements:
65
90
  - - ">="
66
91
  - !ruby/object:Gem::Version
92
+ hash: 7
93
+ segments:
94
+ - 2
67
95
  version: "2"
68
96
  type: :development
69
97
  version_requirements: *id005
@@ -75,6 +103,11 @@ dependencies:
75
103
  requirements:
76
104
  - - ">="
77
105
  - !ruby/object:Gem::Version
106
+ hash: 11
107
+ segments:
108
+ - 1
109
+ - 6
110
+ - 2
78
111
  version: 1.6.2
79
112
  type: :development
80
113
  version_requirements: *id006
@@ -86,6 +119,11 @@ dependencies:
86
119
  requirements:
87
120
  - - ">="
88
121
  - !ruby/object:Gem::Version
122
+ hash: 11
123
+ segments:
124
+ - 3
125
+ - 0
126
+ - 6
89
127
  version: 3.0.6
90
128
  type: :development
91
129
  version_requirements: *id007
@@ -215,6 +253,7 @@ files:
215
253
  - lib/fb_graph/venue.rb
216
254
  - lib/fb_graph/video.rb
217
255
  - lib/fb_graph/work.rb
256
+ - lib/patch/rack/oauth2/util.rb
218
257
  - spec/fb_graph/album_spec.rb
219
258
  - spec/fb_graph/app_request_spec.rb
220
259
  - spec/fb_graph/application_spec.rb
@@ -462,13 +501,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
462
501
  requirements:
463
502
  - - ">="
464
503
  - !ruby/object:Gem::Version
504
+ hash: 3
505
+ segments:
506
+ - 0
465
507
  version: "0"
466
508
  required_rubygems_version: !ruby/object:Gem::Requirement
467
509
  none: false
468
510
  requirements:
469
- - - ">="
511
+ - - ">"
470
512
  - !ruby/object:Gem::Version
471
- version: "0"
513
+ hash: 25
514
+ segments:
515
+ - 1
516
+ - 3
517
+ - 1
518
+ version: 1.3.1
472
519
  requirements: []
473
520
 
474
521
  rubyforge_project: