iostreams 0.8.1 → 0.8.2
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/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/xlsx/reader.rb +55 -0
- data/lib/io_streams/zip/reader.rb +2 -2
- data/lib/iostreams.rb +3 -0
- data/test/delimited_reader_test.rb +8 -8
- data/test/file_reader_test.rb +6 -6
- data/test/file_writer_test.rb +6 -6
- data/test/files/spreadsheet.xlsx +0 -0
- data/test/gzip_reader_test.rb +5 -5
- data/test/gzip_writer_test.rb +5 -5
- data/test/test_helper.rb +0 -1
- data/test/xlsx_reader_test.rb +43 -0
- data/test/zip_reader_test.rb +6 -6
- data/test/zip_writer_test.rb +5 -5
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f17b7f95e61b93d4e1e69390deaa85511c3765fc
|
4
|
+
data.tar.gz: 29b174a1959de6a887040c89af1f63a072807f7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2edf62d725b21fcb292ffbb025113462083a1f6156097e496c2d67e7a2cf77f10cb482b8094b431a5521577a29bb37bb19466e068acc6f1286f55a5e846acd9
|
7
|
+
data.tar.gz: 7bb62d42bb61a520132188d9f8304b1eb1923bf7b7d9b119b675a0c8cb980884b24818011e805d57a82532e6c13ab32f3a4593a03fa7ff82103b59cb5381569c
|
data/lib/io_streams/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
begin
|
2
|
+
require 'creek'
|
3
|
+
rescue LoadError => e
|
4
|
+
puts "Install the 'creek' gem for xlsx streaming support"
|
5
|
+
raise(e)
|
6
|
+
end
|
7
|
+
require 'csv'
|
8
|
+
|
9
|
+
module IOStreams
|
10
|
+
module Xlsx
|
11
|
+
class Reader
|
12
|
+
attr_reader :worksheet
|
13
|
+
|
14
|
+
def initialize(workbook)
|
15
|
+
@worksheet = workbook.sheets[0]
|
16
|
+
end
|
17
|
+
|
18
|
+
def each_line(&block)
|
19
|
+
worksheet.rows.each do |row|
|
20
|
+
block.call(row.values.to_csv(row_sep: nil))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Read from a xlsx file or stream.
|
25
|
+
#
|
26
|
+
# Example:
|
27
|
+
# IOStreams::Xlsx::Reader.open('spreadsheet.xlsx') do |spreadsheet_stream|
|
28
|
+
# spreadsheet_stream.each_line do |line|
|
29
|
+
# puts line
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
def self.open(file_name_or_io, options={}, &block)
|
33
|
+
options = options.dup
|
34
|
+
buffer_size = options.delete(:buffer_size) || 65536
|
35
|
+
raise(ArgumentError, "Unknown IOStreams::Xlsx::Reader option: #{options.inspect}") if options.size > 0
|
36
|
+
|
37
|
+
if file_name_or_io.respond_to?(:read)
|
38
|
+
temp_file = Tempfile.new('rocket_job_xlsx')
|
39
|
+
file_name = temp_file.to_path
|
40
|
+
|
41
|
+
::File.open(file_name, 'wb') do |file|
|
42
|
+
IOStreams.copy(file_name_or_io, file, buffer_size)
|
43
|
+
end
|
44
|
+
else
|
45
|
+
file_name = file_name_or_io
|
46
|
+
end
|
47
|
+
|
48
|
+
block.call(self.new(Creek::Book.new(file_name, check_file_extension: false)))
|
49
|
+
ensure
|
50
|
+
temp_file.delete if temp_file
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -6,7 +6,7 @@ module IOStreams
|
|
6
6
|
# to the supplied block
|
7
7
|
#
|
8
8
|
# Example:
|
9
|
-
# IOStreams::
|
9
|
+
# IOStreams::Zip::Reader.open('abc.zip') do |io_stream|
|
10
10
|
# # Read 256 bytes at a time
|
11
11
|
# while data = io_stream.read(256)
|
12
12
|
# puts data
|
@@ -79,4 +79,4 @@ module IOStreams
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
82
|
-
end
|
82
|
+
end
|
data/lib/iostreams.rb
CHANGED
@@ -3,8 +3,8 @@ require_relative 'test_helper'
|
|
3
3
|
# Unit Test for IOStreams::File
|
4
4
|
module Streams
|
5
5
|
class DelimitedReaderTest < Minitest::Test
|
6
|
-
|
7
|
-
|
6
|
+
describe IOStreams::File::Reader do
|
7
|
+
before do
|
8
8
|
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt')
|
9
9
|
@data = []
|
10
10
|
File.open(@file_name, 'rt') do |file|
|
@@ -14,8 +14,8 @@ module Streams
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
describe '.open' do
|
18
|
+
it 'each_line file' do
|
19
19
|
lines = []
|
20
20
|
IOStreams::Delimited::Reader.open(@file_name) do |io|
|
21
21
|
io.each_line { |line| lines << line }
|
@@ -23,7 +23,7 @@ module Streams
|
|
23
23
|
assert_equal @data, lines
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
it 'each_line stream' do
|
27
27
|
lines = []
|
28
28
|
File.open(@file_name) do |file|
|
29
29
|
IOStreams::Delimited::Reader.open(file) do |io|
|
@@ -34,7 +34,7 @@ module Streams
|
|
34
34
|
end
|
35
35
|
|
36
36
|
["\r\n", "\n\r", "\n", "\r"].each do |delimiter|
|
37
|
-
|
37
|
+
it "autodetect delimiter: #{delimiter.inspect}" do
|
38
38
|
lines = []
|
39
39
|
stream = StringIO.new(@data.join(delimiter))
|
40
40
|
IOStreams::Delimited::Reader.open(stream, buffer_size: 15) do |io|
|
@@ -45,7 +45,7 @@ module Streams
|
|
45
45
|
end
|
46
46
|
|
47
47
|
['@', 'BLAH'].each do |delimiter|
|
48
|
-
|
48
|
+
it "read delimited #{delimiter.inspect}" do
|
49
49
|
lines = []
|
50
50
|
stream = StringIO.new(@data.join(delimiter))
|
51
51
|
IOStreams::Delimited::Reader.open(stream, buffer_size: 15, delimiter: delimiter) do |io|
|
@@ -55,7 +55,7 @@ module Streams
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
it "read binary delimited" do
|
59
59
|
delimiter = "\x01"
|
60
60
|
lines = []
|
61
61
|
stream = StringIO.new(@data.join(delimiter))
|
data/test/file_reader_test.rb
CHANGED
@@ -3,20 +3,20 @@ require_relative 'test_helper'
|
|
3
3
|
# Unit Test for IOStreams::File
|
4
4
|
module Streams
|
5
5
|
class FileReaderTest < Minitest::Test
|
6
|
-
|
7
|
-
|
6
|
+
describe IOStreams::File::Reader do
|
7
|
+
before do
|
8
8
|
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt')
|
9
9
|
@data = File.read(@file_name)
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
describe '.open' do
|
13
|
+
it 'file' do
|
14
14
|
result = IOStreams::File::Reader.open(@file_name) do |io|
|
15
15
|
io.read
|
16
16
|
end
|
17
17
|
assert_equal @data, result
|
18
18
|
end
|
19
|
-
|
19
|
+
it 'stream' do
|
20
20
|
result = File.open(@file_name) do |file|
|
21
21
|
IOStreams::File::Reader.open(file) do |io|
|
22
22
|
io.read
|
@@ -28,4 +28,4 @@ module Streams
|
|
28
28
|
|
29
29
|
end
|
30
30
|
end
|
31
|
-
end
|
31
|
+
end
|
data/test/file_writer_test.rb
CHANGED
@@ -3,14 +3,14 @@ require_relative 'test_helper'
|
|
3
3
|
# Unit Test for IOStreams::File
|
4
4
|
module Streams
|
5
5
|
class FileWriterTest < Minitest::Test
|
6
|
-
|
7
|
-
|
6
|
+
describe IOStreams::File::Writer do
|
7
|
+
before do
|
8
8
|
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt')
|
9
9
|
@data = File.read(@file_name)
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
describe '.open' do
|
13
|
+
it 'file' do
|
14
14
|
temp_file = Tempfile.new('rocket_job')
|
15
15
|
file_name = temp_file.to_path
|
16
16
|
IOStreams::File::Writer.open(file_name) do |io|
|
@@ -19,7 +19,7 @@ module Streams
|
|
19
19
|
result = File.read(file_name)
|
20
20
|
assert_equal @data, result
|
21
21
|
end
|
22
|
-
|
22
|
+
it 'stream' do
|
23
23
|
io_string = StringIO.new
|
24
24
|
IOStreams::File::Writer.open(io_string) do |io|
|
25
25
|
io.write(@data)
|
@@ -30,4 +30,4 @@ module Streams
|
|
30
30
|
|
31
31
|
end
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
Binary file
|
data/test/gzip_reader_test.rb
CHANGED
@@ -3,21 +3,21 @@ require_relative 'test_helper'
|
|
3
3
|
# Unit Test for IOStreams::Gzip
|
4
4
|
module Streams
|
5
5
|
class GzipReaderTest < Minitest::Test
|
6
|
-
|
7
|
-
|
6
|
+
describe IOStreams::Gzip::Reader do
|
7
|
+
before do
|
8
8
|
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt.gz')
|
9
9
|
@gzip_data = File.open(@file_name, 'rb') { |f| f.read }
|
10
10
|
@data = Zlib::GzipReader.open(@file_name) { |gz| gz.read }
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
describe '.open' do
|
14
|
+
it 'file' do
|
15
15
|
result = IOStreams::Gzip::Reader.open(@file_name) do |io|
|
16
16
|
io.read
|
17
17
|
end
|
18
18
|
assert_equal @data, result
|
19
19
|
end
|
20
|
-
|
20
|
+
it 'stream' do
|
21
21
|
result = File.open(@file_name) do |file|
|
22
22
|
IOStreams::Gzip::Reader.open(file) do |io|
|
23
23
|
io.read
|
data/test/gzip_writer_test.rb
CHANGED
@@ -3,14 +3,14 @@ require_relative 'test_helper'
|
|
3
3
|
# Unit Test for IOStreams::Gzip
|
4
4
|
module Streams
|
5
5
|
class GzipWriterTest < Minitest::Test
|
6
|
-
|
7
|
-
|
6
|
+
describe IOStreams::Gzip::Writer do
|
7
|
+
before do
|
8
8
|
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt.gz')
|
9
9
|
@data = Zlib::GzipReader.open(@file_name) { |gz| gz.read }
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
describe '.open' do
|
13
|
+
it 'file' do
|
14
14
|
temp_file = Tempfile.new('rocket_job')
|
15
15
|
file_name = temp_file.to_path
|
16
16
|
IOStreams::Gzip::Writer.open(file_name) do |io|
|
@@ -20,7 +20,7 @@ module Streams
|
|
20
20
|
temp_file.delete
|
21
21
|
assert_equal @data, result
|
22
22
|
end
|
23
|
-
|
23
|
+
it 'stream' do
|
24
24
|
io_string = StringIO.new(''.force_encoding('ASCII-8BIT'))
|
25
25
|
IOStreams::Gzip::Writer.open(io_string) do |io|
|
26
26
|
io.write(@data)
|
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
module Streams
|
4
|
+
describe IOStreams::Xlsx::Reader do
|
5
|
+
XLSX_CONTENTS = [
|
6
|
+
"first column,second column,third column",
|
7
|
+
"data 1,data 2,more data",
|
8
|
+
]
|
9
|
+
|
10
|
+
describe '.open' do
|
11
|
+
let(:file_name) { File.join(File.dirname(__FILE__), 'files', 'spreadsheet.xlsx') }
|
12
|
+
|
13
|
+
describe 'with a file path' do
|
14
|
+
before do
|
15
|
+
@file = File.open(file_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns the contents of the file' do
|
19
|
+
rows = []
|
20
|
+
IOStreams::Xlsx::Reader.open(@file) do |spreadsheet|
|
21
|
+
spreadsheet.each_line { |row| rows << row }
|
22
|
+
end
|
23
|
+
assert_equal(XLSX_CONTENTS, rows)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'with a file stream' do
|
28
|
+
|
29
|
+
it 'returns the contents of the file' do
|
30
|
+
rows = []
|
31
|
+
File.open(file_name) do |file|
|
32
|
+
IOStreams::Xlsx::Reader.open(file) do |spreadsheet|
|
33
|
+
spreadsheet.each_line { |row| rows << row }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
assert_equal(XLSX_CONTENTS, rows)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/test/zip_reader_test.rb
CHANGED
@@ -4,21 +4,21 @@ require 'zip'
|
|
4
4
|
# Unit Test for IOStreams::Zip
|
5
5
|
module Streams
|
6
6
|
class ZipReaderTest < Minitest::Test
|
7
|
-
|
8
|
-
|
7
|
+
describe IOStreams::Zip::Reader do
|
8
|
+
before do
|
9
9
|
@file_name = File.join(File.dirname(__FILE__), 'files', 'text.zip')
|
10
10
|
@zip_data = File.open(@file_name, 'rb') { |f| f.read }
|
11
11
|
@data = Zip::File.open(@file_name) { |zip_file| zip_file.first.get_input_stream.read }
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
describe '.open' do
|
15
|
+
it 'file' do
|
16
16
|
result = IOStreams::Zip::Reader.open(@file_name) do |io|
|
17
17
|
io.read
|
18
18
|
end
|
19
19
|
assert_equal @data, result
|
20
20
|
end
|
21
|
-
|
21
|
+
it 'stream' do
|
22
22
|
result = File.open(@file_name) do |file|
|
23
23
|
IOStreams::Zip::Reader.open(file) do |io|
|
24
24
|
io.read
|
@@ -30,4 +30,4 @@ module Streams
|
|
30
30
|
|
31
31
|
end
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
data/test/zip_writer_test.rb
CHANGED
@@ -4,14 +4,14 @@ require 'zip'
|
|
4
4
|
# Unit Test for IOStreams::Zip
|
5
5
|
module Streams
|
6
6
|
class ZipWriterTest < Minitest::Test
|
7
|
-
|
8
|
-
|
7
|
+
describe IOStreams::Zip::Writer do
|
8
|
+
before do
|
9
9
|
file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt')
|
10
10
|
@data = File.read(file_name)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
describe '.open' do
|
14
|
+
it 'file' do
|
15
15
|
temp_file = Tempfile.new('rocket_job')
|
16
16
|
file_name = temp_file.to_path
|
17
17
|
IOStreams::Zip::Writer.open(file_name, zip_file_name: 'text.txt') do |io|
|
@@ -24,7 +24,7 @@ module Streams
|
|
24
24
|
assert_equal @data, result
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
it 'stream' do
|
28
28
|
io_string = StringIO.new(''.force_encoding('ASCII-8BIT'))
|
29
29
|
IOStreams::Zip::Writer.open(io_string) do |io|
|
30
30
|
io.write(@data)
|
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.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: symmetric-encryption
|
@@ -54,12 +54,14 @@ files:
|
|
54
54
|
- lib/io_streams/gzip/writer.rb
|
55
55
|
- lib/io_streams/io_streams.rb
|
56
56
|
- lib/io_streams/version.rb
|
57
|
+
- lib/io_streams/xlsx/reader.rb
|
57
58
|
- lib/io_streams/zip/reader.rb
|
58
59
|
- lib/io_streams/zip/writer.rb
|
59
60
|
- lib/iostreams.rb
|
60
61
|
- test/delimited_reader_test.rb
|
61
62
|
- test/file_reader_test.rb
|
62
63
|
- test/file_writer_test.rb
|
64
|
+
- test/files/spreadsheet.xlsx
|
63
65
|
- test/files/text.txt
|
64
66
|
- test/files/text.txt.gz
|
65
67
|
- test/files/text.txt.gz.zip
|
@@ -67,6 +69,7 @@ files:
|
|
67
69
|
- test/gzip_reader_test.rb
|
68
70
|
- test/gzip_writer_test.rb
|
69
71
|
- test/test_helper.rb
|
72
|
+
- test/xlsx_reader_test.rb
|
70
73
|
- test/zip_reader_test.rb
|
71
74
|
- test/zip_writer_test.rb
|
72
75
|
homepage: https://github.com/rocketjob/streams
|
@@ -97,6 +100,7 @@ test_files:
|
|
97
100
|
- test/delimited_reader_test.rb
|
98
101
|
- test/file_reader_test.rb
|
99
102
|
- test/file_writer_test.rb
|
103
|
+
- test/files/spreadsheet.xlsx
|
100
104
|
- test/files/text.txt
|
101
105
|
- test/files/text.txt.gz
|
102
106
|
- test/files/text.txt.gz.zip
|
@@ -104,5 +108,7 @@ test_files:
|
|
104
108
|
- test/gzip_reader_test.rb
|
105
109
|
- test/gzip_writer_test.rb
|
106
110
|
- test/test_helper.rb
|
111
|
+
- test/xlsx_reader_test.rb
|
107
112
|
- test/zip_reader_test.rb
|
108
113
|
- test/zip_writer_test.rb
|
114
|
+
has_rdoc: true
|