iostreams 1.11.0 → 2.0.0
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 +20 -2
- data/Rakefile +7 -0
- data/lib/io_streams/builder.rb +9 -9
- data/lib/io_streams/bzip2/writer.rb +1 -1
- data/lib/io_streams/encode/reader.rb +2 -2
- data/lib/io_streams/encode/writer.rb +5 -5
- data/lib/io_streams/gzip/reader.rb +1 -1
- data/lib/io_streams/gzip/writer.rb +1 -1
- data/lib/io_streams/io_streams.rb +45 -19
- data/lib/io_streams/line/reader.rb +2 -2
- data/lib/io_streams/line/writer.rb +1 -1
- data/lib/io_streams/path.rb +2 -2
- data/lib/io_streams/paths/file.rb +10 -10
- data/lib/io_streams/paths/http.rb +80 -7
- data/lib/io_streams/paths/matcher.rb +3 -3
- data/lib/io_streams/paths/s3.rb +3 -3
- data/lib/io_streams/paths/sftp.rb +7 -8
- data/lib/io_streams/pgp/reader.rb +23 -10
- data/lib/io_streams/pgp/writer.rb +93 -32
- data/lib/io_streams/pgp.rb +188 -60
- data/lib/io_streams/reader.rb +4 -4
- data/lib/io_streams/record/reader.rb +3 -4
- data/lib/io_streams/record/writer.rb +3 -4
- data/lib/io_streams/row/reader.rb +1 -1
- data/lib/io_streams/row/writer.rb +1 -1
- data/lib/io_streams/stream.rb +36 -30
- data/lib/io_streams/symmetric_encryption/reader.rb +2 -2
- data/lib/io_streams/symmetric_encryption/writer.rb +4 -4
- data/lib/io_streams/tabular/header.rb +18 -6
- data/lib/io_streams/tabular/parser/array.rb +0 -10
- data/lib/io_streams/tabular/parser/csv.rb +6 -38
- data/lib/io_streams/tabular/parser/fixed.rb +5 -5
- data/lib/io_streams/tabular/parser/psv.rb +0 -12
- data/lib/io_streams/tabular.rb +5 -10
- data/lib/io_streams/utils.rb +3 -2
- data/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/writer.rb +6 -6
- data/lib/io_streams/xlsx/reader.rb +1 -1
- data/lib/io_streams/zip/writer.rb +22 -10
- data/lib/iostreams.rb +0 -1
- metadata +28 -111
- data/lib/io_streams/deprecated.rb +0 -216
- data/lib/io_streams/tabular/utility/csv_row.rb +0 -105
- data/test/builder_test.rb +0 -311
- data/test/bzip2_reader_test.rb +0 -27
- data/test/bzip2_writer_test.rb +0 -56
- data/test/deprecated_test.rb +0 -121
- data/test/encode_reader_test.rb +0 -51
- data/test/encode_writer_test.rb +0 -90
- data/test/files/embedded_lines_test.csv +0 -7
- data/test/files/multiple_files.zip +0 -0
- data/test/files/spreadsheet.xlsx +0 -0
- data/test/files/test.csv +0 -4
- data/test/files/test.json +0 -3
- data/test/files/test.psv +0 -4
- data/test/files/text file.txt +0 -3
- data/test/files/text.txt +0 -3
- data/test/files/text.txt.bz2 +0 -0
- data/test/files/text.txt.gz +0 -0
- data/test/files/text.txt.gz.zip +0 -0
- data/test/files/text.zip +0 -0
- data/test/files/text.zip.gz +0 -0
- data/test/files/unclosed_quote_large_test.csv +0 -1658
- data/test/files/unclosed_quote_test.csv +0 -4
- data/test/files/unclosed_quote_test2.csv +0 -3
- data/test/gzip_reader_test.rb +0 -27
- data/test/gzip_writer_test.rb +0 -52
- data/test/io_streams_test.rb +0 -132
- data/test/line_reader_test.rb +0 -325
- data/test/line_writer_test.rb +0 -59
- data/test/minimal_file_reader.rb +0 -25
- data/test/path_test.rb +0 -55
- data/test/paths/file_test.rb +0 -213
- data/test/paths/http_test.rb +0 -34
- data/test/paths/matcher_test.rb +0 -120
- data/test/paths/s3_test.rb +0 -220
- data/test/paths/sftp_test.rb +0 -106
- data/test/pgp_reader_test.rb +0 -46
- data/test/pgp_test.rb +0 -267
- data/test/pgp_writer_test.rb +0 -130
- data/test/record_reader_test.rb +0 -60
- data/test/record_writer_test.rb +0 -82
- data/test/row_reader_test.rb +0 -35
- data/test/row_writer_test.rb +0 -56
- data/test/stream_test.rb +0 -577
- data/test/tabular_test.rb +0 -338
- data/test/test_helper.rb +0 -40
- data/test/utils_test.rb +0 -20
- data/test/xlsx_reader_test.rb +0 -37
- data/test/zip_reader_test.rb +0 -53
- data/test/zip_writer_test.rb +0 -48
data/test/tabular_test.rb
DELETED
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
class TabularTest < Minitest::Test
|
|
4
|
-
describe IOStreams::Tabular do
|
|
5
|
-
let :format do
|
|
6
|
-
:csv
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
let :tabular do
|
|
10
|
-
IOStreams::Tabular.new(columns: %w[first_field second third], format: format)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let :fixed do
|
|
14
|
-
layout = [
|
|
15
|
-
{size: 23, key: :name},
|
|
16
|
-
{size: 40, key: :address},
|
|
17
|
-
{size: 2},
|
|
18
|
-
{size: 5, key: :zip, type: :integer},
|
|
19
|
-
{size: 8, key: :age, type: :integer},
|
|
20
|
-
{size: 10, key: :weight, type: :float, decimals: 2}
|
|
21
|
-
]
|
|
22
|
-
IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
let :fixed_with_remainder do
|
|
26
|
-
layout = [
|
|
27
|
-
{size: 23, key: :name},
|
|
28
|
-
{size: 40, key: :address},
|
|
29
|
-
{size: :remainder, key: :remainder}
|
|
30
|
-
]
|
|
31
|
-
IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
let :fixed_discard_remainder do
|
|
35
|
-
layout = [
|
|
36
|
-
{size: 23, key: :name},
|
|
37
|
-
{size: 40, key: :address},
|
|
38
|
-
{size: :remainder}
|
|
39
|
-
]
|
|
40
|
-
IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
let :fixed_with_strings do
|
|
44
|
-
layout = [
|
|
45
|
-
{size: "23", key: "name"},
|
|
46
|
-
{size: 40, key: "address"},
|
|
47
|
-
{size: 2},
|
|
48
|
-
{size: 5.0, key: "zip", type: "integer"},
|
|
49
|
-
{size: "8", key: "age", type: "integer"},
|
|
50
|
-
{size: 10, key: "weight", type: "float", decimals: 2},
|
|
51
|
-
{size: "remainder", key: "remainder"}
|
|
52
|
-
]
|
|
53
|
-
IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
describe "#parse_header" do
|
|
57
|
-
it "parses and sets the csv header" do
|
|
58
|
-
tabular = IOStreams::Tabular.new(format: :csv)
|
|
59
|
-
header = tabular.parse_header("first field,Second,thirD")
|
|
60
|
-
assert_equal ["first field", "Second", "thirD"], header
|
|
61
|
-
assert_equal header, tabular.header.columns
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
describe "#cleanse_header!" do
|
|
66
|
-
describe "cleanses" do
|
|
67
|
-
it "a csv header" do
|
|
68
|
-
tabular = IOStreams::Tabular.new(columns: ["first field", "Second", "thirD"])
|
|
69
|
-
header = tabular.cleanse_header!
|
|
70
|
-
assert_equal %w[first_field second third], header
|
|
71
|
-
assert_equal header, tabular.header.columns
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "allowed list snake cased alphanumeric columns" do
|
|
75
|
-
tabular = IOStreams::Tabular.new(
|
|
76
|
-
columns: ["Ard Vark", "Password", "robot version", "$$$"],
|
|
77
|
-
allowed_columns: %w[ard_vark robot_version]
|
|
78
|
-
)
|
|
79
|
-
expected_header = ["ard_vark", "__rejected__Password", "robot_version", "__rejected__$$$"]
|
|
80
|
-
cleansed_header = tabular.cleanse_header!
|
|
81
|
-
assert_equal(expected_header, cleansed_header)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
describe "allowed_columns" do
|
|
86
|
-
before do
|
|
87
|
-
@allowed_columns = %w[first second third fourth fifth]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "passes" do
|
|
91
|
-
tabular = IOStreams::Tabular.new(columns: [" first ", "Second", "thirD "], allowed_columns: @allowed_columns)
|
|
92
|
-
header = tabular.cleanse_header!
|
|
93
|
-
assert_equal %w[first second third], header
|
|
94
|
-
assert_equal header, tabular.header.columns
|
|
95
|
-
assert_equal @allowed_columns, tabular.header.allowed_columns
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "nils columns not in the allowed list" do
|
|
99
|
-
tabular = IOStreams::Tabular.new(columns: [" first ", "Unknown Column", "thirD "], allowed_columns: @allowed_columns)
|
|
100
|
-
header = tabular.cleanse_header!
|
|
101
|
-
assert_equal ["first", "__rejected__Unknown Column", "third"], header
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "raises exception for columns not in the allowed list" do
|
|
105
|
-
tabular = IOStreams::Tabular.new(columns: [" first ", "Unknown Column", "thirD "], allowed_columns: @allowed_columns, skip_unknown: false)
|
|
106
|
-
exc = assert_raises IOStreams::Errors::InvalidHeader do
|
|
107
|
-
tabular.cleanse_header!
|
|
108
|
-
end
|
|
109
|
-
assert_equal "Unknown columns after cleansing: Unknown Column", exc.message
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "raises exception missing required columns" do
|
|
113
|
-
required = %w[first second fifth]
|
|
114
|
-
tabular = IOStreams::Tabular.new(columns: [" first ", "Second", "thirD "], allowed_columns: @allowed_columns, required_columns: required)
|
|
115
|
-
exc = assert_raises IOStreams::Errors::InvalidHeader do
|
|
116
|
-
tabular.cleanse_header!
|
|
117
|
-
end
|
|
118
|
-
assert_equal "Missing columns after cleansing: fifth", exc.message
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "raises exception when no columns left" do
|
|
122
|
-
tabular = IOStreams::Tabular.new(columns: %w[one two three], allowed_columns: @allowed_columns)
|
|
123
|
-
exc = assert_raises IOStreams::Errors::InvalidHeader do
|
|
124
|
-
tabular.cleanse_header!
|
|
125
|
-
end
|
|
126
|
-
assert_equal "All columns are unknown after cleansing: one,two,three", exc.message
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
describe "#record_parse" do
|
|
132
|
-
describe ":array format" do
|
|
133
|
-
let :format do
|
|
134
|
-
:array
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "renders" do
|
|
138
|
-
assert hash = tabular.record_parse([1, 2, 3])
|
|
139
|
-
assert_equal({"first_field" => 1, "second" => 2, "third" => 3}, hash)
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
it "format :csv" do
|
|
144
|
-
assert hash = tabular.record_parse("1,2,3")
|
|
145
|
-
assert_equal({"first_field" => "1", "second" => "2", "third" => "3"}, hash)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
describe ":hash format" do
|
|
149
|
-
let :format do
|
|
150
|
-
:hash
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "renders" do
|
|
154
|
-
assert hash = tabular.record_parse("first_field" => 1, "second" => 2, "third" => 3)
|
|
155
|
-
assert_equal({"first_field" => 1, "second" => 2, "third" => 3}, hash)
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
describe ":json format" do
|
|
160
|
-
let :format do
|
|
161
|
-
:json
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it "renders" do
|
|
165
|
-
assert hash = tabular.record_parse('{"first_field":1,"second":2,"third":3}')
|
|
166
|
-
assert_equal({"first_field" => 1, "second" => 2, "third" => 3}, hash)
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
describe ":psv format" do
|
|
171
|
-
let :format do
|
|
172
|
-
:psv
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "renders" do
|
|
176
|
-
assert hash = tabular.record_parse("1|2|3")
|
|
177
|
-
assert_equal({"first_field" => "1", "second" => "2", "third" => "3"}, hash)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
describe ":fixed format" do
|
|
182
|
-
it "parses to hash" do
|
|
183
|
-
assert hash = fixed.record_parse("Jack over there XX34618012345670012345.01")
|
|
184
|
-
assert_equal({name: "Jack", address: "over there", zip: 34_618, age: 1_234_567, weight: 12_345.01}, hash)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
it "parses short string" do
|
|
188
|
-
assert_raises IOStreams::Errors::InvalidLineLength do
|
|
189
|
-
fixed.record_parse("Jack over th")
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
it "parses longer string" do
|
|
194
|
-
assert_raises IOStreams::Errors::InvalidLineLength do
|
|
195
|
-
fixed.record_parse("Jack over there XX34618012345670012345.01............")
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "parses zero values" do
|
|
200
|
-
assert hash = fixed.record_parse(" 00000000000000000000000")
|
|
201
|
-
assert_equal({name: "", address: "", zip: 0, age: 0, weight: 0.0}, hash)
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
it "parses empty values" do
|
|
205
|
-
assert hash = fixed.record_parse(" XX ")
|
|
206
|
-
assert_equal({name: "", address: "", zip: nil, age: nil, weight: nil}, hash)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
it "parses blank strings" do
|
|
210
|
-
skip "TODO: Part of fixed refactor to get this working"
|
|
211
|
-
assert hash = fixed.record_parse(" ")
|
|
212
|
-
assert_equal({name: "", address: "", zip: nil, age: nil, weight: nil}, hash)
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
it "parses nil data as nil" do
|
|
216
|
-
refute fixed.record_parse(nil)
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
it "parses empty string as nil" do
|
|
220
|
-
refute fixed.record_parse("")
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
it "parses remainder" do
|
|
224
|
-
hash = fixed_with_remainder.record_parse("Jack over there XX34618012345670012345.01............")
|
|
225
|
-
assert_equal({name: "Jack", address: "over there", remainder: "XX34618012345670012345.01............"}, hash)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "discards remainder" do
|
|
229
|
-
hash = fixed_discard_remainder.record_parse("Jack over there XX34618012345670012345.01............")
|
|
230
|
-
assert_equal({name: "Jack", address: "over there"}, hash)
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
it "skips columns not in the allowed list" do
|
|
235
|
-
tabular.header.allowed_columns = %w[first second third fourth fifth]
|
|
236
|
-
tabular.cleanse_header!
|
|
237
|
-
assert hash = tabular.record_parse("1,2,3")
|
|
238
|
-
assert_equal({"second" => "2", "third" => "3"}, hash)
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it "handles missing values" do
|
|
242
|
-
assert hash = tabular.record_parse("1,2")
|
|
243
|
-
assert_equal({"first_field" => "1", "second" => "2", "third" => nil}, hash)
|
|
244
|
-
end
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
describe "#render" do
|
|
248
|
-
it "renders an array of values" do
|
|
249
|
-
assert csv_string = tabular.render([5, 6, 9])
|
|
250
|
-
assert_equal "5,6,9", csv_string
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it "renders a hash" do
|
|
254
|
-
assert csv_string = tabular.render({"third" => "3", "first_field" => "1"})
|
|
255
|
-
assert_equal "1,,3", csv_string
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
it "renders a hash including nil and boolean" do
|
|
259
|
-
assert csv_string = tabular.render({"third" => true, "first_field" => false, "second" => nil})
|
|
260
|
-
assert_equal "false,,true", csv_string
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
describe ":psv format" do
|
|
264
|
-
let :format do
|
|
265
|
-
:psv
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it "renders psv nil and boolean" do
|
|
269
|
-
assert psv_string = tabular.render({"third" => true, "first_field" => false, "second" => nil})
|
|
270
|
-
assert_equal "false||true", psv_string
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
it "renders psv numeric and pipe data" do
|
|
274
|
-
assert psv_string = tabular.render({"third" => 23, "first_field" => "a|b|c", "second" => "|"})
|
|
275
|
-
assert_equal "a:b:c|:|23", psv_string
|
|
276
|
-
end
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
describe ":fixed format" do
|
|
280
|
-
it "renders fixed data" do
|
|
281
|
-
assert string = fixed.render(name: "Jack", address: "over there", zip: 34_618, weight: 123_456.789123, age: 21)
|
|
282
|
-
assert_equal "Jack over there 34618000000210123456.79", string
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
it "renders fixed data with string keys" do
|
|
286
|
-
assert string = fixed_with_strings.render("name" => "Jack", "address" => "over there", "zip" => 34_618, "weight" => 123_456.789123, "age" => 21)
|
|
287
|
-
assert_equal "Jack over there 34618000000210123456.79", string
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
it "truncates long strings" do
|
|
291
|
-
assert string = fixed.render(name: "Jack ran up the beanstalk and when jack reached the top it was truncated", address: "over there", zip: 34_618)
|
|
292
|
-
assert_equal "Jack ran up the beanstaover there 34618000000000000000.00", string
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
it "when integer is too large" do
|
|
296
|
-
assert_raises IOStreams::Errors::ValueTooLong do
|
|
297
|
-
fixed.render(zip: 3_461_832_653_653_265)
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
it "when float is too large" do
|
|
302
|
-
assert_raises IOStreams::Errors::ValueTooLong do
|
|
303
|
-
fixed.render(weight: 3_461_832_653_653_265.234)
|
|
304
|
-
end
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
it "renders nil as empty string" do
|
|
308
|
-
assert string = fixed.render(zip: 34_618)
|
|
309
|
-
assert_equal " 34618000000000000000.00", string
|
|
310
|
-
end
|
|
311
|
-
|
|
312
|
-
it "renders boolean" do
|
|
313
|
-
assert string = fixed.render(name: true, address: false)
|
|
314
|
-
assert_equal "true false 00000000000000000000.00", string
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
it "renders no data as nil" do
|
|
318
|
-
refute fixed.render({})
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
it "any size last string" do
|
|
322
|
-
assert string = fixed_with_remainder.render(name: "Jack", address: "over there", remainder: "XX34618012345670012345.01............")
|
|
323
|
-
assert_equal "Jack over there XX34618012345670012345.01............", string
|
|
324
|
-
end
|
|
325
|
-
|
|
326
|
-
it "nil last string" do
|
|
327
|
-
assert string = fixed_with_remainder.render(name: "Jack", address: "over there", remainder: nil)
|
|
328
|
-
assert_equal "Jack over there ", string
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
it "skips last filler" do
|
|
332
|
-
assert string = fixed_discard_remainder.render(name: "Jack", address: "over there")
|
|
333
|
-
assert_equal "Jack over there ", string
|
|
334
|
-
end
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
end
|
data/test/test_helper.rb
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
|
|
2
|
-
|
|
3
|
-
require "yaml"
|
|
4
|
-
require "minitest/autorun"
|
|
5
|
-
require "iostreams"
|
|
6
|
-
require "amazing_print"
|
|
7
|
-
require "symmetric-encryption"
|
|
8
|
-
|
|
9
|
-
# Since PGP libraries use UTC for Dates
|
|
10
|
-
ENV["TZ"] = "UTC"
|
|
11
|
-
|
|
12
|
-
# Test cipher
|
|
13
|
-
SymmetricEncryption.cipher = SymmetricEncryption::Cipher.new(
|
|
14
|
-
cipher_name: "aes-128-cbc",
|
|
15
|
-
key: "1234567890ABCDEF1234567890ABCDEF",
|
|
16
|
-
iv: "1234567890ABCDEF",
|
|
17
|
-
encoding: :base64strict
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
# IOStreams::Pgp.logger = Logger.new($stdout)
|
|
21
|
-
# IOStreams::Pgp.executable = 'gpg1'
|
|
22
|
-
|
|
23
|
-
# Test PGP Keys
|
|
24
|
-
unless IOStreams::Pgp.key?(email: "sender@example.org")
|
|
25
|
-
puts "Generating test PGP key: sender@example.org"
|
|
26
|
-
IOStreams::Pgp.generate_key(name: "Sender", email: "sender@example.org", passphrase: "sender_passphrase", key_length: 2048)
|
|
27
|
-
end
|
|
28
|
-
unless IOStreams::Pgp.key?(email: "receiver@example.org")
|
|
29
|
-
puts "Generating test PGP key: receiver@example.org"
|
|
30
|
-
IOStreams::Pgp.generate_key(name: "Receiver", email: "receiver@example.org", passphrase: "receiver_passphrase", key_length: 2048)
|
|
31
|
-
end
|
|
32
|
-
unless IOStreams::Pgp.key?(email: "receiver2@example.org")
|
|
33
|
-
puts "Generating test PGP key: receiver2@example.org"
|
|
34
|
-
IOStreams::Pgp.generate_key(name: "Receiver2", email: "receiver2@example.org", passphrase: "receiver2_passphrase", key_length: 2048)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Test paths
|
|
38
|
-
root = File.expand_path(File.join(__dir__, "../tmp"))
|
|
39
|
-
IOStreams.add_root(:default, File.join(root, "default"))
|
|
40
|
-
IOStreams.add_root(:downloads, File.join(root, "downloads"))
|
data/test/utils_test.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
class UtilsTest < Minitest::Test
|
|
4
|
-
describe IOStreams::Utils do
|
|
5
|
-
describe ".temp_file_name" do
|
|
6
|
-
it "returns value from block" do
|
|
7
|
-
result = IOStreams::Utils.temp_file_name("base", ".ext") { |_name| 257 }
|
|
8
|
-
assert_equal 257, result
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "supplies new temp file_name" do
|
|
12
|
-
file_name = nil
|
|
13
|
-
file_name2 = nil
|
|
14
|
-
IOStreams::Utils.temp_file_name("base", ".ext") { |name| file_name = name }
|
|
15
|
-
IOStreams::Utils.temp_file_name("base", ".ext") { |name| file_name2 = name }
|
|
16
|
-
refute_equal file_name, file_name2
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/test/xlsx_reader_test.rb
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
require "csv"
|
|
3
|
-
|
|
4
|
-
class XlsxReaderTest
|
|
5
|
-
describe IOStreams::Xlsx::Reader do
|
|
6
|
-
let :file_name do
|
|
7
|
-
File.join(File.dirname(__FILE__), "files", "spreadsheet.xlsx")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
let :xlsx_contents do
|
|
11
|
-
[
|
|
12
|
-
["first column", "second column", "third column"],
|
|
13
|
-
["data 1", "data 2", "more data"]
|
|
14
|
-
]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
describe ".file" do
|
|
18
|
-
describe "with a file path" do
|
|
19
|
-
it "returns the contents of the file" do
|
|
20
|
-
csv = IOStreams::Xlsx::Reader.file(file_name, &:read)
|
|
21
|
-
assert_equal xlsx_contents, CSV.parse(csv)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
describe "with a file stream" do
|
|
26
|
-
it "returns the contents of the file" do
|
|
27
|
-
csv = ""
|
|
28
|
-
File.open(file_name, "rb") do |file|
|
|
29
|
-
csv = IOStreams::Xlsx::Reader.stream(file, &:read)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
assert_equal xlsx_contents, CSV.parse(csv)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
data/test/zip_reader_test.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
require_relative "minimal_file_reader"
|
|
3
|
-
require "zip"
|
|
4
|
-
|
|
5
|
-
class ZipReaderTest < Minitest::Test
|
|
6
|
-
describe IOStreams::Zip::Reader do
|
|
7
|
-
let :file_name do
|
|
8
|
-
File.join(File.dirname(__FILE__), "files", "text.zip")
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
let :multiple_zip_file_name do
|
|
12
|
-
File.join(File.dirname(__FILE__), "files", "multiple_files.zip")
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
let :contents_test_txt do
|
|
16
|
-
File.read(File.join(File.dirname(__FILE__), "files", "text.txt"))
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
let :contents_test_json do
|
|
20
|
-
File.read(File.join(File.dirname(__FILE__), "files", "test.json"))
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
let :decompressed do
|
|
24
|
-
Zip::File.open(file_name) { |zip_file| zip_file.first.get_input_stream.read }
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe ".file" do
|
|
28
|
-
it "reads the first file" do
|
|
29
|
-
result = IOStreams::Zip::Reader.file(file_name, &:read)
|
|
30
|
-
assert_equal decompressed, result
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "reads entry within zip file" do
|
|
34
|
-
result = IOStreams::Zip::Reader.file(multiple_zip_file_name, entry_file_name: "text.txt", &:read)
|
|
35
|
-
assert_equal contents_test_txt, result
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "reads another entry within zip file" do
|
|
39
|
-
result = IOStreams::Zip::Reader.file(multiple_zip_file_name, entry_file_name: "test.json", &:read)
|
|
40
|
-
assert_equal contents_test_json, result
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# it 'reads from a stream' do
|
|
44
|
-
# result = MinimalFileReader.open(file_name) do |file|
|
|
45
|
-
# IOStreams::Zip::Reader.stream(file) do |io|
|
|
46
|
-
# io.read
|
|
47
|
-
# end
|
|
48
|
-
# end
|
|
49
|
-
# assert_equal decompressed, result
|
|
50
|
-
# end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
data/test/zip_writer_test.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
require "zip"
|
|
3
|
-
|
|
4
|
-
class ZipWriterTest < Minitest::Test
|
|
5
|
-
describe IOStreams::Zip::Writer do
|
|
6
|
-
let :temp_file do
|
|
7
|
-
Tempfile.new("iostreams")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
let :file_name do
|
|
11
|
-
temp_file.path
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
let :decompressed do
|
|
15
|
-
::File.read(File.join(File.dirname(__FILE__), "files", "text.txt"))
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
after do
|
|
19
|
-
temp_file.delete
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe ".file" do
|
|
23
|
-
it "file" do
|
|
24
|
-
result =
|
|
25
|
-
IOStreams::Zip::Writer.file(file_name, entry_file_name: "text.txt") do |io|
|
|
26
|
-
io.write(decompressed)
|
|
27
|
-
53534
|
|
28
|
-
end
|
|
29
|
-
assert_equal 53534, result
|
|
30
|
-
result = IOStreams::Zip::Reader.file(file_name, &:read)
|
|
31
|
-
assert_equal decompressed, result
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "stream" do
|
|
35
|
-
io_string = StringIO.new("".b)
|
|
36
|
-
result =
|
|
37
|
-
IOStreams::Zip::Writer.stream(io_string) do |io|
|
|
38
|
-
io.write(decompressed)
|
|
39
|
-
53534
|
|
40
|
-
end
|
|
41
|
-
assert_equal 53534, result
|
|
42
|
-
io = StringIO.new(io_string.string)
|
|
43
|
-
result = IOStreams::Zip::Reader.stream(io, &:read)
|
|
44
|
-
assert_equal decompressed, result
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|