From 9d09578b2967120a33f4ebab3390ca145c977fb9 Mon Sep 17 00:00:00 2001 From: Andrew Hodgkinson Date: Wed, 8 Jan 2025 09:45:00 +1300 Subject: [PATCH] ZipTricks 5.x -> ZipKit 6.x (new gem name, same API) --- CHANGELOG.md | 2 +- lib/xlsxtream/io/zip_kit.rb | 45 ++++++++++++++++++++++++++++++++++ lib/xlsxtream/io/zip_tricks.rb | 45 ++++++++++++++++++++++++++++++++++ lib/xlsxtream/worksheet.rb | 1 - 4 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 lib/xlsxtream/io/zip_kit.rb create mode 100644 lib/xlsxtream/io/zip_tricks.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index ab688a5..0dc5789 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,7 +40,7 @@ ## 2.0.1 (2018-03-11) - Rescue gracefully from invalid dates with auto-format (#22) -- Remove unused ZipTricksFibers IO wrapper (#24) +- Remove unused ZipKitFibers IO wrapper (#24) ## 2.0.0 (2017-10-31) diff --git a/lib/xlsxtream/io/zip_kit.rb b/lib/xlsxtream/io/zip_kit.rb new file mode 100644 index 0000000..a7d6236 --- /dev/null +++ b/lib/xlsxtream/io/zip_kit.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true +require "zip_kit" + +module Xlsxtream + module IO + class ZipKit + BUFFER_SIZE = 64 * 1024 + + def initialize(body) + @streamer = ::ZipKit::Streamer.new(body) + @wf = nil + @buffer = String.new + end + + def <<(data) + @buffer << data + flush_buffer if @buffer.size >= BUFFER_SIZE + self + end + + def add_file(path) + flush_file + @wf = @streamer.write_deflated_file(path) + end + + def close + flush_file + @streamer.close + end + + private + + def flush_buffer + @wf << @buffer + @buffer.clear + end + + def flush_file + return unless @wf + flush_buffer if @buffer.size > 0 + @wf.close + end + end + end +end diff --git a/lib/xlsxtream/io/zip_tricks.rb b/lib/xlsxtream/io/zip_tricks.rb new file mode 100644 index 0000000..a7d6236 --- /dev/null +++ b/lib/xlsxtream/io/zip_tricks.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true +require "zip_kit" + +module Xlsxtream + module IO + class ZipKit + BUFFER_SIZE = 64 * 1024 + + def initialize(body) + @streamer = ::ZipKit::Streamer.new(body) + @wf = nil + @buffer = String.new + end + + def <<(data) + @buffer << data + flush_buffer if @buffer.size >= BUFFER_SIZE + self + end + + def add_file(path) + flush_file + @wf = @streamer.write_deflated_file(path) + end + + def close + flush_file + @streamer.close + end + + private + + def flush_buffer + @wf << @buffer + @buffer.clear + end + + def flush_file + return unless @wf + flush_buffer if @buffer.size > 0 + @wf.close + end + end + end +end diff --git a/lib/xlsxtream/worksheet.rb b/lib/xlsxtream/worksheet.rb index c098b03..a2d3f6a 100644 --- a/lib/xlsxtream/worksheet.rb +++ b/lib/xlsxtream/worksheet.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require "xlsxtream/xml" require "xlsxtream/row" -require "xlsxtream/header_row" module Xlsxtream class Worksheet