xlsxtream 1.2.0 → 1.3.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/xlsxtream/io/hash.rb +1 -1
- data/lib/xlsxtream/io/rubyzip.rb +8 -46
- data/lib/xlsxtream/version.rb +1 -1
- data/lib/xlsxtream/workbook.rb +11 -7
- data/xlsxtream.gemspec +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dff3af0eeb78824d009e7428de38a1a9647a8f7
|
4
|
+
data.tar.gz: 52367aa07b8878102cb082742238c1e0050910a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fd9e15c00d665312806e857df5b6dc7a89f09a39dd5498c6a289a2c68d420ac05242491c33954ddce4cf4446acba85b9c0a7dc4202e710c9661dc81200a765f
|
7
|
+
data.tar.gz: c5e8e898cde5b8556f8395b05604519cebd681759ba85cd9d40d07d29b78f5cd8ee3960aa5db5b099783abf8230d6f24ec69c5ac7b650bb4874d436566a67c18
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.3.0 (2017-10-30)
|
4
|
+
|
5
|
+
- Drop rubyzip buffering workarounds, require rubyzip >= 1.2.0 (#17)
|
6
|
+
- Drop Ruby 1.9.1 compatibility (rubyzip 1.2 requires ruby >= 1.9.2)
|
7
|
+
- Refactor IO wrappers (#18)
|
8
|
+
|
3
9
|
## 1.2.0 (2017-10-30)
|
4
10
|
|
5
11
|
- Add support for customizing default font (#17)
|
data/lib/xlsxtream/io/hash.rb
CHANGED
data/lib/xlsxtream/io/rubyzip.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
require "zip"
|
2
|
+
require "xlsxtream/errors"
|
2
3
|
|
3
4
|
module Xlsxtream
|
4
5
|
module IO
|
5
6
|
class RubyZip
|
6
|
-
def initialize(
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
def initialize(io)
|
8
|
+
unless io.respond_to? :pos and io.respond_to? :pos=
|
9
|
+
raise Error, 'IO is not seekable'
|
10
|
+
end
|
11
|
+
io.binmode if io.respond_to? :binmode
|
12
|
+
stream = true
|
13
|
+
@zos = Zip::OutputStream.new(io, stream)
|
10
14
|
end
|
11
15
|
|
12
16
|
def <<(data)
|
@@ -20,48 +24,6 @@ module Xlsxtream
|
|
20
24
|
def close
|
21
25
|
os = @zos.close_buffer
|
22
26
|
os.flush if os.respond_to? :flush
|
23
|
-
os.close if !@stream and os.respond_to? :close
|
24
|
-
end
|
25
|
-
|
26
|
-
# Extend get_compressor to hook our custom deflater.
|
27
|
-
class UnbufferedZipOutputStream < ::Zip::OutputStream
|
28
|
-
private
|
29
|
-
def get_compressor(entry, level)
|
30
|
-
case entry.compression_method
|
31
|
-
when ::Zip::Entry::DEFLATED then
|
32
|
-
StreamingDeflater.new(@output_stream, level, @encrypter)
|
33
|
-
else
|
34
|
-
super
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# RubyZip's Deflater buffers to a StringIO until finish is called.
|
40
|
-
# This StreamingDeflater writes out chunks during compression.
|
41
|
-
class StreamingDeflater < ::Zip::Compressor
|
42
|
-
def initialize(output_stream, level = Zip.default_compression, encrypter = NullEncrypter.new)
|
43
|
-
super()
|
44
|
-
@output_stream = output_stream
|
45
|
-
@zlib_deflater = ::Zlib::Deflate.new(level, -::Zlib::MAX_WBITS)
|
46
|
-
@size = 0
|
47
|
-
@crc = ::Zlib.crc32
|
48
|
-
unless encrypter.is_a? ::Zip::NullEncrypter
|
49
|
-
raise ::Zip::Error, 'StreamingDeflater does not support encryption'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def <<(data)
|
54
|
-
val = data.to_s
|
55
|
-
@crc = Zlib.crc32(val, @crc)
|
56
|
-
@size += val.bytesize
|
57
|
-
@output_stream << @zlib_deflater.deflate(data)
|
58
|
-
end
|
59
|
-
|
60
|
-
def finish
|
61
|
-
@output_stream << @zlib_deflater.finish until @zlib_deflater.finished?
|
62
|
-
end
|
63
|
-
|
64
|
-
attr_reader :size, :crc
|
65
27
|
end
|
66
28
|
end
|
67
29
|
end
|
data/lib/xlsxtream/version.rb
CHANGED
data/lib/xlsxtream/workbook.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "stringio"
|
3
2
|
require "xlsxtream/errors"
|
4
3
|
require "xlsxtream/xml"
|
5
4
|
require "xlsxtream/shared_string_table"
|
6
5
|
require "xlsxtream/workbook"
|
7
6
|
require "xlsxtream/io/rubyzip"
|
8
|
-
require "xlsxtream/io/directory"
|
9
|
-
require "xlsxtream/io/stream"
|
10
7
|
|
11
8
|
module Xlsxtream
|
12
9
|
class Workbook
|
@@ -22,8 +19,8 @@ module Xlsxtream
|
|
22
19
|
|
23
20
|
class << self
|
24
21
|
|
25
|
-
def open(
|
26
|
-
workbook = new(
|
22
|
+
def open(output = nil, options = {})
|
23
|
+
workbook = new(output, options)
|
27
24
|
if block_given?
|
28
25
|
begin
|
29
26
|
yield workbook
|
@@ -37,10 +34,16 @@ module Xlsxtream
|
|
37
34
|
|
38
35
|
end
|
39
36
|
|
40
|
-
def initialize(
|
37
|
+
def initialize(output = nil, options = {})
|
38
|
+
output ||= StringIO.new
|
41
39
|
@options = options
|
42
40
|
io_wrapper = options[:io_wrapper] || IO::RubyZip
|
43
|
-
|
41
|
+
if output.is_a?(String) || !output.respond_to?(:<<)
|
42
|
+
@file = File.open(output, 'wb')
|
43
|
+
@io = io_wrapper.new(@file)
|
44
|
+
else
|
45
|
+
@io = io_wrapper.new(output)
|
46
|
+
end
|
44
47
|
@sst = SharedStringTable.new
|
45
48
|
@worksheets = Hash.new { |hash, name| hash[name] = hash.size + 1 }
|
46
49
|
end
|
@@ -74,6 +77,7 @@ module Xlsxtream
|
|
74
77
|
write_root_rels
|
75
78
|
write_content_types
|
76
79
|
@io.close
|
80
|
+
@file.close if @file
|
77
81
|
nil
|
78
82
|
end
|
79
83
|
|
data/xlsxtream.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.bindir = "exe"
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
|
-
spec.required_ruby_version = '>= 1.9.
|
21
|
+
spec.required_ruby_version = '>= 1.9.2'
|
22
22
|
|
23
|
-
spec.add_dependency "rubyzip", ">= 1.
|
23
|
+
spec.add_dependency "rubyzip", ">= 1.2.0"
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.7"
|
26
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xlsxtream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Bünemann
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
122
|
requirements:
|
123
123
|
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 1.9.
|
125
|
+
version: 1.9.2
|
126
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - ">="
|