iostreams 1.1.0 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +7 -7
- data/lib/io_streams/builder.rb +4 -3
- data/lib/io_streams/bzip2/reader.rb +1 -1
- data/lib/io_streams/bzip2/writer.rb +1 -1
- data/lib/io_streams/deprecated.rb +2 -3
- data/lib/io_streams/encode/reader.rb +5 -8
- data/lib/io_streams/encode/writer.rb +1 -1
- data/lib/io_streams/io_streams.rb +5 -2
- data/lib/io_streams/line/reader.rb +2 -1
- data/lib/io_streams/path.rb +4 -4
- data/lib/io_streams/paths/http.rb +8 -10
- data/lib/io_streams/paths/matcher.rb +10 -11
- data/lib/io_streams/paths/s3.rb +6 -6
- data/lib/io_streams/paths/sftp.rb +38 -23
- data/lib/io_streams/pgp.rb +45 -35
- data/lib/io_streams/pgp/reader.rb +4 -6
- data/lib/io_streams/pgp/writer.rb +1 -2
- data/lib/io_streams/reader.rb +2 -2
- data/lib/io_streams/record/writer.rb +2 -4
- data/lib/io_streams/row/writer.rb +3 -5
- data/lib/io_streams/stream.rb +6 -6
- data/lib/io_streams/symmetric_encryption/reader.rb +1 -3
- data/lib/io_streams/symmetric_encryption/writer.rb +2 -6
- data/lib/io_streams/tabular.rb +12 -10
- data/lib/io_streams/tabular/header.rb +4 -4
- data/lib/io_streams/tabular/parser/array.rb +2 -4
- data/lib/io_streams/tabular/parser/csv.rb +3 -5
- data/lib/io_streams/tabular/parser/fixed.rb +4 -3
- data/lib/io_streams/tabular/parser/hash.rb +2 -4
- data/lib/io_streams/tabular/parser/json.rb +2 -4
- data/lib/io_streams/tabular/parser/psv.rb +5 -7
- data/lib/io_streams/tabular/utility/csv_row.rb +9 -17
- data/lib/io_streams/utils.rb +3 -3
- data/lib/io_streams/utils/reliable_http.rb +98 -0
- data/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/writer.rb +1 -1
- data/lib/io_streams/xlsx/reader.rb +5 -5
- data/lib/io_streams/zip/reader.rb +1 -1
- data/lib/io_streams/zip/writer.rb +2 -2
- data/lib/iostreams.rb +34 -34
- data/test/builder_test.rb +74 -74
- data/test/bzip2_reader_test.rb +8 -13
- data/test/bzip2_writer_test.rb +8 -9
- data/test/deprecated_test.rb +25 -29
- data/test/encode_reader_test.rb +14 -18
- data/test/encode_writer_test.rb +29 -30
- data/test/gzip_reader_test.rb +8 -13
- data/test/gzip_writer_test.rb +10 -11
- data/test/io_streams_test.rb +35 -35
- data/test/line_reader_test.rb +35 -39
- data/test/line_writer_test.rb +8 -9
- data/test/minimal_file_reader.rb +1 -1
- data/test/path_test.rb +24 -24
- data/test/paths/file_test.rb +42 -42
- data/test/paths/http_test.rb +5 -5
- data/test/paths/matcher_test.rb +11 -12
- data/test/paths/s3_test.rb +44 -46
- data/test/paths/sftp_test.rb +18 -18
- data/test/pgp_reader_test.rb +13 -15
- data/test/pgp_test.rb +43 -44
- data/test/pgp_writer_test.rb +27 -28
- data/test/record_reader_test.rb +9 -10
- data/test/record_writer_test.rb +10 -11
- data/test/row_reader_test.rb +5 -6
- data/test/row_writer_test.rb +7 -8
- data/test/stream_test.rb +60 -62
- data/test/tabular_test.rb +111 -111
- data/test/test_helper.rb +22 -22
- data/test/utils_test.rb +7 -7
- data/test/xlsx_reader_test.rb +12 -12
- data/test/zip_reader_test.rb +14 -21
- data/test/zip_writer_test.rb +10 -10
- metadata +4 -3
data/test/record_reader_test.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
3
|
class RecordReaderTest < Minitest::Test
|
4
4
|
describe IOStreams::Record::Reader do
|
5
5
|
let :file_name do
|
6
|
-
File.join(File.dirname(__FILE__),
|
6
|
+
File.join(File.dirname(__FILE__), "files", "test.csv")
|
7
7
|
end
|
8
8
|
|
9
9
|
let :json_file_name do
|
10
|
-
File.join(File.dirname(__FILE__),
|
10
|
+
File.join(File.dirname(__FILE__), "files", "test.json")
|
11
11
|
end
|
12
12
|
|
13
13
|
let :csv_rows do
|
@@ -20,8 +20,8 @@ class RecordReaderTest < Minitest::Test
|
|
20
20
|
rows.collect { |row| header.zip(row).to_h }
|
21
21
|
end
|
22
22
|
|
23
|
-
describe
|
24
|
-
it
|
23
|
+
describe "#each" do
|
24
|
+
it "csv file" do
|
25
25
|
records = []
|
26
26
|
IOStreams::Record::Reader.file(file_name, cleanse_header: false) do |io|
|
27
27
|
io.each { |row| records << row }
|
@@ -29,7 +29,7 @@ class RecordReaderTest < Minitest::Test
|
|
29
29
|
assert_equal expected, records
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it "json file" do
|
33
33
|
records = []
|
34
34
|
IOStreams::Record::Reader.file(json_file_name, cleanse_header: false, format: :json) do |input|
|
35
35
|
input.each { |row| records << row }
|
@@ -37,7 +37,7 @@ class RecordReaderTest < Minitest::Test
|
|
37
37
|
assert_equal expected, records
|
38
38
|
end
|
39
39
|
|
40
|
-
it
|
40
|
+
it "stream" do
|
41
41
|
rows = []
|
42
42
|
IOStreams::Line::Reader.file(file_name) do |file|
|
43
43
|
IOStreams::Record::Reader.stream(file, cleanse_header: false) do |io|
|
@@ -48,14 +48,13 @@ class RecordReaderTest < Minitest::Test
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
describe
|
52
|
-
it
|
51
|
+
describe "#collect" do
|
52
|
+
it "json file" do
|
53
53
|
records = IOStreams::Record::Reader.file(json_file_name, format: :json) do |input|
|
54
54
|
input.collect { |record| record["state"] }
|
55
55
|
end
|
56
56
|
assert_equal expected.collect { |record| record["state"] }, records
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
60
59
|
end
|
61
60
|
end
|
data/test/record_writer_test.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
require_relative
|
2
|
-
require
|
1
|
+
require_relative "test_helper"
|
2
|
+
require "csv"
|
3
3
|
|
4
4
|
class RecordWriterTest < Minitest::Test
|
5
5
|
describe IOStreams::Record::Writer do
|
6
6
|
let :csv_file_name do
|
7
|
-
File.join(File.dirname(__FILE__),
|
7
|
+
File.join(File.dirname(__FILE__), "files", "test.csv")
|
8
8
|
end
|
9
9
|
|
10
10
|
let :json_file_name do
|
11
|
-
File.join(File.dirname(__FILE__),
|
11
|
+
File.join(File.dirname(__FILE__), "files", "test.json")
|
12
12
|
end
|
13
13
|
|
14
14
|
let :raw_csv_data do
|
@@ -30,7 +30,7 @@ class RecordWriterTest < Minitest::Test
|
|
30
30
|
end
|
31
31
|
|
32
32
|
let :temp_file do
|
33
|
-
Tempfile.new(
|
33
|
+
Tempfile.new("iostreams")
|
34
34
|
end
|
35
35
|
|
36
36
|
let :file_name do
|
@@ -41,8 +41,8 @@ class RecordWriterTest < Minitest::Test
|
|
41
41
|
temp_file.delete
|
42
42
|
end
|
43
43
|
|
44
|
-
describe
|
45
|
-
it
|
44
|
+
describe "#<<" do
|
45
|
+
it "file" do
|
46
46
|
IOStreams::Record::Writer.file(file_name) do |io|
|
47
47
|
inputs.each { |hash| io << hash }
|
48
48
|
end
|
@@ -50,15 +50,15 @@ class RecordWriterTest < Minitest::Test
|
|
50
50
|
assert_equal raw_csv_data, result
|
51
51
|
end
|
52
52
|
|
53
|
-
it
|
54
|
-
IOStreams::Record::Writer.file(file_name, file_name:
|
53
|
+
it "json file" do
|
54
|
+
IOStreams::Record::Writer.file(file_name, file_name: "abc.json") do |io|
|
55
55
|
inputs.each { |hash| io << hash }
|
56
56
|
end
|
57
57
|
result = File.read(file_name)
|
58
58
|
assert_equal raw_json_data, result
|
59
59
|
end
|
60
60
|
|
61
|
-
it
|
61
|
+
it "stream" do
|
62
62
|
io_string = StringIO.new
|
63
63
|
IOStreams::Line::Writer.stream(io_string) do |io|
|
64
64
|
IOStreams::Record::Writer.stream(io) do |stream|
|
@@ -68,6 +68,5 @@ class RecordWriterTest < Minitest::Test
|
|
68
68
|
assert_equal raw_csv_data, io_string.string
|
69
69
|
end
|
70
70
|
end
|
71
|
-
|
72
71
|
end
|
73
72
|
end
|
data/test/row_reader_test.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
3
|
class RowReaderTest < Minitest::Test
|
4
4
|
describe IOStreams::Row::Reader do
|
5
5
|
let :file_name do
|
6
|
-
File.join(File.dirname(__FILE__),
|
6
|
+
File.join(File.dirname(__FILE__), "files", "test.csv")
|
7
7
|
end
|
8
8
|
|
9
9
|
let :expected do
|
10
10
|
CSV.read(file_name)
|
11
11
|
end
|
12
12
|
|
13
|
-
describe
|
14
|
-
it
|
13
|
+
describe ".open" do
|
14
|
+
it "file" do
|
15
15
|
rows = []
|
16
16
|
count = IOStreams::Row::Reader.file(file_name) do |io|
|
17
17
|
io.each { |row| rows << row }
|
@@ -20,7 +20,7 @@ class RowReaderTest < Minitest::Test
|
|
20
20
|
assert_equal expected.size, count
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it "stream" do
|
24
24
|
rows = []
|
25
25
|
count = IOStreams::Line::Reader.file(file_name) do |file|
|
26
26
|
IOStreams::Row::Reader.stream(file) do |io|
|
@@ -31,6 +31,5 @@ class RowReaderTest < Minitest::Test
|
|
31
31
|
assert_equal expected.size, count
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
35
34
|
end
|
36
35
|
end
|
data/test/row_writer_test.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require_relative
|
2
|
-
require
|
1
|
+
require_relative "test_helper"
|
2
|
+
require "csv"
|
3
3
|
|
4
4
|
class RowWriterTest < Minitest::Test
|
5
5
|
describe IOStreams::Row::Writer do
|
6
6
|
let :csv_file_name do
|
7
|
-
File.join(File.dirname(__FILE__),
|
7
|
+
File.join(File.dirname(__FILE__), "files", "test.csv")
|
8
8
|
end
|
9
9
|
|
10
10
|
let :raw_csv_data do
|
@@ -16,7 +16,7 @@ class RowWriterTest < Minitest::Test
|
|
16
16
|
end
|
17
17
|
|
18
18
|
let :temp_file do
|
19
|
-
Tempfile.new(
|
19
|
+
Tempfile.new("iostreams")
|
20
20
|
end
|
21
21
|
|
22
22
|
let :file_name do
|
@@ -27,8 +27,8 @@ class RowWriterTest < Minitest::Test
|
|
27
27
|
temp_file.delete
|
28
28
|
end
|
29
29
|
|
30
|
-
describe
|
31
|
-
it
|
30
|
+
describe ".stream" do
|
31
|
+
it "file" do
|
32
32
|
IOStreams::Row::Writer.file(file_name) do |io|
|
33
33
|
csv_rows.each { |array| io << array }
|
34
34
|
end
|
@@ -36,7 +36,7 @@ class RowWriterTest < Minitest::Test
|
|
36
36
|
assert_equal raw_csv_data, result
|
37
37
|
end
|
38
38
|
|
39
|
-
it
|
39
|
+
it "streams" do
|
40
40
|
io_string = StringIO.new
|
41
41
|
IOStreams::Line::Writer.stream(io_string) do |io|
|
42
42
|
IOStreams::Row::Writer.stream(io) do |stream|
|
@@ -46,6 +46,5 @@ class RowWriterTest < Minitest::Test
|
|
46
46
|
assert_equal raw_csv_data, io_string.string
|
47
47
|
end
|
48
48
|
end
|
49
|
-
|
50
49
|
end
|
51
50
|
end
|
data/test/stream_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
3
|
class StreamTest < Minitest::Test
|
4
4
|
describe IOStreams::Stream do
|
5
5
|
let :source_file_name do
|
6
|
-
File.join(__dir__,
|
6
|
+
File.join(__dir__, "files", "text.txt")
|
7
7
|
end
|
8
8
|
|
9
9
|
let :data do
|
@@ -13,66 +13,66 @@ class StreamTest < Minitest::Test
|
|
13
13
|
let :bad_data do
|
14
14
|
[
|
15
15
|
"New M\xE9xico,NE".b,
|
16
|
-
|
16
|
+
"good line",
|
17
17
|
"New M\xE9xico,\x07SF".b
|
18
|
-
].join("\n").encode(
|
18
|
+
].join("\n").encode("BINARY")
|
19
19
|
end
|
20
20
|
|
21
21
|
let :stripped_data do
|
22
|
-
bad_data.gsub("\xE9".b,
|
22
|
+
bad_data.gsub("\xE9".b, "").gsub("\x07", "")
|
23
23
|
end
|
24
24
|
|
25
25
|
let :multiple_zip_file_name do
|
26
|
-
File.join(File.dirname(__FILE__),
|
26
|
+
File.join(File.dirname(__FILE__), "files", "multiple_files.zip")
|
27
27
|
end
|
28
28
|
|
29
29
|
let :zip_gz_file_name do
|
30
|
-
File.join(File.dirname(__FILE__),
|
30
|
+
File.join(File.dirname(__FILE__), "files", "text.zip.gz")
|
31
31
|
end
|
32
32
|
|
33
33
|
let :contents_test_txt do
|
34
|
-
File.read(File.join(File.dirname(__FILE__),
|
34
|
+
File.read(File.join(File.dirname(__FILE__), "files", "text.txt"))
|
35
35
|
end
|
36
36
|
|
37
37
|
let :contents_test_json do
|
38
|
-
File.read(File.join(File.dirname(__FILE__),
|
38
|
+
File.read(File.join(File.dirname(__FILE__), "files", "test.json"))
|
39
39
|
end
|
40
40
|
|
41
41
|
let(:string_io) { StringIO.new(data) }
|
42
42
|
let(:stream) { IOStreams::Stream.new(string_io) }
|
43
43
|
|
44
|
-
describe
|
45
|
-
it
|
46
|
-
File.open(multiple_zip_file_name,
|
44
|
+
describe ".reader" do
|
45
|
+
it "reads a zip file" do
|
46
|
+
File.open(multiple_zip_file_name, "rb") do |io|
|
47
47
|
result = IOStreams::Stream.new(io).
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
file_name(multiple_zip_file_name).
|
49
|
+
option(:zip, entry_file_name: "test.json").
|
50
|
+
read
|
51
51
|
assert_equal contents_test_json, result
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
it
|
56
|
-
File.open(zip_gz_file_name,
|
55
|
+
it "reads a zip file from within a gz file" do
|
56
|
+
File.open(zip_gz_file_name, "rb") do |io|
|
57
57
|
result = IOStreams::Stream.new(io).
|
58
|
-
|
59
|
-
|
58
|
+
file_name(zip_gz_file_name).
|
59
|
+
read
|
60
60
|
assert_equal contents_test_txt, result
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe
|
65
|
+
describe ".line_reader" do
|
66
66
|
end
|
67
67
|
|
68
|
-
describe
|
68
|
+
describe ".row_reader" do
|
69
69
|
end
|
70
70
|
|
71
|
-
describe
|
71
|
+
describe ".record_reader" do
|
72
72
|
end
|
73
73
|
|
74
|
-
describe
|
75
|
-
it
|
74
|
+
describe ".each_line" do
|
75
|
+
it "returns a line at a time" do
|
76
76
|
lines = []
|
77
77
|
stream.stream(:none)
|
78
78
|
count = stream.each(:line) { |line| lines << line }
|
@@ -80,26 +80,26 @@ class StreamTest < Minitest::Test
|
|
80
80
|
assert_equal data.lines.count, count
|
81
81
|
end
|
82
82
|
|
83
|
-
it
|
83
|
+
it "strips non-printable characters" do
|
84
84
|
input = StringIO.new(bad_data)
|
85
85
|
lines = []
|
86
86
|
stream = IOStreams::Stream.new(input)
|
87
|
-
stream.stream(:encode, encoding:
|
87
|
+
stream.stream(:encode, encoding: "UTF-8", cleaner: :printable, replace: "")
|
88
88
|
count = stream.each(:line) { |line| lines << line }
|
89
89
|
assert_equal stripped_data.lines.map(&:strip), lines
|
90
90
|
assert_equal stripped_data.lines.count, count
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
describe
|
94
|
+
describe ".each row" do
|
95
95
|
end
|
96
96
|
|
97
|
-
describe
|
97
|
+
describe ".each record" do
|
98
98
|
end
|
99
99
|
|
100
|
-
describe
|
100
|
+
describe "#writer" do
|
101
101
|
describe "#write" do
|
102
|
-
it
|
102
|
+
it "one block" do
|
103
103
|
io = StringIO.new
|
104
104
|
IOStreams::Stream.new(io).writer do |stream|
|
105
105
|
stream.write("Hello World")
|
@@ -107,7 +107,7 @@ class StreamTest < Minitest::Test
|
|
107
107
|
assert_equal "Hello World", io.string
|
108
108
|
end
|
109
109
|
|
110
|
-
it
|
110
|
+
it "multiple blocks" do
|
111
111
|
io = StringIO.new
|
112
112
|
IOStreams::Stream.new(io).writer do |stream|
|
113
113
|
stream.write("He")
|
@@ -118,7 +118,7 @@ class StreamTest < Minitest::Test
|
|
118
118
|
assert_equal "Hello World", io.string
|
119
119
|
end
|
120
120
|
|
121
|
-
it
|
121
|
+
it "empty blocks" do
|
122
122
|
io = StringIO.new
|
123
123
|
IOStreams::Stream.new(io).writer do |stream|
|
124
124
|
stream.write("")
|
@@ -133,7 +133,7 @@ class StreamTest < Minitest::Test
|
|
133
133
|
assert_equal "Hello World", io.string
|
134
134
|
end
|
135
135
|
|
136
|
-
it
|
136
|
+
it "nil blocks" do
|
137
137
|
io = StringIO.new
|
138
138
|
IOStreams::Stream.new(io).writer do |stream|
|
139
139
|
stream.write(nil)
|
@@ -150,7 +150,7 @@ class StreamTest < Minitest::Test
|
|
150
150
|
end
|
151
151
|
|
152
152
|
describe "#<<" do
|
153
|
-
it
|
153
|
+
it "one block" do
|
154
154
|
io = StringIO.new
|
155
155
|
IOStreams::Stream.new(io).writer do |stream|
|
156
156
|
stream << "Hello World"
|
@@ -158,7 +158,7 @@ class StreamTest < Minitest::Test
|
|
158
158
|
assert_equal "Hello World", io.string
|
159
159
|
end
|
160
160
|
|
161
|
-
it
|
161
|
+
it "multiple blocks" do
|
162
162
|
io = StringIO.new
|
163
163
|
IOStreams::Stream.new(io).writer do |stream|
|
164
164
|
stream << "He"
|
@@ -167,7 +167,7 @@ class StreamTest < Minitest::Test
|
|
167
167
|
assert_equal "Hello World", io.string
|
168
168
|
end
|
169
169
|
|
170
|
-
it
|
170
|
+
it "empty blocks" do
|
171
171
|
io = StringIO.new
|
172
172
|
IOStreams::Stream.new(io).writer do |stream|
|
173
173
|
stream << ""
|
@@ -178,7 +178,7 @@ class StreamTest < Minitest::Test
|
|
178
178
|
assert_equal "Hello World", io.string
|
179
179
|
end
|
180
180
|
|
181
|
-
it
|
181
|
+
it "nil blocks" do
|
182
182
|
io = StringIO.new
|
183
183
|
IOStreams::Stream.new(io).writer do |stream|
|
184
184
|
stream << nil
|
@@ -191,9 +191,9 @@ class StreamTest < Minitest::Test
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
describe
|
194
|
+
describe "#writer(:line)" do
|
195
195
|
describe "#write" do
|
196
|
-
it
|
196
|
+
it "one block" do
|
197
197
|
io = StringIO.new
|
198
198
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
199
199
|
stream.write("Hello World")
|
@@ -201,7 +201,7 @@ class StreamTest < Minitest::Test
|
|
201
201
|
assert_equal "Hello World\n", io.string
|
202
202
|
end
|
203
203
|
|
204
|
-
it
|
204
|
+
it "multiple blocks" do
|
205
205
|
io = StringIO.new
|
206
206
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
207
207
|
stream.write("He")
|
@@ -212,7 +212,7 @@ class StreamTest < Minitest::Test
|
|
212
212
|
assert_equal "He\nl\nlo \nWorld\n", io.string
|
213
213
|
end
|
214
214
|
|
215
|
-
it
|
215
|
+
it "empty blocks" do
|
216
216
|
io = StringIO.new
|
217
217
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
218
218
|
stream.write("")
|
@@ -227,7 +227,7 @@ class StreamTest < Minitest::Test
|
|
227
227
|
assert_equal "\nHe\n\nl\n\nlo \nWorld\n\n", io.string, io.string.inspect
|
228
228
|
end
|
229
229
|
|
230
|
-
it
|
230
|
+
it "nil blocks" do
|
231
231
|
io = StringIO.new
|
232
232
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
233
233
|
stream.write(nil)
|
@@ -244,7 +244,7 @@ class StreamTest < Minitest::Test
|
|
244
244
|
end
|
245
245
|
|
246
246
|
describe "#<<" do
|
247
|
-
it
|
247
|
+
it "one block" do
|
248
248
|
io = StringIO.new
|
249
249
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
250
250
|
stream << "Hello World"
|
@@ -252,7 +252,7 @@ class StreamTest < Minitest::Test
|
|
252
252
|
assert_equal "Hello World\n", io.string
|
253
253
|
end
|
254
254
|
|
255
|
-
it
|
255
|
+
it "multiple blocks" do
|
256
256
|
io = StringIO.new
|
257
257
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
258
258
|
stream << "He"
|
@@ -261,7 +261,7 @@ class StreamTest < Minitest::Test
|
|
261
261
|
assert_equal "He\nl\nlo \nWorld\n", io.string
|
262
262
|
end
|
263
263
|
|
264
|
-
it
|
264
|
+
it "empty blocks" do
|
265
265
|
io = StringIO.new
|
266
266
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
267
267
|
stream << ""
|
@@ -272,7 +272,7 @@ class StreamTest < Minitest::Test
|
|
272
272
|
assert_equal "\nHe\n\nl\n\nlo \nWorld\n\n", io.string
|
273
273
|
end
|
274
274
|
|
275
|
-
it
|
275
|
+
it "nil blocks" do
|
276
276
|
io = StringIO.new
|
277
277
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
278
278
|
stream << nil
|
@@ -285,7 +285,7 @@ class StreamTest < Minitest::Test
|
|
285
285
|
end
|
286
286
|
|
287
287
|
describe "line writers within line writers" do
|
288
|
-
it
|
288
|
+
it "uses existing line writer" do
|
289
289
|
io = StringIO.new
|
290
290
|
IOStreams::Stream.new(io).writer(:line) do |stream|
|
291
291
|
stream.write("Before")
|
@@ -300,9 +300,9 @@ class StreamTest < Minitest::Test
|
|
300
300
|
end
|
301
301
|
end
|
302
302
|
|
303
|
-
describe
|
303
|
+
describe "#writer(:array)" do
|
304
304
|
describe "#write" do
|
305
|
-
it
|
305
|
+
it "one block" do
|
306
306
|
io = StringIO.new
|
307
307
|
IOStreams::Stream.new(io).writer(:array) do |stream|
|
308
308
|
stream << %w[Hello World]
|
@@ -310,7 +310,7 @@ class StreamTest < Minitest::Test
|
|
310
310
|
assert_equal "Hello,World\n", io.string
|
311
311
|
end
|
312
312
|
|
313
|
-
it
|
313
|
+
it "multiple blocks" do
|
314
314
|
io = StringIO.new
|
315
315
|
IOStreams::Stream.new(io).writer(:array) do |stream|
|
316
316
|
stream << %w[He]
|
@@ -321,7 +321,7 @@ class StreamTest < Minitest::Test
|
|
321
321
|
assert_equal "He\nl,lo ,World\nHe,\"\",l,\"\"\nlo ,World\n", io.string, io.string.inspect
|
322
322
|
end
|
323
323
|
|
324
|
-
it
|
324
|
+
it "empty blocks" do
|
325
325
|
# skip "TODO"
|
326
326
|
io = StringIO.new
|
327
327
|
IOStreams::Stream.new(io).writer(:array) do |stream|
|
@@ -335,7 +335,7 @@ class StreamTest < Minitest::Test
|
|
335
335
|
assert_equal "He\n\nl,lo ,World\nHe,\"\",l,\"\"\nlo ,World\n\n", io.string, io.string.inspect
|
336
336
|
end
|
337
337
|
|
338
|
-
it
|
338
|
+
it "nil values" do
|
339
339
|
io = StringIO.new
|
340
340
|
IOStreams::Stream.new(io).writer(:array) do |stream|
|
341
341
|
stream << %w[He]
|
@@ -346,7 +346,7 @@ class StreamTest < Minitest::Test
|
|
346
346
|
assert_equal "He\nl,lo ,World\nHe,,l,\nlo ,World\n", io.string, io.string.inspect
|
347
347
|
end
|
348
348
|
|
349
|
-
it
|
349
|
+
it "empty leading array" do
|
350
350
|
skip "TODO"
|
351
351
|
io = StringIO.new
|
352
352
|
IOStreams::Stream.new(io).writer(:array) do |stream|
|
@@ -362,26 +362,26 @@ class StreamTest < Minitest::Test
|
|
362
362
|
end
|
363
363
|
end
|
364
364
|
|
365
|
-
describe
|
365
|
+
describe "#writer(:hash)" do
|
366
366
|
describe "#write" do
|
367
|
-
it
|
367
|
+
it "one block" do
|
368
368
|
io = StringIO.new
|
369
369
|
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
370
370
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
371
371
|
end
|
372
|
-
assert_equal
|
372
|
+
assert_equal "first_name,last_name\nJack,Johnson\n", io.string, io.string.inspect
|
373
373
|
end
|
374
374
|
|
375
|
-
it
|
375
|
+
it "multiple blocks" do
|
376
376
|
io = StringIO.new
|
377
377
|
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
378
378
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
379
379
|
stream << {first_name: "Able", last_name: "Smith"}
|
380
380
|
end
|
381
|
-
assert_equal
|
381
|
+
assert_equal "first_name,last_name\nJack,Johnson\nAble,Smith\n", io.string, io.string.inspect
|
382
382
|
end
|
383
383
|
|
384
|
-
it
|
384
|
+
it "empty hashes" do
|
385
385
|
io = StringIO.new
|
386
386
|
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
387
387
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
@@ -391,7 +391,7 @@ class StreamTest < Minitest::Test
|
|
391
391
|
assert_equal "first_name,last_name\nJack,Johnson\n\n{:first_name=>\"Able\", :last_name=>\"Smith\"}\n\n", io.string, io.string.inspect
|
392
392
|
end
|
393
393
|
|
394
|
-
it
|
394
|
+
it "nil values" do
|
395
395
|
skip "TODO"
|
396
396
|
io = StringIO.new
|
397
397
|
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
@@ -402,9 +402,7 @@ class StreamTest < Minitest::Test
|
|
402
402
|
end
|
403
403
|
assert_equal "first_name,last_name\nJack,Johnson\n\n{:first_name=>\"Able\", :last_name=>\"Smith\"}\n\n", io.string, io.string.inspect
|
404
404
|
end
|
405
|
-
|
406
405
|
end
|
407
406
|
end
|
408
|
-
|
409
407
|
end
|
410
408
|
end
|