io_splice 4.0.0 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/GIT-VERSION-GEN CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v4.0.0.GIT
4
+ DEF_VER=v4.1.0.GIT
5
5
 
6
6
  LF='
7
7
  '
data/io_splice.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.rubyforge_project = %q{qrp}
22
22
  s.test_files = Dir['test/test_*.rb']
23
23
  s.add_development_dependency('wrongdoc', '~> 1.5')
24
+ s.add_development_dependency('rack', '~> 1.2')
24
25
 
25
26
  # s.licenses = %w(LGPL) # accessor not compatible with older RubyGems
26
27
  end
data/lib/io/splice.rb CHANGED
@@ -25,6 +25,11 @@ module IO::Splice
25
25
  n
26
26
  end
27
27
 
28
+ def self.need_open?(obj) # :nodoc:
29
+ return false if obj.respond_to?(:to_io)
30
+ obj.respond_to?(:to_path) || obj.kind_of?(String)
31
+ end
32
+
28
33
  # copies the contents of the IO object given by +src+ to +dst+
29
34
  # If +len+ is specified, then only +len+ bytes are copied and
30
35
  # +EOFError+ is raised if fewer than +len+ bytes could be copied.
@@ -36,10 +41,10 @@ module IO::Splice
36
41
  # objects with no underlying file descriptor (e.g. StringIO).
37
42
  def self.copy_stream(src, dst, len = nil, src_offset = nil)
38
43
  close = []
39
- src.kind_of?(String) and close << (src = File.open(src))
40
- dst.kind_of?(String) and close << (dst = File.open(dst, "w"))
41
- src, dst = src.to_io, dst.to_io
44
+ need_open?(src) and close << (src = File.open(src))
45
+ need_open?(dst) and close << (dst = File.open(dst, "w"))
42
46
  rv = len
47
+ src, dst = src.to_io, dst.to_io
43
48
 
44
49
  if src.stat.pipe? || dst.stat.pipe?
45
50
  if len
@@ -0,0 +1,31 @@
1
+ # -*- encoding: binary -*-
2
+ require "rack"
3
+ require "test/unit"
4
+ require "socket"
5
+ require "io/splice"
6
+
7
+ class TestRackFileCompat < Test::Unit::TestCase
8
+ def setup
9
+ @app = Rack::File.new(File.dirname(__FILE__))
10
+ @req = Rack::MockRequest.new(@app)
11
+ @base_file = File.basename(__FILE__)
12
+ @r, @w = UNIXSocket.pair
13
+ end
14
+
15
+ def teardown
16
+ [ @r, @w ].each { |io| io.closed? or io.close }
17
+ end
18
+
19
+ def test_get_rack_file
20
+ env = Rack::MockRequest.env_for "http://example.com/#@base_file"
21
+ status, headers, body = @app.call(env)
22
+ assert_equal 200, status.to_i
23
+ headers.each { |k,v|
24
+ assert_instance_of String, k.to_str
25
+ assert_instance_of String, v.to_str
26
+ }
27
+ thr = Thread.new { @r.read(File.size(__FILE__)) }
28
+ assert_equal File.size(__FILE__), IO::Splice.copy_stream(body, @w)
29
+ assert_equal File.read(__FILE__), thr.value
30
+ end
31
+ end if IO.respond_to?(:copy_stream)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io_splice
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 4
8
+ - 1
8
9
  - 0
9
- - 0
10
- version: 4.0.0
10
+ version: 4.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ruby io_splice hackers
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-13 00:00:00 Z
18
+ date: 2011-05-16 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: wrongdoc
@@ -32,6 +32,21 @@ dependencies:
32
32
  version: "1.5"
33
33
  type: :development
34
34
  version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rack
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 11
44
+ segments:
45
+ - 1
46
+ - 2
47
+ version: "1.2"
48
+ type: :development
49
+ version_requirements: *id002
35
50
  description: |-
36
51
  The splice family of Linux system calls can transfer data between file
37
52
  descriptors without the need to copy data into userspace. Instead of a
@@ -80,6 +95,7 @@ files:
80
95
  - test/test_io_splice.rb
81
96
  - test/test_io_splice_eintr.rb
82
97
  - test/test_io_splice_in_full.rb
98
+ - test/test_rack_file_compat.rb
83
99
  homepage: http://bogomips.org/ruby_io_splice/
84
100
  licenses: []
85
101
 
@@ -112,11 +128,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
128
  requirements: []
113
129
 
114
130
  rubyforge_project: qrp
115
- rubygems_version: 1.8.1
131
+ rubygems_version: 1.8.2
116
132
  signing_key:
117
133
  specification_version: 3
118
134
  summary: zero-copy pipe I/O for Linux and Ruby
119
135
  test_files:
136
+ - test/test_rack_file_compat.rb
120
137
  - test/test_io_splice_in_full.rb
121
138
  - test/test_io_splice.rb
122
139
  - test/test_copy_stream.rb