rest-core 0.4.0 → 0.7.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/.travis.yml +2 -7
- data/CHANGES.md +13 -2
- data/Gemfile +0 -3
- data/README.md +30 -34
- data/Rakefile +5 -46
- data/lib/rest-core.rb +0 -6
- data/lib/rest-core/version.rb +1 -1
- data/rest-core.gemspec +5 -83
- metadata +11 -87
- data/example/rails2/Gemfile +0 -21
- data/example/rails2/README +0 -4
- data/example/rails2/Rakefile +0 -11
- data/example/rails2/app/controllers/application_controller.rb +0 -128
- data/example/rails2/app/views/application/helper.html.erb +0 -2
- data/example/rails2/config/boot.rb +0 -130
- data/example/rails2/config/environment.rb +0 -15
- data/example/rails2/config/environments/development.rb +0 -17
- data/example/rails2/config/environments/production.rb +0 -28
- data/example/rails2/config/environments/test.rb +0 -30
- data/example/rails2/config/initializers/cookie_verification_secret.rb +0 -7
- data/example/rails2/config/initializers/new_rails_defaults.rb +0 -21
- data/example/rails2/config/initializers/session_store.rb +0 -15
- data/example/rails2/config/preinitializer.rb +0 -23
- data/example/rails2/config/rest-core.yaml +0 -16
- data/example/rails2/config/routes.rb +0 -43
- data/example/rails2/log +0 -0
- data/example/rails2/test/functional/application_controller_test.rb +0 -197
- data/example/rails2/test/test_helper.rb +0 -18
- data/example/rails2/test/unit/rails_util_test.rb +0 -44
- data/example/rails3/Gemfile +0 -20
- data/example/rails3/README +0 -4
- data/example/rails3/Rakefile +0 -7
- data/example/rails3/app/controllers/application_controller.rb +0 -128
- data/example/rails3/app/views/application/helper.html.erb +0 -2
- data/example/rails3/config.ru +0 -4
- data/example/rails3/config/application.rb +0 -23
- data/example/rails3/config/environment.rb +0 -5
- data/example/rails3/config/environments/development.rb +0 -26
- data/example/rails3/config/environments/production.rb +0 -49
- data/example/rails3/config/environments/test.rb +0 -30
- data/example/rails3/config/initializers/secret_token.rb +0 -7
- data/example/rails3/config/initializers/session_store.rb +0 -8
- data/example/rails3/config/rest-core.yaml +0 -16
- data/example/rails3/config/routes.rb +0 -5
- data/example/rails3/test/functional/application_controller_test.rb +0 -197
- data/example/rails3/test/test_helper.rb +0 -18
- data/example/rails3/test/unit/rails_util_test.rb +0 -44
- data/example/sinatra/config.ru +0 -16
- data/lib/rest-core/client/facebook.rb +0 -251
- data/lib/rest-core/client/facebook/rails_util.rb +0 -333
- data/lib/rest-core/client/flurry.rb +0 -96
- data/lib/rest-core/client/flurry/rails_util.rb +0 -74
- data/lib/rest-core/client/github.rb +0 -18
- data/lib/rest-core/client/linkedin.rb +0 -59
- data/lib/rest-core/client/mixi.rb +0 -47
- data/lib/rest-core/client/twitter.rb +0 -101
- data/test/client/facebook/config/rest-core.yaml +0 -8
- data/test/client/facebook/test_api.rb +0 -97
- data/test/client/facebook/test_cache.rb +0 -58
- data/test/client/facebook/test_default.rb +0 -23
- data/test/client/facebook/test_error.rb +0 -65
- data/test/client/facebook/test_handler.rb +0 -84
- data/test/client/facebook/test_load_config.rb +0 -39
- data/test/client/facebook/test_misc.rb +0 -72
- data/test/client/facebook/test_oauth.rb +0 -38
- data/test/client/facebook/test_old.rb +0 -114
- data/test/client/facebook/test_page.rb +0 -106
- data/test/client/facebook/test_parse.rb +0 -128
- data/test/client/facebook/test_serialize.rb +0 -43
- data/test/client/facebook/test_timeout.rb +0 -22
- data/test/client/flurry/test_metrics.rb +0 -83
- data/test/client/twitter/test_api.rb +0 -37
@@ -1,58 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
after do
|
6
|
-
WebMock.reset!
|
7
|
-
RR.verify
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'cache' do
|
11
|
-
before do
|
12
|
-
@url, @body = "https://graph.facebook.com/cache", '{"message":"ok"}'
|
13
|
-
@cache_key = Digest::MD5.hexdigest(@url)
|
14
|
-
@cache = {}
|
15
|
-
@rg = RestCore::Facebook.new(:cache => @cache, :json_decode => false)
|
16
|
-
stub_request(:get, @url).to_return(:body => @body).times(1)
|
17
|
-
end
|
18
|
-
|
19
|
-
should 'enable cache if passing cache' do
|
20
|
-
3.times{ @rg.get('cache').should.eq @body }
|
21
|
-
@cache.should.eq({@cache_key => @body})
|
22
|
-
end
|
23
|
-
|
24
|
-
should 'respect expires_in' do
|
25
|
-
mock(@cache).method(:store){ mock!.arity{ -3 } }
|
26
|
-
mock(@cache).store(@cache_key, @body, :expires_in => 3)
|
27
|
-
@rg.get('cache', {}, :expires_in => 3).should.eq @body
|
28
|
-
end
|
29
|
-
|
30
|
-
should 'update cache if there is cache option set to false' do
|
31
|
-
@rg.get('cache') .should.eq @body
|
32
|
-
stub_request(:get, @url).to_return(:body => @body.reverse).times(2)
|
33
|
-
@rg.get('cache') .should.eq @body
|
34
|
-
@rg.get('cache', {}, :cache => false).should.eq @body.reverse
|
35
|
-
@rg.get('cache') .should.eq @body.reverse
|
36
|
-
@rg.cache = nil
|
37
|
-
@rg.get('cache', {}, :cache => false).should.eq @body.reverse
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
should 'not cache post/put/delete' do
|
42
|
-
[:put, :post, :delete].each{ |meth|
|
43
|
-
url, body = "https://graph.facebook.com/cache", '{"message":"ok"}'
|
44
|
-
stub_request(meth, url).to_return(:body => body).times(3)
|
45
|
-
|
46
|
-
cache = {}
|
47
|
-
rg = RestCore::Facebook.new(:cache => cache)
|
48
|
-
3.times{
|
49
|
-
if meth == :delete
|
50
|
-
rg.send(meth, 'cache').should.eq({'message' => 'ok'})
|
51
|
-
else
|
52
|
-
rg.send(meth, 'cache', 'payload').should.eq({'message' => 'ok'})
|
53
|
-
end
|
54
|
-
}
|
55
|
-
cache.should.eq({})
|
56
|
-
}
|
57
|
-
end
|
58
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
should 'honor default attributes' do
|
6
|
-
RestCore::Facebook.members.reject{ |name|
|
7
|
-
name.to_s =~ /method$|handler$|detector$/ }.each{ |name|
|
8
|
-
RestCore::Facebook.new.send(name).should ==
|
9
|
-
RestCore::Facebook.new.send("default_#{name}")
|
10
|
-
}
|
11
|
-
end
|
12
|
-
|
13
|
-
should 'use module to override default attributes' do
|
14
|
-
klass = RestCore::Facebook.dup
|
15
|
-
klass.send(:include, Module.new do
|
16
|
-
def default_app_id
|
17
|
-
'1829'
|
18
|
-
end
|
19
|
-
end)
|
20
|
-
|
21
|
-
klass.new.app_id.should.eq('1829')
|
22
|
-
end
|
23
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook::Error do
|
5
|
-
after do
|
6
|
-
WebMock.reset!
|
7
|
-
RR.verify
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'have the right ancestors' do
|
11
|
-
RestCore::Facebook::Error::AccessToken.should.lt RestCore::Facebook::Error
|
12
|
-
|
13
|
-
RestCore::Facebook::Error::InvalidAccessToken.should.lt \
|
14
|
-
RestCore::Facebook::Error::AccessToken
|
15
|
-
|
16
|
-
RestCore::Facebook::Error::MissingAccessToken.should.lt \
|
17
|
-
RestCore::Facebook::Error::AccessToken
|
18
|
-
end
|
19
|
-
|
20
|
-
def error2env hash
|
21
|
-
{RestCore::RESPONSE_BODY => hash,
|
22
|
-
RestCore::REQUEST_PATH => '/' ,
|
23
|
-
RestCore::REQUEST_QUERY => {}}
|
24
|
-
end
|
25
|
-
|
26
|
-
should 'parse right' do
|
27
|
-
%w[OAuthInvalidTokenException OAuthException].each{ |type|
|
28
|
-
RestCore::Facebook::Error.call(error2env('error' => {'type' => type})).
|
29
|
-
should.kind_of?(RestCore::Facebook::Error::InvalidAccessToken)
|
30
|
-
}
|
31
|
-
|
32
|
-
RestCore::Facebook::Error.call(
|
33
|
-
error2env('error'=>{'type' =>'QueryParseException',
|
34
|
-
'message'=>'An active access token..'})).
|
35
|
-
should.kind_of?(RestCore::Facebook::Error::MissingAccessToken)
|
36
|
-
|
37
|
-
RestCore::Facebook::Error.call(
|
38
|
-
error2env('error'=>{'type' =>'QueryParseException',
|
39
|
-
'message'=>'Oh active access token..'})).
|
40
|
-
should.not.kind_of?(RestCore::Facebook::Error::MissingAccessToken)
|
41
|
-
|
42
|
-
RestCore::Facebook::Error.call(error2env('error_code' => 190)).
|
43
|
-
should.kind_of?(RestCore::Facebook::Error::InvalidAccessToken)
|
44
|
-
|
45
|
-
RestCore::Facebook::Error.call(error2env('error_code' => 104)).
|
46
|
-
should.kind_of?(RestCore::Facebook::Error::MissingAccessToken)
|
47
|
-
|
48
|
-
RestCore::Facebook::Error.call(error2env('error_code' => 999)).
|
49
|
-
should.not.kind_of?(RestCore::Facebook::Error::AccessToken)
|
50
|
-
|
51
|
-
error = RestCore::Facebook::Error.call(error2env(['not a hash']))
|
52
|
-
error.should.not.kind_of?(RestCore::Facebook::Error::AccessToken)
|
53
|
-
error.should .kind_of?(RestCore::Facebook::Error)
|
54
|
-
end
|
55
|
-
|
56
|
-
should 'nuke cache upon errors' do
|
57
|
-
stub_request(:get, 'https://graph.facebook.com/me').
|
58
|
-
to_return(:body => '{"error":"wrong"}').times(2)
|
59
|
-
|
60
|
-
rg = RestCore::Facebook.new(:cache => {},
|
61
|
-
:error_handler => lambda{|env|env})
|
62
|
-
rg.get('me'); rg.get('me')
|
63
|
-
rg.cache.values.should.eq []
|
64
|
-
end
|
65
|
-
end
|
@@ -1,84 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
after do
|
6
|
-
WebMock.reset!
|
7
|
-
RR.verify
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'log method' do
|
11
|
-
should 'log whenever doing network request' do
|
12
|
-
stub_request(:get, 'https://graph.facebook.com/me').
|
13
|
-
to_return(:body => '{}')
|
14
|
-
|
15
|
-
logger = []
|
16
|
-
rg = RestCore::Facebook.new(:log_method => lambda{ |s| logger << [s] })
|
17
|
-
rg.get('me')
|
18
|
-
|
19
|
-
logger.size.should.eq 1
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'with Graph API' do
|
24
|
-
before do
|
25
|
-
@id = lambda{ |env| env }
|
26
|
-
@error = '{"error":{"type":"Exception","message":"(#2500)"}}'
|
27
|
-
@error_hash = RestCore::JsonDecode.json_decode(@error)
|
28
|
-
|
29
|
-
stub_request(:get, 'https://graph.facebook.com/me').
|
30
|
-
to_return(:body => @error)
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'call error_handler if error occurred' do
|
34
|
-
RestCore::Facebook.new(:error_handler => @id).get('me').
|
35
|
-
should.eq @error_hash
|
36
|
-
end
|
37
|
-
|
38
|
-
should 'raise ::RestCore::Facebook::Error in default error_handler' do
|
39
|
-
begin
|
40
|
-
RestCore::Facebook.new.get('me')
|
41
|
-
rescue ::RestCore::Facebook::Error => e
|
42
|
-
e.error .should.eq @error_hash
|
43
|
-
e.message.should.eq \
|
44
|
-
"#{@error_hash.inspect} from https://graph.facebook.com/me"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'with FQL API' do
|
50
|
-
# Example of an actual response (without newline)
|
51
|
-
# {"error_code":603,"error_msg":"Unknown table: bad_table",
|
52
|
-
# "request_args":[{"key":"method","value":"fql.query"},
|
53
|
-
# {"key":"format","value":"json"},
|
54
|
-
# {"key":"query","value":
|
55
|
-
# "SELECT name FROM bad_table WHERE uid=12345"}]}
|
56
|
-
before do
|
57
|
-
@id = lambda{ |env| env }
|
58
|
-
@fql_error = '{"error_code":603,"error_msg":"Unknown table: bad"}'
|
59
|
-
@fql_error_hash = RestCore::JsonDecode.json_decode(@fql_error)
|
60
|
-
|
61
|
-
@bad_fql_query = 'SELECT name FROM bad_table WHERE uid="12345"'
|
62
|
-
bad_fql_request = "https://api.facebook.com/method/fql.query?" \
|
63
|
-
"format=json&query=#{CGI.escape(@bad_fql_query)}"
|
64
|
-
|
65
|
-
stub_request(:get, bad_fql_request).to_return(:body => @fql_error)
|
66
|
-
end
|
67
|
-
|
68
|
-
should 'call error_handler if error occurred' do
|
69
|
-
RestCore::Facebook.new(:error_handler => @id).fql(@bad_fql_query).
|
70
|
-
should.eq @fql_error_hash
|
71
|
-
end
|
72
|
-
|
73
|
-
should 'raise ::RestCore::Facebook::Error in default error_handler' do
|
74
|
-
begin
|
75
|
-
RestCore::Facebook.new.fql(@bad_fql_query)
|
76
|
-
rescue ::RestCore::Facebook::Error => e
|
77
|
-
e.error .should.eq @fql_error_hash
|
78
|
-
e.message.should.start_with?(
|
79
|
-
"#{@fql_error_hash.inspect} from " \
|
80
|
-
"https://api.facebook.com/method/fql.query?")
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
require 'rest-core/util/config'
|
5
|
-
|
6
|
-
describe RestCore::Config do
|
7
|
-
|
8
|
-
before do
|
9
|
-
@klass = RestCore::Facebook.dup
|
10
|
-
end
|
11
|
-
|
12
|
-
after do
|
13
|
-
RR.verify
|
14
|
-
end
|
15
|
-
|
16
|
-
def check
|
17
|
-
@klass.default_app_id .should.eq 41829
|
18
|
-
@klass.default_secret .should.eq 'r41829'.reverse
|
19
|
-
@klass.default_json_decode.should.eq false
|
20
|
-
@klass.default_lang .should.eq 'zh-tw'
|
21
|
-
end
|
22
|
-
|
23
|
-
should 'honor rails config' do
|
24
|
-
app = Object.new
|
25
|
-
mock(app).env { 'test' }
|
26
|
-
mock(app).root{ File.dirname(__FILE__) }
|
27
|
-
RestCore::Config.load_for_rails(@klass, 'facebook', app)
|
28
|
-
check
|
29
|
-
end
|
30
|
-
|
31
|
-
should 'honor config' do
|
32
|
-
RestCore::Config.load(
|
33
|
-
@klass,
|
34
|
-
"#{File.dirname(__FILE__)}/config/rest-core.yaml",
|
35
|
-
'test',
|
36
|
-
'facebook')
|
37
|
-
check
|
38
|
-
end
|
39
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
after do
|
6
|
-
WebMock.reset!
|
7
|
-
RR.verify
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'return true in authorized? if there is an access_token' do
|
11
|
-
RestCore::Facebook.new(:access_token => '1').authorized?.should.eq true
|
12
|
-
RestCore::Facebook.new(:access_token => nil).authorized?.should.eq false
|
13
|
-
end
|
14
|
-
|
15
|
-
should 'treat oauth_token as access_token as well' do
|
16
|
-
rg = RestCore::Facebook.new
|
17
|
-
hate_facebook = 'why the hell two different name?'
|
18
|
-
rg.data['oauth_token'] = hate_facebook
|
19
|
-
rg.authorized?.should.eq true
|
20
|
-
rg.access_token.should.eq hate_facebook
|
21
|
-
end
|
22
|
-
|
23
|
-
should 'build correct headers' do
|
24
|
-
rg = RestCore::Facebook.new(:accept => 'text/html',
|
25
|
-
:lang => 'zh-tw')
|
26
|
-
|
27
|
-
headers = rg.dry.call(rg.send(:build_env))[RestCore::REQUEST_HEADERS]
|
28
|
-
headers['Accept' ].should.eq 'text/html'
|
29
|
-
headers['Accept-Language'].should.eq 'zh-tw'
|
30
|
-
end
|
31
|
-
|
32
|
-
should 'build empty query string' do
|
33
|
-
rg = RestCore::Facebook.new
|
34
|
-
(rg.dry.call(rg.send(:build_env))[RestCore::REQUEST_QUERY] || {}).
|
35
|
-
should.eq({})
|
36
|
-
end
|
37
|
-
|
38
|
-
should 'create access_token in query string' do
|
39
|
-
rg = RestCore::Facebook.new(:access_token => 'token')
|
40
|
-
(rg.dry.call(rg.send(:build_env))[RestCore::REQUEST_QUERY] || {}).
|
41
|
-
should.eq({'access_token' => 'token'})
|
42
|
-
end
|
43
|
-
|
44
|
-
should 'build correct query string' do
|
45
|
-
rg = RestCore::Facebook.new(:access_token => 'token')
|
46
|
-
TestHelper.normalize_url(rg.url('', :message => 'hi!!')).
|
47
|
-
should.eq "#{rg.site}?access_token=token&message=hi%21%21"
|
48
|
-
|
49
|
-
rg.access_token = nil
|
50
|
-
TestHelper.normalize_url(rg.url('', :message => 'hi!!',
|
51
|
-
:subject => '(&oh&)')).
|
52
|
-
should.eq "#{rg.site}?message=hi%21%21&subject=%28%26oh%26%29"
|
53
|
-
end
|
54
|
-
|
55
|
-
should 'auto decode json' do
|
56
|
-
rg = RestCore::Facebook.new(:json_decode => true)
|
57
|
-
stub_request(:get, rg.site).to_return(:body => '[]')
|
58
|
-
rg.get('').should.eq []
|
59
|
-
end
|
60
|
-
|
61
|
-
should 'not auto decode json' do
|
62
|
-
rg = RestCore::Facebook.new(:json_decode => false)
|
63
|
-
stub_request(:get, rg.site).to_return(:body => '[]')
|
64
|
-
rg.get('').should.eq '[]'
|
65
|
-
end
|
66
|
-
|
67
|
-
should 'give attributes' do
|
68
|
-
RestCore::Facebook.new(:json_decode => false).attributes.
|
69
|
-
keys.map(&:to_s).sort.should.eq \
|
70
|
-
RestCore::Facebook.members.map(&:to_s).sort
|
71
|
-
end
|
72
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
before do
|
6
|
-
@rg = RestCore::Facebook.new(:app_id => '29', :secret => '18')
|
7
|
-
@uri = 'http://zzz.tw'
|
8
|
-
end
|
9
|
-
|
10
|
-
after do
|
11
|
-
WebMock.reset!
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'return correct oauth url' do
|
15
|
-
TestHelper.normalize_url(@rg.authorize_url(:redirect_uri => @uri)).
|
16
|
-
should.eq 'https://graph.facebook.com/oauth/authorize?' \
|
17
|
-
'client_id=29&redirect_uri=http%3A%2F%2Fzzz.tw'
|
18
|
-
end
|
19
|
-
|
20
|
-
should 'do authorizing and parse result and save it in data' do
|
21
|
-
stub_request(:get, 'https://graph.facebook.com/oauth/access_token?' \
|
22
|
-
'client_id=29&client_secret=18&code=zzz&' \
|
23
|
-
'redirect_uri=http%3A%2F%2Fzzz.tw').
|
24
|
-
to_return(:body => 'access_token=baken&expires=2918')
|
25
|
-
|
26
|
-
result = {'access_token' => 'baken', 'expires' => '2918'}
|
27
|
-
|
28
|
-
@rg.authorize!(:redirect_uri => @uri, :code => 'zzz').
|
29
|
-
should.eq result
|
30
|
-
@rg.data.should.eq result
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'not append access_token in authorize_url even presented' do
|
34
|
-
RestCore::Facebook.new(:access_token => 'do not use me').authorize_url.
|
35
|
-
should.eq 'https://graph.facebook.com/oauth/authorize'
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
@@ -1,114 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
after do
|
6
|
-
WebMock.reset!
|
7
|
-
RR.verify
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'do fql query with/without access_token' do
|
11
|
-
fql = 'SELECT name FROM likes where id="123"'
|
12
|
-
query = "format=json&query=#{CGI.escape(fql)}"
|
13
|
-
stub_request(:get, "https://api.facebook.com/method/fql.query?#{query}").
|
14
|
-
to_return(:body => '[]')
|
15
|
-
|
16
|
-
RestCore::Facebook.new.fql(fql).should.eq []
|
17
|
-
|
18
|
-
token = 'token'.reverse
|
19
|
-
stub_request(:get, "https://api.facebook.com/method/fql.query?#{query}" \
|
20
|
-
"&access_token=#{token}").
|
21
|
-
to_return(:body => '[]')
|
22
|
-
|
23
|
-
RestCore::Facebook.new(:access_token => token).fql(fql).should.eq []
|
24
|
-
end
|
25
|
-
|
26
|
-
should 'do fql.mutilquery correctly' do
|
27
|
-
f0 = 'SELECT display_name FROM application WHERE app_id="233082465238"'
|
28
|
-
f1 = 'SELECT display_name FROM application WHERE app_id="110225210740"'
|
29
|
-
f0q, f1q = "\"#{f0.gsub('"', '\\"')}\"", "\"#{f1.gsub('"', '\\"')}\""
|
30
|
-
q = "format=json&queries=#{CGI.escape("{\"f0\":#{f0q},\"f1\":#{f1q}}")}"
|
31
|
-
p = "format=json&queries=#{CGI.escape("{\"f1\":#{f1q},\"f0\":#{f0q}}")}"
|
32
|
-
|
33
|
-
stub_multi = lambda{
|
34
|
-
stub_request(:get,
|
35
|
-
"https://api.facebook.com/method/fql.multiquery?#{q}").
|
36
|
-
to_return(:body => '[]')
|
37
|
-
|
38
|
-
stub_request(:get,
|
39
|
-
"https://api.facebook.com/method/fql.multiquery?#{p}").
|
40
|
-
to_return(:body => '[]')
|
41
|
-
}
|
42
|
-
|
43
|
-
stub_multi.call
|
44
|
-
RestCore::Facebook.new.fql_multi(:f0 => f0, :f1 => f1).should.eq []
|
45
|
-
end
|
46
|
-
|
47
|
-
should 'cache fake post in fql' do
|
48
|
-
query = 'select name from user where uid = 4'
|
49
|
-
body = '[{"name":"Mark Zuckerberg"}]'
|
50
|
-
stub_request(:post,
|
51
|
-
'https://api.facebook.com/method/fql.query?format=json').
|
52
|
-
with(:body => {:query => query}).
|
53
|
-
to_return(:body => body)
|
54
|
-
|
55
|
-
RestCore::Facebook.new(:cache => (cache = {})).
|
56
|
-
fql(query, {}, :post => true).
|
57
|
-
first['name'] .should.eq 'Mark Zuckerberg'
|
58
|
-
cache.size .should.eq 1
|
59
|
-
cache.values.first.should.eq body
|
60
|
-
|
61
|
-
WebMock.reset! # should hit the cache
|
62
|
-
|
63
|
-
RestCore::Facebook.new(:cache => cache).fql(query, {}, :post => true).
|
64
|
-
first['name'] .should.eq 'Mark Zuckerberg'
|
65
|
-
cache.size .should.eq 1
|
66
|
-
cache.values.first.should.eq body
|
67
|
-
|
68
|
-
# query changed
|
69
|
-
should.raise(WebMock::NetConnectNotAllowedError) do
|
70
|
-
RestCore::Facebook.new(:cache => cache).
|
71
|
-
fql(query.upcase, {}, :post => true)
|
72
|
-
end
|
73
|
-
|
74
|
-
# cache should work for normal get
|
75
|
-
RestCore::Facebook.new(:cache => cache).fql(query).
|
76
|
-
first['name'] .should.eq 'Mark Zuckerberg'
|
77
|
-
cache.size .should.eq 1
|
78
|
-
cache.values.first.should.eq body
|
79
|
-
end
|
80
|
-
|
81
|
-
should 'do facebook old rest api' do
|
82
|
-
body = 'hate facebook inconsistent'
|
83
|
-
stub_request(:get,
|
84
|
-
'https://api.facebook.com/method/notes.create?format=json').
|
85
|
-
to_return(:body => body)
|
86
|
-
|
87
|
-
RestCore::Facebook.new.
|
88
|
-
old_rest('notes.create', {}, :json_decode => false).should.eq body
|
89
|
-
end
|
90
|
-
|
91
|
-
should 'exchange sessions for access token' do
|
92
|
-
stub_request(:post,
|
93
|
-
'https://graph.facebook.com/oauth/exchange_sessions?' \
|
94
|
-
'type=client_cred&client_id=id&client_secret=di&' \
|
95
|
-
'sessions=bad%20bed').
|
96
|
-
to_return(:body => '[{"access_token":"bogus"}]')
|
97
|
-
|
98
|
-
RestCore::Facebook.new(:app_id => 'id',
|
99
|
-
:secret => 'di').
|
100
|
-
exchange_sessions(:sessions => 'bad bed').
|
101
|
-
first['access_token'].should.eq 'bogus'
|
102
|
-
end
|
103
|
-
|
104
|
-
should 'use an secret access_token' do
|
105
|
-
stub_request(:get,
|
106
|
-
'https://api.facebook.com/method/admin.getAppProperties?' \
|
107
|
-
'access_token=123%7Cs&format=json&properties=app_id'
|
108
|
-
).to_return(:body => '{"app_id":"123"}')
|
109
|
-
|
110
|
-
RestCore::Facebook.new(:app_id => '123', :secret => 's').
|
111
|
-
secret_old_rest('admin.getAppProperties', :properties => 'app_id').
|
112
|
-
should.eq({'app_id' => '123'})
|
113
|
-
end
|
114
|
-
end
|