fb_graph 2.0.2 → 2.1.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ rvm:
2
+ - 1.8.6
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - jruby
7
+ - ree
data/Gemfile.lock CHANGED
@@ -1,45 +1,52 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fb_graph (2.0.1)
4
+ fb_graph (2.0.2)
5
5
  httpclient (>= 2.2.0.2)
6
6
  rack-oauth2 (>= 0.8.0)
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- abstract (1.0.0)
12
- actionpack (3.0.10)
13
- activemodel (= 3.0.10)
14
- activesupport (= 3.0.10)
15
- builder (~> 2.1.2)
16
- erubis (~> 2.6.6)
17
- i18n (~> 0.5.0)
18
- rack (~> 1.2.1)
19
- rack-mount (~> 0.6.14)
20
- rack-test (~> 0.5.7)
21
- tzinfo (~> 0.3.23)
22
- activemodel (3.0.10)
23
- activesupport (= 3.0.10)
24
- builder (~> 2.1.2)
25
- i18n (~> 0.5.0)
26
- activesupport (3.0.10)
11
+ actionpack (3.1.0)
12
+ activemodel (= 3.1.0)
13
+ activesupport (= 3.1.0)
14
+ builder (~> 3.0.0)
15
+ erubis (~> 2.7.0)
16
+ i18n (~> 0.6)
17
+ rack (~> 1.3.2)
18
+ rack-cache (~> 1.0.3)
19
+ rack-mount (~> 0.8.2)
20
+ rack-test (~> 0.6.1)
21
+ sprockets (~> 2.0.0)
22
+ activemodel (3.1.0)
23
+ activesupport (= 3.1.0)
24
+ bcrypt-ruby (~> 3.0.0)
25
+ builder (~> 3.0.0)
26
+ i18n (~> 0.6)
27
+ activesupport (3.1.0)
28
+ multi_json (~> 1.0)
27
29
  addressable (2.2.6)
28
30
  attr_required (0.0.3)
31
+ bcrypt-ruby (3.0.0)
32
+ bcrypt-ruby (3.0.0-java)
29
33
  bouncy-castle-java (1.5.0146.1)
30
- builder (2.1.2)
34
+ builder (3.0.0)
31
35
  crack (0.1.8)
32
- diff-lcs (1.1.2)
33
- erubis (2.6.6)
34
- abstract (>= 1.0.0)
36
+ diff-lcs (1.1.3)
37
+ erubis (2.7.0)
38
+ hike (1.2.1)
35
39
  httpclient (2.2.1)
36
- i18n (0.5.0)
40
+ i18n (0.6.0)
37
41
  jruby-openssl (0.7.4)
38
42
  bouncy-castle-java
39
- json (1.5.3)
40
- json (1.5.3-java)
41
- rack (1.2.3)
42
- rack-mount (0.6.14)
43
+ json (1.5.4)
44
+ json (1.5.4-java)
45
+ multi_json (1.0.3)
46
+ rack (1.3.2)
47
+ rack-cache (1.0.3)
48
+ rack (>= 0.4)
49
+ rack-mount (0.8.3)
43
50
  rack (>= 1.0.0)
44
51
  rack-oauth2 (0.9.2)
45
52
  activesupport (>= 2.3)
@@ -48,7 +55,7 @@ GEM
48
55
  i18n
49
56
  json (>= 1.4.3)
50
57
  rack (>= 1.1)
51
- rack-test (0.5.7)
58
+ rack-test (0.6.1)
52
59
  rack (>= 1.0)
53
60
  rake (0.9.2)
54
61
  rcov (0.9.10)
@@ -61,9 +68,13 @@ GEM
61
68
  rspec-expectations (2.6.0)
62
69
  diff-lcs (~> 1.1.2)
63
70
  rspec-mocks (2.6.0)
64
- tzinfo (0.3.29)
65
- webmock (1.7.4)
66
- addressable (> 2.2.5, ~> 2.2)
71
+ sprockets (2.0.0)
72
+ hike (~> 1.2)
73
+ rack (~> 1.0)
74
+ tilt (~> 1.1, != 1.3.0)
75
+ tilt (1.3.3)
76
+ webmock (1.7.5)
77
+ addressable (~> 2.2, > 2.2.5)
67
78
  crack (>= 0.1.7)
68
79
 
69
80
  PLATFORMS
data/README.rdoc CHANGED
@@ -203,6 +203,10 @@ Both Facebook JavaScript SDK and normal OAuth2 flow is supported.
203
203
  Below I show simple sample code.
204
204
  You can also see https://github.com/nov/fb_graph_sample for more details Rails3 sample application.
205
205
 
206
+ In addition, if you are migrating an application that uses old-style session keys you can exchange
207
+ the keys for access tokens.
208
+ See more here: http://developers.facebook.com/docs/authentication/fb_sig/
209
+
206
210
  ==== JavaScript SDK
207
211
 
208
212
  fb_auth = FbGraph::Auth.new(YOUR_APP_ID, YOUR_APPLICATION_SECRET)
@@ -230,6 +234,14 @@ You can also see https://github.com/nov/fb_graph_sample for more details Rails3
230
234
  access_token = client.access_token! # => Rack::OAuth2::AccessToken
231
235
  FbGraph::User.me(access_token).fetch # => FbGraph::User
232
236
 
237
+ ==== Session Key Exchange
238
+
239
+ # setup client
240
+ fb_auth = FbGraph::Auth.new(YOUR_APP_ID, YOUR_APPLICATION_SECRET)
241
+ fb_auth.from_session_key('my-old-session-key')
242
+ fb_auth.access_token # => Rack::OAuth2::AccessToken
243
+
244
+
233
245
  === Analytics
234
246
 
235
247
  app = FbGraph::Application.new(YOUR_APP_ID, :secret => YOUR_APPLICATION_SECRET)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.2
1
+ 2.1.0.alpha
@@ -1,5 +1,7 @@
1
1
  module FbGraph
2
2
  class AdAccount < Node
3
+ include Connections::AdCampaigns
4
+
3
5
  attr_accessor :account_id, :name, :account_status, :daily_spend_limit, :users, :currency, :timezone_id, :timezone_name, :capabilities, :account_groups
4
6
 
5
7
  def initialize(identifier, attributes = {})
@@ -10,7 +10,11 @@ module FbGraph
10
10
  end
11
11
 
12
12
  %w(start_time end_time).each do |field|
13
- send("#{field}=", Time.parse(attributes[field.to_sym]).utc) if attributes[field.to_sym]
13
+ if val = attributes[field.to_sym]
14
+ # Handles integer timestamps and ISO8601 strings
15
+ time = Time.parse(val) rescue Time.at(val.to_i)
16
+ send("#{field}=", time)
17
+ end
14
18
  end
15
19
  end
16
20
  end
data/lib/fb_graph/auth.rb CHANGED
@@ -50,6 +50,19 @@ module FbGraph
50
50
  self
51
51
  end
52
52
 
53
+ def from_session_key(session_key)
54
+ response = HTTPClient.new.post "#{ROOT_URL}/oauth/exchange_sessions", {:client_id => @client.identifier, :client_secret => @client.secret, :sessions => session_key}
55
+ if response.body && self.data = JSON.parse(response.body)
56
+ if self.data[0]
57
+ self.access_token = build_access_token(self.data[0].with_indifferent_access)
58
+ else
59
+ # If the session key is unknown or there's an error, Facebook returns null
60
+ self.access_token = nil
61
+ end
62
+ end
63
+ self
64
+ end
65
+
53
66
  private
54
67
 
55
68
  def get_access_token!(code)
@@ -62,7 +75,7 @@ module FbGraph
62
75
  end
63
76
 
64
77
  def build_access_token(data)
65
- expires_in = unless data[:expires].zero?
78
+ expires_in = unless data[:expires].nil? || data[:expires].zero?
66
79
  data[:expires] - Time.now.to_i
67
80
  end
68
81
  Rack::OAuth2::AccessToken::Legacy.new(
@@ -74,4 +87,4 @@ module FbGraph
74
87
  end
75
88
 
76
89
  require 'fb_graph/auth/cookie'
77
- require 'fb_graph/auth/signed_request'
90
+ require 'fb_graph/auth/signed_request'
@@ -0,0 +1,21 @@
1
+ module FbGraph
2
+ module Connections
3
+ module AdCampaigns
4
+ def ad_campaigns(options = {})
5
+ ad_campaigns = self.connection(:adcampaigns, options)
6
+ ad_campaigns.map! do |ad_campaign|
7
+ AdCampaign.new(ad_campaign[:id], ad_campaign.merge(
8
+ :access_token => options[:access_token] || self.access_token
9
+ ))
10
+ end
11
+ end
12
+
13
+ def ad_campaign!(options = {})
14
+ ad_campaign = post(options.merge(:connection => :adcampaigns))
15
+ AdCampaign.new(ad_campaign[:id], options.merge(ad_campaign).merge(
16
+ :access_token => options[:access_token] || self.access_token
17
+ ))
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module FbGraph
2
+ module Debugger
3
+ class RequestFilter
4
+ # Callback called in HTTPClient (before sending a request)
5
+ # request:: HTTP::Message
6
+ def filter_request(request)
7
+ started = "======= [FbGraph] API REQUEST STARTED ======="
8
+ FbGraph.logger.info [started, request.dump].join("\n")
9
+ end
10
+
11
+ # Callback called in HTTPClient (after received a response)
12
+ # request:: HTTP::Message
13
+ # response:: HTTP::Message
14
+ def filter_response(request, response)
15
+ finished = "======= [FbGraph] API REQUEST FINISHED ======="
16
+ FbGraph.logger.info ['-' * 50, response.dump, finished].join("\n")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ module FbGraph
2
+ class Exception < StandardError
3
+ attr_accessor :code, :type, :message
4
+ def initialize(code, message, body = '')
5
+ @code = code
6
+ if body.blank?
7
+ @message = message
8
+ else
9
+ response = JSON.parse(body).with_indifferent_access
10
+ @message = response[:error][:message]
11
+ @type = response[:error][:type]
12
+ end
13
+ end
14
+ end
15
+
16
+ class BadRequest < Exception
17
+ def initialize(message, body = '')
18
+ super 400, message, body
19
+ end
20
+ end
21
+
22
+ class Unauthorized < Exception
23
+ def initialize(message, body = '')
24
+ super 401, message, body
25
+ end
26
+ end
27
+
28
+ class NotFound < Exception
29
+ def initialize(message, body = '')
30
+ super 404, message, body
31
+ end
32
+ end
33
+ end
data/lib/fb_graph/node.rb CHANGED
@@ -40,13 +40,13 @@ module FbGraph
40
40
 
41
41
  def get(params = {})
42
42
  handle_response do
43
- HTTPClient.new.get build_endpoint(params), build_params(params)
43
+ http_client.get build_endpoint(params), build_params(params)
44
44
  end
45
45
  end
46
46
 
47
47
  def post(params = {})
48
48
  handle_response do
49
- HTTPClient.new.post build_endpoint(params), build_params(params)
49
+ http_client.post build_endpoint(params), build_params(params)
50
50
  end
51
51
  end
52
52
 
@@ -54,10 +54,16 @@ module FbGraph
54
54
  _endpoint_, _params_ = build_endpoint(params), build_params(params)
55
55
  _endpoint_ = [_endpoint_, _params_.try(:to_query)].compact.join('?')
56
56
  handle_response do
57
- HTTPClient.new.delete _endpoint_
57
+ http_client.delete _endpoint_
58
58
  end
59
59
  end
60
60
 
61
+ def http_client
62
+ _http_client_ = HTTPClient.new
63
+ _http_client_.request_filter << Debugger::RequestFilter.new if FbGraph.debugging?
64
+ _http_client_
65
+ end
66
+
61
67
  private
62
68
 
63
69
  def build_endpoint(params = {})
@@ -11,7 +11,7 @@ module FbGraph
11
11
 
12
12
  def fetch(access_token = nil)
13
13
  handle_response do
14
- HTTPClient.new.get ENDPOINT, :query => build_params(access_token)
14
+ http_client.get ENDPOINT, :query => build_params(access_token)
15
15
  end
16
16
  end
17
17
 
data/lib/fb_graph.rb CHANGED
@@ -5,40 +5,37 @@ require 'patch/rack/oauth2/util'
5
5
  module FbGraph
6
6
  ROOT_URL = "https://graph.facebook.com"
7
7
 
8
- class Exception < StandardError
9
- attr_accessor :code, :type, :message
10
- def initialize(code, message, body = '')
11
- @code = code
12
- if body.blank?
13
- @message = message
14
- else
15
- response = JSON.parse(body).with_indifferent_access
16
- @message = response[:error][:message]
17
- @type = response[:error][:type]
18
- end
19
- end
8
+ def self.logger
9
+ @@logger
20
10
  end
21
-
22
- class BadRequest < Exception
23
- def initialize(message, body = '')
24
- super 400, message, body
25
- end
11
+ def self.logger=(logger)
12
+ @@logger = logger
26
13
  end
14
+ self.logger = Logger.new(STDOUT)
15
+ self.logger.progname = 'Paypal::Express'
27
16
 
28
- class Unauthorized < Exception
29
- def initialize(message, body = '')
30
- super 401, message, body
31
- end
17
+ def self.debugging?
18
+ @@debugging
32
19
  end
33
-
34
- class NotFound < Exception
35
- def initialize(message, body = '')
36
- super 404, message, body
37
- end
20
+ def self.debugging=(boolean)
21
+ @@debugging = boolean
38
22
  end
39
-
23
+ def self.debug!
24
+ self.debugging = true
25
+ end
26
+ def self.debug(&block)
27
+ original = self.debugging?
28
+ self.debugging = true
29
+ yield
30
+ ensure
31
+ self.debugging = original
32
+ end
33
+ self.debugging = false
40
34
  end
41
35
 
36
+ require 'fb_graph/exception'
37
+ require 'fb_graph/debugger'
38
+
42
39
  require 'fb_graph/auth'
43
40
  require 'fb_graph/comparison'
44
41
  require 'fb_graph/serialization'
@@ -57,6 +54,8 @@ require 'fb_graph/venue'
57
54
  require 'fb_graph/work'
58
55
 
59
56
  require 'fb_graph/node'
57
+ require 'fb_graph/ad_account'
58
+ require 'fb_graph/ad_campaign'
60
59
  require 'fb_graph/album'
61
60
  require 'fb_graph/app_request'
62
61
  require 'fb_graph/application'
@@ -87,9 +86,6 @@ require 'fb_graph/user'
87
86
  require 'fb_graph/test_user' # Load after FbGraph::User
88
87
  require 'fb_graph/video'
89
88
 
90
- require 'fb_graph/adaccount'
91
- require 'fb_graph/adcampaign'
92
-
93
89
  require 'fb_graph/klass'
94
90
  require 'fb_graph/project'
95
91
 
@@ -27,7 +27,7 @@ end
27
27
 
28
28
  describe FbGraph::AdAccount, '.fetch' do
29
29
  it 'should get the ad account' do
30
- mock_graph :get, 'act_12345566', 'adaccounts/test_ad_account', :access_token => 'access_token' do
30
+ mock_graph :get, 'act_12345566', 'ad_accounts/test_ad_account', :access_token => 'access_token' do
31
31
  ad_account = FbGraph::AdAccount.fetch('act_12345566', :access_token => 'access_token')
32
32
 
33
33
  ad_account.identifier.should == "act_12345566"
@@ -23,12 +23,29 @@ describe FbGraph::AdCampaign, '.new' do
23
23
  ad_campaign.campaign_status.should == 1
24
24
  ad_campaign.lifetime_budget.should == 100000
25
25
  end
26
+
27
+ it 'should handle integer, string, or iso8601 timestamps' do
28
+ t = Time.parse("2011-09-01T00:00:00Z")
29
+ attributes = {
30
+ :id => '6003266501234',
31
+ :campaign_id => 6003266501234,
32
+ :account_id => 12345566,
33
+ :name => "Test Ad Campaign",
34
+ :end_time => "2011-09-10T00:00:00Z",
35
+ :daily_budget => 20000,
36
+ :campaign_status => 1,
37
+ :lifetime_budget => 100000
38
+ }
39
+ FbGraph::AdCampaign.new(attributes[:id], attributes.merge(:start_time => t.to_i)).start_time.should == t
40
+ FbGraph::AdCampaign.new(attributes[:id], attributes.merge(:start_time => t.to_i.to_s)).start_time.should == t
41
+ FbGraph::AdCampaign.new(attributes[:id], attributes.merge(:start_time => t.iso8601)).start_time.should == t
42
+ end
26
43
  end
27
44
 
28
45
 
29
46
  describe FbGraph::AdCampaign, '.fetch' do
30
47
  it 'should get the ad campaign' do
31
- mock_graph :get, '16003266501234', 'adcampaigns/test_ad_campaign', :access_token => 'access_token' do
48
+ mock_graph :get, '16003266501234', 'ad_campaigns/test_ad_campaign', :access_token => 'access_token' do
32
49
  ad_campaign = FbGraph::AdCampaign.fetch('16003266501234', :access_token => 'access_token')
33
50
 
34
51
  ad_campaign.identifier.should == "6003266501234"
@@ -140,5 +140,29 @@ describe FbGraph::Auth do
140
140
  end
141
141
  end
142
142
  end
143
+
144
+ describe "#from_session_key" do
145
+ let(:session_key) { 'my_session_key'}
146
+
147
+ it "should exchange the session key for an oauth token" do
148
+ mock_graph :post, '/oauth/exchange_sessions', 'exchange_sessions_response' do
149
+ auth.access_token.should be_nil
150
+
151
+ auth.from_session_key(session_key)
152
+ auth.access_token.should be_a Rack::OAuth2::AccessToken::Legacy
153
+ auth.access_token.access_token.should == "my_oauth_token"
154
+ end
155
+ end
156
+
157
+
158
+ it "should handle null responses" do
159
+ mock_graph :post, '/oauth/exchange_sessions', 'exchange_sessions_null_response' do
160
+ auth.access_token.should be_nil
161
+
162
+ auth.from_session_key(session_key)
163
+ auth.access_token.should be_nil
164
+ end
165
+ end
166
+ end
143
167
  end
144
168
 
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph::Debugger::RequestFilter do
4
+ let(:resource_endpoint) { 'https://graph.facebook.com/matake' }
5
+ let(:request) { HTTP::Message.new_request(:get, URI.parse(resource_endpoint)) }
6
+ let(:response) { HTTP::Message.new_response({:hello => 'world'}.to_json) }
7
+ let(:request_filter) { FbGraph::Debugger::RequestFilter.new }
8
+
9
+ describe '#filter_request' do
10
+ it 'should log request' do
11
+ FbGraph.logger.should_receive(:info).with(
12
+ "======= [FbGraph] API REQUEST STARTED =======\n" +
13
+ request.dump
14
+ )
15
+ request_filter.filter_request(request)
16
+ end
17
+ end
18
+
19
+ describe '#filter_response' do
20
+ it 'should log response' do
21
+ FbGraph.logger.should_receive(:info).with(
22
+ "--------------------------------------------------\n" +
23
+ response.dump +
24
+ "\n======= [FbGraph] API REQUEST FINISHED ======="
25
+ )
26
+ request_filter.filter_response(request, response)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph do
4
+ subject { FbGraph }
5
+ after { FbGraph.debugging = false }
6
+
7
+ its(:logger) { should be_a Logger }
8
+ its(:debugging?) { should be_false }
9
+
10
+ describe '.debug!' do
11
+ before { FbGraph.debug! }
12
+ its(:debugging?) { should be_true }
13
+ end
14
+
15
+ describe '.debug' do
16
+ it 'should enable debugging within given block' do
17
+ FbGraph.debug do
18
+ FbGraph.debugging?.should be_true
19
+ end
20
+ FbGraph.debugging?.should be_false
21
+ end
22
+
23
+ it 'should not force disable debugging' do
24
+ FbGraph.debug!
25
+ FbGraph.debug do
26
+ FbGraph.debugging?.should be_true
27
+ end
28
+ FbGraph.debugging?.should be_true
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ [
2
+ {
3
+ "access_token": "my_oauth_token"
4
+ }
5
+ ]
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fb_graph
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease:
6
- segments:
7
- - 2
8
- - 0
9
- - 2
10
- version: 2.0.2
4
+ prerelease: 6
5
+ version: 2.1.0.alpha
11
6
  platform: ruby
12
7
  authors:
13
8
  - nov matake
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-09-01 00:00:00 Z
13
+ date: 2011-09-03 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: httpclient
@@ -25,12 +20,6 @@ dependencies:
25
20
  requirements:
26
21
  - - ">="
27
22
  - !ruby/object:Gem::Version
28
- hash: 123
29
- segments:
30
- - 2
31
- - 2
32
- - 0
33
- - 2
34
23
  version: 2.2.0.2
35
24
  type: :runtime
36
25
  version_requirements: *id001
@@ -42,11 +31,6 @@ dependencies:
42
31
  requirements:
43
32
  - - ">="
44
33
  - !ruby/object:Gem::Version
45
- hash: 63
46
- segments:
47
- - 0
48
- - 8
49
- - 0
50
34
  version: 0.8.0
51
35
  type: :runtime
52
36
  version_requirements: *id002
@@ -58,10 +42,6 @@ dependencies:
58
42
  requirements:
59
43
  - - ">="
60
44
  - !ruby/object:Gem::Version
61
- hash: 27
62
- segments:
63
- - 0
64
- - 8
65
45
  version: "0.8"
66
46
  type: :development
67
47
  version_requirements: *id003
@@ -73,10 +53,6 @@ dependencies:
73
53
  requirements:
74
54
  - - ">="
75
55
  - !ruby/object:Gem::Version
76
- hash: 25
77
- segments:
78
- - 0
79
- - 9
80
56
  version: "0.9"
81
57
  type: :development
82
58
  version_requirements: *id004
@@ -88,9 +64,6 @@ dependencies:
88
64
  requirements:
89
65
  - - ">="
90
66
  - !ruby/object:Gem::Version
91
- hash: 7
92
- segments:
93
- - 2
94
67
  version: "2"
95
68
  type: :development
96
69
  version_requirements: *id005
@@ -102,11 +75,6 @@ dependencies:
102
75
  requirements:
103
76
  - - ">="
104
77
  - !ruby/object:Gem::Version
105
- hash: 11
106
- segments:
107
- - 1
108
- - 6
109
- - 2
110
78
  version: 1.6.2
111
79
  type: :development
112
80
  version_requirements: *id006
@@ -118,11 +86,6 @@ dependencies:
118
86
  requirements:
119
87
  - - ">="
120
88
  - !ruby/object:Gem::Version
121
- hash: 11
122
- segments:
123
- - 3
124
- - 0
125
- - 6
126
89
  version: 3.0.6
127
90
  type: :development
128
91
  version_requirements: *id007
@@ -139,6 +102,7 @@ files:
139
102
  - .document
140
103
  - .gitignore
141
104
  - .rspec
105
+ - .travis.yml
142
106
  - Gemfile
143
107
  - Gemfile.lock
144
108
  - LICENSE
@@ -150,8 +114,8 @@ files:
150
114
  - fb_graph.gemspec
151
115
  - lib/fb_graph.rb
152
116
  - lib/fb_graph/action.rb
153
- - lib/fb_graph/adaccount.rb
154
- - lib/fb_graph/adcampaign.rb
117
+ - lib/fb_graph/ad_account.rb
118
+ - lib/fb_graph/ad_campaign.rb
155
119
  - lib/fb_graph/album.rb
156
120
  - lib/fb_graph/app_request.rb
157
121
  - lib/fb_graph/application.rb
@@ -166,6 +130,7 @@ files:
166
130
  - lib/fb_graph/connections.rb
167
131
  - lib/fb_graph/connections/accounts.rb
168
132
  - lib/fb_graph/connections/activities.rb
133
+ - lib/fb_graph/connections/ad_campaign.rb
169
134
  - lib/fb_graph/connections/albums.rb
170
135
  - lib/fb_graph/connections/app_requests.rb
171
136
  - lib/fb_graph/connections/attending.rb
@@ -216,10 +181,12 @@ files:
216
181
  - lib/fb_graph/connections/test_users.rb
217
182
  - lib/fb_graph/connections/threads.rb
218
183
  - lib/fb_graph/connections/videos.rb
184
+ - lib/fb_graph/debugger.rb
219
185
  - lib/fb_graph/doc.rb
220
186
  - lib/fb_graph/domain.rb
221
187
  - lib/fb_graph/education.rb
222
188
  - lib/fb_graph/event.rb
189
+ - lib/fb_graph/exception.rb
223
190
  - lib/fb_graph/friend_list.rb
224
191
  - lib/fb_graph/group.rb
225
192
  - lib/fb_graph/image.rb
@@ -256,8 +223,8 @@ files:
256
223
  - lib/fb_graph/video.rb
257
224
  - lib/fb_graph/work.rb
258
225
  - lib/patch/rack/oauth2/util.rb
259
- - spec/fb_graph/adaccount_spec.rb
260
- - spec/fb_graph/adcampaign_spec.rb
226
+ - spec/fb_graph/ad_account_spec.rb
227
+ - spec/fb_graph/ad_campaign_spec.rb
261
228
  - spec/fb_graph/album_spec.rb
262
229
  - spec/fb_graph/app_request_spec.rb
263
230
  - spec/fb_graph/application_spec.rb
@@ -320,6 +287,7 @@ files:
320
287
  - spec/fb_graph/connections/test_users_spec.rb
321
288
  - spec/fb_graph/connections/threads_spec.rb
322
289
  - spec/fb_graph/connections/videos_spec.rb
290
+ - spec/fb_graph/debugger_spec.rb
323
291
  - spec/fb_graph/doc_spec.rb
324
292
  - spec/fb_graph/domain_spec.rb
325
293
  - spec/fb_graph/education_spec.rb
@@ -359,9 +327,10 @@ files:
359
327
  - spec/fb_graph/venue_spec.rb
360
328
  - spec/fb_graph/video_spec.rb
361
329
  - spec/fb_graph/work_spec.rb
330
+ - spec/fb_graph_spec.rb
362
331
  - spec/helpers/webmock_helper.rb
363
- - spec/mock_json/adaccounts/test_ad_account.json
364
- - spec/mock_json/adcampaigns/test_ad_campaign.json
332
+ - spec/mock_json/ad_accounts/test_ad_account.json
333
+ - spec/mock_json/ad_campaigns/test_ad_campaign.json
365
334
  - spec/mock_json/albums/photos/matake_private.json
366
335
  - spec/mock_json/albums/photos/post_with_valid_access_token.json
367
336
  - spec/mock_json/applications/accounts/private.json
@@ -382,6 +351,8 @@ files:
382
351
  - spec/mock_json/events/maybe/post_with_valid_access_token.json
383
352
  - spec/mock_json/events/maybe/smartday_private.json
384
353
  - spec/mock_json/events/noreply/smartday_private.json
354
+ - spec/mock_json/exchange_sessions_null_response.json
355
+ - spec/mock_json/exchange_sessions_response.json
385
356
  - spec/mock_json/groups/docs/private.json
386
357
  - spec/mock_json/groups/members/emacs_private.json
387
358
  - spec/mock_json/pages/blocked/create.json
@@ -514,29 +485,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
514
485
  requirements:
515
486
  - - ">="
516
487
  - !ruby/object:Gem::Version
517
- hash: 3
518
- segments:
519
- - 0
520
488
  version: "0"
521
489
  required_rubygems_version: !ruby/object:Gem::Requirement
522
490
  none: false
523
491
  requirements:
524
- - - ">="
492
+ - - ">"
525
493
  - !ruby/object:Gem::Version
526
- hash: 3
527
- segments:
528
- - 0
529
- version: "0"
494
+ version: 1.3.1
530
495
  requirements: []
531
496
 
532
497
  rubyforge_project:
533
- rubygems_version: 1.8.5
498
+ rubygems_version: 1.8.10
534
499
  signing_key:
535
500
  specification_version: 3
536
501
  summary: A full-stack Facebook Graph API wrapper in Ruby.
537
502
  test_files:
538
- - spec/fb_graph/adaccount_spec.rb
539
- - spec/fb_graph/adcampaign_spec.rb
503
+ - spec/fb_graph/ad_account_spec.rb
504
+ - spec/fb_graph/ad_campaign_spec.rb
540
505
  - spec/fb_graph/album_spec.rb
541
506
  - spec/fb_graph/app_request_spec.rb
542
507
  - spec/fb_graph/application_spec.rb
@@ -599,6 +564,7 @@ test_files:
599
564
  - spec/fb_graph/connections/test_users_spec.rb
600
565
  - spec/fb_graph/connections/threads_spec.rb
601
566
  - spec/fb_graph/connections/videos_spec.rb
567
+ - spec/fb_graph/debugger_spec.rb
602
568
  - spec/fb_graph/doc_spec.rb
603
569
  - spec/fb_graph/domain_spec.rb
604
570
  - spec/fb_graph/education_spec.rb
@@ -638,9 +604,10 @@ test_files:
638
604
  - spec/fb_graph/venue_spec.rb
639
605
  - spec/fb_graph/video_spec.rb
640
606
  - spec/fb_graph/work_spec.rb
607
+ - spec/fb_graph_spec.rb
641
608
  - spec/helpers/webmock_helper.rb
642
- - spec/mock_json/adaccounts/test_ad_account.json
643
- - spec/mock_json/adcampaigns/test_ad_campaign.json
609
+ - spec/mock_json/ad_accounts/test_ad_account.json
610
+ - spec/mock_json/ad_campaigns/test_ad_campaign.json
644
611
  - spec/mock_json/albums/photos/matake_private.json
645
612
  - spec/mock_json/albums/photos/post_with_valid_access_token.json
646
613
  - spec/mock_json/applications/accounts/private.json
@@ -661,6 +628,8 @@ test_files:
661
628
  - spec/mock_json/events/maybe/post_with_valid_access_token.json
662
629
  - spec/mock_json/events/maybe/smartday_private.json
663
630
  - spec/mock_json/events/noreply/smartday_private.json
631
+ - spec/mock_json/exchange_sessions_null_response.json
632
+ - spec/mock_json/exchange_sessions_response.json
664
633
  - spec/mock_json/groups/docs/private.json
665
634
  - spec/mock_json/groups/members/emacs_private.json
666
635
  - spec/mock_json/pages/blocked/create.json