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.
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