rest-graph 1.4.6 → 1.5.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/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
|