iostreams 0.13.0 → 0.14.0

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