rest-core 3.6.0 → 4.0.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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/.travis.yml +0 -1
  4. data/CHANGES.md +28 -0
  5. data/Gemfile +0 -2
  6. data/README.md +14 -95
  7. data/Rakefile +16 -3
  8. data/example/simple.rb +1 -0
  9. data/example/use-cases.rb +15 -3
  10. data/lib/rest-core.rb +38 -75
  11. data/lib/rest-core/client/universal.rb +3 -1
  12. data/lib/rest-core/client_oauth1.rb +64 -59
  13. data/lib/rest-core/event.rb +9 -11
  14. data/lib/rest-core/middleware/auth_basic.rb +21 -21
  15. data/lib/rest-core/middleware/bypass.rb +8 -8
  16. data/lib/rest-core/middleware/cache.rb +94 -90
  17. data/lib/rest-core/middleware/clash_response.rb +15 -14
  18. data/lib/rest-core/middleware/common_logger.rb +27 -26
  19. data/lib/rest-core/middleware/default_headers.rb +8 -8
  20. data/lib/rest-core/middleware/default_payload.rb +8 -8
  21. data/lib/rest-core/middleware/default_query.rb +8 -8
  22. data/lib/rest-core/middleware/default_site.rb +12 -12
  23. data/lib/rest-core/middleware/defaults.rb +38 -38
  24. data/lib/rest-core/middleware/error_detector.rb +10 -10
  25. data/lib/rest-core/middleware/error_detector_http.rb +6 -4
  26. data/lib/rest-core/middleware/error_handler.rb +14 -14
  27. data/lib/rest-core/middleware/follow_redirect.rb +28 -27
  28. data/lib/rest-core/middleware/json_request.rb +13 -11
  29. data/lib/rest-core/middleware/json_response.rb +29 -28
  30. data/lib/rest-core/middleware/oauth1_header.rb +84 -83
  31. data/lib/rest-core/middleware/oauth2_header.rb +27 -25
  32. data/lib/rest-core/middleware/oauth2_query.rb +15 -15
  33. data/lib/rest-core/middleware/query_response.rb +14 -14
  34. data/lib/rest-core/middleware/retry.rb +25 -23
  35. data/lib/rest-core/middleware/smash_response.rb +15 -14
  36. data/lib/rest-core/middleware/timeout.rb +18 -19
  37. data/lib/rest-core/test.rb +1 -18
  38. data/lib/rest-core/util/clash.rb +38 -37
  39. data/lib/rest-core/util/config.rb +40 -39
  40. data/lib/rest-core/util/dalli_extension.rb +11 -10
  41. data/lib/rest-core/util/hmac.rb +9 -8
  42. data/lib/rest-core/util/json.rb +55 -54
  43. data/lib/rest-core/util/parse_link.rb +13 -12
  44. data/lib/rest-core/util/parse_query.rb +24 -22
  45. data/lib/rest-core/version.rb +1 -1
  46. data/rest-core.gemspec +121 -158
  47. data/test/test_cache.rb +2 -0
  48. data/test/test_default_payload.rb +1 -1
  49. data/test/test_error_handler.rb +5 -4
  50. data/test/test_timeout.rb +9 -8
  51. data/test/test_universal.rb +8 -0
  52. metadata +9 -73
  53. data/lib/rest-core/builder.rb +0 -162
  54. data/lib/rest-core/client.rb +0 -277
  55. data/lib/rest-core/client/simple.rb +0 -2
  56. data/lib/rest-core/engine.rb +0 -36
  57. data/lib/rest-core/engine/dry.rb +0 -9
  58. data/lib/rest-core/engine/http-client.rb +0 -41
  59. data/lib/rest-core/error.rb +0 -5
  60. data/lib/rest-core/event_source.rb +0 -137
  61. data/lib/rest-core/middleware.rb +0 -151
  62. data/lib/rest-core/promise.rb +0 -249
  63. data/lib/rest-core/thread_pool.rb +0 -131
  64. data/lib/rest-core/timer.rb +0 -58
  65. data/lib/rest-core/util/payload.rb +0 -173
  66. data/test/test_builder.rb +0 -40
  67. data/test/test_client.rb +0 -177
  68. data/test/test_event_source.rb +0 -159
  69. data/test/test_future.rb +0 -16
  70. data/test/test_httpclient.rb +0 -118
  71. data/test/test_payload.rb +0 -204
  72. data/test/test_promise.rb +0 -146
  73. data/test/test_simple.rb +0 -38
  74. data/test/test_thread_pool.rb +0 -10
@@ -1,146 +0,0 @@
1
-
2
- require 'rest-core/test'
3
-
4
- describe RC::Promise do
5
- def new_promise
6
- RC::Promise.new(RC::CLIENT => @client.new)
7
- end
8
-
9
- before do
10
- @client = RC::Builder.client
11
- @promise = new_promise
12
- end
13
-
14
- after do
15
- @client.shutdown
16
- @client.thread_pool.size.should.eq 0
17
- Muack.verify
18
- end
19
-
20
- would 'work, reject, yield' do
21
- @client.pool_size = 1
22
- flag = 0
23
- @promise.defer do
24
- flag.should.eq 0
25
- flag += 1
26
- @promise.reject(nil)
27
- end
28
- @promise.yield
29
- flag.should.eq 1
30
- @promise.send(:error).should.kind_of? RC::Error
31
- end
32
-
33
- would 'work, fulfill, yield' do
34
- @client.pool_size = 2
35
- flag = 0
36
- @promise.defer do
37
- flag.should.eq 0
38
- flag += 1
39
- @promise.fulfill('body', 1, {'K' => 'V'})
40
- end
41
- @promise.yield
42
- flag.should.eq 1
43
- @promise.send(:body) .should.eq 'body'
44
- @promise.send(:status) .should.eq 1
45
- @promise.send(:headers).should.eq('K' => 'V')
46
- end
47
-
48
- would 'work, wait, done' do
49
- @client.pool_size = 3
50
- flag = 0
51
- promise = @client.defer(:itself) do
52
- flag.should.eq 0
53
- flag += 1
54
- end
55
- @client.wait
56
- flag.should.eq 1
57
- promise.should.done?
58
- end if Object.respond_to?(:itself)
59
-
60
- would 'work, check body' do
61
- @client.pool_size = 3
62
- flag = 0
63
- result = @client.defer do
64
- flag.should.eq 0
65
- flag += 1
66
- end
67
- result.should.eq 1
68
- flag.should.eq 1
69
- end
70
-
71
- would 'warn on callback error' do
72
- mock(any_instance_of(RC::Promise)).warn(is_a(String)) do |msg|
73
- msg.should.eq 'boom'
74
- end
75
-
76
- @client.new.get('http://localhost:1') do |err|
77
- err.should.kind_of?(Errno::ECONNREFUSED)
78
- raise 'boom'
79
- end.wait
80
- end
81
-
82
- would 'call error_callback on errors' do
83
- errors = []
84
- @client.new(:error_callback => lambda{ |e| errors << e }).
85
- get('http://localhost:1') do |err|
86
- err.should.kind_of?(Errno::ECONNREFUSED)
87
- raise 'boom'
88
- end.wait
89
- errors.map(&:class).should.eq [Errno::ECONNREFUSED, RuntimeError]
90
- end
91
-
92
- would 'then then then' do
93
- plusone = lambda do |r|
94
- r.merge(RC::RESPONSE_BODY => r[RC::RESPONSE_BODY] + 1)
95
- end
96
- 2.times{ @promise.then(&plusone).then(&plusone).then(&plusone) }
97
- @promise.fulfill(0, 200, {})
98
- @promise.future_body.should.eq 6
99
- end
100
-
101
- would 'call inline if pool_size < 0' do
102
- @client.pool_size = -1
103
- current_thread = Thread.current
104
- @promise.defer do
105
- Thread.current.should.eq current_thread
106
- end
107
- end
108
-
109
- would 'call in a new thread if pool_size == 0' do
110
- @client.pool_size = 0
111
- thread = nil
112
- rd, wr = IO.pipe
113
- mock(Thread).new.with_any_args.peek_return do |t|
114
- thread = t
115
- wr.puts
116
- end
117
- @promise.defer do
118
- rd.gets
119
- Thread.current.should.eq thread
120
- @promise.reject(nil)
121
- end
122
- @promise.yield
123
- end
124
-
125
- would 'call in thread pool if pool_size > 0' do
126
- @client.pool_size = 1
127
- flag = 0
128
- rd, wr = IO.pipe
129
- @promise.defer do
130
- rd.gets
131
- flag.should.eq 0
132
- flag += 1
133
- @promise.reject(nil)
134
- end
135
- p1 = new_promise
136
- p1.defer do # block until promise #0 is done because pool_size == 1
137
- flag.should.eq 1
138
- flag += 1
139
- p1.reject(nil)
140
- end
141
- wr.puts # start promise #0
142
- @promise.yield
143
- p1.yield # block until promise #1 is done
144
- flag.should.eq 2
145
- end
146
- end
@@ -1,38 +0,0 @@
1
-
2
- require 'rest-core/test'
3
-
4
- describe RC::Simple do
5
- path = 'http://example.com/'
6
-
7
- after do
8
- WebMock.reset!
9
- end
10
-
11
- would 'give RESPONSE_BODY' do
12
- stub_request(:get, path).to_return(:body => 'OK')
13
- RC::Simple.new.get(path).should.eq 'OK'
14
- end
15
-
16
- would 'give RESPONSE_HEADERS' do
17
- stub_request(:head, path).to_return(:headers => {'A' => 'B'})
18
- RC::Simple.new.head(path).should.eq 'A' => 'B'
19
- end
20
-
21
- would 'give RESPONSE_HEADERS' do
22
- stub_request(:get, path).to_return(:status => 199)
23
- RC::Simple.new.get(path, {},
24
- RC::RESPONSE_KEY => RC::RESPONSE_STATUS).should.eq 199
25
- end
26
-
27
- would 'give RESPONSE_SOCKET' do
28
- stub_request(:get, path).to_return(:body => 'OK')
29
- RC::Simple.new.get(path, {}, RC::HIJACK => true).read.should.eq 'OK'
30
- end
31
-
32
- would 'give REQUEST_URI' do
33
- stub_request(:get, "#{path}?a=b").to_return(:body => 'OK')
34
- RC::Simple.new.get(path, {:a => 'b'},
35
- RC::RESPONSE_KEY => RC::REQUEST_URI).should.eq "#{path}?a=b"
36
- RC::Simple.wait
37
- end
38
- end
@@ -1,10 +0,0 @@
1
-
2
- require 'rest-core/test'
3
-
4
- describe RC::ThreadPool do
5
- would 'have the same pool for the same client' do
6
- client = RC::Builder.client
7
- pool = RC::ThreadPool[client]
8
- RC::ThreadPool[client].object_id.should.eq pool.object_id
9
- end
10
- end