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.
Files changed (40) hide show
  1. data/CHANGES +67 -0
  2. data/CONTRIBUTORS +1 -0
  3. data/Gemfile +9 -1
  4. data/Gemfile.lock +13 -3
  5. data/README +10 -3
  6. data/README.rdoc +10 -3
  7. data/Rakefile +5 -2
  8. data/example/{rails → rails2}/README +0 -0
  9. data/example/{rails → rails2}/Rakefile +0 -0
  10. data/example/{rails → rails2}/app/controllers/application_controller.rb +4 -0
  11. data/example/{rails → rails2}/config/boot.rb +6 -2
  12. data/example/{rails → rails2}/config/environment.rb +2 -2
  13. data/example/{rails → rails2}/config/environments/development.rb +0 -0
  14. data/example/{rails → rails2}/config/environments/production.rb +0 -0
  15. data/example/{rails → rails2}/config/environments/test.rb +0 -0
  16. data/example/{rails → rails2}/config/initializers/cookie_verification_secret.rb +0 -0
  17. data/example/{rails → rails2}/config/initializers/new_rails_defaults.rb +0 -0
  18. data/example/{rails → rails2}/config/initializers/session_store.rb +1 -1
  19. data/example/{rails → rails2}/config/rest-graph.yaml +0 -0
  20. data/example/{rails → rails2}/config/routes.rb +0 -0
  21. data/example/{rails → rails2}/log +0 -0
  22. data/example/{rails → rails2}/script/console +0 -0
  23. data/example/{rails → rails2}/script/server +0 -0
  24. data/example/{rails → rails2}/test/functional/application_controller_test.rb +10 -1
  25. data/example/{rails → rails2}/test/test_helper.rb +0 -0
  26. data/example/{rails → rails2}/test/unit/rails_util_test.rb +0 -0
  27. data/lib/rest-graph.rb +150 -49
  28. data/lib/rest-graph/rails_util.rb +31 -27
  29. data/lib/rest-graph/version.rb +1 -1
  30. data/rest-graph.gemspec +16 -13
  31. data/test/test_api.rb +1 -1
  32. data/test/test_error.rb +51 -0
  33. data/test/test_handler.rb +4 -2
  34. data/test/test_misc.rb +29 -0
  35. data/test/test_old.rb +33 -0
  36. data/test/test_page.rb +54 -0
  37. data/test/test_parse.rb +7 -0
  38. data/test/test_rest-graph.rb +10 -0
  39. metadata +69 -50
  40. 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, :with => :rest_graph_on_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.parse(if rest_graph_in_canvas?
281
- # rails 3 uses newer rack which has fullpath
282
- "http://apps.facebook.com/#{rest_graph_oget(:canvas)}" +
283
- (request.respond_to?(:fullpath) ?
284
- request.fullpath : request.request_uri)
285
- else
286
- request.url
287
- end).
288
- tap{ |uri|
289
- uri.query = uri.query.split('&').reject{ |q|
290
- q =~ /^(code|session|signed_request)\=/
291
- }.join('&') if uri.query
292
- uri.query = nil if uri.query.blank?
293
- }.to_s
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?
@@ -1,4 +1,4 @@
1
1
 
2
2
  require 'rest-graph'
3
3
 
4
- RestGraph::VERSION = '1.4.6'
4
+ RestGraph::VERSION = '1.5.0'
@@ -2,22 +2,22 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{rest-graph}
5
- s.version = "1.4.6"
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-09-01}
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/rails/README", "example/rails/Rakefile", "example/rails/app/controllers/application_controller.rb", "example/rails/config/boot.rb", "example/rails/config/environment.rb", "example/rails/config/environments/development.rb", "example/rails/config/environments/production.rb", "example/rails/config/environments/test.rb", "example/rails/config/initializers/cookie_verification_secret.rb", "example/rails/config/initializers/new_rails_defaults.rb", "example/rails/config/initializers/session_store.rb", "example/rails/config/rest-graph.yaml", "example/rails/config/routes.rb", "example/rails/log", "example/rails/script/console", "example/rails/script/server", "example/rails/test/functional/application_controller_test.rb", "example/rails/test/test_helper.rb", "example/rails/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_access_token.rb", "test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_parse.rb", "test/test_serialize.rb"]
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/test_access_token.rb", "test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_parse.rb", "test/test_serialize.rb"]
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<yajl-ruby>, [">= 0.7.7"])
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<rack>, [">= 1.2.1"])
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.4"])
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<yajl-ruby>, [">= 0.7.7"])
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<rack>, [">= 1.2.1"])
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.4"])
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<yajl-ruby>, [">= 0.7.7"])
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<rack>, [">= 1.2.1"])
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.4"])
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
@@ -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('[]', nil)
57
+ mock.proxy(rg = RestGraph.new).post_request('[]', {})
58
58
  rg.put('feed/me', :message => 'hi there').
59
59
  should == []
60
60
  end
@@ -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
@@ -46,7 +46,8 @@ describe RestGraph do
46
46
  begin
47
47
  RestGraph.new.get('me')
48
48
  rescue ::RestGraph::Error => e
49
- e.message.should == @error_hash
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.message.should == @fql_error_hash
83
+ e.error .should == @fql_error_hash
84
+ e.message.should == @fql_error_hash.inspect
83
85
  end
84
86
  end
85
87
  end
@@ -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
@@ -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
@@ -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
@@ -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
- - 4
8
- - 6
9
- version: 1.4.6
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-09-01 00:00:00 +08:00
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: yajl-ruby
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
- - 0
46
- - 7
47
- - 7
48
- version: 0.7.7
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: json
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
- - 1
61
- - 4
62
- - 6
63
- version: 1.4.6
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: json_pure
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: rack
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
- - 2
92
- - 1
93
- version: 1.2.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: rr
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: *id006
125
+ version_requirements: *id007
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: webmock
113
128
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::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
- - 4
123
- version: 1.3.4
137
+ - 5
138
+ version: 1.3.5
124
139
  type: :development
125
- version_requirements: *id007
140
+ version_requirements: *id008
126
141
  - !ruby/object:Gem::Dependency
127
142
  name: bacon
128
143
  prerelease: false
129
- requirement: &id008 !ruby/object:Gem::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: *id008
155
+ version_requirements: *id009
141
156
  - !ruby/object:Gem::Dependency
142
157
  name: bones
143
158
  prerelease: false
144
- requirement: &id009 !ruby/object:Gem::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: *id009
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/rails/README
182
- - example/rails/Rakefile
183
- - example/rails/app/controllers/application_controller.rb
184
- - example/rails/config/boot.rb
185
- - example/rails/config/environment.rb
186
- - example/rails/config/environments/development.rb
187
- - example/rails/config/environments/production.rb
188
- - example/rails/config/environments/test.rb
189
- - example/rails/config/initializers/cookie_verification_secret.rb
190
- - example/rails/config/initializers/new_rails_defaults.rb
191
- - example/rails/config/initializers/session_store.rb
192
- - example/rails/config/rest-graph.yaml
193
- - example/rails/config/routes.rb
194
- - example/rails/log
195
- - example/rails/script/console
196
- - example/rails/script/server
197
- - example/rails/test/functional/application_controller_test.rb
198
- - example/rails/test/test_helper.rb
199
- - example/rails/test/unit/rails_util_test.rb
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