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.
Files changed (87) hide show
  1. data/.travis.yml +6 -7
  2. data/CHANGES.md +137 -0
  3. data/Gemfile +1 -1
  4. data/README.md +183 -191
  5. data/TODO.md +5 -8
  6. data/example/multi.rb +31 -24
  7. data/example/simple.rb +28 -0
  8. data/example/use-cases.rb +194 -0
  9. data/lib/rest-core.rb +26 -19
  10. data/lib/rest-core/builder.rb +2 -2
  11. data/lib/rest-core/client.rb +40 -27
  12. data/lib/rest-core/client/universal.rb +16 -13
  13. data/lib/rest-core/client_oauth1.rb +5 -5
  14. data/lib/rest-core/engine/auto.rb +25 -0
  15. data/lib/rest-core/{app → engine}/dry.rb +1 -2
  16. data/lib/rest-core/engine/em-http-request.rb +39 -0
  17. data/lib/rest-core/engine/future/future.rb +106 -0
  18. data/lib/rest-core/engine/future/future_fiber.rb +39 -0
  19. data/lib/rest-core/engine/future/future_thread.rb +29 -0
  20. data/lib/rest-core/engine/rest-client.rb +56 -0
  21. data/lib/rest-core/middleware.rb +27 -5
  22. data/lib/rest-core/middleware/auth_basic.rb +5 -5
  23. data/lib/rest-core/middleware/bypass.rb +2 -2
  24. data/lib/rest-core/middleware/cache.rb +67 -54
  25. data/lib/rest-core/middleware/common_logger.rb +5 -8
  26. data/lib/rest-core/middleware/default_headers.rb +2 -2
  27. data/lib/rest-core/middleware/default_payload.rb +26 -2
  28. data/lib/rest-core/middleware/default_query.rb +4 -2
  29. data/lib/rest-core/middleware/default_site.rb +8 -6
  30. data/lib/rest-core/middleware/error_detector.rb +9 -16
  31. data/lib/rest-core/middleware/error_handler.rb +25 -11
  32. data/lib/rest-core/middleware/follow_redirect.rb +11 -14
  33. data/lib/rest-core/middleware/json_request.rb +19 -0
  34. data/lib/rest-core/middleware/json_response.rb +28 -0
  35. data/lib/rest-core/middleware/oauth1_header.rb +2 -7
  36. data/lib/rest-core/middleware/oauth2_header.rb +4 -7
  37. data/lib/rest-core/middleware/oauth2_query.rb +2 -2
  38. data/lib/rest-core/middleware/timeout.rb +21 -65
  39. data/lib/rest-core/middleware/timeout/{eventmachine_timer.rb → timer_em.rb} +3 -1
  40. data/lib/rest-core/middleware/timeout/timer_thread.rb +36 -0
  41. data/lib/rest-core/patch/multi_json.rb +8 -0
  42. data/lib/rest-core/test.rb +3 -12
  43. data/lib/rest-core/util/json.rb +65 -0
  44. data/lib/rest-core/util/parse_query.rb +2 -2
  45. data/lib/rest-core/version.rb +1 -1
  46. data/lib/rest-core/wrapper.rb +16 -16
  47. data/rest-core.gemspec +28 -27
  48. data/test/test_auth_basic.rb +14 -10
  49. data/test/test_builder.rb +7 -7
  50. data/test/test_cache.rb +126 -37
  51. data/test/test_client.rb +3 -1
  52. data/test/test_client_oauth1.rb +2 -3
  53. data/test/test_default_query.rb +17 -23
  54. data/test/test_em_http_request.rb +146 -0
  55. data/test/test_error_detector.rb +0 -1
  56. data/test/test_error_handler.rb +44 -0
  57. data/test/test_follow_redirect.rb +17 -19
  58. data/test/test_json_request.rb +28 -0
  59. data/test/test_json_response.rb +51 -0
  60. data/test/test_oauth1_header.rb +4 -4
  61. data/test/test_payload.rb +20 -12
  62. data/test/test_simple.rb +14 -0
  63. data/test/test_timeout.rb +11 -19
  64. data/test/test_universal.rb +5 -5
  65. data/test/test_wrapper.rb +19 -13
  66. metadata +28 -29
  67. data/doc/ToC.md +0 -7
  68. data/doc/dependency.md +0 -4
  69. data/doc/design.md +0 -4
  70. data/example/auto.rb +0 -51
  71. data/example/coolio.rb +0 -21
  72. data/example/eventmachine.rb +0 -30
  73. data/example/rest-client.rb +0 -16
  74. data/lib/rest-core/app/abstract/async_fiber.rb +0 -13
  75. data/lib/rest-core/app/auto.rb +0 -23
  76. data/lib/rest-core/app/coolio-async.rb +0 -32
  77. data/lib/rest-core/app/coolio-fiber.rb +0 -30
  78. data/lib/rest-core/app/coolio.rb +0 -9
  79. data/lib/rest-core/app/em-http-request-async.rb +0 -37
  80. data/lib/rest-core/app/em-http-request-fiber.rb +0 -45
  81. data/lib/rest-core/app/em-http-request.rb +0 -9
  82. data/lib/rest-core/app/rest-client.rb +0 -41
  83. data/lib/rest-core/middleware/json_decode.rb +0 -93
  84. data/lib/rest-core/middleware/timeout/coolio_timer.rb +0 -10
  85. data/pending/test_multi.rb +0 -123
  86. data/pending/test_test_util.rb +0 -86
  87. data/test/test_json_decode.rb +0 -24
@@ -9,6 +9,5 @@ describe RC::ErrorDetector do
9
9
  end.new.lighten
10
10
 
11
11
  client.attributes.should.key?(:error_detector)
12
- client.app.call({}).should.eq({})
13
12
  end
14
13
  end
@@ -0,0 +1,44 @@
1
+
2
+ require 'rest-core/test'
3
+
4
+ describe RC::ErrorHandler do
5
+ client = RC::Builder.client do
6
+ use RC::ErrorHandler
7
+ run RC::Dry
8
+ end
9
+
10
+ exp = Class.new(Exception)
11
+
12
+ describe 'there is an exception' do
13
+ should 'raise an error with future' do
14
+ lambda{
15
+ client.new.get('/', {}, RC::FAIL => [exp.new('fail')])
16
+ }.should.raise(exp)
17
+ end
18
+
19
+ should 'give an error with callback' do
20
+ client.new.get('/', {}, RC::FAIL => [exp.new('fail')]){ |res|
21
+ res.should.kind_of?(exp)
22
+ }
23
+ end
24
+ end
25
+
26
+ describe 'error_handler gives an exception' do
27
+ should 'raise an error with future' do
28
+ lambda{
29
+ client.new(:error_handler => lambda{ |res| exp.new }).
30
+ get('/', {}, RC::FAIL => [true])
31
+ }.should.raise(exp)
32
+ end
33
+
34
+ should 'give an error with callback' do
35
+ client.new(:error_handler => lambda{ |res| exp.new }).
36
+ get('/', {}, RC::FAIL => [true]){ |res| res.should.kind_of?(exp) }
37
+ end
38
+ end
39
+
40
+ should 'no exception but errors' do
41
+ client.new(:error_handler => lambda{ |res| 1 }).
42
+ request({RC::FAIL => [0]}, RC::FAIL).should.eq [0, 1]
43
+ end
44
+ end
@@ -3,7 +3,13 @@ require 'rest-core/test'
3
3
 
4
4
  describe RC::FollowRedirect do
5
5
  before do
6
- @dry = RC::Dry.new
6
+ @dry = Class.new do
7
+ attr_accessor :status
8
+ def call env
9
+ yield(env.merge(RC::RESPONSE_STATUS => status,
10
+ RC::RESPONSE_HEADERS => {'LOCATION' => 'location'}))
11
+ end
12
+ end.new
7
13
  @app = RC::FollowRedirect.new(dry, 1)
8
14
  end
9
15
  after do
@@ -14,34 +20,26 @@ describe RC::FollowRedirect do
14
20
 
15
21
  [301, 302, 303, 307].each do |status|
16
22
  should "not follow redirect if reached max_redirects: #{status}" do
17
- mock(dry).call(anything){ |env|
18
- env.merge(RC::RESPONSE_STATUS => status,
19
- RC::RESPONSE_HEADERS => {'LOCATION' => 'location'})
23
+ dry.status = status
24
+ app.call(RC::REQUEST_METHOD => :get, 'max_redirects' => 0){ |res|
25
+ res[RC::RESPONSE_HEADERS]['LOCATION'].should.eq 'location'
20
26
  }
21
- app.call(RC::REQUEST_METHOD => :get,
22
- 'max_redirects' => 0)[RC::RESPONSE_HEADERS]['LOCATION'].
23
- should.eq 'location'
24
27
  end
25
28
 
26
29
  should "follow once: #{status}" do
27
- mock(dry).call(anything){ |env|
28
- env.merge(RC::RESPONSE_STATUS => status,
29
- RC::RESPONSE_HEADERS => {'LOCATION' => 'location'})
30
- }.times(2)
31
- app.call(RC::REQUEST_METHOD => :get)[RC::RESPONSE_HEADERS]['LOCATION'].
32
- should.eq 'location'
30
+ dry.status = status
31
+ app.call(RC::REQUEST_METHOD => :get){ |res|
32
+ res[RC::RESPONSE_HEADERS]['LOCATION'].should.eq 'location'
33
+ }
33
34
  end
34
35
  end
35
36
 
36
37
  [200, 201, 404, 500].each do |status|
37
38
  should "not follow redirect if it's not a redirect status: #{status}" do
38
- mock(dry).call(anything){ |env|
39
- env.merge(RC::RESPONSE_STATUS => status,
40
- RC::RESPONSE_HEADERS => {'LOCATION' => 'location'})
39
+ dry.status = status
40
+ app.call(RC::REQUEST_METHOD => :get, 'max_redirects' => 9){ |res|
41
+ res[RC::RESPONSE_HEADERS]['LOCATION'].should.eq 'location'
41
42
  }
42
- app.call(RC::REQUEST_METHOD => :get,
43
- 'max_redirects' => 9)[RC::RESPONSE_HEADERS]['LOCATION'].
44
- should.eq 'location'
45
43
  end
46
44
  end
47
45
  end
@@ -0,0 +1,28 @@
1
+
2
+ require 'rest-core/test'
3
+
4
+ describe RC::JsonRequest do
5
+ app = RC::JsonRequest.new(RC::Dry.new, true)
6
+ env = {RC::REQUEST_HEADERS => {}}
7
+ request_params = {
8
+ 'key' => 'value',
9
+ 'array' => [1, 2, 3],
10
+ 'nested' => {'k' => 'v', 'a' => [4, 5, 6]}
11
+ }
12
+
13
+ should 'encode payload as json' do
14
+ e = env.merge(RC::REQUEST_METHOD => :post,
15
+ RC::REQUEST_PAYLOAD => request_params)
16
+
17
+ app.call(e){ |res|
18
+ res.should.eq(
19
+ RC::REQUEST_METHOD => :post,
20
+ RC::REQUEST_HEADERS => {'Content-Type' => 'application/json'},
21
+ RC::REQUEST_PAYLOAD => RC::Json.encode(request_params))}
22
+ end
23
+
24
+ should 'do nothing if json_request is false' do
25
+ app = RC::JsonRequest.new(RC::Dry.new, false)
26
+ app.call(env){ |res| res.should.eq res }
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+
2
+ require 'rest-core/test'
3
+
4
+ describe RC::JsonResponse do
5
+ describe 'app' do
6
+ def app
7
+ @app ||= RC::JsonResponse.new(RC::Dry.new, true)
8
+ end
9
+
10
+ should 'do nothing' do
11
+ expected = {RC::RESPONSE_BODY => nil,
12
+ RC::REQUEST_HEADERS => {'Accept' => 'application/json'}}
13
+ app.call({}){ |response| response.should.eq(expected) }
14
+ end
15
+
16
+ should 'decode' do
17
+ expected = {RC::RESPONSE_BODY => {},
18
+ RC::REQUEST_HEADERS => {'Accept' => 'application/json'}}
19
+ app.call(RC::RESPONSE_BODY => '{}'){ |response|
20
+ response.should.eq(expected)
21
+ }
22
+ end
23
+ end
24
+
25
+ describe 'client' do
26
+ def client
27
+ @client ||= RC::Builder.client do
28
+ use RC::JsonResponse, true
29
+ run Class.new{
30
+ def call env
31
+ yield(env.merge(RC::RESPONSE_BODY => '{}'))
32
+ end
33
+ }
34
+ end
35
+ end
36
+
37
+ should 'do nothing' do
38
+ expected = '{}'
39
+ client.new(:json_response => false).get(''){ |response|
40
+ response.should.eq(expected)
41
+ }.get('').should.eq(expected)
42
+ end
43
+
44
+ should 'decode' do
45
+ expected = {}
46
+ client.new.get(''){ |response|
47
+ response.should.eq(expected)
48
+ }.get('').should.eq(expected)
49
+ end
50
+ end
51
+ end
@@ -1,10 +1,10 @@
1
1
 
2
2
  require 'rest-core/test'
3
3
 
4
- describe RestCore::Oauth1Header do
4
+ describe RC::Oauth1Header do
5
5
  before do
6
- @env = {RestCore::REQUEST_METHOD => :post,
7
- RestCore::REQUEST_PATH =>
6
+ @env = {RC::REQUEST_METHOD => :post,
7
+ RC::REQUEST_PATH =>
8
8
  'https://api.twitter.com/oauth/request_token'}
9
9
 
10
10
  callback =
@@ -18,7 +18,7 @@ describe RestCore::Oauth1Header do
18
18
  'oauth_version' => '1.0' ,
19
19
  'oauth_signature_method' => 'HMAC-SHA1'}
20
20
 
21
- @auth = RestCore::Oauth1Header.new(RestCore::Dry.new,
21
+ @auth = RC::Oauth1Header.new(RC::Dry.new,
22
22
  nil, nil, nil,
23
23
  'GDdmIQH6jhtmLUypg82g',
24
24
  'MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98')
@@ -2,28 +2,36 @@
2
2
  require 'rest-core/test'
3
3
 
4
4
  describe RC::DefaultPayload do
5
- before do
6
- @app = RC::DefaultPayload.new(RC::Dry.new, {})
7
- end
8
-
9
- def app
10
- @app
11
- end
5
+ app = RC::DefaultPayload.new(RC::Dry.new, {})
12
6
 
13
7
  should 'do nothing' do
14
- app.call({})[RC::REQUEST_PAYLOAD].should.eq({})
8
+ app.call({}){ |r| r[RC::REQUEST_PAYLOAD].should.eq({}) }
15
9
  end
16
10
 
17
11
  should 'merge payload' do
18
12
  app.instance_eval{@payload = {'pay' => 'load'}}
19
13
 
20
- app.call({}).should.eq({RC::REQUEST_PAYLOAD =>
21
- {'pay' => 'load'}})
14
+ app.call({}){ |r| r.should.eq({RC::REQUEST_PAYLOAD =>
15
+ {'pay' => 'load'}}) }
22
16
 
23
17
  format = {'format' => 'json'}
24
18
  env = {RC::REQUEST_PAYLOAD => format}
25
19
 
26
- app.call(env).should.eq({RC::REQUEST_PAYLOAD =>
27
- {'pay' => 'load'}.merge(format)})
20
+ app.call(env){ |r| r.should.eq({RC::REQUEST_PAYLOAD =>
21
+ {'pay' => 'load'}.merge(format)})}
22
+ end
23
+
24
+ should 'accept non-hash payload' do
25
+ u = RC::Universal.new(:log_method => false)
26
+ env = {RC::REQUEST_PAYLOAD => 'payload'}
27
+ u.request_full(env, u.dry)[RC::REQUEST_PAYLOAD].should.eq('payload')
28
+
29
+ u.payload = 'default'
30
+ u.request_full(env, u.dry)[RC::REQUEST_PAYLOAD].should.eq('payload')
31
+ u.request_full({} , u.dry)[RC::REQUEST_PAYLOAD].should.eq('default')
32
+
33
+ u = RC::Builder.client{use RC::DefaultPayload, 'maylord'}.new
34
+ u.request_full({} , u.dry)[RC::REQUEST_PAYLOAD].should.eq('maylord')
35
+ u.request_full(env, u.dry)[RC::REQUEST_PAYLOAD].should.eq('payload')
28
36
  end
29
37
  end
@@ -0,0 +1,14 @@
1
+
2
+ require 'rest-core/test'
3
+
4
+ describe RC::Simple do
5
+ before do
6
+ @path = 'http://example.com'
7
+ stub_request(:get, @path).to_return(:body => 'OK')
8
+ end
9
+
10
+ should 'work with RC' do
11
+ RC::Simple.new.get(@path).should.eq 'OK'
12
+ end
13
+ end
14
+
@@ -2,33 +2,25 @@
2
2
  require 'rest-core/test'
3
3
 
4
4
  describe RC::Timeout do
5
- before do
6
- @app = RC::Timeout.new(RC::Dry.new, 0)
7
- end
8
-
9
5
  after do
10
6
  WebMock.reset!
7
+ RR.verify
8
+ end
9
+
10
+ def setup_app
11
+ RC::Timeout.new(RC::Dry.new, 0)
11
12
  end
12
13
 
13
14
  should 'bypass timeout if timeout is 0' do
14
- mock(@app).monitor.times(0)
15
- @app.call({}).should.eq({})
15
+ app = setup_app
16
+ mock(app).monitor.times(0)
17
+ app.call({}){ |e| e.should.eq({}) }
16
18
  end
17
19
 
18
20
  should 'run the monitor to setup timeout' do
21
+ app = setup_app
19
22
  env = {'timeout' => 2}
20
- mock.proxy(@app).monitor(env).times(1)
21
- @app.call(env).should.eq(env)
23
+ mock.proxy(app).monitor(env).times(1)
24
+ app.call(env){|e| e[RC::TIMER].should.kind_of?(RC::Timeout::TimerThread)}
22
25
  end
23
-
24
- should 'return correct result under fibers' do
25
- path = 'http://example.com/'
26
- stub_request(:get, path).to_return(:body => 'response')
27
-
28
- c = RC::Builder.client do
29
- use RC::Timeout, 10
30
- run RC::EmHttpRequestFiber
31
- end.new
32
- EM.run{Fiber.new{c.get(path).should.eq('response');EM.stop}.resume}
33
- end if defined?(Fiber)
34
26
  end
@@ -1,19 +1,19 @@
1
1
 
2
2
  require 'rest-core/test'
3
3
 
4
- describe RestCore::Universal do
4
+ describe RC::Universal do
5
5
  should 'send Authorization header' do
6
- u = RestCore::Universal.new(:log_method => false)
6
+ u = RC::Universal.new(:log_method => false)
7
7
  u.username = 'Aladdin'
8
8
  u.password = 'open sesame'
9
9
 
10
- u.request_full({}, u.dry)[RestCore::REQUEST_HEADERS].should.eq(
10
+ u.request_full({}, u.dry)[RC::REQUEST_HEADERS].should.eq(
11
11
  {'Authorization' => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='})
12
12
 
13
13
  acc = {'Accept' => 'text/plain'}
14
- env = {RestCore::REQUEST_HEADERS => acc}
14
+ env = {RC::REQUEST_HEADERS => acc}
15
15
 
16
- u.request_full(env, u.dry)[RestCore::REQUEST_HEADERS].should.eq(
16
+ u.request_full(env, u.dry)[RC::REQUEST_HEADERS].should.eq(
17
17
  {'Authorization' => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}.merge(acc))
18
18
  end
19
19
  end
@@ -1,30 +1,36 @@
1
1
 
2
2
  require 'rest-core/test'
3
3
 
4
- describe RestCore::Wrapper do
4
+ describe RC::Wrapper do
5
5
  should 'wrap around simple middleware' do
6
- wrapper = RestCore::Bypass.dup
7
- wrapper.send(:include, RestCore::Wrapper)
8
- client = RestCore::Builder.client do
6
+ wrapper = RC::Bypass.dup
7
+ wrapper.send(:include, RC::Wrapper)
8
+ client = RC::Builder.client do
9
9
  use wrapper do
10
- use RestCore::Bypass
10
+ use RC::Bypass
11
11
  end
12
- run RestCore::Dry
12
+ run RC::Dry
13
13
  end
14
14
 
15
- client.new.app.call({1=>2}).should.eq({1=>2})
15
+ client.new.app.call(1=>2){ |res| res.should.eq(1=>2) }
16
16
  end
17
17
 
18
18
  should 'default app is RestCore::Dry' do
19
19
  wrapper = Class.new
20
- wrapper.send(:include, RestCore::Wrapper)
21
- wrapper.new.wrapped.class.should.eq RestCore::Dry
20
+ wrapper.send(:include, RC::Wrapper)
21
+ wrapper.new.wrapped.class.should.eq RC::Dry
22
22
  end
23
23
 
24
- should 'switch default_app to RestCore::RestClient' do
24
+ should 'switch default_engine to RestCore::RestClient' do
25
25
  wrapper = Class.new
26
- wrapper.send(:include, RestCore::Wrapper)
27
- wrapper.default_app = RestCore::RestClient
28
- wrapper.new.wrapped.class.should.eq RestCore::RestClient
26
+ wrapper.send(:include, RC::Wrapper)
27
+ wrapper.default_engine = RC::RestClient
28
+ wrapper.new.wrapped.class.should.eq RC::RestClient
29
+ end
30
+
31
+ should 'accept middlewares without a member' do
32
+ Class.new.send(:include, RC::Wrapper).new{
33
+ use Class.new.send(:include, RC::Middleware)
34
+ }.members.should.eq []
29
35
  end
30
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-08-15 00:00:00.000000000 Z
13
+ date: 2012-10-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
@@ -35,7 +35,7 @@ description: ! 'Modular Ruby clients interface for REST APIs
35
35
 
36
36
  To address the need for a way to access these APIs easily and elegantly,
37
37
 
38
- we have developed [rest-core][], which consists of composable middleware
38
+ we have developed rest-core, which consists of composable middleware
39
39
 
40
40
  that allows you to build a REST client for any REST API. Or in the case of
41
41
 
@@ -44,8 +44,6 @@ description: ! 'Modular Ruby clients interface for REST APIs
44
44
  dedicated clients provided by [rest-more][].
45
45
 
46
46
 
47
- [rest-core]: https://github.com/cardinalblue/rest-core
48
-
49
47
  [rest-more]: https://github.com/cardinalblue/rest-more'
50
48
  email:
51
49
  - dev (XD) cardinalblue.com
@@ -63,30 +61,22 @@ files:
63
61
  - README.md
64
62
  - Rakefile
65
63
  - TODO.md
66
- - doc/ToC.md
67
- - doc/dependency.md
68
- - doc/design.md
69
- - example/auto.rb
70
- - example/coolio.rb
71
- - example/eventmachine.rb
72
64
  - example/multi.rb
73
- - example/rest-client.rb
65
+ - example/simple.rb
66
+ - example/use-cases.rb
74
67
  - lib/rest-core.rb
75
- - lib/rest-core/app/abstract/async_fiber.rb
76
- - lib/rest-core/app/auto.rb
77
- - lib/rest-core/app/coolio-async.rb
78
- - lib/rest-core/app/coolio-fiber.rb
79
- - lib/rest-core/app/coolio.rb
80
- - lib/rest-core/app/dry.rb
81
- - lib/rest-core/app/em-http-request-async.rb
82
- - lib/rest-core/app/em-http-request-fiber.rb
83
- - lib/rest-core/app/em-http-request.rb
84
- - lib/rest-core/app/rest-client.rb
85
68
  - lib/rest-core/builder.rb
86
69
  - lib/rest-core/client.rb
87
70
  - lib/rest-core/client/simple.rb
88
71
  - lib/rest-core/client/universal.rb
89
72
  - lib/rest-core/client_oauth1.rb
73
+ - lib/rest-core/engine/auto.rb
74
+ - lib/rest-core/engine/dry.rb
75
+ - lib/rest-core/engine/em-http-request.rb
76
+ - lib/rest-core/engine/future/future.rb
77
+ - lib/rest-core/engine/future/future_fiber.rb
78
+ - lib/rest-core/engine/future/future_thread.rb
79
+ - lib/rest-core/engine/rest-client.rb
90
80
  - lib/rest-core/error.rb
91
81
  - lib/rest-core/event.rb
92
82
  - lib/rest-core/middleware.rb
@@ -103,21 +93,22 @@ files:
103
93
  - lib/rest-core/middleware/error_detector_http.rb
104
94
  - lib/rest-core/middleware/error_handler.rb
105
95
  - lib/rest-core/middleware/follow_redirect.rb
106
- - lib/rest-core/middleware/json_decode.rb
96
+ - lib/rest-core/middleware/json_request.rb
97
+ - lib/rest-core/middleware/json_response.rb
107
98
  - lib/rest-core/middleware/oauth1_header.rb
108
99
  - lib/rest-core/middleware/oauth2_header.rb
109
100
  - lib/rest-core/middleware/oauth2_query.rb
110
101
  - lib/rest-core/middleware/timeout.rb
111
- - lib/rest-core/middleware/timeout/coolio_timer.rb
112
- - lib/rest-core/middleware/timeout/eventmachine_timer.rb
102
+ - lib/rest-core/middleware/timeout/timer_em.rb
103
+ - lib/rest-core/middleware/timeout/timer_thread.rb
104
+ - lib/rest-core/patch/multi_json.rb
113
105
  - lib/rest-core/patch/rest-client.rb
114
106
  - lib/rest-core/test.rb
115
107
  - lib/rest-core/util/hmac.rb
108
+ - lib/rest-core/util/json.rb
116
109
  - lib/rest-core/util/parse_query.rb
117
110
  - lib/rest-core/version.rb
118
111
  - lib/rest-core/wrapper.rb
119
- - pending/test_multi.rb
120
- - pending/test_test_util.rb
121
112
  - rest-core.gemspec
122
113
  - test/test_auth_basic.rb
123
114
  - test/test_builder.rb
@@ -125,12 +116,16 @@ files:
125
116
  - test/test_client.rb
126
117
  - test/test_client_oauth1.rb
127
118
  - test/test_default_query.rb
119
+ - test/test_em_http_request.rb
128
120
  - test/test_error_detector.rb
129
121
  - test/test_error_detector_http.rb
122
+ - test/test_error_handler.rb
130
123
  - test/test_follow_redirect.rb
131
- - test/test_json_decode.rb
124
+ - test/test_json_request.rb
125
+ - test/test_json_response.rb
132
126
  - test/test_oauth1_header.rb
133
127
  - test/test_payload.rb
128
+ - test/test_simple.rb
134
129
  - test/test_timeout.rb
135
130
  - test/test_universal.rb
136
131
  - test/test_wrapper.rb
@@ -165,12 +160,16 @@ test_files:
165
160
  - test/test_client.rb
166
161
  - test/test_client_oauth1.rb
167
162
  - test/test_default_query.rb
163
+ - test/test_em_http_request.rb
168
164
  - test/test_error_detector.rb
169
165
  - test/test_error_detector_http.rb
166
+ - test/test_error_handler.rb
170
167
  - test/test_follow_redirect.rb
171
- - test/test_json_decode.rb
168
+ - test/test_json_request.rb
169
+ - test/test_json_response.rb
172
170
  - test/test_oauth1_header.rb
173
171
  - test/test_payload.rb
172
+ - test/test_simple.rb
174
173
  - test/test_timeout.rb
175
174
  - test/test_universal.rb
176
175
  - test/test_wrapper.rb