iostreams 0.13.0 → 0.14.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 +5 -5
- data/README.md +6 -1
- data/lib/io_streams/bzip2/reader.rb +29 -0
- data/lib/io_streams/bzip2/writer.rb +30 -0
- data/lib/io_streams/io_streams.rb +1 -0
- data/lib/io_streams/version.rb +1 -1
- data/lib/iostreams.rb +4 -0
- data/test/bzip2_reader_test.rb +33 -0
- data/test/bzip2_writer_test.rb +43 -0
- data/test/files/text.txt.bz2 +0 -0
- data/test/pgp_test.rb +4 -4
- data/test/test_helper.rb +3 -0
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1204961c2edb46c45ff0ffd39c368f5c87c37d61d108a83a4c8e252f12512fdf
|
4
|
+
data.tar.gz: 6572b1c75c435228e56fbcaf6c29ca274544b592f36ce0a84034436bc306adde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5c8dfb2434a9d7328fb1d54cd20036565cfc2d6eee4365fc30528bb1ff73170fb26d854c319ea5e43ff8a6027ac8737f9fef926082249de2a89d0e17fff71f3
|
7
|
+
data.tar.gz: 6d1dd7d3aea5d3c1e693c788961ae491cf7e7825a77035cb348616d5a085c4995e703258cff78c4d00c736f170c395310b9ecbfe2b2026bff4f8427e536099c0
|
data/README.md
CHANGED
@@ -12,6 +12,11 @@ Currently streaming classes are available for:
|
|
12
12
|
|
13
13
|
* Zip
|
14
14
|
* Gzip
|
15
|
+
* BZip2
|
16
|
+
* CSV
|
17
|
+
* Delimited Lines / Rows
|
18
|
+
* PGP
|
19
|
+
* Xlsx (Reading)
|
15
20
|
* Encryption using [Symmetric Encryption](https://github.com/reidmorrison/symmetric-encryption)
|
16
21
|
|
17
22
|
## Introduction
|
@@ -147,7 +152,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
147
152
|
|
148
153
|
## License
|
149
154
|
|
150
|
-
Copyright
|
155
|
+
Copyright 2018 Reid Morrison
|
151
156
|
|
152
157
|
Licensed under the Apache License, Version 2.0 (the "License");
|
153
158
|
you may not use this file except in compliance with the License.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module IOStreams
|
2
|
+
module Bzip2
|
3
|
+
class Reader
|
4
|
+
# Read from a Bzip2 file or stream, decompressing the contents as it is read
|
5
|
+
def self.open(file_name_or_io, _=nil, &block)
|
6
|
+
begin
|
7
|
+
require 'rbzip2' unless defined?(RBzip2)
|
8
|
+
rescue LoadError => e
|
9
|
+
raise(LoadError, "Please install the 'rbzip2' gem for Bzip2 streaming support. #{e.message}")
|
10
|
+
end
|
11
|
+
|
12
|
+
if IOStreams.reader_stream?(file_name_or_io)
|
13
|
+
begin
|
14
|
+
io = RBzip2.default_adapter::Decompressor.new(file_name_or_io)
|
15
|
+
block.call(io)
|
16
|
+
ensure
|
17
|
+
io.close if io && (io.respond_to?(:closed?) && !io.closed?)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
::File.open(file_name_or_io, 'rb') do |file|
|
21
|
+
io = RBzip2.default_adapter::Decompressor.new(file)
|
22
|
+
block.call(io)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module IOStreams
|
2
|
+
module Bzip2
|
3
|
+
class Writer
|
4
|
+
# Write to a file / stream, compressing with Bzip2
|
5
|
+
def self.open(file_name_or_io, _=nil, &block)
|
6
|
+
begin
|
7
|
+
require 'rbzip2' unless defined?(RBzip2)
|
8
|
+
rescue LoadError => e
|
9
|
+
raise(LoadError, "Please install the 'rbzip2' gem for Bzip2 streaming support. #{e.message}")
|
10
|
+
end
|
11
|
+
|
12
|
+
if IOStreams.reader_stream?(file_name_or_io)
|
13
|
+
begin
|
14
|
+
io = RBzip2.default_adapter::Compressor.new(file_name_or_io)
|
15
|
+
block.call(io)
|
16
|
+
ensure
|
17
|
+
io.close
|
18
|
+
end
|
19
|
+
else
|
20
|
+
::File.open(file_name_or_io, 'wb') do |file|
|
21
|
+
io = RBzip2.default_adapter::Compressor.new(file)
|
22
|
+
block.call(io)
|
23
|
+
io.close
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -298,6 +298,7 @@ module IOStreams
|
|
298
298
|
# @formatter:off
|
299
299
|
register_extension(:enc, SymmetricEncryption::Reader, SymmetricEncryption::Writer) if defined?(SymmetricEncryption)
|
300
300
|
register_extension(:file, IOStreams::File::Reader, IOStreams::File::Writer)
|
301
|
+
register_extension(:bz2, IOStreams::Bzip2::Reader, IOStreams::Bzip2::Writer)
|
301
302
|
register_extension(:gz, IOStreams::Gzip::Reader, IOStreams::Gzip::Writer)
|
302
303
|
register_extension(:gzip, IOStreams::Gzip::Reader, IOStreams::Gzip::Writer)
|
303
304
|
register_extension(:zip, IOStreams::Zip::Reader, IOStreams::Zip::Writer)
|
data/lib/io_streams/version.rb
CHANGED
data/lib/iostreams.rb
CHANGED
@@ -9,6 +9,10 @@ module IOStreams
|
|
9
9
|
autoload :Reader, 'io_streams/file/reader'
|
10
10
|
autoload :Writer, 'io_streams/file/writer'
|
11
11
|
end
|
12
|
+
module Bzip2
|
13
|
+
autoload :Reader, 'io_streams/bzip2/reader'
|
14
|
+
autoload :Writer, 'io_streams/bzip2/writer'
|
15
|
+
end
|
12
16
|
module Gzip
|
13
17
|
autoload :Reader, 'io_streams/gzip/reader'
|
14
18
|
autoload :Writer, 'io_streams/gzip/writer'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
# Unit Test for IOStreams::Gzip
|
4
|
+
module Streams
|
5
|
+
class Bzip2ReaderTest < Minitest::Test
|
6
|
+
describe IOStreams::Bzip2::Reader do
|
7
|
+
before do
|
8
|
+
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt.bz2')
|
9
|
+
@gzip_data = File.open(@file_name, 'rb') { |f| f.read }
|
10
|
+
@data = File.read(File.join(File.dirname(__FILE__), 'files', 'text.txt'))
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '.open' do
|
14
|
+
it 'file' do
|
15
|
+
result = IOStreams::Bzip2::Reader.open(@file_name) do |io|
|
16
|
+
io.read
|
17
|
+
end
|
18
|
+
assert_equal @data, result
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'stream' do
|
22
|
+
result = File.open(@file_name) do |file|
|
23
|
+
IOStreams::Bzip2::Reader.open(file) do |io|
|
24
|
+
io.read
|
25
|
+
end
|
26
|
+
end
|
27
|
+
assert_equal @data, result
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
# Unit Test for IOStreams::Bzip2
|
4
|
+
module Streams
|
5
|
+
class Bzip2WriterTest < Minitest::Test
|
6
|
+
describe IOStreams::Bzip2::Writer do
|
7
|
+
before do
|
8
|
+
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt.gz')
|
9
|
+
@data = File.read(File.join(File.dirname(__FILE__), 'files', 'text.txt'))
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.open' do
|
13
|
+
it 'file' do
|
14
|
+
temp_file = Tempfile.new('rocket_job')
|
15
|
+
file_name = temp_file.to_path
|
16
|
+
IOStreams::Bzip2::Writer.open(file_name) do |io|
|
17
|
+
io.write(@data)
|
18
|
+
end
|
19
|
+
|
20
|
+
File.open(file_name, 'rb') do |file|
|
21
|
+
io = RBzip2.default_adapter::Decompressor.new(file)
|
22
|
+
result = io.read
|
23
|
+
temp_file.delete
|
24
|
+
assert_equal @data, result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'stream' do
|
29
|
+
io_string = StringIO.new(''.force_encoding('ASCII-8BIT'))
|
30
|
+
IOStreams::Bzip2::Writer.open(io_string) do |io|
|
31
|
+
io.write(@data)
|
32
|
+
end
|
33
|
+
|
34
|
+
io = StringIO.new(io_string.string)
|
35
|
+
rbzip2 = RBzip2.default_adapter::Decompressor.new(io)
|
36
|
+
data = rbzip2.read
|
37
|
+
assert_equal @data, data
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
Binary file
|
data/test/pgp_test.rb
CHANGED
@@ -118,7 +118,7 @@ module Streams
|
|
118
118
|
assert_equal 1, keys.size
|
119
119
|
assert key = keys.first
|
120
120
|
|
121
|
-
assert_equal key[:date]
|
121
|
+
assert_equal Date.today, key[:date]
|
122
122
|
assert_equal email, key[:email]
|
123
123
|
assert_includes key[:key_id], generated_key_id
|
124
124
|
assert_equal 1024, key[:key_length]
|
@@ -137,7 +137,7 @@ module Streams
|
|
137
137
|
assert_equal 1, keys.size
|
138
138
|
assert key = keys.first
|
139
139
|
|
140
|
-
assert_equal key[:date]
|
140
|
+
assert_equal Date.today, key[:date]
|
141
141
|
assert_equal email, key[:email]
|
142
142
|
assert_includes key[:key_id], generated_key_id
|
143
143
|
assert_equal 1024, key[:key_length]
|
@@ -153,7 +153,7 @@ module Streams
|
|
153
153
|
assert_equal 1, keys.size
|
154
154
|
assert key = keys.first
|
155
155
|
|
156
|
-
assert_equal key[:date]
|
156
|
+
assert_equal Date.today, key[:date]
|
157
157
|
assert_equal email, key[:email]
|
158
158
|
assert_includes key[:key_id], generated_key_id
|
159
159
|
assert_equal 1024, key[:key_length]
|
@@ -169,7 +169,7 @@ module Streams
|
|
169
169
|
assert_equal 1, keys.size
|
170
170
|
assert key = keys.first
|
171
171
|
|
172
|
-
assert_equal key[:date]
|
172
|
+
assert_equal Date.today, key[:date]
|
173
173
|
assert_equal email, key[:email]
|
174
174
|
assert_includes key[:key_id], generated_key_id
|
175
175
|
assert_equal 1024, key[:key_length]
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iostreams
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -33,6 +33,8 @@ extra_rdoc_files: []
|
|
33
33
|
files:
|
34
34
|
- README.md
|
35
35
|
- Rakefile
|
36
|
+
- lib/io_streams/bzip2/reader.rb
|
37
|
+
- lib/io_streams/bzip2/writer.rb
|
36
38
|
- lib/io_streams/csv/reader.rb
|
37
39
|
- lib/io_streams/csv/writer.rb
|
38
40
|
- lib/io_streams/delimited/reader.rb
|
@@ -53,6 +55,8 @@ files:
|
|
53
55
|
- lib/io_streams/zip/reader.rb
|
54
56
|
- lib/io_streams/zip/writer.rb
|
55
57
|
- lib/iostreams.rb
|
58
|
+
- test/bzip2_reader_test.rb
|
59
|
+
- test/bzip2_writer_test.rb
|
56
60
|
- test/csv_reader_test.rb
|
57
61
|
- test/csv_writer_test.rb
|
58
62
|
- test/delimited_reader_test.rb
|
@@ -62,6 +66,7 @@ files:
|
|
62
66
|
- test/files/spreadsheet.xlsx
|
63
67
|
- test/files/test.csv
|
64
68
|
- test/files/text.txt
|
69
|
+
- test/files/text.txt.bz2
|
65
70
|
- test/files/text.txt.gz
|
66
71
|
- test/files/text.txt.gz.zip
|
67
72
|
- test/files/text.zip
|
@@ -95,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
100
|
version: '0'
|
96
101
|
requirements: []
|
97
102
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.7.3
|
99
104
|
signing_key:
|
100
105
|
specification_version: 4
|
101
106
|
summary: Ruby file streaming. Supports Text, Zip, Gzip, Xlsx, csv, PGP / GPG and Symmetric
|
@@ -105,16 +110,19 @@ test_files:
|
|
105
110
|
- test/xlsx_reader_test.rb
|
106
111
|
- test/csv_writer_test.rb
|
107
112
|
- test/zip_reader_test.rb
|
113
|
+
- test/bzip2_writer_test.rb
|
108
114
|
- test/gzip_writer_test.rb
|
109
115
|
- test/delimited_writer_test.rb
|
110
116
|
- test/file_reader_test.rb
|
111
117
|
- test/pgp_writer_test.rb
|
118
|
+
- test/bzip2_reader_test.rb
|
112
119
|
- test/csv_reader_test.rb
|
113
120
|
- test/zip_writer_test.rb
|
114
121
|
- test/delimited_reader_test.rb
|
115
122
|
- test/files/text.zip
|
116
123
|
- test/files/spreadsheet.xlsx
|
117
124
|
- test/files/test.csv
|
125
|
+
- test/files/text.txt.bz2
|
118
126
|
- test/files/text.txt.gz.zip
|
119
127
|
- test/files/text.txt.gz
|
120
128
|
- test/files/text.txt
|