Sha256: daaf9c6c74d091266d2c2ebded3e2c969598e914c68b8785a340d1c0dbc0ead7

Contents?: true

Size: 974 Bytes

Versions: 6

Compression:

Stored size: 974 Bytes

Contents

module Csb
  class Template < Builder
    attr_accessor :utf8_bom, :filename, :streaming, :items
    attr_reader :cols

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

    def build
      streaming ? build_enumerator : build_string
    end

    def streaming?
      !!streaming
    end

    private

    def build_string
      builder = Builder.new(utf8_bom: utf8_bom, items: items)
      builder.cols.copy!(cols)
      builder.build
    end

    def build_enumerator
      Enumerator.new do |y|
        begin
          builder = Builder.new(y, utf8_bom: utf8_bom, items: items)
          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

6 entries across 6 versions & 1 rubygems

Version Path
csb-0.3.0 lib/csb/template.rb
csb-0.2.4 lib/csb/template.rb
csb-0.2.3 lib/csb/template.rb
csb-0.2.2 lib/csb/template.rb
csb-0.2.1 lib/csb/template.rb
csb-0.2.0 lib/csb/template.rb