multi_io 0.0.1.pre2
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.
- checksums.yaml +7 -0
- data/lib/multi_io.rb +41 -0
- data/test/test_multi_io.rb +66 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a1a3510737a5cfd0f5efc1f46e50d7e06c180112fd3f481879a4f74916ebe8da
|
4
|
+
data.tar.gz: d0e0b3d66af568729b96ebdddc2af92a2a8c7006a17cebde7476f47208207818
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4456a35ee7540559a976563efe5b1d75c67d43703cff9dcd1615494868bdac33e8e64e8b021688a6e2acf564555cee21a2334183100bd73b89971d7b432595e8
|
7
|
+
data.tar.gz: 79c5d24ca0c6ac8f4c5e4c6a048d1aa6b9a70e8b8c68922232e4bc6fa2f46694ec4bf571ee60267277e242a4cad3f88c06082429aceab7fbe2d873fe56feab88
|
data/lib/multi_io.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# MultiIO aims to be an IO object that is the concatenation of other IO
|
2
|
+
# objects.
|
3
|
+
#
|
4
|
+
# This is useful, for example, when one wants to have an IO object that
|
5
|
+
# duplicates its writes to STDOUT, a file and maybe a socket too.
|
6
|
+
#
|
7
|
+
# NOTE: Not all methods from IO are implemented yet. Feel free to submit
|
8
|
+
# a patch if you need something that's missing.
|
9
|
+
class MultiIO
|
10
|
+
def initialize(*io)
|
11
|
+
@io = io
|
12
|
+
end
|
13
|
+
|
14
|
+
def close
|
15
|
+
@io.each { |io| io.close }
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def flush
|
20
|
+
@io.map { |io| io.flush }.first
|
21
|
+
end
|
22
|
+
|
23
|
+
def puts(*args)
|
24
|
+
@io.each { |io| io.puts(*args) }
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def read(*args)
|
29
|
+
@io.map { |io| io.read(*args) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def rewind
|
33
|
+
@io.each { |io| io.rewind }
|
34
|
+
0
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns the sum of the bytes written
|
38
|
+
def write(string)
|
39
|
+
@io.map { |io| io.write(string) }.inject(:+)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "multi_io"
|
3
|
+
require "tempfile"
|
4
|
+
require 'pry-byebug'
|
5
|
+
|
6
|
+
class MultiIOTest < Minitest::Test
|
7
|
+
def test_close
|
8
|
+
skip("TODO")
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_flush
|
12
|
+
skip("TODO")
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_puts
|
16
|
+
targets = ios
|
17
|
+
|
18
|
+
io = MultiIO.new(*targets.keys)
|
19
|
+
|
20
|
+
assert_nil io.puts("hi")
|
21
|
+
|
22
|
+
io.close
|
23
|
+
|
24
|
+
exp = "hi\n"
|
25
|
+
|
26
|
+
targets.each do |_, actualfn|
|
27
|
+
assert_equal exp, actualfn.call
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_read
|
32
|
+
skip("TODO")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_rewind
|
36
|
+
skip("TODO")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_write
|
40
|
+
targets = ios
|
41
|
+
|
42
|
+
io = MultiIO.new(*targets.keys)
|
43
|
+
|
44
|
+
assert_equal 2*targets.count, io.write("hi")
|
45
|
+
|
46
|
+
io.close
|
47
|
+
|
48
|
+
exp = "hi"
|
49
|
+
|
50
|
+
targets.each do |_, actualfn|
|
51
|
+
assert_equal exp, actualfn.call
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def ios
|
58
|
+
stringio = StringIO.new
|
59
|
+
file = Tempfile.create("multi_io_tmpfile", "test")
|
60
|
+
|
61
|
+
{
|
62
|
+
stringio => ->{ stringio.string },
|
63
|
+
file => ->{ File.read(file.path) },
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: multi_io
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.pre2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Agis Anastasopoulos
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-05-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.14'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry-byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description:
|
56
|
+
email: a@xz0.org
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/multi_io.rb
|
62
|
+
- test/test_multi_io.rb
|
63
|
+
homepage: https://github.com/agis/multi_io
|
64
|
+
licenses:
|
65
|
+
- MIT
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.3.1
|
81
|
+
requirements: []
|
82
|
+
rubygems_version: 3.1.2
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: An IO object that is the concatenation of other IO objects
|
86
|
+
test_files: []
|