lib/rocket_job/sliced/output.rb in rocketjob-4.2.0 vs lib/rocket_job/sliced/output.rb in rocketjob-4.3.0.beta

- old
+ new

@@ -1,96 +1,21 @@ require 'tempfile' module RocketJob module Sliced class Output < Slices - # Write this output collection to the specified file/io stream - # - # Returns [Integer] the number of records returned from the collection - # - # Parameters - # file_name_or_io [String|IO] - # The file_name of the file to write to, or an IO Stream that implements - # #write. - # - # options: - # streams [Symbol|Array] - # The formats/streams that be used to convert the data whilst it is - # being written. - # When nil, `file_name_or_io` will be inspected to try and determine what - # streams should be applied. - # Default: nil - # - # Any other option that can be supplied to IOStreams::Line::Writer - # - # Stream types / extensions supported: - # .zip Zip File [ :zip ] - # .gz, .gzip GZip File [ :gzip ] - # .enc File Encrypted using symmetric encryption [ :enc ] - # - # When a file is encrypted, it may also be compressed: - # .zip.enc [ :zip, :enc ] - # .gz.enc [ :gz, :enc ] - # - # Example: Zip - # # Since csv is not known to RocketJob it is ignored - # job.output.download('myfile.csv.zip') - # - # Example: Encrypted Zip - # job.output.download('myfile.csv.zip.enc') - # - # Example: Explicitly set the streams - # job.output.download('myfile.ze', streams: [:zip, :enc]) - # - # Example: Supply custom options - # job.output.download('myfile.csv.enc', streams: [enc: { compress: true }]) - # - # Example: Supply custom options - # job.output.download('myfile.csv.zip', streams: [ zip: { zip_file_name: 'myfile.csv' } ]) - # - # Example: Extract streams from filename but write to a temp file - # t = Tempfile.new('my_project') - # job.output.download(t.to_path, file_name: 'myfile.gz.enc') - # - # Example: Add a header and/or trailer record to the downloaded file: - # IOStreams.writer('/tmp/file.txt.gz') do |writer| - # writer << "Header\n" - # job.download do |line| - # writer << line - # end - # writer << "Trailer\n" - # end - # - # Notes: - # - The records are returned in '_id' order. Usually this is the order in - # which the records were originally loaded. - def download(file_name_or_io = nil, header_line: nil, **args) - raise(ArgumentError, 'Either file_name_or_io, or a block must be supplied') unless file_name_or_io || block_given? + def download(header_line: nil) + raise(ArgumentError, 'Block is mandatory') unless block_given? - record_count = 0 + # Write the header line + yield(header_line) if header_line - if block_given? - # Write the header line - yield(header_line) if header_line - - # Call the supplied block for every record returned - each do |slice| - slice.each do |record| - record_count += 1 - yield(record) - end - end - else - IOStreams.line_writer(file_name_or_io, **args) do |io| - # Write the header line - io << header_line if header_line - - each do |slice| - slice.each do |record| - record_count += 1 - io << record - end - end + # Call the supplied block for every record returned + record_count = 0 + each do |slice| + slice.each do |record| + record_count += 1 + yield(record) end end record_count end end