rest-graph 1.5.0 → 1.6.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/.specification +309 -0
- data/CHANGES +78 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +12 -7
- data/README +20 -9
- data/README.rdoc +20 -9
- data/Rakefile +2 -1
- data/TODO +2 -0
- data/example/multi/config.ru +44 -0
- data/example/multi/rainbows.rb +5 -0
- data/example/rails2/test/functional/application_controller_test.rb +6 -6
- data/lib/rest-graph.rb +179 -75
- data/lib/rest-graph/rails_util.rb +2 -13
- data/lib/rest-graph/test_util.rb +95 -0
- data/lib/rest-graph/version.rb +1 -1
- data/rest-graph.gemspec +305 -57
- data/test/common.rb +3 -3
- data/test/test_api.rb +12 -11
- data/test/test_cache.rb +3 -3
- data/test/test_default.rb +2 -2
- data/test/test_error.rb +3 -3
- data/test/test_handler.rb +13 -10
- data/test/test_load_config.rb +1 -1
- data/test/test_misc.rb +14 -12
- data/test/test_multi.rb +126 -0
- data/test/test_oauth.rb +4 -4
- data/test/test_old.rb +8 -8
- data/test/test_page.rb +70 -14
- data/test/test_parse.rb +9 -9
- data/test/test_serialize.rb +13 -4
- data/test/test_test_util.rb +74 -0
- data/test/test_timeout.rb +20 -0
- metadata +56 -30
data/test/test_oauth.rb
CHANGED
@@ -12,16 +12,16 @@ describe RestGraph do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
after do
|
15
|
-
reset_webmock
|
15
|
+
WebMock.reset_webmock
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
should 'return correct oauth url' do
|
19
19
|
TestHelper.normalize_url(@rg.authorize_url(:redirect_uri => @uri)).
|
20
20
|
should == 'https://graph.facebook.com/oauth/authorize?' \
|
21
21
|
'client_id=29&redirect_uri=http%3A%2F%2Fzzz.tw'
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
should 'do authorizing and parse result and save it in data' do
|
25
25
|
stub_request(:get, 'https://graph.facebook.com/oauth/access_token?' \
|
26
26
|
'client_id=29&client_secret=18&code=zzz&' \
|
27
27
|
'redirect_uri=http%3A%2F%2Fzzz.tw').
|
@@ -34,7 +34,7 @@ describe RestGraph do
|
|
34
34
|
@rg.data.should == result
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
should 'not append access_token in authorize_url even presented' do
|
38
38
|
RestGraph.new(:access_token => 'do not use me').authorize_url.
|
39
39
|
should == 'https://graph.facebook.com/oauth/authorize'
|
40
40
|
end
|
data/test/test_old.rb
CHANGED
@@ -7,11 +7,11 @@ end
|
|
7
7
|
|
8
8
|
describe RestGraph do
|
9
9
|
after do
|
10
|
-
reset_webmock
|
10
|
+
WebMock.reset_webmock
|
11
11
|
RR.verify
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
should 'do fql query with/without access_token' do
|
15
15
|
fql = 'SELECT name FROM likes where id="123"'
|
16
16
|
query = "format=json&query=#{CGI.escape(fql)}"
|
17
17
|
stub_request(:get, "https://api.facebook.com/method/fql.query?#{query}").
|
@@ -27,7 +27,7 @@ describe RestGraph do
|
|
27
27
|
RestGraph.new(:access_token => token).fql(fql).should == []
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
should 'do fql.mutilquery correctly' do
|
31
31
|
f0 = 'SELECT display_name FROM application WHERE app_id="233082465238"'
|
32
32
|
f1 = 'SELECT display_name FROM application WHERE app_id="110225210740"'
|
33
33
|
f0q, f1q = "\"#{f0.gsub('"', '\\"')}\"", "\"#{f1.gsub('"', '\\"')}\""
|
@@ -48,7 +48,7 @@ describe RestGraph do
|
|
48
48
|
RestGraph.new.fql_multi(:f0 => f0, :f1 => f1).should == []
|
49
49
|
end
|
50
50
|
|
51
|
-
|
51
|
+
should 'do facebook old rest api' do
|
52
52
|
body = 'hate facebook inconsistent'
|
53
53
|
stub_request(:get,
|
54
54
|
'https://api.facebook.com/method/notes.create?format=json').
|
@@ -58,7 +58,7 @@ describe RestGraph do
|
|
58
58
|
should == body
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
should 'exchange sessions for access token' do
|
62
62
|
stub_request(:post,
|
63
63
|
'https://graph.facebook.com/oauth/exchange_sessions?' \
|
64
64
|
'type=client_cred&client_id=id&client_secret=di&' \
|
@@ -71,7 +71,7 @@ describe RestGraph do
|
|
71
71
|
first['access_token'].should == 'bogus'
|
72
72
|
end
|
73
73
|
|
74
|
-
|
74
|
+
should 'broken json' do
|
75
75
|
stub_request(:get,
|
76
76
|
'https://api.facebook.com/method/admin.getAppProperties?' \
|
77
77
|
'access_token=123%7Cs&format=json&properties=app_id'
|
@@ -82,7 +82,7 @@ describe RestGraph do
|
|
82
82
|
should == {'app_id' => '123'}
|
83
83
|
end
|
84
84
|
|
85
|
-
|
85
|
+
should 'use an secret access_token' do
|
86
86
|
stub_request(:get,
|
87
87
|
'https://api.facebook.com/method/admin.getAppProperties?' \
|
88
88
|
'access_token=123%7Cs&format=json&properties=app_id'
|
@@ -93,7 +93,7 @@ describe RestGraph do
|
|
93
93
|
should == {'app_id' => '123'}
|
94
94
|
end
|
95
95
|
|
96
|
-
|
96
|
+
should 'not parse twice in strict mode' do
|
97
97
|
stub_request(:get,
|
98
98
|
'https://api.facebook.com/method/admin.getAppProperties?' \
|
99
99
|
'access_token=123%7Cs&format=json&properties=app_id'
|
data/test/test_page.rb
CHANGED
@@ -7,11 +7,11 @@ end
|
|
7
7
|
|
8
8
|
describe RestGraph do
|
9
9
|
after do
|
10
|
-
reset_webmock
|
10
|
+
WebMock.reset_webmock
|
11
11
|
RR.verify
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
should 'get the next/prev page' do
|
15
15
|
rg = RestGraph.new
|
16
16
|
%w[next previous].each{ |type|
|
17
17
|
kind = "#{type}_page"
|
@@ -19,12 +19,12 @@ describe RestGraph do
|
|
19
19
|
rg.send(kind, {'paging' => []}).should == nil
|
20
20
|
rg.send(kind, {'paging' => {}}).should == nil
|
21
21
|
|
22
|
-
|
23
|
-
rg.send(kind, {'paging' => {type => 'zzz'}}).should == 'ok'
|
22
|
+
stub_request(:get, 'zzz').to_return(:body => '["ok"]')
|
23
|
+
rg.send(kind, {'paging' => {type => 'zzz'}}).should == ['ok']
|
24
24
|
}
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
should 'merge all pages into one' do
|
28
28
|
rg = RestGraph.new
|
29
29
|
%w[next previous].each{ |type|
|
30
30
|
kind = "#{type}_page"
|
@@ -32,23 +32,79 @@ describe RestGraph do
|
|
32
32
|
|
33
33
|
# invalid pages or just the page itself
|
34
34
|
(-1..1).each{ |page|
|
35
|
-
rg.for_pages(data, page, kind).should == data
|
35
|
+
rg.for_pages(data, page, {}, kind).should == data
|
36
36
|
}
|
37
37
|
|
38
38
|
(2..4).each{ |pages|
|
39
39
|
# merge data
|
40
|
-
|
41
|
-
rg.for_pages(data, pages, kind).should == {'data' => %w[z y]}
|
40
|
+
stub_request(:get, 'zzz').to_return(:body => '{"data":["y"]}')
|
41
|
+
rg.for_pages(data, pages, {}, kind).should == {'data' => %w[z y]}
|
42
42
|
|
43
43
|
# this data cannot be merged
|
44
|
-
|
45
|
-
rg.for_pages(data, pages, kind).should == {'data' => %w[z]}
|
44
|
+
stub_request(:get, 'zzz').to_return(:body => '{"data":"y"}')
|
45
|
+
rg.for_pages(data, pages, {}, kind).should == {'data' => %w[z]}
|
46
46
|
}
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
stub_request(:get, 'zzz').to_return(:body =>
|
49
|
+
'{"paging":{"'+type+'":"yyy"},"data":["y"]}')
|
50
|
+
stub_request(:get, 'yyy').to_return(:body => '{"data":["x"]}')
|
51
|
+
|
52
|
+
rg.for_pages(data, 3, {}, kind).should == {'data' => %w[z y x]}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
should 'for_pages with callback' do
|
57
|
+
rg = RestGraph.new
|
58
|
+
%w[next previous].each{ |type|
|
59
|
+
kind = "#{type}_page"
|
60
|
+
data = {'paging' => {type => 'zzz'}, 'data' => ['z']}
|
61
|
+
|
62
|
+
# invalid pages or just the page itself
|
63
|
+
nils = 0
|
64
|
+
ranges = -1..1
|
65
|
+
ranges.each{ |page|
|
66
|
+
rg.for_pages(data, page, {}, kind){ |r|
|
67
|
+
if r
|
68
|
+
r.should == data
|
69
|
+
else
|
70
|
+
nils += 1
|
71
|
+
end
|
72
|
+
}.should == data
|
73
|
+
}
|
74
|
+
nils.should == ranges.to_a.size
|
75
|
+
|
76
|
+
(2..4).each{ |pages|
|
77
|
+
# merge data
|
78
|
+
stub_request(:get, 'zzz').to_return(:body => '{"data":["y"]}')
|
79
|
+
expects = [{'data' => %w[y]}, nil]
|
80
|
+
rg.for_pages(data, pages, {}, kind){ |r|
|
81
|
+
r.should == expects.shift
|
82
|
+
}.should == {'data' => %w[z y]}
|
83
|
+
expects.empty?.should == true
|
84
|
+
|
85
|
+
# this data cannot be merged
|
86
|
+
stub_request(:get, 'zzz').to_return(:body => '{"data":"y"}')
|
87
|
+
expects = [{'data' => 'y'}, nil]
|
88
|
+
rg.for_pages(data, pages, {}, kind){ |r|
|
89
|
+
r.should == expects.shift
|
90
|
+
}.should == {'data' => %w[z]}
|
91
|
+
expects.empty?.should == true
|
92
|
+
}
|
93
|
+
|
94
|
+
stub_request(:get, 'zzz').to_return(:body =>
|
95
|
+
'{"paging":{"'+type+'":"yyy"},"data":["y"]}')
|
96
|
+
stub_request(:get, 'yyy').to_return(:body => '{"data":["x"]}')
|
97
|
+
|
98
|
+
expects = [{'data' => %w[y]}, {'data' => %w[x]}, nil]
|
99
|
+
rg.for_pages(data, 3, {}, kind){ |rr|
|
100
|
+
if rr
|
101
|
+
r = rr.dup
|
102
|
+
r.delete('paging')
|
103
|
+
else
|
104
|
+
r = rr
|
105
|
+
end
|
106
|
+
r.should == expects.shift
|
107
|
+
}.should == {'data' => %w[z y x]}
|
52
108
|
}
|
53
109
|
end
|
54
110
|
end
|
data/test/test_parse.rb
CHANGED
@@ -7,13 +7,13 @@ end
|
|
7
7
|
|
8
8
|
describe RestGraph do
|
9
9
|
|
10
|
-
|
10
|
+
should 'return nil if parse error, but not when call data directly' do
|
11
11
|
rg = RestGraph.new
|
12
12
|
rg.parse_cookies!({}).should == nil
|
13
13
|
rg.data .should == {}
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
should 'extract correct access_token or fail checking sig' do
|
17
17
|
access_token = '1|2-5|f.'
|
18
18
|
app_id = '1829'
|
19
19
|
secret = app_id.reverse
|
@@ -49,13 +49,13 @@ describe RestGraph do
|
|
49
49
|
check.call(nil, "\"#{fbs}\"")
|
50
50
|
end
|
51
51
|
|
52
|
-
|
52
|
+
should 'not pass if there is no secret, prevent from forgery' do
|
53
53
|
rg = RestGraph.new
|
54
54
|
rg.parse_fbs!('"feed=me&sig=bddd192cf27f22c05f61c8bea24fa4b7"').
|
55
55
|
should == nil
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
should 'parse json correctly' do
|
59
59
|
rg = RestGraph.new
|
60
60
|
|
61
61
|
rg.parse_json!('bad json').should == nil
|
@@ -68,7 +68,7 @@ describe RestGraph do
|
|
68
68
|
should == {'feed' => 'me', 'sig' => "20393e7823730308938a86ecf1c88b14"}
|
69
69
|
end
|
70
70
|
|
71
|
-
|
71
|
+
should 'parse signed_request' do
|
72
72
|
secret = 'aloha'
|
73
73
|
json = RestGraph.json_encode('ooh' => 'dir', 'moo' => 'bar')
|
74
74
|
encode = lambda{ |str|
|
@@ -87,25 +87,25 @@ describe RestGraph do
|
|
87
87
|
rg.parse_signed_request!(signed_request).should == nil
|
88
88
|
end
|
89
89
|
|
90
|
-
|
90
|
+
should 'fallback to ruby-hmac if Digest.new raise an runtime error' do
|
91
91
|
key, data = 'top', 'secret'
|
92
92
|
mock(OpenSSL::Digest::Digest).new('sha256'){ raise 'boom' }
|
93
93
|
RestGraph.hmac_sha256(key, data).should ==
|
94
94
|
OpenSSL::HMAC.digest('sha256', key, data)
|
95
95
|
end
|
96
96
|
|
97
|
-
|
97
|
+
should 'generate correct fbs with correct sig' do
|
98
98
|
RestGraph.new(:access_token => 'fake', :secret => 's').fbs.should ==
|
99
99
|
"access_token=fake&sig=#{Digest::MD5.hexdigest('access_token=fakes')}"
|
100
100
|
end
|
101
101
|
|
102
|
-
|
102
|
+
should 'parse fbs from facebook response which lacks sig...' do
|
103
103
|
rg = RestGraph.new(:access_token => 'a', :secret => 'z')
|
104
104
|
rg.parse_fbs!(rg.fbs) .should.kind_of?(Hash)
|
105
105
|
rg.parse_fbs!(rg.fbs.sub(/sig\=\w+/, 'sig=abc')).should == nil
|
106
106
|
end
|
107
107
|
|
108
|
-
|
108
|
+
should 'generate correct fbs with additional parameters' do
|
109
109
|
rg = RestGraph.new(:access_token => 'a', :secret => 'z')
|
110
110
|
rg.data['expires'] = '1234'
|
111
111
|
rg.parse_fbs!(rg.fbs) .should.kind_of?(Hash)
|
data/test/test_serialize.rb
CHANGED
@@ -7,13 +7,22 @@ end
|
|
7
7
|
|
8
8
|
describe RestGraph do
|
9
9
|
after do
|
10
|
-
reset_webmock
|
10
|
+
WebMock.reset_webmock
|
11
11
|
RR.verify
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
should 'be serialized with lighten' do
|
15
|
+
engines = if RUBY_VERSION >= '1.9.2'
|
16
|
+
require 'psych'
|
17
|
+
YAML::ENGINE.yamler = 'syck' # TODO: probably a bug?
|
18
|
+
[Marshal, YAML, Psych]
|
19
|
+
elsif defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
20
|
+
[Marshal]
|
21
|
+
else
|
22
|
+
[YAML]
|
23
|
+
end
|
24
|
+
|
25
|
+
engines.each{ |engine|
|
17
26
|
test = lambda{ |obj| engine.load(engine.dump(obj)) }
|
18
27
|
rg = RestGraph.new(:log_handler => lambda{})
|
19
28
|
lambda{ test[rg] }.should.raise(TypeError)
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
if respond_to?(:require_relative, true)
|
3
|
+
require_relative 'common'
|
4
|
+
else
|
5
|
+
require File.dirname(__FILE__) + '/common'
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'rest-graph/test_util'
|
9
|
+
|
10
|
+
describe RestGraph::TestUtil do
|
11
|
+
before do
|
12
|
+
RestGraph::TestUtil.setup
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
RestGraph::TestUtil.teardown
|
17
|
+
end
|
18
|
+
|
19
|
+
should 'stub requests and store result and teardown do cleanup' do
|
20
|
+
RestGraph.new.get('me') .should == {'data' => []}
|
21
|
+
RestGraph::TestUtil.history .should ==
|
22
|
+
[[:get, "https://graph.facebook.com/me", nil]]
|
23
|
+
|
24
|
+
RestGraph::TestUtil.teardown
|
25
|
+
|
26
|
+
RestGraph::TestUtil.history.should == []
|
27
|
+
begin
|
28
|
+
RestGraph.new.get('me')
|
29
|
+
rescue => e
|
30
|
+
e.should.kind_of?(WebMock::NetConnectNotAllowedError)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
should 'have default response' do
|
35
|
+
default = {'meta' => []}
|
36
|
+
RestGraph::TestUtil.default_response = default
|
37
|
+
RestGraph.new.get('me') .should == default
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'have default data' do
|
41
|
+
rg = RestGraph.new
|
42
|
+
rg.data['uid'] .should == '1234'
|
43
|
+
RestGraph::TestUtil.default_data = {'uid' => '4321'}
|
44
|
+
rg.data['uid'] .should == '4321'
|
45
|
+
RestGraph.new.data['uid'].should == '4321'
|
46
|
+
end
|
47
|
+
|
48
|
+
should 'be easy to stub data' do
|
49
|
+
response = {'data' => 'me'}
|
50
|
+
RestGraph::TestUtil.get('me'){ response }
|
51
|
+
RestGraph.new.get('me').should == response
|
52
|
+
RestGraph.new.get('he').should == RestGraph::TestUtil.default_response
|
53
|
+
end
|
54
|
+
|
55
|
+
should 'emulate login' do
|
56
|
+
RestGraph::TestUtil.login(1829)
|
57
|
+
rg = RestGraph.new
|
58
|
+
rg.data['uid'].should == '1829'
|
59
|
+
rg.authorized?.should == true
|
60
|
+
rg.get('me').should == RestGraph::TestUtil.user('1829')
|
61
|
+
end
|
62
|
+
|
63
|
+
should 'reset before login' do
|
64
|
+
RestGraph::TestUtil.login(1234).login(1829)
|
65
|
+
rg = RestGraph.new
|
66
|
+
rg.data['uid'].should == '1829'
|
67
|
+
rg.authorized?.should == true
|
68
|
+
rg.get('me').should == RestGraph::TestUtil.user('1829')
|
69
|
+
RestGraph::TestUtil.login(1234)
|
70
|
+
rg.data['uid'].should == '1234'
|
71
|
+
rg.authorized?.should == true
|
72
|
+
rg.get('me').should == RestGraph::TestUtil.user('1234')
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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
|
+
should 'respect timeout' do
|
10
|
+
stub_request(:get, 'https://graph.facebook.com/me').to_return(
|
11
|
+
lambda{ |r| sleep(0.05); '{}' })
|
12
|
+
e = nil
|
13
|
+
begin
|
14
|
+
RestGraph.new(:timeout => 0.01).get('me')
|
15
|
+
nil.should == 'timeout must be thrown'
|
16
|
+
rescue Timeout::Error => e
|
17
|
+
end
|
18
|
+
e.should.kind_of?(Timeout::Error)
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
7
|
+
- 6
|
8
8
|
- 0
|
9
|
-
version: 1.
|
9
|
+
version: 1.6.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-11-19 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -31,12 +31,27 @@ dependencies:
|
|
31
31
|
- 6
|
32
32
|
- 1
|
33
33
|
version: 1.6.1
|
34
|
-
type: :
|
34
|
+
type: :development
|
35
35
|
version_requirements: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
37
|
+
name: em-http-request
|
38
38
|
prerelease: false
|
39
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
- 2
|
47
|
+
- 15
|
48
|
+
version: 0.2.15
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rack
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
55
|
none: false
|
41
56
|
requirements:
|
42
57
|
- - ">="
|
@@ -47,11 +62,11 @@ dependencies:
|
|
47
62
|
- 1
|
48
63
|
version: 1.2.1
|
49
64
|
type: :development
|
50
|
-
version_requirements: *
|
65
|
+
version_requirements: *id003
|
51
66
|
- !ruby/object:Gem::Dependency
|
52
67
|
name: yajl-ruby
|
53
68
|
prerelease: false
|
54
|
-
requirement: &
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
70
|
none: false
|
56
71
|
requirements:
|
57
72
|
- - ">="
|
@@ -62,11 +77,11 @@ dependencies:
|
|
62
77
|
- 8
|
63
78
|
version: 0.7.8
|
64
79
|
type: :development
|
65
|
-
version_requirements: *
|
80
|
+
version_requirements: *id004
|
66
81
|
- !ruby/object:Gem::Dependency
|
67
82
|
name: json
|
68
83
|
prerelease: false
|
69
|
-
requirement: &
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
70
85
|
none: false
|
71
86
|
requirements:
|
72
87
|
- - ">="
|
@@ -77,11 +92,11 @@ dependencies:
|
|
77
92
|
- 6
|
78
93
|
version: 1.4.6
|
79
94
|
type: :development
|
80
|
-
version_requirements: *
|
95
|
+
version_requirements: *id005
|
81
96
|
- !ruby/object:Gem::Dependency
|
82
97
|
name: json_pure
|
83
98
|
prerelease: false
|
84
|
-
requirement: &
|
99
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
85
100
|
none: false
|
86
101
|
requirements:
|
87
102
|
- - ">="
|
@@ -92,11 +107,11 @@ dependencies:
|
|
92
107
|
- 6
|
93
108
|
version: 1.4.6
|
94
109
|
type: :development
|
95
|
-
version_requirements: *
|
110
|
+
version_requirements: *id006
|
96
111
|
- !ruby/object:Gem::Dependency
|
97
112
|
name: ruby-hmac
|
98
113
|
prerelease: false
|
99
|
-
requirement: &
|
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: 0.4.0
|
109
124
|
type: :development
|
110
|
-
version_requirements: *
|
125
|
+
version_requirements: *id007
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: rr
|
113
128
|
prerelease: false
|
114
|
-
requirement: &
|
129
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
115
130
|
none: false
|
116
131
|
requirements:
|
117
132
|
- - ">="
|
@@ -119,29 +134,29 @@ dependencies:
|
|
119
134
|
segments:
|
120
135
|
- 1
|
121
136
|
- 0
|
122
|
-
-
|
123
|
-
version: 1.0.
|
137
|
+
- 2
|
138
|
+
version: 1.0.2
|
124
139
|
type: :development
|
125
|
-
version_requirements: *
|
140
|
+
version_requirements: *id008
|
126
141
|
- !ruby/object:Gem::Dependency
|
127
142
|
name: webmock
|
128
143
|
prerelease: false
|
129
|
-
requirement: &
|
144
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
130
145
|
none: false
|
131
146
|
requirements:
|
132
147
|
- - ">="
|
133
148
|
- !ruby/object:Gem::Version
|
134
149
|
segments:
|
135
150
|
- 1
|
136
|
-
-
|
137
|
-
-
|
138
|
-
version: 1.
|
151
|
+
- 6
|
152
|
+
- 1
|
153
|
+
version: 1.6.1
|
139
154
|
type: :development
|
140
|
-
version_requirements: *
|
155
|
+
version_requirements: *id009
|
141
156
|
- !ruby/object:Gem::Dependency
|
142
157
|
name: bacon
|
143
158
|
prerelease: false
|
144
|
-
requirement: &
|
159
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
145
160
|
none: false
|
146
161
|
requirements:
|
147
162
|
- - ">="
|
@@ -152,22 +167,22 @@ dependencies:
|
|
152
167
|
- 0
|
153
168
|
version: 1.1.0
|
154
169
|
type: :development
|
155
|
-
version_requirements: *
|
170
|
+
version_requirements: *id010
|
156
171
|
- !ruby/object:Gem::Dependency
|
157
172
|
name: bones
|
158
173
|
prerelease: false
|
159
|
-
requirement: &
|
174
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
160
175
|
none: false
|
161
176
|
requirements:
|
162
177
|
- - ">="
|
163
178
|
- !ruby/object:Gem::Version
|
164
179
|
segments:
|
165
180
|
- 3
|
166
|
-
-
|
167
|
-
-
|
168
|
-
version: 3.
|
181
|
+
- 5
|
182
|
+
- 1
|
183
|
+
version: 3.5.1
|
169
184
|
type: :development
|
170
|
-
version_requirements: *
|
185
|
+
version_requirements: *id011
|
171
186
|
description: A super simple Facebook Open Graph API client
|
172
187
|
email: dev (XD) cardinalblue.com
|
173
188
|
executables: []
|
@@ -175,6 +190,7 @@ executables: []
|
|
175
190
|
extensions: []
|
176
191
|
|
177
192
|
extra_rdoc_files:
|
193
|
+
- .specification
|
178
194
|
- CHANGES
|
179
195
|
- CONTRIBUTORS
|
180
196
|
- Gemfile
|
@@ -184,6 +200,7 @@ extra_rdoc_files:
|
|
184
200
|
- TODO
|
185
201
|
- rest-graph.gemspec
|
186
202
|
files:
|
203
|
+
- .specification
|
187
204
|
- CHANGES
|
188
205
|
- CONTRIBUTORS
|
189
206
|
- Gemfile
|
@@ -193,6 +210,8 @@ files:
|
|
193
210
|
- README.rdoc
|
194
211
|
- Rakefile
|
195
212
|
- TODO
|
213
|
+
- example/multi/config.ru
|
214
|
+
- example/multi/rainbows.rb
|
196
215
|
- example/rails2/README
|
197
216
|
- example/rails2/Rakefile
|
198
217
|
- example/rails2/app/controllers/application_controller.rb
|
@@ -217,6 +236,7 @@ files:
|
|
217
236
|
- lib/rest-graph/auto_load.rb
|
218
237
|
- lib/rest-graph/load_config.rb
|
219
238
|
- lib/rest-graph/rails_util.rb
|
239
|
+
- lib/rest-graph/test_util.rb
|
220
240
|
- lib/rest-graph/version.rb
|
221
241
|
- rest-graph.gemspec
|
222
242
|
- test/common.rb
|
@@ -228,12 +248,15 @@ files:
|
|
228
248
|
- test/test_handler.rb
|
229
249
|
- test/test_load_config.rb
|
230
250
|
- test/test_misc.rb
|
251
|
+
- test/test_multi.rb
|
231
252
|
- test/test_oauth.rb
|
232
253
|
- test/test_old.rb
|
233
254
|
- test/test_page.rb
|
234
255
|
- test/test_parse.rb
|
235
256
|
- test/test_rest-graph.rb
|
236
257
|
- test/test_serialize.rb
|
258
|
+
- test/test_test_util.rb
|
259
|
+
- test/test_timeout.rb
|
237
260
|
has_rdoc: true
|
238
261
|
homepage: http://github.com/cardinalblue/rest-graph
|
239
262
|
licenses: []
|
@@ -275,9 +298,12 @@ test_files:
|
|
275
298
|
- test/test_handler.rb
|
276
299
|
- test/test_load_config.rb
|
277
300
|
- test/test_misc.rb
|
301
|
+
- test/test_multi.rb
|
278
302
|
- test/test_oauth.rb
|
279
303
|
- test/test_old.rb
|
280
304
|
- test/test_page.rb
|
281
305
|
- test/test_parse.rb
|
282
306
|
- test/test_rest-graph.rb
|
283
307
|
- test/test_serialize.rb
|
308
|
+
- test/test_test_util.rb
|
309
|
+
- test/test_timeout.rb
|