rainbows 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/.wrongdoc.yml +2 -2
  2. data/Documentation/comparison.haml +6 -6
  3. data/GIT-VERSION-GEN +1 -1
  4. data/GNUmakefile +16 -128
  5. data/README +2 -3
  6. data/Rakefile +3 -3
  7. data/examples/reverse_proxy.ru +9 -0
  8. data/lib/rainbows.rb +14 -6
  9. data/lib/rainbows/base.rb +0 -1
  10. data/lib/rainbows/const.rb +1 -10
  11. data/lib/rainbows/coolio/client.rb +8 -4
  12. data/lib/rainbows/coolio/core.rb +0 -3
  13. data/lib/rainbows/coolio/thread_client.rb +2 -2
  14. data/lib/rainbows/coolio_fiber_spawn.rb +6 -6
  15. data/lib/rainbows/dev_fd_response.rb +16 -9
  16. data/lib/rainbows/epoll.rb +43 -0
  17. data/lib/rainbows/epoll/client.rb +232 -0
  18. data/lib/rainbows/epoll/response_chunk_pipe.rb +18 -0
  19. data/lib/rainbows/epoll/response_pipe.rb +32 -0
  20. data/lib/rainbows/epoll/server.rb +31 -0
  21. data/lib/rainbows/error.rb +1 -9
  22. data/lib/rainbows/ev_core.rb +12 -12
  23. data/lib/rainbows/ev_core/cap_input.rb +1 -1
  24. data/lib/rainbows/event_machine.rb +0 -6
  25. data/lib/rainbows/event_machine/client.rb +3 -3
  26. data/lib/rainbows/event_machine/response_chunk_pipe.rb +5 -7
  27. data/lib/rainbows/event_machine/response_pipe.rb +7 -8
  28. data/lib/rainbows/fiber/base.rb +2 -2
  29. data/lib/rainbows/fiber/io.rb +21 -63
  30. data/lib/rainbows/fiber/io/methods.rb +1 -1
  31. data/lib/rainbows/http_server.rb +4 -4
  32. data/lib/rainbows/join_threads.rb +18 -0
  33. data/lib/rainbows/max_body.rb +2 -1
  34. data/lib/rainbows/max_body/wrapper.rb +1 -1
  35. data/lib/rainbows/never_block/event_machine.rb +2 -2
  36. data/lib/rainbows/process_client.rb +9 -1
  37. data/lib/rainbows/queue_pool.rb +2 -2
  38. data/lib/rainbows/response.rb +1 -1
  39. data/lib/rainbows/rev_fiber_spawn.rb +4 -4
  40. data/lib/rainbows/revactor/client.rb +4 -5
  41. data/lib/rainbows/revactor/proxy.rb +1 -1
  42. data/lib/rainbows/reverse_proxy.rb +189 -0
  43. data/lib/rainbows/reverse_proxy/coolio.rb +61 -0
  44. data/lib/rainbows/reverse_proxy/ev_client.rb +39 -0
  45. data/lib/rainbows/reverse_proxy/event_machine.rb +46 -0
  46. data/lib/rainbows/reverse_proxy/multi_thread.rb +7 -0
  47. data/lib/rainbows/reverse_proxy/synchronous.rb +21 -0
  48. data/lib/rainbows/sendfile.rb +1 -1
  49. data/lib/rainbows/sync_close.rb +2 -2
  50. data/lib/rainbows/thread_pool.rb +1 -1
  51. data/lib/rainbows/writer_thread_pool.rb +1 -1
  52. data/lib/rainbows/xepoll.rb +24 -0
  53. data/lib/rainbows/xepoll/client.rb +45 -0
  54. data/pkg.mk +171 -0
  55. data/rainbows.gemspec +2 -4
  56. data/t/GNUmakefile +4 -0
  57. data/t/bin/content-md5-put +1 -0
  58. data/t/kgio-pipe-response.ru +9 -1
  59. data/t/rack-fiber_pool/app.ru +6 -1
  60. data/t/simple-http_Epoll.ru +9 -0
  61. data/t/simple-http_XEpoll.ru +9 -0
  62. data/t/t0014-config-conflict.sh +5 -3
  63. data/t/t0023-sendfile-byte-range.sh +1 -7
  64. data/t/t0034-pipelined-pipe-response.sh +2 -1
  65. data/t/t0035-kgio-pipe-response.sh +0 -7
  66. data/t/t0041-optional-pool-size.sh +51 -0
  67. data/t/t0050-response-body-close-has-env.sh +2 -1
  68. data/t/t0104-rack-input-limit-tiny.sh +6 -4
  69. data/t/t0105-rack-input-limit-bigger.sh +6 -4
  70. data/t/t0106-rack-input-keepalive.sh +2 -0
  71. data/t/t0107-rack-input-limit-zero.sh +60 -0
  72. data/t/t0113-rewindable-input-false.sh +1 -0
  73. data/t/t0114-rewindable-input-true.sh +1 -0
  74. data/t/t0202-async-response-one-oh.sh +56 -0
  75. data/t/test_isolate.rb +5 -2
  76. metadata +42 -37
  77. data/lib/rainbows/rack_input.rb +0 -17
@@ -33,6 +33,8 @@ req_pipelined () {
33
33
 
34
34
  reload () {
35
35
  t_begin 'reloading Rainbows! to ensure writeout' && {
36
+ # ensure worker is loaded before HUP
37
+ curl -s http://$listen/ >/dev/null
36
38
  # reload to ensure everything is flushed
37
39
  kill -HUP $rainbows_pid
38
40
  test xSTART = x"$(cat $fifo)"
@@ -85,7 +87,6 @@ check_log pipe
85
87
 
86
88
  t_begin "enable sendfile gem" && {
87
89
  echo "require 'sendfile'" >> $unicorn_config
88
- curl http://$listen/ >/dev/null # ensure worker is loaded before HUP
89
90
  }
90
91
 
91
92
  reload
@@ -6,11 +6,13 @@ req_curl_chunked_upload_err_check
6
6
  t_plan 18 "rack.input client_max_body_size tiny"
7
7
 
8
8
  t_begin "setup and startup" && {
9
- rtmpfiles curl_out curl_err cmbs_config
9
+ rtmpfiles curl_out curl_err
10
10
  rainbows_setup $model
11
- sed -e 's/client_max_body_size.*/client_max_body_size 256/' \
12
- < $unicorn_config > $cmbs_config
13
- rainbows -D sha1-random-size.ru -c $cmbs_config
11
+ ed -s $unicorn_config <<EOF
12
+ ,s/client_max_body_size.*/client_max_body_size 256/
13
+ w
14
+ EOF
15
+ rainbows -D sha1-random-size.ru -c $unicorn_config
14
16
  rainbows_wait_start
15
17
  }
16
18
 
@@ -6,11 +6,13 @@ req_curl_chunked_upload_err_check
6
6
  t_plan 10 "rack.input client_max_body_size bigger"
7
7
 
8
8
  t_begin "setup and startup" && {
9
- rtmpfiles curl_out curl_err cmbs_config
9
+ rtmpfiles curl_out curl_err
10
10
  rainbows_setup $model
11
- sed -e 's/client_max_body_size.*/client_max_body_size 10485760/' \
12
- < $unicorn_config > $cmbs_config
13
- rainbows -D sha1-random-size.ru -c $cmbs_config
11
+ ed -s $unicorn_config <<EOF
12
+ ,s/client_max_body_size.*/client_max_body_size 10485760/
13
+ w
14
+ EOF
15
+ rainbows -D sha1-random-size.ru -c $unicorn_config
14
16
  rainbows_wait_start
15
17
  }
16
18
 
@@ -17,6 +17,8 @@ t_begin "setup and startup" && {
17
17
  t_begin "send big pipelined chunked requests" && {
18
18
  (
19
19
  cat $fifo > $tmp &
20
+ Connection=keep-alive
21
+ export Connection
20
22
  content-md5-put < random_blob
21
23
  content-md5-put < random_blob
22
24
  content-md5-put < random_blob
@@ -0,0 +1,60 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ req_curl_chunked_upload_err_check
4
+
5
+ t_plan 6 "rack.input client_max_body_size zero"
6
+
7
+ t_begin "setup and startup" && {
8
+ rtmpfiles curl_out curl_err
9
+ rainbows_setup $model
10
+ ed -s $unicorn_config <<EOF
11
+ ,s/client_max_body_size.*/client_max_body_size 0/
12
+ w
13
+ EOF
14
+ rainbows -D sha1-random-size.ru -c $unicorn_config
15
+ rainbows_wait_start
16
+ empty_sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709
17
+ }
18
+
19
+ t_begin "regular request" && {
20
+ curl -vsSf -H Expect: http://$listen/ > $curl_out 2> $curl_err
21
+ dbgcat curl_err
22
+ dbgcat curl_out
23
+ test x"$(cat $curl_out)" = x$empty_sha1
24
+ }
25
+
26
+ t_begin "chunked request" && {
27
+ curl -vsSf -T- < /dev/null -H Expect: \
28
+ http://$listen/ > $curl_out 2> $curl_err
29
+ dbgcat curl_err
30
+ dbgcat curl_out
31
+ test x"$(cat $curl_out)" = x$empty_sha1
32
+ }
33
+
34
+ t_begin "small input chunked" && {
35
+ rm -f $ok
36
+ echo | \
37
+ curl -vsSf -T- -H Expect: \
38
+ http://$listen/ > $curl_out 2> $curl_err || > $ok
39
+ dbgcat curl_err
40
+ dbgcat curl_out
41
+ fgrep 413 $curl_err
42
+ test -e $ok
43
+ }
44
+
45
+ t_begin "small input content-length" && {
46
+ rm -f $ok
47
+ echo > $tmp
48
+ curl -vsSf -T $tmp -H Expect: \
49
+ http://$listen/ > $curl_out 2> $curl_err || > $ok
50
+ fgrep 413 $curl_err
51
+ dbgcat curl_err
52
+ dbgcat curl_out
53
+ test -e $ok
54
+ }
55
+
56
+ t_begin "shutdown" && {
57
+ kill $rainbows_pid
58
+ }
59
+
60
+ t_done
@@ -3,6 +3,7 @@
3
3
  skip_models EventMachine NeverBlock
4
4
  skip_models Rev RevThreadSpawn RevThreadPool
5
5
  skip_models Coolio CoolioThreadSpawn CoolioThreadPool
6
+ skip_models Epoll XEpoll
6
7
 
7
8
  t_plan 4 "rewindable_input toggled to false"
8
9
 
@@ -3,6 +3,7 @@
3
3
  skip_models EventMachine NeverBlock
4
4
  skip_models Rev RevThreadSpawn RevThreadPool
5
5
  skip_models Coolio CoolioThreadSpawn CoolioThreadPool
6
+ skip_models Epoll XEpoll
6
7
 
7
8
  t_plan 4 "rewindable_input toggled to true"
8
9
 
@@ -0,0 +1,56 @@
1
+ #!/bin/sh
2
+ CONFIG_RU=${CONFIG_RU-'async-response.ru'}
3
+ . ./test-lib.sh
4
+
5
+ skip_models Base WriterThreadPool WriterThreadSpawn
6
+
7
+ t_plan 6 "async HTTP/1.0 response for $model"
8
+
9
+ t_begin "setup and start" && {
10
+ rainbows_setup
11
+ rtmpfiles a b c a_err b_err c_err
12
+ # can't load Rack::Lint here since it'll cause Rev to slurp
13
+ rainbows -E none -D $CONFIG_RU -c $unicorn_config
14
+ rainbows_wait_start
15
+ }
16
+
17
+ t_begin "send async requests off in parallel" && {
18
+ t0=$(date +%s)
19
+ curl="curl -0 --no-buffer -vsSf http://$listen/"
20
+ ( $curl 2>> $a_err | utee $a) &
21
+ ( $curl 2>> $b_err | utee $b) &
22
+ ( $curl 2>> $c_err | utee $c) &
23
+ wait
24
+ t1=$(date +%s)
25
+ }
26
+
27
+ t_begin "ensure elapsed requests were processed in parallel" && {
28
+ elapsed=$(( $t1 - $t0 ))
29
+ echo "elapsed=$elapsed < 30"
30
+ test $elapsed -lt 30
31
+ }
32
+
33
+ t_begin "termination signal sent" && {
34
+ kill $rainbows_pid
35
+ }
36
+
37
+ dbgcat a
38
+ dbgcat b
39
+ dbgcat c
40
+ dbgcat a_err
41
+
42
+ t_begin "no errors from curl" && {
43
+ if grep -i Transfer-Encoding $a_err $b_err $c_err
44
+ then
45
+ die "Unexpected Transfer-Encoding: header"
46
+ fi
47
+ for i in $a_err $b_err $c_err
48
+ do
49
+ grep 'Connection: close' $i
50
+ done
51
+ }
52
+
53
+ dbgcat r_err
54
+ t_begin "no errors in stderr" && check_stderr
55
+
56
+ t_done
data/t/test_isolate.rb CHANGED
@@ -16,8 +16,9 @@ $stdout.reopen($stderr)
16
16
  lock = File.open(__FILE__, "rb")
17
17
  lock.flock(File::LOCK_EX)
18
18
  Isolate.now!(opts) do
19
- gem 'unicorn', '3.3.1'
19
+ gem 'unicorn', '3.4.0'
20
20
  gem 'kcar', '0.1.2'
21
+ gem 'raindrops', '0.4.1'
21
22
 
22
23
  if engine == "ruby"
23
24
  gem 'sendfile', '1.0.0' # next Rubinius should support this
@@ -31,8 +32,10 @@ Isolate.now!(opts) do
31
32
 
32
33
  if defined?(::Fiber) && engine == "ruby"
33
34
  gem 'revactor', '0.1.5'
34
- gem 'rack-fiber_pool', '0.9.0'
35
+ gem 'rack-fiber_pool', '0.9.1'
35
36
  end
37
+
38
+ gem 'sleepy_penguin', '1.4.0' if RUBY_PLATFORM =~ /linux/
36
39
  end
37
40
 
38
41
  $stdout.reopen(old_out)
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rainbows
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
6
- segments:
7
- - 3
8
- - 0
9
- - 0
10
- version: 3.0.0
4
+ prerelease:
5
+ version: 3.1.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Rainbows! hackers
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-01-12 00:00:00 +00:00
13
+ date: 2011-02-11 00:00:00 +00:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,10 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - ~>
28
23
  - !ruby/object:Gem::Version
29
- hash: 13
30
- segments:
31
- - 1
32
- - 1
33
24
  version: "1.1"
34
25
  type: :runtime
35
26
  version_requirements: *id001
@@ -41,11 +32,7 @@ dependencies:
41
32
  requirements:
42
33
  - - ~>
43
34
  - !ruby/object:Gem::Version
44
- hash: 1
45
- segments:
46
- - 3
47
- - 3
48
- version: "3.3"
35
+ version: "3.4"
49
36
  type: :runtime
50
37
  version_requirements: *id002
51
38
  - !ruby/object:Gem::Dependency
@@ -56,11 +43,6 @@ dependencies:
56
43
  requirements:
57
44
  - - ~>
58
45
  - !ruby/object:Gem::Version
59
- hash: 7
60
- segments:
61
- - 3
62
- - 0
63
- - 0
64
46
  version: 3.0.0
65
47
  type: :development
66
48
  version_requirements: *id003
@@ -72,11 +54,7 @@ dependencies:
72
54
  requirements:
73
55
  - - ~>
74
56
  - !ruby/object:Gem::Version
75
- hash: 13
76
- segments:
77
- - 1
78
- - 1
79
- version: "1.1"
57
+ version: "1.5"
80
58
  type: :development
81
59
  version_requirements: *id004
82
60
  description: |-
@@ -116,6 +94,11 @@ extra_rdoc_files:
116
94
  - lib/rainbows/coolio_thread_spawn.rb
117
95
  - lib/rainbows/coolio_thread_spawn/client.rb
118
96
  - lib/rainbows/dev_fd_response.rb
97
+ - lib/rainbows/epoll.rb
98
+ - lib/rainbows/epoll/client.rb
99
+ - lib/rainbows/epoll/response_chunk_pipe.rb
100
+ - lib/rainbows/epoll/response_pipe.rb
101
+ - lib/rainbows/epoll/server.rb
119
102
  - lib/rainbows/error.rb
120
103
  - lib/rainbows/ev_core.rb
121
104
  - lib/rainbows/ev_core/cap_input.rb
@@ -144,6 +127,7 @@ extra_rdoc_files:
144
127
  - lib/rainbows/http_parser.rb
145
128
  - lib/rainbows/http_response.rb
146
129
  - lib/rainbows/http_server.rb
130
+ - lib/rainbows/join_threads.rb
147
131
  - lib/rainbows/max_body.rb
148
132
  - lib/rainbows/max_body/rewindable_wrapper.rb
149
133
  - lib/rainbows/max_body/wrapper.rb
@@ -152,7 +136,6 @@ extra_rdoc_files:
152
136
  - lib/rainbows/never_block/event_machine.rb
153
137
  - lib/rainbows/process_client.rb
154
138
  - lib/rainbows/queue_pool.rb
155
- - lib/rainbows/rack_input.rb
156
139
  - lib/rainbows/response.rb
157
140
  - lib/rainbows/rev.rb
158
141
  - lib/rainbows/rev_fiber_spawn.rb
@@ -163,6 +146,12 @@ extra_rdoc_files:
163
146
  - lib/rainbows/revactor/client/methods.rb
164
147
  - lib/rainbows/revactor/client/tee_socket.rb
165
148
  - lib/rainbows/revactor/proxy.rb
149
+ - lib/rainbows/reverse_proxy.rb
150
+ - lib/rainbows/reverse_proxy/coolio.rb
151
+ - lib/rainbows/reverse_proxy/ev_client.rb
152
+ - lib/rainbows/reverse_proxy/event_machine.rb
153
+ - lib/rainbows/reverse_proxy/multi_thread.rb
154
+ - lib/rainbows/reverse_proxy/synchronous.rb
166
155
  - lib/rainbows/sendfile.rb
167
156
  - lib/rainbows/server_token.rb
168
157
  - lib/rainbows/socket_proxy.rb
@@ -176,6 +165,8 @@ extra_rdoc_files:
176
165
  - lib/rainbows/writer_thread_pool/client.rb
177
166
  - lib/rainbows/writer_thread_spawn.rb
178
167
  - lib/rainbows/writer_thread_spawn/client.rb
168
+ - lib/rainbows/xepoll.rb
169
+ - lib/rainbows/xepoll/client.rb
179
170
  - LATEST
180
171
  - LICENSE
181
172
  - NEWS
@@ -216,6 +207,7 @@ files:
216
207
  - TUNING
217
208
  - Test_Suite
218
209
  - bin/rainbows
210
+ - examples/reverse_proxy.ru
219
211
  - lib/rainbows.rb
220
212
  - lib/rainbows/actor_spawn.rb
221
213
  - lib/rainbows/app_pool.rb
@@ -240,6 +232,11 @@ files:
240
232
  - lib/rainbows/coolio_thread_spawn.rb
241
233
  - lib/rainbows/coolio_thread_spawn/client.rb
242
234
  - lib/rainbows/dev_fd_response.rb
235
+ - lib/rainbows/epoll.rb
236
+ - lib/rainbows/epoll/client.rb
237
+ - lib/rainbows/epoll/response_chunk_pipe.rb
238
+ - lib/rainbows/epoll/response_pipe.rb
239
+ - lib/rainbows/epoll/server.rb
243
240
  - lib/rainbows/error.rb
244
241
  - lib/rainbows/ev_core.rb
245
242
  - lib/rainbows/ev_core/cap_input.rb
@@ -268,6 +265,7 @@ files:
268
265
  - lib/rainbows/http_parser.rb
269
266
  - lib/rainbows/http_response.rb
270
267
  - lib/rainbows/http_server.rb
268
+ - lib/rainbows/join_threads.rb
271
269
  - lib/rainbows/max_body.rb
272
270
  - lib/rainbows/max_body/rewindable_wrapper.rb
273
271
  - lib/rainbows/max_body/wrapper.rb
@@ -276,7 +274,6 @@ files:
276
274
  - lib/rainbows/never_block/event_machine.rb
277
275
  - lib/rainbows/process_client.rb
278
276
  - lib/rainbows/queue_pool.rb
279
- - lib/rainbows/rack_input.rb
280
277
  - lib/rainbows/response.rb
281
278
  - lib/rainbows/rev.rb
282
279
  - lib/rainbows/rev_fiber_spawn.rb
@@ -287,6 +284,12 @@ files:
287
284
  - lib/rainbows/revactor/client/methods.rb
288
285
  - lib/rainbows/revactor/client/tee_socket.rb
289
286
  - lib/rainbows/revactor/proxy.rb
287
+ - lib/rainbows/reverse_proxy.rb
288
+ - lib/rainbows/reverse_proxy/coolio.rb
289
+ - lib/rainbows/reverse_proxy/ev_client.rb
290
+ - lib/rainbows/reverse_proxy/event_machine.rb
291
+ - lib/rainbows/reverse_proxy/multi_thread.rb
292
+ - lib/rainbows/reverse_proxy/synchronous.rb
290
293
  - lib/rainbows/sendfile.rb
291
294
  - lib/rainbows/server_token.rb
292
295
  - lib/rainbows/socket_proxy.rb
@@ -300,8 +303,11 @@ files:
300
303
  - lib/rainbows/writer_thread_pool/client.rb
301
304
  - lib/rainbows/writer_thread_spawn.rb
302
305
  - lib/rainbows/writer_thread_spawn/client.rb
306
+ - lib/rainbows/xepoll.rb
307
+ - lib/rainbows/xepoll/client.rb
303
308
  - local.mk.sample
304
309
  - man/man1/rainbows.1
310
+ - pkg.mk
305
311
  - rainbows.gemspec
306
312
  - setup.rb
307
313
  - t/.gitignore
@@ -345,6 +351,7 @@ files:
345
351
  - t/simple-http_CoolioFiberSpawn.ru
346
352
  - t/simple-http_CoolioThreadPool.ru
347
353
  - t/simple-http_CoolioThreadSpawn.ru
354
+ - t/simple-http_Epoll.ru
348
355
  - t/simple-http_EventMachine.ru
349
356
  - t/simple-http_FiberPool.ru
350
357
  - t/simple-http_FiberSpawn.ru
@@ -358,6 +365,7 @@ files:
358
365
  - t/simple-http_ThreadSpawn.ru
359
366
  - t/simple-http_WriterThreadPool.ru
360
367
  - t/simple-http_WriterThreadSpawn.ru
368
+ - t/simple-http_XEpoll.ru
361
369
  - t/sleep.ru
362
370
  - t/t0000-simple-http.sh
363
371
  - t/t0000.ru
@@ -395,6 +403,7 @@ files:
395
403
  - t/t0034-pipelined-pipe-response.sh
396
404
  - t/t0035-kgio-pipe-response.sh
397
405
  - t/t0040-keepalive_requests-setting.sh
406
+ - t/t0041-optional-pool-size.sh
398
407
  - t/t0050-response-body-close-has-env.sh
399
408
  - t/t0100-rack-input-hammer-chunked.sh
400
409
  - t/t0100-rack-input-hammer-content-length.sh
@@ -404,12 +413,14 @@ files:
404
413
  - t/t0104-rack-input-limit-tiny.sh
405
414
  - t/t0105-rack-input-limit-bigger.sh
406
415
  - t/t0106-rack-input-keepalive.sh
416
+ - t/t0107-rack-input-limit-zero.sh
407
417
  - t/t0113-rewindable-input-false.sh
408
418
  - t/t0113.ru
409
419
  - t/t0114-rewindable-input-true.sh
410
420
  - t/t0114.ru
411
421
  - t/t0200-async-response.sh
412
422
  - t/t0201-async-response-no-autochunk.sh
423
+ - t/t0202-async-response-one-oh.sh
413
424
  - t/t0300-async_sinatra.sh
414
425
  - t/t0400-em-async-app.sh
415
426
  - t/t0401-em-async-tailer.sh
@@ -444,7 +455,7 @@ rdoc_options:
444
455
  - -t
445
456
  - Rainbows! - Unicorn for sleepy apps and slow clients
446
457
  - -W
447
- - http://git.bogomips.org/cgit/rainbows.git/tree/%s
458
+ - http://bogomips.org/rainbows.git/tree/%s
448
459
  require_paths:
449
460
  - lib
450
461
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -452,23 +463,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
452
463
  requirements:
453
464
  - - ">="
454
465
  - !ruby/object:Gem::Version
455
- hash: 3
456
- segments:
457
- - 0
458
466
  version: "0"
459
467
  required_rubygems_version: !ruby/object:Gem::Requirement
460
468
  none: false
461
469
  requirements:
462
470
  - - ">="
463
471
  - !ruby/object:Gem::Version
464
- hash: 3
465
- segments:
466
- - 0
467
472
  version: "0"
468
473
  requirements: []
469
474
 
470
475
  rubyforge_project: rainbows
471
- rubygems_version: 1.3.7
476
+ rubygems_version: 1.5.0
472
477
  signing_key:
473
478
  specification_version: 3
474
479
  summary: "- Unicorn for sleepy apps and slow clients"