rest-core 1.0.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +6 -7
- data/CHANGES.md +137 -0
- data/Gemfile +1 -1
- data/README.md +183 -191
- data/TODO.md +5 -8
- data/example/multi.rb +31 -24
- data/example/simple.rb +28 -0
- data/example/use-cases.rb +194 -0
- data/lib/rest-core.rb +26 -19
- data/lib/rest-core/builder.rb +2 -2
- data/lib/rest-core/client.rb +40 -27
- data/lib/rest-core/client/universal.rb +16 -13
- data/lib/rest-core/client_oauth1.rb +5 -5
- data/lib/rest-core/engine/auto.rb +25 -0
- data/lib/rest-core/{app → engine}/dry.rb +1 -2
- data/lib/rest-core/engine/em-http-request.rb +39 -0
- data/lib/rest-core/engine/future/future.rb +106 -0
- data/lib/rest-core/engine/future/future_fiber.rb +39 -0
- data/lib/rest-core/engine/future/future_thread.rb +29 -0
- data/lib/rest-core/engine/rest-client.rb +56 -0
- data/lib/rest-core/middleware.rb +27 -5
- data/lib/rest-core/middleware/auth_basic.rb +5 -5
- data/lib/rest-core/middleware/bypass.rb +2 -2
- data/lib/rest-core/middleware/cache.rb +67 -54
- data/lib/rest-core/middleware/common_logger.rb +5 -8
- data/lib/rest-core/middleware/default_headers.rb +2 -2
- data/lib/rest-core/middleware/default_payload.rb +26 -2
- data/lib/rest-core/middleware/default_query.rb +4 -2
- data/lib/rest-core/middleware/default_site.rb +8 -6
- data/lib/rest-core/middleware/error_detector.rb +9 -16
- data/lib/rest-core/middleware/error_handler.rb +25 -11
- data/lib/rest-core/middleware/follow_redirect.rb +11 -14
- data/lib/rest-core/middleware/json_request.rb +19 -0
- data/lib/rest-core/middleware/json_response.rb +28 -0
- data/lib/rest-core/middleware/oauth1_header.rb +2 -7
- data/lib/rest-core/middleware/oauth2_header.rb +4 -7
- data/lib/rest-core/middleware/oauth2_query.rb +2 -2
- data/lib/rest-core/middleware/timeout.rb +21 -65
- data/lib/rest-core/middleware/timeout/{eventmachine_timer.rb → timer_em.rb} +3 -1
- data/lib/rest-core/middleware/timeout/timer_thread.rb +36 -0
- data/lib/rest-core/patch/multi_json.rb +8 -0
- data/lib/rest-core/test.rb +3 -12
- data/lib/rest-core/util/json.rb +65 -0
- data/lib/rest-core/util/parse_query.rb +2 -2
- data/lib/rest-core/version.rb +1 -1
- data/lib/rest-core/wrapper.rb +16 -16
- data/rest-core.gemspec +28 -27
- data/test/test_auth_basic.rb +14 -10
- data/test/test_builder.rb +7 -7
- data/test/test_cache.rb +126 -37
- data/test/test_client.rb +3 -1
- data/test/test_client_oauth1.rb +2 -3
- data/test/test_default_query.rb +17 -23
- data/test/test_em_http_request.rb +146 -0
- data/test/test_error_detector.rb +0 -1
- data/test/test_error_handler.rb +44 -0
- data/test/test_follow_redirect.rb +17 -19
- data/test/test_json_request.rb +28 -0
- data/test/test_json_response.rb +51 -0
- data/test/test_oauth1_header.rb +4 -4
- data/test/test_payload.rb +20 -12
- data/test/test_simple.rb +14 -0
- data/test/test_timeout.rb +11 -19
- data/test/test_universal.rb +5 -5
- data/test/test_wrapper.rb +19 -13
- metadata +28 -29
- data/doc/ToC.md +0 -7
- data/doc/dependency.md +0 -4
- data/doc/design.md +0 -4
- data/example/auto.rb +0 -51
- data/example/coolio.rb +0 -21
- data/example/eventmachine.rb +0 -30
- data/example/rest-client.rb +0 -16
- data/lib/rest-core/app/abstract/async_fiber.rb +0 -13
- data/lib/rest-core/app/auto.rb +0 -23
- data/lib/rest-core/app/coolio-async.rb +0 -32
- data/lib/rest-core/app/coolio-fiber.rb +0 -30
- data/lib/rest-core/app/coolio.rb +0 -9
- data/lib/rest-core/app/em-http-request-async.rb +0 -37
- data/lib/rest-core/app/em-http-request-fiber.rb +0 -45
- data/lib/rest-core/app/em-http-request.rb +0 -9
- data/lib/rest-core/app/rest-client.rb +0 -41
- data/lib/rest-core/middleware/json_decode.rb +0 -93
- data/lib/rest-core/middleware/timeout/coolio_timer.rb +0 -10
- data/pending/test_multi.rb +0 -123
- data/pending/test_test_util.rb +0 -86
- data/test/test_json_decode.rb +0 -24
data/pending/test_multi.rb
DELETED
@@ -1,123 +0,0 @@
|
|
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#multi' do
|
9
|
-
after do
|
10
|
-
WebMock.reset!
|
11
|
-
RR.verify
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'do multi query with em-http-request' do
|
15
|
-
url = 'https://graph.facebook.com/me'
|
16
|
-
stub_request(:get, url).to_return(:body => '{"data":"get"}')
|
17
|
-
stub_request(:put, url).to_return(:body => '{"data":"put"}')
|
18
|
-
rg = RestGraph.new
|
19
|
-
mock.proxy(rg).request_em(anything, anything)
|
20
|
-
EM.run{
|
21
|
-
rg.multi([[:get, 'me'], [:put, 'me']]){ |results|
|
22
|
-
results.should == [{'data' => 'get'}, {'data' => 'put'}]
|
23
|
-
EM.stop
|
24
|
-
}
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
should 'call aget, aput family with multi' do
|
29
|
-
url = 'https://graph.facebook.com/me'
|
30
|
-
%w[aget adelete apost aput].each{ |meth|
|
31
|
-
stub_request("#{meth[1..-1]}".to_sym, url).
|
32
|
-
to_return(:body => "{\"data\":\"#{meth}\"}")
|
33
|
-
rg = RestGraph.new
|
34
|
-
mock.proxy(rg).request_em(anything, anything)
|
35
|
-
EM.run{
|
36
|
-
rg.send(meth, 'me', {}){ |result|
|
37
|
-
result.should == {'data' => meth.to_s}
|
38
|
-
EM.stop
|
39
|
-
}
|
40
|
-
}
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
should 'for_pages' do
|
45
|
-
rg = RestGraph.new
|
46
|
-
|
47
|
-
args = [is_a(Hash), is_a(Array)]
|
48
|
-
mock.proxy(rg).request_em(*args) # at least one time
|
49
|
-
stub.proxy(rg).request_em(*args)
|
50
|
-
|
51
|
-
%w[next previous].each{ |type|
|
52
|
-
kind = "#{type}_page"
|
53
|
-
data = {'paging' => {type => 'http://z'}, 'data' => ['z']}
|
54
|
-
|
55
|
-
# invalid pages or just the page itself
|
56
|
-
# not really need network
|
57
|
-
nils = 0
|
58
|
-
ranges = -1..1
|
59
|
-
ranges.each{ |page|
|
60
|
-
rg.for_pages(data, page, {:async => true}, kind){ |r|
|
61
|
-
if r
|
62
|
-
r.should == data
|
63
|
-
else
|
64
|
-
nils += 1
|
65
|
-
end
|
66
|
-
}.should == data
|
67
|
-
}
|
68
|
-
nils.should == ranges.to_a.size
|
69
|
-
|
70
|
-
(2..4).each{ |pages|
|
71
|
-
# merge data
|
72
|
-
stub_request(:get, 'z').to_return(:body => '{"data":["y"]}')
|
73
|
-
expects = [{'data' => %w[y]}, nil]
|
74
|
-
|
75
|
-
EM.run{
|
76
|
-
rg.for_pages(data, pages, {:async => true}, kind){ |r|
|
77
|
-
r.should == expects.shift
|
78
|
-
EM.stop if expects.empty?
|
79
|
-
}
|
80
|
-
}
|
81
|
-
|
82
|
-
# this data cannot be merged
|
83
|
-
stub_request(:get, 'z').to_return(:body => '{"data":"y"}')
|
84
|
-
expects = [{'data' => 'y'}, nil]
|
85
|
-
|
86
|
-
EM.run{
|
87
|
-
rg.for_pages(data, pages, {:async => true}, kind){ |r|
|
88
|
-
r.should == expects.shift
|
89
|
-
EM.stop if expects.empty?
|
90
|
-
}
|
91
|
-
}
|
92
|
-
}
|
93
|
-
|
94
|
-
stub_request(:get, 'z').to_return(:body =>
|
95
|
-
'{"paging":{"'+type+'":"http://yyy"},"data":["y"]}')
|
96
|
-
stub_request(:get, 'yyy').to_return(:body => '{"data":["x"]}')
|
97
|
-
expects = [{'data' => %w[y]}, {'data' => %w[x]}, nil]
|
98
|
-
|
99
|
-
EM.run{
|
100
|
-
rg.for_pages(data, 3, {:async => true}, kind){ |rr|
|
101
|
-
rr.frozen?.should == true unless rr.nil? && RUBY_VERSION < '1.9.2'
|
102
|
-
if rr
|
103
|
-
r = rr.dup
|
104
|
-
r.delete('paging')
|
105
|
-
else
|
106
|
-
r = rr
|
107
|
-
end
|
108
|
-
r.should == expects.shift
|
109
|
-
EM.stop if expects.empty?
|
110
|
-
}
|
111
|
-
}
|
112
|
-
}
|
113
|
-
end
|
114
|
-
|
115
|
-
# should 'cache in multi' do
|
116
|
-
# end
|
117
|
-
#
|
118
|
-
# should 'logging' do
|
119
|
-
# end
|
120
|
-
#
|
121
|
-
# should 'error handler?' do
|
122
|
-
# end
|
123
|
-
end
|
data/pending/test_test_util.rb
DELETED
@@ -1,86 +0,0 @@
|
|
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
|
-
|
75
|
-
should 'return correct response in fake get' do
|
76
|
-
RestGraph.new.fql('', {}, :post => true).
|
77
|
-
should == [RestGraph::TestUtil.default_response]
|
78
|
-
|
79
|
-
RestGraph.new.fql_multi({:a => '', :b => ''}, {}, :post => true).
|
80
|
-
sort_by{ |h| h['name'] }.
|
81
|
-
should == [{'name' => 'a',
|
82
|
-
'fql_result_set' => [RestGraph::TestUtil.default_response]},
|
83
|
-
{'name' => 'b',
|
84
|
-
'fql_result_set' => [RestGraph::TestUtil.default_response]}]
|
85
|
-
end
|
86
|
-
end
|
data/test/test_json_decode.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RC::JsonDecode do
|
5
|
-
before do
|
6
|
-
@app = RC::JsonDecode.new(RC::Dry.new, true)
|
7
|
-
end
|
8
|
-
|
9
|
-
should 'do nothing' do
|
10
|
-
@app.call({}).should.eq(RC::RESPONSE_BODY => nil)
|
11
|
-
end
|
12
|
-
|
13
|
-
should 'decode sync' do
|
14
|
-
@app.call(RC::RESPONSE_BODY => '{}').should.eq(
|
15
|
-
RC::RESPONSE_BODY => {} )
|
16
|
-
end
|
17
|
-
|
18
|
-
should 'decode async' do
|
19
|
-
@app.call(RC::RESPONSE_BODY => '{}',
|
20
|
-
RC::ASYNC => lambda{ |response|
|
21
|
-
response[RC::RESPONSE_BODY].should.eq({})}
|
22
|
-
)[RC::RESPONSE_BODY].should.eq '{}'
|
23
|
-
end
|
24
|
-
end
|