xlsxtream 2.3.0 → 2.4.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
2
  SHA256:
3
- metadata.gz: aa056909b0dd743240cb8b4ddb85a86fd1110042110cd49731e9e8d13e7df5d9
4
- data.tar.gz: 6726cf3a9d3f52bfe690551124d2d9cd769fd6c1b20d96893a0b336536a09c44
3
+ metadata.gz: ad3cd850f298db3909ce061876610fdaad2de689675d9b23d6738f8a177f5254
4
+ data.tar.gz: 5b1002fa1031cd53612735d6732acd43a8b0c086aaccc0f62f9a761583f21c5a
5
5
  SHA512:
6
- metadata.gz: 27292c56f60cf20c186af8bba0d52a1c799a0c1f6a76de49660d3c591986375df39b59e5752042aa1c5bf1016e17ce81ef28ceefdf3a6f59fc34a3f7d6a5d981
7
- data.tar.gz: 743ea2bcdac011ac472f146222c5f20e63cb4bc38304ae470f80d6cf5660a65071556d3c61afd421e4c5933a0b6c705331348bd44a20641c77a92f1c736c0ee0
6
+ metadata.gz: bed396c449a050615e3822fc9c76935db6e9c7cb7434bc5a49c4effd76221ed66a023be3cff3859f30d290259c33cf685f8e8a2baaa237d52ae5787b79ee7d67
7
+ data.tar.gz: 5c31396c6b49b90c7eb9f4fd4a32959ff97eefbe2fa0936833dfc4326954d6e06a267ee4e97ee42faaf8268a2147b3e15edc1ed3341f55794e96f5531afff601
@@ -1,6 +1,7 @@
1
1
  language: ruby
2
2
 
3
- sudo: false
3
+ os: linux
4
+ dist: xenial
4
5
  cache: bundler
5
6
 
6
7
  before_install:
@@ -10,6 +11,7 @@ rvm:
10
11
  - 2.1.10
11
12
  - 2.2.10
12
13
  - 2.3.8
13
- - 2.4.9
14
- - 2.5.7
15
- - 2.6.5
14
+ - 2.4.10
15
+ - 2.5.8
16
+ - 2.6.6
17
+ - 2.7.1
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.0 (2020-06-27)
4
+
5
+ - Allow writing worksheets without a block using add\_worksheet (#42, #45)
6
+ - Deprecate calling add\_worksheet with a block, use write\_worksheet instead (#45)
7
+ - Relax rubyzip development dependency to allow current version (#46)
8
+
3
9
  ## 2.3.0 (2019-11-27)
4
10
 
5
11
  - Speed up date / time conversion to OA format (#39)
data/README.md CHANGED
@@ -78,6 +78,13 @@ xlsx.write_worksheet(name: 'SheetWithAutoFormat', auto_format: true) do |sheet|
78
78
  sheet << ['true', '11.85', '2050-01-01T12:00', '1984-01-01']
79
79
  end
80
80
 
81
+ # You can also create worksheet without a block, using the `add_worksheet` method.
82
+ # It can be only used sequentially, so remember to manually close the worksheet
83
+ # when you are done (before opening a new one).
84
+ worksheet = xls.add_worksheet(name: 'SheetWithoutBlock')
85
+ worksheet << ['some', 'data']
86
+ worksheet.close
87
+
81
88
  # Writes metadata and ZIP archive central directory
82
89
  xlsx.close
83
90
  # Close IO object
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Xlsxtream
3
- VERSION = '2.3.0'.freeze
3
+ VERSION = '2.4.0'.freeze
4
4
  end
@@ -55,30 +55,32 @@ module Xlsxtream
55
55
  @io = IO::ZipTricks.new(output)
56
56
  end
57
57
  @sst = SharedStringTable.new
58
- @worksheets = Hash.new { |hash, name| hash[name] = hash.size + 1 }
58
+ @worksheets = []
59
59
  end
60
60
 
61
- def write_worksheet(name = nil, options = {})
62
- if name.is_a? Hash and options.empty?
63
- options = name
64
- name = nil
61
+ def add_worksheet(*args, &block)
62
+ if block_given?
63
+ # This method used to be an alias for `write_worksheet`. This was never publicly documented,
64
+ # but to avoid breaking this private API we keep the old behaviour when called with a block.
65
+ Kernel.warn "#{caller.first[/.*:\d+:(?=in `)/]} warning: Calling #{self.class}#add_worksheet with a block is deprecated, use #write_worksheet instead."
66
+ return write_worksheet(*args, &block)
65
67
  end
66
- use_sst = options.fetch(:use_shared_strings, @options[:use_shared_strings])
67
- auto_format = options.fetch(:auto_format, @options[:auto_format])
68
- columns = options.fetch(:columns, @options[:columns])
69
- sst = use_sst ? @sst : nil
70
68
 
71
- name = name || options[:name] || "Sheet#{@worksheets.size + 1}"
72
- sheet_id = @worksheets[name]
73
- @io.add_file "xl/worksheets/sheet#{sheet_id}.xml"
69
+ unless @worksheets.all? { |ws| ws.closed? }
70
+ fail Error, "Close the current worksheet before adding a new one"
71
+ end
72
+
73
+ build_worksheet(*args)
74
+ end
75
+
76
+ def write_worksheet(*args)
77
+ worksheet = build_worksheet(*args)
74
78
 
75
- worksheet = Worksheet.new(@io, :sst => sst, :auto_format => auto_format, :columns => columns)
76
79
  yield worksheet if block_given?
77
80
  worksheet.close
78
81
 
79
82
  nil
80
83
  end
81
- alias_method :add_worksheet, :write_worksheet
82
84
 
83
85
  def close
84
86
  write_workbook
@@ -93,6 +95,27 @@ module Xlsxtream
93
95
  end
94
96
 
95
97
  private
98
+ def build_worksheet(name = nil, options = {})
99
+ if name.is_a? Hash and options.empty?
100
+ options = name
101
+ name = nil
102
+ end
103
+
104
+ use_sst = options.fetch(:use_shared_strings, @options[:use_shared_strings])
105
+ auto_format = options.fetch(:auto_format, @options[:auto_format])
106
+ columns = options.fetch(:columns, @options[:columns])
107
+ sst = use_sst ? @sst : nil
108
+
109
+ sheet_id = @worksheets.size + 1
110
+ name = name || options[:name] || "Sheet#{sheet_id}"
111
+
112
+ @io.add_file "xl/worksheets/sheet#{sheet_id}.xml"
113
+
114
+ worksheet = Worksheet.new(@io, :id => sheet_id, :name => name, :sst => sst, :auto_format => auto_format, :columns => columns)
115
+ @worksheets << worksheet
116
+
117
+ worksheet
118
+ end
96
119
 
97
120
  def write_root_rels
98
121
  @io.add_file "_rels/.rels"
@@ -113,8 +136,8 @@ module Xlsxtream
113
136
  <workbookPr date1904="false"/>
114
137
  <sheets>
115
138
  XML
116
- @worksheets.each do |name, sheet_id|
117
- @io << %'<sheet name="#{XML.escape_attr name}" sheetId="#{sheet_id}" r:id="#{rid.next!}"/>'
139
+ @worksheets.each do |worksheet|
140
+ @io << %'<sheet name="#{XML.escape_attr worksheet.name}" sheetId="#{worksheet.id}" r:id="#{rid.next!}"/>'
118
141
  end
119
142
  @io << XML.strip(<<-XML)
120
143
  </sheets>
@@ -189,8 +212,8 @@ module Xlsxtream
189
212
  @io.add_file "xl/_rels/workbook.xml.rels"
190
213
  @io << XML.header
191
214
  @io << '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'
192
- @worksheets.each do |name, sheet_id|
193
- @io << %'<Relationship Id="#{rid.next!}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet#{sheet_id}.xml"/>'
215
+ @worksheets.each do |worksheet|
216
+ @io << %'<Relationship Id="#{rid.next!}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet#{worksheet.id}.xml"/>'
194
217
  end
195
218
  @io << %'<Relationship Id="#{rid.next!}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>'
196
219
  @io << %'<Relationship Id="#{rid.next!}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>' unless @sst.empty?
@@ -208,8 +231,8 @@ module Xlsxtream
208
231
  <Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
209
232
  XML
210
233
  @io << '<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>' unless @sst.empty?
211
- @worksheets.each_value do |sheet_id|
212
- @io << %'<Override PartName="/xl/worksheets/sheet#{sheet_id}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>'
234
+ @worksheets.each do |worksheet|
235
+ @io << %'<Override PartName="/xl/worksheets/sheet#{worksheet.id}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>'
213
236
  end
214
237
  @io << '</Types>'
215
238
  end
@@ -7,6 +7,7 @@ module Xlsxtream
7
7
  def initialize(io, options = {})
8
8
  @io = io
9
9
  @rownum = 1
10
+ @closed = false
10
11
  @options = options
11
12
 
12
13
  write_header
@@ -20,6 +21,19 @@ module Xlsxtream
20
21
 
21
22
  def close
22
23
  write_footer
24
+ @closed = true
25
+ end
26
+
27
+ def closed?
28
+ @closed
29
+ end
30
+
31
+ def id
32
+ @options[:id]
33
+ end
34
+
35
+ def name
36
+ @options[:name]
23
37
  end
24
38
 
25
39
  private
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency "bundler", ">= 1.7", "< 3"
26
26
  spec.add_development_dependency "rake"
27
- spec.add_development_dependency "rubyzip", "~> 1.2"
27
+ spec.add_development_dependency "rubyzip", ">= 1.2"
28
28
  spec.add_development_dependency "minitest"
29
29
  spec.add_development_dependency "pry"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlsxtream
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Bünemann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-28 00:00:00.000000000 Z
11
+ date: 2020-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zip_tricks
@@ -68,14 +68,14 @@ dependencies:
68
68
  name: rubyzip
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '1.2'
74
74
  type: :development
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - "~>"
78
+ - - ">="
79
79
  - !ruby/object:Gem::Version
80
80
  version: '1.2'
81
81
  - !ruby/object:Gem::Dependency
@@ -142,7 +142,7 @@ homepage: https://github.com/felixbuenemann/xlsxtream
142
142
  licenses:
143
143
  - MIT
144
144
  metadata: {}
145
- post_install_message:
145
+ post_install_message:
146
146
  rdoc_options: []
147
147
  require_paths:
148
148
  - lib
@@ -157,8 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
159
  requirements: []
160
- rubygems_version: 3.0.6
161
- signing_key:
160
+ rubygems_version: 3.1.2
161
+ signing_key:
162
162
  specification_version: 4
163
163
  summary: Xlsxtream is a streaming XLSX spreadsheet writer
164
164
  test_files: []