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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4099b7285a53bdc5f6ab88dcef531c6d7575d06
4
- data.tar.gz: 68f52bb99df8b7edc3f24ac0b8fed8d4a6a1dbab
3
+ metadata.gz: f17b7f95e61b93d4e1e69390deaa85511c3765fc
4
+ data.tar.gz: 29b174a1959de6a887040c89af1f63a072807f7b
5
5
  SHA512:
6
- metadata.gz: b6579da43c8d3341dc91c50b929852e7caf6916cd197ca338cdb75920005a2413285c4a006c86b9221ce7070e56836626ddc4dca4f68edfe0a7e04976528bb2a
7
- data.tar.gz: 7293d70e70612990e8038bd6deb188f3e85b663b3748c0385b91254ea78f62ac46c0e3e76130791cb662d1c99d135f73b72384407ce96c2a3109c1e440593484
6
+ metadata.gz: b2edf62d725b21fcb292ffbb025113462083a1f6156097e496c2d67e7a2cf77f10cb482b8094b431a5521577a29bb37bb19466e068acc6f1286f55a5e846acd9
7
+ data.tar.gz: 7bb62d42bb61a520132188d9f8304b1eb1923bf7b7d9b119b675a0c8cb980884b24818011e805d57a82532e6c13ab32f3a4593a03fa7ff82103b59cb5381569c
@@ -1,3 +1,3 @@
1
1
  module IOStreams #:nodoc
2
- VERSION = '0.8.1'
2
+ VERSION = '0.8.2'
3
3
  end
@@ -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::ZipReader.open('abc.zip') do |io_stream|
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
@@ -16,5 +16,8 @@ module IOStreams
16
16
  autoload :Reader, 'io_streams/delimited/reader'
17
17
  autoload :Writer, 'io_streams/delimited/writer'
18
18
  end
19
+ module Xlsx
20
+ autoload :Reader, 'io_streams/xlsx/reader'
21
+ end
19
22
  end
20
23
  require 'io_streams/io_streams'
@@ -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
- context IOStreams::File::Reader do
7
- setup do
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
- context '.open' do
18
- should 'each_line file' do
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
- should 'each_line stream' do
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
- should "autodetect delimiter: #{delimiter.inspect}" do
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
- should "read delimited #{delimiter.inspect}" do
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
- should "read binary delimited" do
58
+ it "read binary delimited" do
59
59
  delimiter = "\x01"
60
60
  lines = []
61
61
  stream = StringIO.new(@data.join(delimiter))
@@ -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
- context IOStreams::File::Reader do
7
- setup do
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
- context '.open' do
13
- should 'file' do
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
- should 'stream' do
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
@@ -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
- context IOStreams::File::Writer do
7
- setup do
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
- context '.open' do
13
- should 'file' do
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
- should 'stream' do
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
@@ -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
- context IOStreams::Gzip::Reader do
7
- setup do
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
- context '.open' do
14
- should 'file' do
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
- should 'stream' do
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
@@ -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
- context IOStreams::Gzip::Writer do
7
- setup do
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
- context '.open' do
13
- should 'file' do
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
- should 'stream' do
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
@@ -3,7 +3,6 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
3
3
  require 'yaml'
4
4
  require 'minitest/autorun'
5
5
  require 'minitest/reporters'
6
- require 'shoulda/context'
7
6
  require 'iostreams'
8
7
  require 'awesome_print'
9
8
  require 'symmetric-encryption'
@@ -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
@@ -4,21 +4,21 @@ require 'zip'
4
4
  # Unit Test for IOStreams::Zip
5
5
  module Streams
6
6
  class ZipReaderTest < Minitest::Test
7
- context IOStreams::Zip::Reader do
8
- setup do
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
- context '.open' do
15
- should 'file' do
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
- should 'stream' do
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
@@ -4,14 +4,14 @@ require 'zip'
4
4
  # Unit Test for IOStreams::Zip
5
5
  module Streams
6
6
  class ZipWriterTest < Minitest::Test
7
- context IOStreams::Zip::Writer do
8
- setup do
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
- context '.open' do
14
- should 'file' do
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
- should 'stream' do
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.1
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-08-27 00:00:00.000000000 Z
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