fb_graph 1.9.5 → 2.0.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
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: