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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/multi_io.rb +41 -0
  3. data/test/test_multi_io.rb +66 -0
  4. metadata +86 -0
@@ -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
@@ -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: []