iostreams 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|