rest-graph 1.4.6 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +67 -0
- data/CONTRIBUTORS +1 -0
- data/Gemfile +9 -1
- data/Gemfile.lock +13 -3
- data/README +10 -3
- data/README.rdoc +10 -3
- data/Rakefile +5 -2
- data/example/{rails → rails2}/README +0 -0
- data/example/{rails → rails2}/Rakefile +0 -0
- data/example/{rails → rails2}/app/controllers/application_controller.rb +4 -0
- data/example/{rails → rails2}/config/boot.rb +6 -2
- data/example/{rails → rails2}/config/environment.rb +2 -2
- data/example/{rails → rails2}/config/environments/development.rb +0 -0
- data/example/{rails → rails2}/config/environments/production.rb +0 -0
- data/example/{rails → rails2}/config/environments/test.rb +0 -0
- data/example/{rails → rails2}/config/initializers/cookie_verification_secret.rb +0 -0
- data/example/{rails → rails2}/config/initializers/new_rails_defaults.rb +0 -0
- data/example/{rails → rails2}/config/initializers/session_store.rb +1 -1
- data/example/{rails → rails2}/config/rest-graph.yaml +0 -0
- data/example/{rails → rails2}/config/routes.rb +0 -0
- data/example/{rails → rails2}/log +0 -0
- data/example/{rails → rails2}/script/console +0 -0
- data/example/{rails → rails2}/script/server +0 -0
- data/example/{rails → rails2}/test/functional/application_controller_test.rb +10 -1
- data/example/{rails → rails2}/test/test_helper.rb +0 -0
- data/example/{rails → rails2}/test/unit/rails_util_test.rb +0 -0
- data/lib/rest-graph.rb +150 -49
- data/lib/rest-graph/rails_util.rb +31 -27
- data/lib/rest-graph/version.rb +1 -1
- data/rest-graph.gemspec +16 -13
- data/test/test_api.rb +1 -1
- data/test/test_error.rb +51 -0
- data/test/test_handler.rb +4 -2
- data/test/test_misc.rb +29 -0
- data/test/test_old.rb +33 -0
- data/test/test_page.rb +54 -0
- data/test/test_parse.rb +7 -0
- data/test/test_rest-graph.rb +10 -0
- metadata +69 -50
- data/test/test_access_token.rb +0 -26
@@ -31,7 +31,8 @@ module RestGraph::RailsUtil
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.included controller
|
34
|
-
controller.rescue_from(::RestGraph::Error,
|
34
|
+
controller.rescue_from(::RestGraph::Error::AccessToken,
|
35
|
+
:with => :rest_graph_on_error)
|
35
36
|
controller.helper(::RestGraph::RailsUtil::Helper)
|
36
37
|
end
|
37
38
|
|
@@ -39,9 +40,9 @@ module RestGraph::RailsUtil
|
|
39
40
|
rest_graph_options_ctl.merge!(rest_graph_extract_options(options, :reject))
|
40
41
|
rest_graph_options_new.merge!(rest_graph_extract_options(options, :select))
|
41
42
|
|
42
|
-
rest_graph_check_cookie # for javascript sdk (canvas or not)
|
43
43
|
rest_graph_check_params_signed_request # canvas
|
44
44
|
rest_graph_check_params_session # i think it would be deprecated
|
45
|
+
rest_graph_check_cookie # for js sdk (canvas or not)
|
45
46
|
rest_graph_check_code # oauth api
|
46
47
|
|
47
48
|
# there are above 4 ways to check the user identity!
|
@@ -81,6 +82,7 @@ module RestGraph::RailsUtil
|
|
81
82
|
|
82
83
|
logger.debug("DEBUG: RestGraph: redirect to #{@rest_graph_authorize_url}")
|
83
84
|
|
85
|
+
cookies.delete("fbs_#{rest_graph.app_id}")
|
84
86
|
rest_graph_authorize_redirect
|
85
87
|
end
|
86
88
|
end
|
@@ -141,17 +143,6 @@ module RestGraph::RailsUtil
|
|
141
143
|
|
142
144
|
|
143
145
|
# ==================== begin facebook check ======================
|
144
|
-
# if we're not in canvas nor code passed,
|
145
|
-
# we could check out cookies as well.
|
146
|
-
def rest_graph_check_cookie
|
147
|
-
return if rest_graph.authorized? ||
|
148
|
-
!cookies["fbs_#{rest_graph.app_id}"]
|
149
|
-
|
150
|
-
rest_graph.parse_cookies!(cookies)
|
151
|
-
logger.debug("DEBUG: RestGraph: detected cookies, parsed:" \
|
152
|
-
" #{rest_graph.data.inspect}")
|
153
|
-
end
|
154
|
-
|
155
146
|
def rest_graph_check_params_signed_request
|
156
147
|
return if rest_graph.authorized? || !params[:signed_request]
|
157
148
|
|
@@ -185,6 +176,17 @@ module RestGraph::RailsUtil
|
|
185
176
|
end
|
186
177
|
end
|
187
178
|
|
179
|
+
# if we're not in canvas nor code passed,
|
180
|
+
# we could check out cookies as well.
|
181
|
+
def rest_graph_check_cookie
|
182
|
+
return if rest_graph.authorized? ||
|
183
|
+
!cookies["fbs_#{rest_graph.app_id}"]
|
184
|
+
|
185
|
+
rest_graph.parse_cookies!(cookies)
|
186
|
+
logger.debug("DEBUG: RestGraph: detected cookies, parsed:" \
|
187
|
+
" #{rest_graph.data.inspect}")
|
188
|
+
end
|
189
|
+
|
188
190
|
# exchange the code with access_token
|
189
191
|
def rest_graph_check_code
|
190
192
|
return if rest_graph.authorized? || !params[:code]
|
@@ -238,6 +240,7 @@ module RestGraph::RailsUtil
|
|
238
240
|
# ==================== end check ================================
|
239
241
|
# ==================== begin write ================================
|
240
242
|
def rest_graph_write_rg_fbs
|
243
|
+
cookies.delete("fbs_#{rest_graph.app_id}")
|
241
244
|
rest_graph_write_rg_handler
|
242
245
|
rest_graph_write_rg_session
|
243
246
|
rest_graph_write_rg_cookies
|
@@ -277,20 +280,21 @@ module RestGraph::RailsUtil
|
|
277
280
|
end
|
278
281
|
|
279
282
|
def rest_graph_normalized_request_uri
|
280
|
-
URI.
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
283
|
+
uri = URI.encode(
|
284
|
+
if rest_graph_in_canvas?
|
285
|
+
# rails 3 uses newer rack which has fullpath
|
286
|
+
"http://apps.facebook.com/#{rest_graph_oget(:canvas)}" +
|
287
|
+
(request.respond_to?(:fullpath) ?
|
288
|
+
request.fullpath : request.request_uri)
|
289
|
+
else
|
290
|
+
request.url
|
291
|
+
end)
|
292
|
+
URI.parse(uri).tap{ |uri|
|
293
|
+
uri.query = uri.query.split('&').reject{ |q|
|
294
|
+
q =~ /^(code|session|signed_request)\=/
|
295
|
+
}.join('&') if uri.query
|
296
|
+
uri.query = nil if uri.query.blank?
|
297
|
+
}.to_s
|
294
298
|
end
|
295
299
|
|
296
300
|
def rest_graph_in_canvas?
|
data/lib/rest-graph/version.rb
CHANGED
data/rest-graph.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rest-graph}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.5.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Cardinal Blue", "Lin Jen-Shin (aka godfat 真常)"]
|
9
|
-
s.date = %q{2010-
|
9
|
+
s.date = %q{2010-10-11}
|
10
10
|
s.description = %q{A super simple Facebook Open Graph API client}
|
11
11
|
s.email = %q{dev (XD) cardinalblue.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGES", "CONTRIBUTORS", "Gemfile", "Gemfile.lock", "LICENSE", "README", "TODO", "rest-graph.gemspec"]
|
13
|
-
s.files = ["CHANGES", "CONTRIBUTORS", "Gemfile", "Gemfile.lock", "LICENSE", "README", "README.rdoc", "Rakefile", "TODO", "example/
|
13
|
+
s.files = ["CHANGES", "CONTRIBUTORS", "Gemfile", "Gemfile.lock", "LICENSE", "README", "README.rdoc", "Rakefile", "TODO", "example/rails2/README", "example/rails2/Rakefile", "example/rails2/app/controllers/application_controller.rb", "example/rails2/config/boot.rb", "example/rails2/config/environment.rb", "example/rails2/config/environments/development.rb", "example/rails2/config/environments/production.rb", "example/rails2/config/environments/test.rb", "example/rails2/config/initializers/cookie_verification_secret.rb", "example/rails2/config/initializers/new_rails_defaults.rb", "example/rails2/config/initializers/session_store.rb", "example/rails2/config/rest-graph.yaml", "example/rails2/config/routes.rb", "example/rails2/log", "example/rails2/script/console", "example/rails2/script/server", "example/rails2/test/functional/application_controller_test.rb", "example/rails2/test/test_helper.rb", "example/rails2/test/unit/rails_util_test.rb", "init.rb", "lib/rest-graph.rb", "lib/rest-graph/auto_load.rb", "lib/rest-graph/load_config.rb", "lib/rest-graph/rails_util.rb", "lib/rest-graph/version.rb", "rest-graph.gemspec", "test/common.rb", "test/config/rest-graph.yaml", "test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_error.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_page.rb", "test/test_parse.rb", "test/test_rest-graph.rb", "test/test_serialize.rb"]
|
14
14
|
s.homepage = %q{http://github.com/cardinalblue/rest-graph}
|
15
15
|
s.rdoc_options = ["--main", "README.rdoc"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = %q{rest-graph}
|
18
18
|
s.rubygems_version = %q{1.3.7}
|
19
19
|
s.summary = %q{A super simple Facebook Open Graph API client}
|
20
|
-
s.test_files = ["test/
|
20
|
+
s.test_files = ["test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_error.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_page.rb", "test/test_parse.rb", "test/test_rest-graph.rb", "test/test_serialize.rb"]
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
@@ -25,33 +25,36 @@ Gem::Specification.new do |s|
|
|
25
25
|
|
26
26
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
27
|
s.add_runtime_dependency(%q<rest-client>, [">= 1.6.1"])
|
28
|
-
s.add_development_dependency(%q<
|
28
|
+
s.add_development_dependency(%q<rack>, [">= 1.2.1"])
|
29
|
+
s.add_development_dependency(%q<yajl-ruby>, [">= 0.7.8"])
|
29
30
|
s.add_development_dependency(%q<json>, [">= 1.4.6"])
|
30
31
|
s.add_development_dependency(%q<json_pure>, [">= 1.4.6"])
|
31
|
-
s.add_development_dependency(%q<
|
32
|
+
s.add_development_dependency(%q<ruby-hmac>, [">= 0.4.0"])
|
32
33
|
s.add_development_dependency(%q<rr>, [">= 1.0.0"])
|
33
|
-
s.add_development_dependency(%q<webmock>, [">= 1.3.
|
34
|
+
s.add_development_dependency(%q<webmock>, [">= 1.3.5"])
|
34
35
|
s.add_development_dependency(%q<bacon>, [">= 1.1.0"])
|
35
36
|
s.add_development_dependency(%q<bones>, [">= 3.4.7"])
|
36
37
|
else
|
37
38
|
s.add_dependency(%q<rest-client>, [">= 1.6.1"])
|
38
|
-
s.add_dependency(%q<
|
39
|
+
s.add_dependency(%q<rack>, [">= 1.2.1"])
|
40
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0.7.8"])
|
39
41
|
s.add_dependency(%q<json>, [">= 1.4.6"])
|
40
42
|
s.add_dependency(%q<json_pure>, [">= 1.4.6"])
|
41
|
-
s.add_dependency(%q<
|
43
|
+
s.add_dependency(%q<ruby-hmac>, [">= 0.4.0"])
|
42
44
|
s.add_dependency(%q<rr>, [">= 1.0.0"])
|
43
|
-
s.add_dependency(%q<webmock>, [">= 1.3.
|
45
|
+
s.add_dependency(%q<webmock>, [">= 1.3.5"])
|
44
46
|
s.add_dependency(%q<bacon>, [">= 1.1.0"])
|
45
47
|
s.add_dependency(%q<bones>, [">= 3.4.7"])
|
46
48
|
end
|
47
49
|
else
|
48
50
|
s.add_dependency(%q<rest-client>, [">= 1.6.1"])
|
49
|
-
s.add_dependency(%q<
|
51
|
+
s.add_dependency(%q<rack>, [">= 1.2.1"])
|
52
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0.7.8"])
|
50
53
|
s.add_dependency(%q<json>, [">= 1.4.6"])
|
51
54
|
s.add_dependency(%q<json_pure>, [">= 1.4.6"])
|
52
|
-
s.add_dependency(%q<
|
55
|
+
s.add_dependency(%q<ruby-hmac>, [">= 0.4.0"])
|
53
56
|
s.add_dependency(%q<rr>, [">= 1.0.0"])
|
54
|
-
s.add_dependency(%q<webmock>, [">= 1.3.
|
57
|
+
s.add_dependency(%q<webmock>, [">= 1.3.5"])
|
55
58
|
s.add_dependency(%q<bacon>, [">= 1.1.0"])
|
56
59
|
s.add_dependency(%q<bones>, [">= 3.4.7"])
|
57
60
|
end
|
data/test/test_api.rb
CHANGED
@@ -54,7 +54,7 @@ describe RestGraph do
|
|
54
54
|
stub_request(:put, 'https://graph.facebook.com/feed/me').
|
55
55
|
with(:body => 'message=hi%20there').to_return(:body => '[]')
|
56
56
|
|
57
|
-
mock.proxy(rg = RestGraph.new).post_request('[]',
|
57
|
+
mock.proxy(rg = RestGraph.new).post_request('[]', {})
|
58
58
|
rg.put('feed/me', :message => 'hi there').
|
59
59
|
should == []
|
60
60
|
end
|
data/test/test_error.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
if respond_to?(:require_relative, true)
|
3
|
+
require_relative 'common'
|
4
|
+
else
|
5
|
+
require File.dirname(__FILE__) + '/common'
|
6
|
+
end
|
7
|
+
|
8
|
+
describe RestGraph::Error do
|
9
|
+
after do
|
10
|
+
reset_webmock
|
11
|
+
RR.verify
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'has the right ancestors' do
|
15
|
+
RestGraph::Error::AccessToken .should < RestGraph::Error
|
16
|
+
|
17
|
+
RestGraph::Error::InvalidAccessToken.should <
|
18
|
+
RestGraph::Error::AccessToken
|
19
|
+
|
20
|
+
RestGraph::Error::MissingAccessToken.should <
|
21
|
+
RestGraph::Error::AccessToken
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'would parse right' do
|
25
|
+
%w[OAuthInvalidTokenException OAuthException].each{ |type|
|
26
|
+
RestGraph::Error.parse('error' => {'type' => type}).
|
27
|
+
should.kind_of?(RestGraph::Error::InvalidAccessToken)
|
28
|
+
}
|
29
|
+
|
30
|
+
RestGraph::Error.parse('error' => {'type' => 'QueryParseException',
|
31
|
+
'message' => 'An active access token..'}).
|
32
|
+
should.kind_of?(RestGraph::Error::MissingAccessToken)
|
33
|
+
|
34
|
+
RestGraph::Error.parse('error' => {'type' => 'QueryParseException',
|
35
|
+
'message' => 'Oh active access token..'}).
|
36
|
+
should.not.kind_of?(RestGraph::Error::MissingAccessToken)
|
37
|
+
|
38
|
+
RestGraph::Error.parse('error_code' => 190).
|
39
|
+
should.kind_of?(RestGraph::Error::InvalidAccessToken)
|
40
|
+
|
41
|
+
RestGraph::Error.parse('error_code' => 104).
|
42
|
+
should.kind_of?(RestGraph::Error::MissingAccessToken)
|
43
|
+
|
44
|
+
RestGraph::Error.parse('error_code' => 999).
|
45
|
+
should.not.kind_of?(RestGraph::Error::AccessToken)
|
46
|
+
|
47
|
+
error = RestGraph::Error.parse(['not a hash'])
|
48
|
+
error.should.not.kind_of?(RestGraph::Error::AccessToken)
|
49
|
+
error.should .kind_of?(RestGraph::Error)
|
50
|
+
end
|
51
|
+
end
|
data/test/test_handler.rb
CHANGED
@@ -46,7 +46,8 @@ describe RestGraph do
|
|
46
46
|
begin
|
47
47
|
RestGraph.new.get('me')
|
48
48
|
rescue ::RestGraph::Error => e
|
49
|
-
e.
|
49
|
+
e.error .should == @error_hash
|
50
|
+
e.message.should == @error_hash.inspect
|
50
51
|
end
|
51
52
|
end
|
52
53
|
end
|
@@ -79,7 +80,8 @@ describe RestGraph do
|
|
79
80
|
begin
|
80
81
|
RestGraph.new.fql(@bad_fql_query)
|
81
82
|
rescue ::RestGraph::Error => e
|
82
|
-
e.
|
83
|
+
e.error .should == @fql_error_hash
|
84
|
+
e.message.should == @fql_error_hash.inspect
|
83
85
|
end
|
84
86
|
end
|
85
87
|
end
|
data/test/test_misc.rb
CHANGED
@@ -11,6 +11,19 @@ describe RestGraph do
|
|
11
11
|
RR.verify
|
12
12
|
end
|
13
13
|
|
14
|
+
it 'would return true in authorized? if there is an access_token' do
|
15
|
+
RestGraph.new(:access_token => '1').authorized?.should == true
|
16
|
+
RestGraph.new(:access_token => nil).authorized?.should == false
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'would treat oauth_token as access_token as well' do
|
20
|
+
rg = RestGraph.new
|
21
|
+
hate_facebook = 'why the hell two different name?'
|
22
|
+
rg.data['oauth_token'] = hate_facebook
|
23
|
+
rg.authorized?.should == true
|
24
|
+
rg.access_token == hate_facebook
|
25
|
+
end
|
26
|
+
|
14
27
|
it 'would build correct headers' do
|
15
28
|
rg = RestGraph.new(:accept => 'text/html',
|
16
29
|
:lang => 'zh-tw')
|
@@ -48,4 +61,20 @@ describe RestGraph do
|
|
48
61
|
RestGraph.new(:auto_decode => false).send(:post_request, '[]').
|
49
62
|
should == '[]'
|
50
63
|
end
|
64
|
+
|
65
|
+
it 'would give better inspect string' do
|
66
|
+
RestGraph.new(:auto_decode => false).inspect.should =~ Regexp.new(
|
67
|
+
'#<struct RestGraph auto_decode=false,' \
|
68
|
+
' strict=false,' \
|
69
|
+
' graph_server="https://graph.facebook.com/",' \
|
70
|
+
' old_server="https://api.facebook.com/",' \
|
71
|
+
' accept="text/javascript",' \
|
72
|
+
' lang="en-us",' \
|
73
|
+
' app_id=nil,' \
|
74
|
+
' secret=nil,' \
|
75
|
+
' data=\{\},' \
|
76
|
+
' cache=nil,' \
|
77
|
+
' error_handler=#<Proc:.+>,' \
|
78
|
+
' log_handler=nil>')
|
79
|
+
end
|
51
80
|
end
|
data/test/test_old.rb
CHANGED
@@ -70,4 +70,37 @@ describe RestGraph do
|
|
70
70
|
exchange_sessions(:sessions => 'bad bed').
|
71
71
|
first['access_token'].should == 'bogus'
|
72
72
|
end
|
73
|
+
|
74
|
+
it 'returns broken json' do
|
75
|
+
stub_request(:get,
|
76
|
+
'https://api.facebook.com/method/admin.getAppProperties?' \
|
77
|
+
'access_token=123%7Cs&format=json&properties=app_id'
|
78
|
+
).to_return(:body => '"{\"app_id\":\"123\"}"')
|
79
|
+
|
80
|
+
RestGraph.new(:app_id => '123', :secret => 's').
|
81
|
+
secret_old_rest('admin.getAppProperties', :properties => 'app_id').
|
82
|
+
should == {'app_id' => '123'}
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'uses an secret access_token' do
|
86
|
+
stub_request(:get,
|
87
|
+
'https://api.facebook.com/method/admin.getAppProperties?' \
|
88
|
+
'access_token=123%7Cs&format=json&properties=app_id'
|
89
|
+
).to_return(:body => '{"app_id":"123"}')
|
90
|
+
|
91
|
+
RestGraph.new(:app_id => '123', :secret => 's').
|
92
|
+
secret_old_rest('admin.getAppProperties', :properties => 'app_id').
|
93
|
+
should == {'app_id' => '123'}
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'would not parse twice in strict mode' do
|
97
|
+
stub_request(:get,
|
98
|
+
'https://api.facebook.com/method/admin.getAppProperties?' \
|
99
|
+
'access_token=123%7Cs&format=json&properties=app_id'
|
100
|
+
).to_return(:body => '"{\"app_id\":\"123\"}"')
|
101
|
+
|
102
|
+
RestGraph.new(:app_id => '123', :secret => 's', :strict => true).
|
103
|
+
secret_old_rest('admin.getAppProperties', :properties => 'app_id').
|
104
|
+
should == '{"app_id":"123"}'
|
105
|
+
end
|
73
106
|
end
|
data/test/test_page.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
|
2
|
+
if respond_to?(:require_relative, true)
|
3
|
+
require_relative 'common'
|
4
|
+
else
|
5
|
+
require File.dirname(__FILE__) + '/common'
|
6
|
+
end
|
7
|
+
|
8
|
+
describe RestGraph do
|
9
|
+
after do
|
10
|
+
reset_webmock
|
11
|
+
RR.verify
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'would get the next/prev page' do
|
15
|
+
rg = RestGraph.new
|
16
|
+
%w[next previous].each{ |type|
|
17
|
+
kind = "#{type}_page"
|
18
|
+
rg.send(kind, {}) .should == nil
|
19
|
+
rg.send(kind, {'paging' => []}).should == nil
|
20
|
+
rg.send(kind, {'paging' => {}}).should == nil
|
21
|
+
|
22
|
+
mock(rg).request(:get, 'zzz', {}){ 'ok' }
|
23
|
+
rg.send(kind, {'paging' => {type => 'zzz'}}).should == 'ok'
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'would merge all pages into one' do
|
28
|
+
rg = RestGraph.new
|
29
|
+
%w[next previous].each{ |type|
|
30
|
+
kind = "#{type}_page"
|
31
|
+
data = {'paging' => {type => 'zzz'}, 'data' => ['z']}
|
32
|
+
|
33
|
+
# invalid pages or just the page itself
|
34
|
+
(-1..1).each{ |page|
|
35
|
+
rg.for_pages(data, page, kind).should == data
|
36
|
+
}
|
37
|
+
|
38
|
+
(2..4).each{ |pages|
|
39
|
+
# merge data
|
40
|
+
mock(rg).request(:get, 'zzz', {}){ {'data' => ['y']} }
|
41
|
+
rg.for_pages(data, pages, kind).should == {'data' => %w[z y]}
|
42
|
+
|
43
|
+
# this data cannot be merged
|
44
|
+
mock(rg).request(:get, 'zzz', {}){ {'data' => 'y'} }
|
45
|
+
rg.for_pages(data, pages, kind).should == {'data' => %w[z]}
|
46
|
+
}
|
47
|
+
|
48
|
+
mock(rg).request(:get, 'zzz', {}){ {'paging' => {type => 'yyy'},
|
49
|
+
'data' => ['y']} }
|
50
|
+
mock(rg).request(:get, 'yyy', {}){ {'data' => ['x']} }
|
51
|
+
rg.for_pages(data, 3, kind).should == {'data' => %w[z y x]}
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
data/test/test_parse.rb
CHANGED
@@ -87,6 +87,13 @@ describe RestGraph do
|
|
87
87
|
rg.parse_signed_request!(signed_request).should == nil
|
88
88
|
end
|
89
89
|
|
90
|
+
it 'would fallback to ruby-hmac if Digest.new raise an runtime error' do
|
91
|
+
key, data = 'top', 'secret'
|
92
|
+
mock(OpenSSL::Digest::Digest).new('sha256'){ raise 'boom' }
|
93
|
+
RestGraph.hmac_sha256(key, data).should ==
|
94
|
+
OpenSSL::HMAC.digest('sha256', key, data)
|
95
|
+
end
|
96
|
+
|
90
97
|
it 'would generate correct fbs with correct sig' do
|
91
98
|
RestGraph.new(:access_token => 'fake', :secret => 's').fbs.should ==
|
92
99
|
"access_token=fake&sig=#{Digest::MD5.hexdigest('access_token=fakes')}"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
|
+
$LOAD_PATH.uniq!
|
4
|
+
|
5
|
+
Dir["#{File.dirname(__FILE__)}/*.rb"].each{ |file|
|
6
|
+
next if file == __FILE__
|
7
|
+
next if ARGV.map{ |path| File.expand_path(path)
|
8
|
+
}.include?(File.expand_path(file))
|
9
|
+
require File.basename(file).sub(/\..+$/, '')
|
10
|
+
}
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 1.5.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Cardinal Blue
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-11 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
37
|
+
name: rack
|
38
38
|
prerelease: false
|
39
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
segments:
|
45
|
-
-
|
46
|
-
-
|
47
|
-
-
|
48
|
-
version:
|
45
|
+
- 1
|
46
|
+
- 2
|
47
|
+
- 1
|
48
|
+
version: 1.2.1
|
49
49
|
type: :development
|
50
50
|
version_requirements: *id002
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
-
name:
|
52
|
+
name: yajl-ruby
|
53
53
|
prerelease: false
|
54
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
55
55
|
none: false
|
@@ -57,14 +57,14 @@ dependencies:
|
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
segments:
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
version:
|
60
|
+
- 0
|
61
|
+
- 7
|
62
|
+
- 8
|
63
|
+
version: 0.7.8
|
64
64
|
type: :development
|
65
65
|
version_requirements: *id003
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
|
-
name:
|
67
|
+
name: json
|
68
68
|
prerelease: false
|
69
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
70
70
|
none: false
|
@@ -79,7 +79,7 @@ dependencies:
|
|
79
79
|
type: :development
|
80
80
|
version_requirements: *id004
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
82
|
+
name: json_pure
|
83
83
|
prerelease: false
|
84
84
|
requirement: &id005 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
@@ -88,15 +88,30 @@ dependencies:
|
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
segments:
|
90
90
|
- 1
|
91
|
-
-
|
92
|
-
-
|
93
|
-
version: 1.
|
91
|
+
- 4
|
92
|
+
- 6
|
93
|
+
version: 1.4.6
|
94
94
|
type: :development
|
95
95
|
version_requirements: *id005
|
96
96
|
- !ruby/object:Gem::Dependency
|
97
|
-
name:
|
97
|
+
name: ruby-hmac
|
98
98
|
prerelease: false
|
99
99
|
requirement: &id006 !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
- 4
|
107
|
+
- 0
|
108
|
+
version: 0.4.0
|
109
|
+
type: :development
|
110
|
+
version_requirements: *id006
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rr
|
113
|
+
prerelease: false
|
114
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
100
115
|
none: false
|
101
116
|
requirements:
|
102
117
|
- - ">="
|
@@ -107,11 +122,11 @@ dependencies:
|
|
107
122
|
- 0
|
108
123
|
version: 1.0.0
|
109
124
|
type: :development
|
110
|
-
version_requirements: *
|
125
|
+
version_requirements: *id007
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: webmock
|
113
128
|
prerelease: false
|
114
|
-
requirement: &
|
129
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
115
130
|
none: false
|
116
131
|
requirements:
|
117
132
|
- - ">="
|
@@ -119,14 +134,14 @@ dependencies:
|
|
119
134
|
segments:
|
120
135
|
- 1
|
121
136
|
- 3
|
122
|
-
-
|
123
|
-
version: 1.3.
|
137
|
+
- 5
|
138
|
+
version: 1.3.5
|
124
139
|
type: :development
|
125
|
-
version_requirements: *
|
140
|
+
version_requirements: *id008
|
126
141
|
- !ruby/object:Gem::Dependency
|
127
142
|
name: bacon
|
128
143
|
prerelease: false
|
129
|
-
requirement: &
|
144
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
130
145
|
none: false
|
131
146
|
requirements:
|
132
147
|
- - ">="
|
@@ -137,11 +152,11 @@ dependencies:
|
|
137
152
|
- 0
|
138
153
|
version: 1.1.0
|
139
154
|
type: :development
|
140
|
-
version_requirements: *
|
155
|
+
version_requirements: *id009
|
141
156
|
- !ruby/object:Gem::Dependency
|
142
157
|
name: bones
|
143
158
|
prerelease: false
|
144
|
-
requirement: &
|
159
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
145
160
|
none: false
|
146
161
|
requirements:
|
147
162
|
- - ">="
|
@@ -152,7 +167,7 @@ dependencies:
|
|
152
167
|
- 7
|
153
168
|
version: 3.4.7
|
154
169
|
type: :development
|
155
|
-
version_requirements: *
|
170
|
+
version_requirements: *id010
|
156
171
|
description: A super simple Facebook Open Graph API client
|
157
172
|
email: dev (XD) cardinalblue.com
|
158
173
|
executables: []
|
@@ -178,25 +193,25 @@ files:
|
|
178
193
|
- README.rdoc
|
179
194
|
- Rakefile
|
180
195
|
- TODO
|
181
|
-
- example/
|
182
|
-
- example/
|
183
|
-
- example/
|
184
|
-
- example/
|
185
|
-
- example/
|
186
|
-
- example/
|
187
|
-
- example/
|
188
|
-
- example/
|
189
|
-
- example/
|
190
|
-
- example/
|
191
|
-
- example/
|
192
|
-
- example/
|
193
|
-
- example/
|
194
|
-
- example/
|
195
|
-
- example/
|
196
|
-
- example/
|
197
|
-
- example/
|
198
|
-
- example/
|
199
|
-
- example/
|
196
|
+
- example/rails2/README
|
197
|
+
- example/rails2/Rakefile
|
198
|
+
- example/rails2/app/controllers/application_controller.rb
|
199
|
+
- example/rails2/config/boot.rb
|
200
|
+
- example/rails2/config/environment.rb
|
201
|
+
- example/rails2/config/environments/development.rb
|
202
|
+
- example/rails2/config/environments/production.rb
|
203
|
+
- example/rails2/config/environments/test.rb
|
204
|
+
- example/rails2/config/initializers/cookie_verification_secret.rb
|
205
|
+
- example/rails2/config/initializers/new_rails_defaults.rb
|
206
|
+
- example/rails2/config/initializers/session_store.rb
|
207
|
+
- example/rails2/config/rest-graph.yaml
|
208
|
+
- example/rails2/config/routes.rb
|
209
|
+
- example/rails2/log
|
210
|
+
- example/rails2/script/console
|
211
|
+
- example/rails2/script/server
|
212
|
+
- example/rails2/test/functional/application_controller_test.rb
|
213
|
+
- example/rails2/test/test_helper.rb
|
214
|
+
- example/rails2/test/unit/rails_util_test.rb
|
200
215
|
- init.rb
|
201
216
|
- lib/rest-graph.rb
|
202
217
|
- lib/rest-graph/auto_load.rb
|
@@ -206,16 +221,18 @@ files:
|
|
206
221
|
- rest-graph.gemspec
|
207
222
|
- test/common.rb
|
208
223
|
- test/config/rest-graph.yaml
|
209
|
-
- test/test_access_token.rb
|
210
224
|
- test/test_api.rb
|
211
225
|
- test/test_cache.rb
|
212
226
|
- test/test_default.rb
|
227
|
+
- test/test_error.rb
|
213
228
|
- test/test_handler.rb
|
214
229
|
- test/test_load_config.rb
|
215
230
|
- test/test_misc.rb
|
216
231
|
- test/test_oauth.rb
|
217
232
|
- test/test_old.rb
|
233
|
+
- test/test_page.rb
|
218
234
|
- test/test_parse.rb
|
235
|
+
- test/test_rest-graph.rb
|
219
236
|
- test/test_serialize.rb
|
220
237
|
has_rdoc: true
|
221
238
|
homepage: http://github.com/cardinalblue/rest-graph
|
@@ -251,14 +268,16 @@ signing_key:
|
|
251
268
|
specification_version: 3
|
252
269
|
summary: A super simple Facebook Open Graph API client
|
253
270
|
test_files:
|
254
|
-
- test/test_access_token.rb
|
255
271
|
- test/test_api.rb
|
256
272
|
- test/test_cache.rb
|
257
273
|
- test/test_default.rb
|
274
|
+
- test/test_error.rb
|
258
275
|
- test/test_handler.rb
|
259
276
|
- test/test_load_config.rb
|
260
277
|
- test/test_misc.rb
|
261
278
|
- test/test_oauth.rb
|
262
279
|
- test/test_old.rb
|
280
|
+
- test/test_page.rb
|
263
281
|
- test/test_parse.rb
|
282
|
+
- test/test_rest-graph.rb
|
264
283
|
- test/test_serialize.rb
|