xlsxrb 0.1.8 → 0.1.9
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 +15 -2
- data/README.md +50 -13
- data/Rakefile +20 -2
- data/docs/DEVELOPMENT.md +11 -3
- data/docs/QUALITY_ASSURANCE.md +3 -4
- data/docs/SPEC_SOURCES.md +7 -1
- data/docs/wasm/ruby.wasm +0 -0
- data/lib/xlsxrb/elements/row.rb +2 -2
- data/lib/xlsxrb/elements/workbook.rb +1 -1
- data/lib/xlsxrb/elements/worksheet.rb +4 -4
- data/lib/xlsxrb/ooxml/cfb.rb +490 -0
- data/lib/xlsxrb/ooxml/crypto/agile.rb +285 -0
- data/lib/xlsxrb/ooxml/crypto/standard.rb +152 -0
- data/lib/xlsxrb/ooxml/crypto.rb +60 -0
- data/lib/xlsxrb/stream_row.rb +2 -2
- data/lib/xlsxrb/version.rb +1 -1
- data/lib/xlsxrb.rb +129 -38
- data/sig/generated/xlsxrb/elements/worksheet.rbs +8 -5
- data/sig/generated/xlsxrb/ooxml/cfb.rbs +121 -0
- data/sig/generated/xlsxrb/ooxml/crypto/agile.rbs +46 -0
- data/sig/generated/xlsxrb/ooxml/crypto/standard.rbs +28 -0
- data/sig/generated/xlsxrb/ooxml/crypto.rbs +17 -0
- data/sig/generated/xlsxrb/stream_row.rbs +4 -2
- data/sig/generated/xlsxrb.rbs +40 -18
- data/vendor/sdk_runner/Program.cs +3 -1
- metadata +9 -1
data/sig/generated/xlsxrb.rbs
CHANGED
|
@@ -27,6 +27,15 @@ module Xlsxrb
|
|
|
27
27
|
class ZipError < Error
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
class EncryptedFileError < Error
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class InvalidPasswordError < EncryptedFileError
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class DecryptionError < EncryptedFileError
|
|
37
|
+
end
|
|
38
|
+
|
|
30
39
|
TRACER: untyped
|
|
31
40
|
|
|
32
41
|
def self.in_span: (untyped name, ?attributes: untyped) ?{ (?) -> untyped } -> untyped
|
|
@@ -290,34 +299,38 @@ module Xlsxrb
|
|
|
290
299
|
# puts doc_sheet["A1"].value # coordinate random access
|
|
291
300
|
#
|
|
292
301
|
# @param source [String, IO] File path, binary content string (starting with PK..), or IO object.
|
|
302
|
+
# @param password [String, nil] Optional password to decrypt password-protected XLSX files.
|
|
293
303
|
# @yield [sheet] Yields each streaming sheet.
|
|
294
304
|
# @yieldparam sheet [StreamSheet] The streaming worksheet object.
|
|
295
305
|
# @return [Elements::Workbook, void] Returns Elements::Workbook when no block is given.
|
|
296
306
|
# @api public
|
|
297
|
-
# : (
|
|
298
|
-
# : (
|
|
299
|
-
def self.read: (
|
|
300
|
-
| (
|
|
307
|
+
# : (untyped source, ?password: String?) { (StreamSheet) -> void } -> void
|
|
308
|
+
# : (untyped source, ?password: String?) -> Elements::Workbook
|
|
309
|
+
def self.read: (untyped source, ?password: String?) { (StreamSheet) -> void } -> void
|
|
310
|
+
| (untyped source, ?password: String?) -> Elements::Workbook
|
|
301
311
|
|
|
302
312
|
# Writes an XLSX file or IO stream (streaming or in-memory), or returns a binary string.
|
|
303
313
|
#
|
|
304
|
-
# @overload write(target, strict_excel_mode: true, &block)
|
|
314
|
+
# @overload write(target, password: nil, strict_excel_mode: true, &block)
|
|
305
315
|
# Streaming write: yields a StreamWriter context for high-speed, zero-allocation XLSX generation.
|
|
306
316
|
# @param target [String, IO] Destination file path or writable IO object.
|
|
317
|
+
# @param password [String, nil] Optional password to encrypt the generated XLSX file.
|
|
307
318
|
# @param strict_excel_mode [Boolean] Whether to enforce Excel specifications.
|
|
308
319
|
# @yield [stream_writer]
|
|
309
320
|
# @yieldparam stream_writer [Xlsxrb::StreamWriter]
|
|
310
321
|
# @return [void]
|
|
311
322
|
#
|
|
312
|
-
# @overload write(workbook)
|
|
323
|
+
# @overload write(workbook, password: nil)
|
|
313
324
|
# In-memory write: exports the workbook to an in-memory binary String.
|
|
314
325
|
# @param workbook [Elements::Workbook] The workbook to write.
|
|
326
|
+
# @param password [String, nil] Optional password to encrypt the binary string.
|
|
315
327
|
# @return [String] Binary data representing the XLSX file.
|
|
316
328
|
#
|
|
317
|
-
# @overload write(target, workbook)
|
|
329
|
+
# @overload write(target, workbook, password: nil)
|
|
318
330
|
# In-memory write: writes the workbook to a file path or IO stream.
|
|
319
331
|
# @param target [String, IO] Destination file path or writable IO object.
|
|
320
332
|
# @param workbook [Elements::Workbook] The workbook to write.
|
|
333
|
+
# @param password [String, nil] Optional password to encrypt the output file.
|
|
321
334
|
# @return [void]
|
|
322
335
|
#
|
|
323
336
|
# @example Streaming write to file
|
|
@@ -325,6 +338,11 @@ module Xlsxrb
|
|
|
325
338
|
# writer.sheet("Sheet1") { |s| s.row(["Hello", "World"]) }
|
|
326
339
|
# end
|
|
327
340
|
#
|
|
341
|
+
# @example Password-protected streaming write
|
|
342
|
+
# Xlsxrb.write("protected.xlsx", password: "secret_password") do |writer|
|
|
343
|
+
# writer.sheet("Confidential") { |s| s.row(["Private Data", 100]) }
|
|
344
|
+
# end
|
|
345
|
+
#
|
|
328
346
|
# @example In-memory export to binary string
|
|
329
347
|
# binary_data = Xlsxrb.write(workbook)
|
|
330
348
|
#
|
|
@@ -332,12 +350,12 @@ module Xlsxrb
|
|
|
332
350
|
# Xlsxrb.write("output.xlsx", workbook)
|
|
333
351
|
#
|
|
334
352
|
# @api public
|
|
335
|
-
# : (Elements::Workbook workbook) -> String
|
|
336
|
-
# : (
|
|
337
|
-
# : (
|
|
338
|
-
def self.write: (Elements::Workbook workbook) -> String
|
|
339
|
-
| (
|
|
340
|
-
| (
|
|
353
|
+
# : (Elements::Workbook workbook, ?password: String?, ?encryption_mode: Symbol) -> String
|
|
354
|
+
# : (untyped target, Elements::Workbook | untyped workbook, ?password: String?, ?encryption_mode: Symbol) -> void
|
|
355
|
+
# : (untyped target_or_workbook, ?Elements::Workbook | untyped workbook_or_nil, ?password: String?, ?encryption_mode: Symbol, ?strict_excel_mode: bool) ?{ (StreamWriter) -> void } -> untyped
|
|
356
|
+
def self.write: (Elements::Workbook workbook, ?password: String?, ?encryption_mode: Symbol) -> String
|
|
357
|
+
| (untyped target, Elements::Workbook | untyped workbook, ?password: String?, ?encryption_mode: Symbol) -> void
|
|
358
|
+
| (untyped target_or_workbook, ?Elements::Workbook | untyped workbook_or_nil, ?password: String?, ?encryption_mode: Symbol, ?strict_excel_mode: bool) ?{ (StreamWriter) -> void } -> untyped
|
|
341
359
|
|
|
342
360
|
# Modifies an existing XLSX file.
|
|
343
361
|
# Reads the workbook, passes it to the block, and writes the result.
|
|
@@ -354,13 +372,14 @@ module Xlsxrb
|
|
|
354
372
|
#
|
|
355
373
|
# @param source [String, IO] The source file path or IO object.
|
|
356
374
|
# @param target [String, IO, nil] The target file path or IO object. If nil, overwrites source.
|
|
375
|
+
# @param password [String, nil] Optional password for reading and writing protected files.
|
|
357
376
|
# @yield [workbook] Yields the parsed workbook.
|
|
358
377
|
# @yieldparam workbook [Elements::Workbook] The parsed workbook.
|
|
359
378
|
# @yieldreturn [Elements::Workbook] The modified workbook.
|
|
360
379
|
# @return [void]
|
|
361
380
|
# @api public
|
|
362
|
-
# : (untyped source, ?untyped target) ?{ (Elements::Workbook) -> untyped } -> void
|
|
363
|
-
def self.modify: (untyped source, ?untyped target) ?{ (Elements::Workbook) -> untyped } -> void
|
|
381
|
+
# : (untyped source, ?untyped target, ?password: String?) ?{ (Elements::Workbook) -> untyped } -> void
|
|
382
|
+
def self.modify: (untyped source, ?untyped target, ?password: String?) ?{ (Elements::Workbook) -> untyped } -> void
|
|
364
383
|
|
|
365
384
|
# Represents a sheet being streamed sequentially from an XLSX file.
|
|
366
385
|
# Provides O(1) constant-memory streaming over rows and cells.
|
|
@@ -401,8 +420,9 @@ module Xlsxrb
|
|
|
401
420
|
# @return [Enumerator, void]
|
|
402
421
|
# @api public
|
|
403
422
|
# : () { (StreamRow | Elements::Row) -> void } -> void
|
|
404
|
-
# :
|
|
423
|
+
# : () -> Enumerator[StreamRow | Elements::Row, void]
|
|
405
424
|
def each_row: () { (StreamRow | Elements::Row) -> void } -> void
|
|
425
|
+
| () -> Enumerator[StreamRow | Elements::Row, void]
|
|
406
426
|
|
|
407
427
|
# Iterate over all cells across rows continuously (O(1) memory).
|
|
408
428
|
#
|
|
@@ -411,8 +431,9 @@ module Xlsxrb
|
|
|
411
431
|
# @return [Enumerator, void]
|
|
412
432
|
# @api public
|
|
413
433
|
# : () { (Elements::Cell) -> void } -> void
|
|
414
|
-
# :
|
|
434
|
+
# : () -> Enumerator[Elements::Cell, void]
|
|
415
435
|
def each_cell: () { (Elements::Cell) -> void } -> void
|
|
436
|
+
| () -> Enumerator[Elements::Cell, void]
|
|
416
437
|
|
|
417
438
|
# Default Enumerable iteration iterates rows in the streaming sheet.
|
|
418
439
|
#
|
|
@@ -421,8 +442,9 @@ module Xlsxrb
|
|
|
421
442
|
# @return [Enumerator, void]
|
|
422
443
|
# @api public
|
|
423
444
|
# : () { (StreamRow | Elements::Row) -> void } -> void
|
|
424
|
-
# :
|
|
445
|
+
# : () -> Enumerator[StreamRow | Elements::Row, void]
|
|
425
446
|
def each: () { (StreamRow | Elements::Row) -> void } -> void
|
|
447
|
+
| () -> Enumerator[StreamRow | Elements::Row, void]
|
|
426
448
|
|
|
427
449
|
# Loads this sheet completely into an in-memory Elements::Worksheet,
|
|
428
450
|
# enabling coordinate random access (sheet["A1"]), row lookups (row_at),
|
|
@@ -46,13 +46,15 @@ async Task<ScenarioExecResult> RunScenario(string code, string xlsxPath)
|
|
|
46
46
|
typeof(Enumerable).Assembly,
|
|
47
47
|
typeof(Console).Assembly,
|
|
48
48
|
typeof(SpreadsheetDocument).Assembly,
|
|
49
|
-
typeof(OpenXmlValidator).Assembly
|
|
49
|
+
typeof(OpenXmlValidator).Assembly,
|
|
50
|
+
typeof(System.Security.Cryptography.Aes).Assembly
|
|
50
51
|
)
|
|
51
52
|
.AddImports(
|
|
52
53
|
"System",
|
|
53
54
|
"System.IO",
|
|
54
55
|
"System.Linq",
|
|
55
56
|
"System.Collections.Generic",
|
|
57
|
+
"System.Security.Cryptography",
|
|
56
58
|
"DocumentFormat.OpenXml",
|
|
57
59
|
"DocumentFormat.OpenXml.Packaging",
|
|
58
60
|
"DocumentFormat.OpenXml.Spreadsheet",
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: xlsxrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- niku
|
|
@@ -190,6 +190,10 @@ files:
|
|
|
190
190
|
- lib/xlsxrb/elements/workbook.rb
|
|
191
191
|
- lib/xlsxrb/elements/worksheet.rb
|
|
192
192
|
- lib/xlsxrb/ooxml.rb
|
|
193
|
+
- lib/xlsxrb/ooxml/cfb.rb
|
|
194
|
+
- lib/xlsxrb/ooxml/crypto.rb
|
|
195
|
+
- lib/xlsxrb/ooxml/crypto/agile.rb
|
|
196
|
+
- lib/xlsxrb/ooxml/crypto/standard.rb
|
|
193
197
|
- lib/xlsxrb/ooxml/reader.rb
|
|
194
198
|
- lib/xlsxrb/ooxml/shared_strings_parser.rb
|
|
195
199
|
- lib/xlsxrb/ooxml/styles_parser.rb
|
|
@@ -219,6 +223,10 @@ files:
|
|
|
219
223
|
- sig/generated/xlsxrb/elements/workbook.rbs
|
|
220
224
|
- sig/generated/xlsxrb/elements/worksheet.rbs
|
|
221
225
|
- sig/generated/xlsxrb/ooxml.rbs
|
|
226
|
+
- sig/generated/xlsxrb/ooxml/cfb.rbs
|
|
227
|
+
- sig/generated/xlsxrb/ooxml/crypto.rbs
|
|
228
|
+
- sig/generated/xlsxrb/ooxml/crypto/agile.rbs
|
|
229
|
+
- sig/generated/xlsxrb/ooxml/crypto/standard.rbs
|
|
222
230
|
- sig/generated/xlsxrb/ooxml/reader.rbs
|
|
223
231
|
- sig/generated/xlsxrb/ooxml/shared_strings_parser.rbs
|
|
224
232
|
- sig/generated/xlsxrb/ooxml/styles_parser.rbs
|