xlsxtream 2.3.0 → 2.4.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
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: []