Sha256: 9cd4f948ab2a0a2e2e8dd50ed3cf9cb00f60448a4d9f87b10a1596ea8136a7d8

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

module Csb
  class Template
    attr_accessor :utf8_bom, :filename, :streaming, :items, :cols, :csv_options

    def initialize(streaming:)
      @streaming = streaming
      @cols = Cols.new
      @items = []
    end

    def build
      streaming ? build_enumerator : build_string
    end

    def streaming?
      !!streaming
    end

    private

    def builder_options
      {
        items: items,
        utf8_bom: utf8_bom,
        csv_options: csv_options,
      }.compact
    end

    def build_string
      builder = Builder.new(**builder_options)
      builder.cols.copy!(cols)
      builder.build
    end

    def build_enumerator
      Enumerator.new do |y|
        begin
          builder = Builder.new(y, **builder_options)
          builder.cols.copy!(cols)
          builder.build
        rescue => error
          if Csb.configuration.after_streaming_error.respond_to?(:call)
            Csb.configuration.after_streaming_error.call(error)
          end
          raise error
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
csb-0.13.0 lib/csb/template.rb
csb-0.12.0 lib/csb/template.rb