rest-graph 1.8.0 → 1.9.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/.gitmodules +3 -0
- data/CHANGES +31 -0
- data/CONTRIBUTORS +4 -3
- data/README +24 -20
- data/README.md +24 -20
- data/TODO +0 -1
- data/doc/heroku-facebook.md +186 -0
- data/doc/tutorial.md +4 -0
- data/example/rails3/Gemfile +1 -1
- data/example/sinatra/config.ru +16 -0
- data/lib/rest-graph/core.rb +71 -57
- data/lib/rest-graph/rails_util.rb +4 -2
- data/lib/rest-graph/test_util.rb +13 -7
- data/lib/rest-graph/version.rb +1 -1
- data/rest-graph.gemspec +122 -11
- data/task/gemgem.rb +13 -2
- data/test/test_api.rb +13 -1
- data/test/test_cache.rb +3 -2
- data/test/test_misc.rb +5 -18
- data/test/test_old.rb +32 -0
- data/test/test_serialize.rb +5 -0
- data/test/test_test_util.rb +12 -0
- data/test/test_timeout.rb +5 -0
- metadata +27 -30
- data/lib/rest-graph/auto_load.rb +0 -4
- data/lib/rest-graph/autoload.rb +0 -4
data/lib/rest-graph/core.rb
CHANGED
@@ -14,7 +14,7 @@ require 'cgi'
|
|
14
14
|
require 'timeout'
|
15
15
|
|
16
16
|
# the data structure used in RestGraph
|
17
|
-
RestGraphStruct = Struct.new(:auto_decode, :
|
17
|
+
RestGraphStruct = Struct.new(:auto_decode, :timeout,
|
18
18
|
:graph_server, :old_server,
|
19
19
|
:accept, :lang,
|
20
20
|
:app_id, :secret,
|
@@ -82,7 +82,8 @@ class RestGraph < RestGraphStruct
|
|
82
82
|
Attributes.each{ |name|
|
83
83
|
module_eval <<-RUBY
|
84
84
|
def #{name}
|
85
|
-
(r = super).nil?
|
85
|
+
if (r = super).nil? then self.#{name} = self.class.default_#{name}
|
86
|
+
else r end
|
86
87
|
end
|
87
88
|
RUBY
|
88
89
|
}
|
@@ -211,23 +212,25 @@ class RestGraph < RestGraphStruct
|
|
211
212
|
"#{app_id}|#{secret}"
|
212
213
|
end
|
213
214
|
|
214
|
-
def lighten!
|
215
|
+
def lighten! o={}
|
215
216
|
[:cache, :log_method, :log_handler, :error_handler].each{ |obj|
|
216
|
-
send("#{obj}=",
|
217
|
+
send("#{obj}=", false) }
|
218
|
+
send(:initialize, o)
|
217
219
|
self
|
218
220
|
end
|
219
221
|
|
220
|
-
def lighten
|
221
|
-
dup.lighten!
|
222
|
+
def lighten o={}
|
223
|
+
dup.lighten!(o)
|
222
224
|
end
|
223
225
|
|
224
226
|
def inspect
|
225
|
-
|
226
|
-
|
227
|
-
"#{$1}=#{value}"
|
228
|
-
}
|
227
|
+
"#<struct RestGraph #{attributes.map{ |k, v|
|
228
|
+
"#{k}=#{v.inspect}" }.join(', ')}>"
|
229
229
|
end
|
230
230
|
|
231
|
+
def attributes
|
232
|
+
Hash[each_pair.map{ |k, v| [k, send(k)] }]
|
233
|
+
end
|
231
234
|
|
232
235
|
|
233
236
|
|
@@ -239,17 +242,20 @@ class RestGraph < RestGraphStruct
|
|
239
242
|
end
|
240
243
|
|
241
244
|
# extra options:
|
242
|
-
# auto_decode: Bool # decode with json or not in this
|
245
|
+
# auto_decode: Bool # decode with json or not in this API request
|
243
246
|
# # default: auto_decode in rest-graph instance
|
247
|
+
# timeout: Int # the timeout for this API request
|
248
|
+
# # default: timeout in rest-graph instance
|
244
249
|
# secret: Bool # use secret_acccess_token or not
|
245
250
|
# # default: false
|
246
251
|
# cache: Bool # use cache or not; if it's false, update cache, too
|
247
252
|
# # default: true
|
248
253
|
# expires_in: Int # control when would the cache be expired
|
249
|
-
# # default:
|
254
|
+
# # default: nil
|
250
255
|
# async: Bool # use eventmachine for http client or not
|
251
256
|
# # default: false, but true in aget family
|
252
257
|
# headers: Hash # additional hash you want to pass
|
258
|
+
# # default: {}
|
253
259
|
def get path, query={}, opts={}, &cb
|
254
260
|
request(opts, [:get , url(path, query, graph_server, opts)], &cb)
|
255
261
|
end
|
@@ -299,7 +305,7 @@ class RestGraph < RestGraphStruct
|
|
299
305
|
|
300
306
|
def next_page hash, opts={}, &cb
|
301
307
|
if hash['paging'].kind_of?(Hash) && hash['paging']['next']
|
302
|
-
request(opts, [:get, hash['paging']['next']], &cb)
|
308
|
+
request(opts, [:get, URI.encode(hash['paging']['next'])], &cb)
|
303
309
|
else
|
304
310
|
yield(nil) if block_given?
|
305
311
|
end
|
@@ -307,7 +313,7 @@ class RestGraph < RestGraphStruct
|
|
307
313
|
|
308
314
|
def prev_page hash, opts={}, &cb
|
309
315
|
if hash['paging'].kind_of?(Hash) && hash['paging']['previous']
|
310
|
-
request(opts, [:get, hash['paging']['previous']], &cb)
|
316
|
+
request(opts, [:get, URI.encode(hash['paging']['previous'])], &cb)
|
311
317
|
else
|
312
318
|
yield(nil) if block_given?
|
313
319
|
end
|
@@ -398,24 +404,23 @@ class RestGraph < RestGraphStruct
|
|
398
404
|
# old rest facebook api, i will definitely love to remove them someday
|
399
405
|
|
400
406
|
def old_rest path, query={}, opts={}, &cb
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
+
uri = url("method/#{path}", {:format => 'json'}.merge(query),
|
408
|
+
old_server, opts)
|
409
|
+
if opts[:post]
|
410
|
+
request(
|
411
|
+
opts.merge(:uri => uri),
|
412
|
+
[:post,
|
413
|
+
url("method/#{path}", {:format => 'json'}, old_server, opts),
|
414
|
+
query],
|
415
|
+
&cb)
|
416
|
+
else
|
417
|
+
request(opts, [:get, uri], &cb)
|
418
|
+
end
|
407
419
|
end
|
408
420
|
|
409
421
|
def secret_old_rest path, query={}, opts={}, &cb
|
410
422
|
old_rest(path, query, {:secret => true}.merge(opts), &cb)
|
411
423
|
end
|
412
|
-
alias_method :broken_old_rest, :secret_old_rest
|
413
|
-
|
414
|
-
def exchange_sessions query={}, opts={}, &cb
|
415
|
-
q = {:client_id => app_id, :client_secret => secret,
|
416
|
-
:type => 'client_cred'}.merge(query)
|
417
|
-
request(opts, [:post, url('oauth/exchange_sessions', q)], &cb)
|
418
|
-
end
|
419
424
|
|
420
425
|
def fql code, query={}, opts={}, &cb
|
421
426
|
old_rest('fql.query', {:query => code}.merge(query), opts, &cb)
|
@@ -426,16 +431,22 @@ class RestGraph < RestGraphStruct
|
|
426
431
|
{:queries => self.class.json_encode(codes)}.merge(query), opts, &cb)
|
427
432
|
end
|
428
433
|
|
434
|
+
def exchange_sessions query={}, opts={}, &cb
|
435
|
+
q = {:client_id => app_id, :client_secret => secret,
|
436
|
+
:type => 'client_cred'}.merge(query)
|
437
|
+
request(opts, [:post, url('oauth/exchange_sessions', q)], &cb)
|
438
|
+
end
|
439
|
+
|
429
440
|
|
430
441
|
|
431
442
|
|
432
443
|
|
433
444
|
def request opts, *reqs, &cb
|
434
|
-
Timeout.timeout(timeout){
|
445
|
+
Timeout.timeout(opts[:timeout] || timeout){
|
435
446
|
reqs.each{ |(meth, uri, payload)|
|
436
|
-
next if meth != :get
|
437
|
-
cache_assign(uri, nil)
|
438
|
-
} if opts[:cache] == false
|
447
|
+
next if meth != :get # only get result would get cached
|
448
|
+
cache_assign(opts, uri, nil)
|
449
|
+
} if opts[:cache] == false # remove cache if we don't want it
|
439
450
|
|
440
451
|
if opts[:async]
|
441
452
|
request_em(opts, reqs, &cb)
|
@@ -449,8 +460,9 @@ class RestGraph < RestGraphStruct
|
|
449
460
|
def request_em opts, reqs
|
450
461
|
start_time = Time.now
|
451
462
|
rs = reqs.map{ |(meth, uri, payload)|
|
452
|
-
r = EM::HttpRequest.new(uri).send(meth, :body => payload
|
453
|
-
|
463
|
+
r = EM::HttpRequest.new(uri).send(meth, :body => payload,
|
464
|
+
:head => build_headers(opts))
|
465
|
+
if cached = cache_get(opts, uri)
|
454
466
|
# TODO: this is hack!!
|
455
467
|
r.instance_variable_set('@response', cached)
|
456
468
|
r.instance_variable_set('@state' , :finish)
|
@@ -458,7 +470,7 @@ class RestGraph < RestGraphStruct
|
|
458
470
|
r.succeed(r)
|
459
471
|
else
|
460
472
|
r.callback{
|
461
|
-
cache_for(
|
473
|
+
cache_for(opts, uri, meth, r.response)
|
462
474
|
log(Event::Requested.new(Time.now - start_time, uri))
|
463
475
|
}
|
464
476
|
r.error{
|
@@ -471,7 +483,7 @@ class RestGraph < RestGraphStruct
|
|
471
483
|
# TODO: how to deal with the failed?
|
472
484
|
clients = m.responses[:succeeded]
|
473
485
|
results = clients.map{ |client|
|
474
|
-
post_request(
|
486
|
+
post_request(opts, client.uri, client.response)
|
475
487
|
}
|
476
488
|
|
477
489
|
if reqs.size == 1
|
@@ -486,10 +498,11 @@ class RestGraph < RestGraphStruct
|
|
486
498
|
|
487
499
|
def request_rc opts, meth, uri, payload=nil, &cb
|
488
500
|
start_time = Time.now
|
489
|
-
post_request(
|
490
|
-
|
501
|
+
post_request(opts, uri,
|
502
|
+
cache_get(opts, uri) || fetch(opts, uri, meth, payload),
|
503
|
+
&cb)
|
491
504
|
rescue RestClient::Exception => e
|
492
|
-
post_request(
|
505
|
+
post_request(opts, uri, e.http_body, &cb)
|
493
506
|
ensure
|
494
507
|
log(Event::Requested.new(Time.now - start_time, uri))
|
495
508
|
end
|
@@ -509,11 +522,11 @@ class RestGraph < RestGraphStruct
|
|
509
522
|
headers.merge(opts[:headers] || {})
|
510
523
|
end
|
511
524
|
|
512
|
-
def post_request
|
525
|
+
def post_request opts, uri, result, &cb
|
513
526
|
if decode?(opts)
|
514
527
|
# [this].first is not needed for yajl-ruby
|
515
528
|
decoded = self.class.json_decode("[#{result}]").first
|
516
|
-
check_error(
|
529
|
+
check_error(opts, uri, decoded, &cb)
|
517
530
|
else
|
518
531
|
block_given? ? yield(result) : result
|
519
532
|
end
|
@@ -524,8 +537,6 @@ class RestGraph < RestGraphStruct
|
|
524
537
|
def decode? opts
|
525
538
|
if opts.has_key?(:auto_decode)
|
526
539
|
opts[:auto_decode]
|
527
|
-
elsif opts.has_key?(:suppress_decode)
|
528
|
-
!opts[:suppress_decode]
|
529
540
|
else
|
530
541
|
auto_decode
|
531
542
|
end
|
@@ -539,11 +550,11 @@ class RestGraph < RestGraphStruct
|
|
539
550
|
end == cookies['sig']
|
540
551
|
end
|
541
552
|
|
542
|
-
def check_error
|
553
|
+
def check_error opts, uri, hash
|
543
554
|
if error_handler && hash.kind_of?(Hash) &&
|
544
555
|
(hash['error'] || # from graph api
|
545
556
|
hash['error_code']) # from fql
|
546
|
-
cache_assign(uri, nil)
|
557
|
+
cache_assign(opts, uri, nil)
|
547
558
|
error_handler.call(hash, uri)
|
548
559
|
else
|
549
560
|
block_given? ? yield(hash) : hash
|
@@ -558,38 +569,41 @@ class RestGraph < RestGraphStruct
|
|
558
569
|
cookies.reject{ |(k, v)| k == 'sig' }.sort.map{ |a| a.join('=') }
|
559
570
|
end
|
560
571
|
|
561
|
-
def
|
562
|
-
|
563
|
-
cache[cache_key(uri)] = value
|
572
|
+
def cache_key opts, uri
|
573
|
+
Digest::MD5.hexdigest(opts[:uri] || uri)
|
564
574
|
end
|
565
575
|
|
566
|
-
def
|
567
|
-
|
576
|
+
def cache_assign opts, uri, value
|
577
|
+
return unless cache
|
578
|
+
cache[cache_key(opts, uri)] = value
|
568
579
|
end
|
569
580
|
|
570
|
-
def cache_get uri
|
581
|
+
def cache_get opts, uri
|
571
582
|
return unless cache
|
572
583
|
start_time = Time.now
|
573
|
-
cache[cache_key(uri)].tap{ |result|
|
584
|
+
cache[cache_key(opts, uri)].tap{ |result|
|
574
585
|
log(Event::CacheHit.new(Time.now - start_time, uri)) if result
|
575
586
|
}
|
576
587
|
end
|
577
588
|
|
578
|
-
def cache_for
|
579
|
-
return
|
589
|
+
def cache_for opts, uri, meth, value
|
590
|
+
return unless cache
|
591
|
+
# fake post (opts[:post] => true) is considered get and need cache
|
592
|
+
return if meth != :get unless opts[:post]
|
580
593
|
|
581
594
|
if opts[:expires_in].kind_of?(Fixnum) && cache.method(:store).arity == -3
|
582
|
-
cache.store(cache_key(uri),
|
595
|
+
cache.store(cache_key(opts, uri), value,
|
596
|
+
:expires_in => opts[:expires_in])
|
583
597
|
else
|
584
|
-
cache_assign(uri,
|
598
|
+
cache_assign(opts, uri, value)
|
585
599
|
end
|
586
600
|
end
|
587
601
|
|
588
|
-
def fetch
|
602
|
+
def fetch opts, uri, meth, payload
|
589
603
|
RestClient::Request.execute(:method => meth, :url => uri,
|
590
604
|
:headers => build_headers(opts),
|
591
605
|
:payload => payload).body.
|
592
|
-
tap{ |result| cache_for(
|
606
|
+
tap{ |result| cache_for(opts, uri, meth, result) }
|
593
607
|
end
|
594
608
|
|
595
609
|
def merge_data lhs, rhs
|
@@ -59,7 +59,7 @@ module RestGraph::RailsUtil
|
|
59
59
|
return if controller.respond_to?(:rest_graph, true)
|
60
60
|
|
61
61
|
controller.rescue_from(RestGraph::Error::AccessToken,
|
62
|
-
:with => :
|
62
|
+
:with => :rest_graph_on_access_token_error)
|
63
63
|
controller.helper(RestGraph::RailsUtil::Helper)
|
64
64
|
controller.instance_methods.select{ |method|
|
65
65
|
method.to_s =~ /^rest_graph/
|
@@ -103,9 +103,11 @@ module RestGraph::RailsUtil
|
|
103
103
|
@rest_graph ||= RestGraph.new(rest_graph_options_new)
|
104
104
|
end
|
105
105
|
|
106
|
-
def
|
106
|
+
def rest_graph_on_access_token_error error=nil
|
107
107
|
rest_graph_authorize(error, false)
|
108
108
|
end
|
109
|
+
alias_method :rest_graph_on_error, # backward compatibility
|
110
|
+
:rest_graph_on_access_token_error
|
109
111
|
|
110
112
|
def rest_graph_authorize error=nil, force_redirect=true
|
111
113
|
logger.warn("WARN: RestGraph: #{error.inspect}")
|
data/lib/rest-graph/test_util.rb
CHANGED
@@ -14,19 +14,25 @@ module RestGraph::TestUtil
|
|
14
14
|
any_instance_of(RestGraph){ |rg|
|
15
15
|
stub(rg).data{default_data}
|
16
16
|
|
17
|
-
stub(rg).fetch{ |
|
17
|
+
stub(rg).fetch{ |opts, uri, meth, payload|
|
18
18
|
history << [meth, uri, payload]
|
19
19
|
http = 'https?://[\w\d]+(\.[\w\d]+)+/'
|
20
20
|
response = case uri
|
21
21
|
when %r{#{http}method/fql.multiquery}
|
22
22
|
RestGraph.json_decode(
|
23
23
|
Rack::Utils.parse_query(
|
24
|
-
URI.parse(uri).query)['queries']).
|
25
|
-
{
|
26
|
-
'
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
URI.parse(opts[:uri] || uri).query)['queries']).
|
25
|
+
keys.map{ |q|
|
26
|
+
{'name' => q,
|
27
|
+
'fql_result_set' => [default_response]}
|
28
|
+
}
|
29
|
+
when %r{#{http}method/(\w+\.\w+)}
|
30
|
+
case $2
|
31
|
+
when 'friends.getAppUsers'
|
32
|
+
[5678]
|
33
|
+
else
|
34
|
+
[default_response]
|
35
|
+
end
|
30
36
|
else
|
31
37
|
default_response
|
32
38
|
end
|
data/lib/rest-graph/version.rb
CHANGED
data/rest-graph.gemspec
CHANGED
@@ -2,21 +2,132 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rest-graph}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.9.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = [
|
9
|
-
|
8
|
+
s.authors = [
|
9
|
+
%q{Cardinal Blue},
|
10
|
+
%q{Lin Jen-Shin (godfat)}]
|
11
|
+
s.date = %q{2011-05-26}
|
10
12
|
s.description = %q{A lightweight Facebook Graph API client}
|
11
|
-
s.email = [
|
12
|
-
s.extra_rdoc_files = [
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
s.
|
13
|
+
s.email = [%q{dev (XD) cardinalblue.com}]
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
%q{CHANGES},
|
16
|
+
%q{CONTRIBUTORS},
|
17
|
+
%q{LICENSE},
|
18
|
+
%q{TODO}]
|
19
|
+
s.files = [
|
20
|
+
%q{.gitignore},
|
21
|
+
%q{.gitmodules},
|
22
|
+
%q{CHANGES},
|
23
|
+
%q{CONTRIBUTORS},
|
24
|
+
%q{Gemfile},
|
25
|
+
%q{LICENSE},
|
26
|
+
%q{README},
|
27
|
+
%q{README.md},
|
28
|
+
%q{Rakefile},
|
29
|
+
%q{TODO},
|
30
|
+
%q{doc/ToC.md},
|
31
|
+
%q{doc/dependency.md},
|
32
|
+
%q{doc/design.md},
|
33
|
+
%q{doc/heroku-facebook.md},
|
34
|
+
%q{doc/rails.md},
|
35
|
+
%q{doc/test.md},
|
36
|
+
%q{doc/tutorial.md},
|
37
|
+
%q{example/multi/config.ru},
|
38
|
+
%q{example/multi/rainbows.rb},
|
39
|
+
%q{example/rails2/Gemfile},
|
40
|
+
%q{example/rails2/README},
|
41
|
+
%q{example/rails2/Rakefile},
|
42
|
+
%q{example/rails2/app/controllers/application_controller.rb},
|
43
|
+
%q{example/rails2/app/views/application/helper.html.erb},
|
44
|
+
%q{example/rails2/config/boot.rb},
|
45
|
+
%q{example/rails2/config/environment.rb},
|
46
|
+
%q{example/rails2/config/environments/development.rb},
|
47
|
+
%q{example/rails2/config/environments/production.rb},
|
48
|
+
%q{example/rails2/config/environments/test.rb},
|
49
|
+
%q{example/rails2/config/initializers/cookie_verification_secret.rb},
|
50
|
+
%q{example/rails2/config/initializers/new_rails_defaults.rb},
|
51
|
+
%q{example/rails2/config/initializers/session_store.rb},
|
52
|
+
%q{example/rails2/config/preinitializer.rb},
|
53
|
+
%q{example/rails2/config/rest-graph.yaml},
|
54
|
+
%q{example/rails2/config/routes.rb},
|
55
|
+
%q{example/rails2/log},
|
56
|
+
%q{example/rails2/test/functional/application_controller_test.rb},
|
57
|
+
%q{example/rails2/test/test_helper.rb},
|
58
|
+
%q{example/rails2/test/unit/rails_util_test.rb},
|
59
|
+
%q{example/rails3/Gemfile},
|
60
|
+
%q{example/rails3/Rakefile},
|
61
|
+
%q{example/rails3/app/controllers/application_controller.rb},
|
62
|
+
%q{example/rails3/app/views/application/helper.html.erb},
|
63
|
+
%q{example/rails3/config.ru},
|
64
|
+
%q{example/rails3/config/application.rb},
|
65
|
+
%q{example/rails3/config/environment.rb},
|
66
|
+
%q{example/rails3/config/environments/development.rb},
|
67
|
+
%q{example/rails3/config/environments/production.rb},
|
68
|
+
%q{example/rails3/config/environments/test.rb},
|
69
|
+
%q{example/rails3/config/initializers/secret_token.rb},
|
70
|
+
%q{example/rails3/config/initializers/session_store.rb},
|
71
|
+
%q{example/rails3/config/rest-graph.yaml},
|
72
|
+
%q{example/rails3/config/routes.rb},
|
73
|
+
%q{example/rails3/test/functional/application_controller_test.rb},
|
74
|
+
%q{example/rails3/test/test_helper.rb},
|
75
|
+
%q{example/rails3/test/unit/rails_util_test.rb},
|
76
|
+
%q{example/sinatra/config.ru},
|
77
|
+
%q{init.rb},
|
78
|
+
%q{lib/rest-graph.rb},
|
79
|
+
%q{lib/rest-graph/config_util.rb},
|
80
|
+
%q{lib/rest-graph/core.rb},
|
81
|
+
%q{lib/rest-graph/facebook_util.rb},
|
82
|
+
%q{lib/rest-graph/rails_util.rb},
|
83
|
+
%q{lib/rest-graph/test_util.rb},
|
84
|
+
%q{lib/rest-graph/version.rb},
|
85
|
+
%q{rest-graph.gemspec},
|
86
|
+
%q{task/gemgem.rb},
|
87
|
+
%q{test/common.rb},
|
88
|
+
%q{test/config/rest-graph.yaml},
|
89
|
+
%q{test/test_api.rb},
|
90
|
+
%q{test/test_cache.rb},
|
91
|
+
%q{test/test_default.rb},
|
92
|
+
%q{test/test_error.rb},
|
93
|
+
%q{test/test_facebook.rb},
|
94
|
+
%q{test/test_handler.rb},
|
95
|
+
%q{test/test_load_config.rb},
|
96
|
+
%q{test/test_misc.rb},
|
97
|
+
%q{test/test_multi.rb},
|
98
|
+
%q{test/test_oauth.rb},
|
99
|
+
%q{test/test_old.rb},
|
100
|
+
%q{test/test_page.rb},
|
101
|
+
%q{test/test_parse.rb},
|
102
|
+
%q{test/test_rest-graph.rb},
|
103
|
+
%q{test/test_serialize.rb},
|
104
|
+
%q{test/test_test_util.rb},
|
105
|
+
%q{test/test_timeout.rb}]
|
106
|
+
s.homepage = %q{https://github.com/godfat/}
|
107
|
+
s.rdoc_options = [
|
108
|
+
%q{--main},
|
109
|
+
%q{README}]
|
110
|
+
s.require_paths = [%q{lib}]
|
111
|
+
s.rubygems_version = %q{1.8.4}
|
18
112
|
s.summary = %q{A lightweight Facebook Graph API client}
|
19
|
-
s.test_files = [
|
113
|
+
s.test_files = [
|
114
|
+
%q{test/test_api.rb},
|
115
|
+
%q{test/test_cache.rb},
|
116
|
+
%q{test/test_default.rb},
|
117
|
+
%q{test/test_error.rb},
|
118
|
+
%q{test/test_facebook.rb},
|
119
|
+
%q{test/test_handler.rb},
|
120
|
+
%q{test/test_load_config.rb},
|
121
|
+
%q{test/test_misc.rb},
|
122
|
+
%q{test/test_multi.rb},
|
123
|
+
%q{test/test_oauth.rb},
|
124
|
+
%q{test/test_old.rb},
|
125
|
+
%q{test/test_page.rb},
|
126
|
+
%q{test/test_parse.rb},
|
127
|
+
%q{test/test_rest-graph.rb},
|
128
|
+
%q{test/test_serialize.rb},
|
129
|
+
%q{test/test_test_util.rb},
|
130
|
+
%q{test/test_timeout.rb}]
|
20
131
|
|
21
132
|
if s.respond_to? :specification_version then
|
22
133
|
s.specification_version = 3
|