kcar 0.3.0 → 0.3.1
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/GIT-VERSION-GEN +1 -1
- data/lib/kcar/response.rb +4 -10
- data/test/test_response.rb +27 -2
- metadata +5 -5
data/GIT-VERSION-GEN
CHANGED
data/lib/kcar/response.rb
CHANGED
@@ -63,21 +63,14 @@ class Kcar::Response
|
|
63
63
|
# body. It may only be called once (usually by a Rack server) as it streams
|
64
64
|
# the response body off the our socket object.
|
65
65
|
def each
|
66
|
-
if @parser.body_eof?
|
67
|
-
return
|
68
|
-
end
|
66
|
+
return if @parser.body_eof?
|
69
67
|
if @unchunk
|
70
68
|
@parser.chunked? ? each_unchunk { |x| yield x } :
|
71
69
|
each_identity { |x| yield x }
|
72
70
|
else
|
73
|
-
|
74
|
-
|
75
|
-
each_identity { |x| yield x }
|
76
|
-
else
|
77
|
-
each_until_eof { |x| yield x } # fastest path
|
78
|
-
end
|
71
|
+
@parser.chunked? ? each_rechunk { |x| yield x } :
|
72
|
+
each_identity { |x| yield x }
|
79
73
|
end
|
80
|
-
rescue EOFError
|
81
74
|
end
|
82
75
|
|
83
76
|
# :stopdoc:
|
@@ -123,6 +116,7 @@ class Kcar::Response
|
|
123
116
|
begin
|
124
117
|
yield dst
|
125
118
|
end while @sock.readpartial(READ_SIZE, dst)
|
119
|
+
rescue EOFError
|
126
120
|
end
|
127
121
|
|
128
122
|
def each_identity
|
data/test/test_response.rb
CHANGED
@@ -485,7 +485,7 @@ class TestSession < Test::Unit::TestCase
|
|
485
485
|
assert ! @c.closed?
|
486
486
|
end
|
487
487
|
|
488
|
-
def
|
488
|
+
def test_rack_preserve_chunk_no_keepalive
|
489
489
|
pid = fork do
|
490
490
|
@s << "HTTP/1.1 200 OK\r\n"
|
491
491
|
@s << "Connection: close\r\n"
|
@@ -501,11 +501,36 @@ class TestSession < Test::Unit::TestCase
|
|
501
501
|
tmp = []
|
502
502
|
assert ! body.parser.keepalive?
|
503
503
|
assert_nothing_raised { body.each { |chunk| tmp << chunk.dup } }
|
504
|
-
assert_equal
|
504
|
+
assert_equal "5\r\nhello\r\n0\r\nFoo: bar\r\n\r\n", tmp.join
|
505
505
|
_, status = Process.waitpid2(pid)
|
506
506
|
assert status.success?
|
507
507
|
body.close
|
508
508
|
assert @c.closed?
|
509
509
|
end
|
510
510
|
|
511
|
+
def test_rack_preserve_chunk_no_keepalive
|
512
|
+
s = "HTTP/1.1 200 OK\r\n"
|
513
|
+
s << "Connection: close\r\n"
|
514
|
+
s << "Content-Length: 666\r\n"
|
515
|
+
s << "\r\n"
|
516
|
+
s << "hello"
|
517
|
+
@s.write(s)
|
518
|
+
@response = Kcar::Response.new(@c, [])
|
519
|
+
status, headers, body = @response.rack
|
520
|
+
assert_kind_of Array, headers
|
521
|
+
assert_equal status, "200 OK"
|
522
|
+
tmp = []
|
523
|
+
assert ! body.parser.keepalive?
|
524
|
+
|
525
|
+
closer = Thread.new do
|
526
|
+
Thread.pass until tmp[0]
|
527
|
+
@s.close
|
528
|
+
end
|
529
|
+
assert_raises(EOFError) {
|
530
|
+
body.each { |chunk| tmp << chunk.dup }
|
531
|
+
}
|
532
|
+
assert_nil @c.close
|
533
|
+
assert_equal "hello", tmp[0]
|
534
|
+
assert_nil closer.value
|
535
|
+
end
|
511
536
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kcar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- kcar hackers
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-09-26 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: wrongdoc
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements: []
|
115
115
|
|
116
116
|
rubyforge_project: rainbows
|
117
|
-
rubygems_version: 1.8.
|
117
|
+
rubygems_version: 1.8.24
|
118
118
|
signing_key:
|
119
119
|
specification_version: 3
|
120
120
|
summary: bytestream to Rack response converter
|