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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 712deef2bff987dadce811adaf19b3a98b51d26c
4
- data.tar.gz: 58492c0c5e0cbaeadfa090dfef76b854eaa54b66
2
+ SHA256:
3
+ metadata.gz: 1204961c2edb46c45ff0ffd39c368f5c87c37d61d108a83a4c8e252f12512fdf
4
+ data.tar.gz: 6572b1c75c435228e56fbcaf6c29ca274544b592f36ce0a84034436bc306adde
5
5
  SHA512:
6
- metadata.gz: 4ad8a531db8ceac264448201aaf43422e0483b67e3abb4f35017d67119337d6579db39e390140b6c8ea5554f63723a355808b5b6f7c8d063c8a4d37a059e0430
7
- data.tar.gz: 8d6a0767dc56adc16015578015c93646ef037a086aa7108a300ac9ccc7b460c452ea8f7395225d34c577584a4313de0c15a012b5a746e58236b1ab1280905f4e
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 2015 Reid Morrison
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)
@@ -1,3 +1,3 @@
1
1
  module IOStreams #:nodoc
2
- VERSION = '0.13.0'
2
+ VERSION = '0.14.0'
3
3
  end
@@ -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
@@ -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], Date.today
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], Date.today
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], Date.today
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], Date.today
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]
@@ -7,6 +7,9 @@ require 'iostreams'
7
7
  require 'awesome_print'
8
8
  require 'symmetric-encryption'
9
9
 
10
+ # Since PGP libraries use UTC for Dates
11
+ ENV['TZ']='UTC'
12
+
10
13
  Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
11
14
 
12
15
  # Test cipher
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.13.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: 2017-11-07 00:00:00.000000000 Z
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.6.13
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