class TSV::Table

Attributes

header[RW]
source[RW]

Public Class Methods

new(source, params = {}, &block) click to toggle source
# File lib/tsv/table.rb, line 10
def initialize(source, params = {}, &block)
  self.header = params.fetch(:header, true)
  self.source = source
  self.enumerator.each(&block) if block_given?
end

Public Instance Methods

data_enumerator() click to toggle source
# File lib/tsv/table.rb, line 47
def data_enumerator
  source.each_line
end
enumerator() click to toggle source
# File lib/tsv/table.rb, line 24
def enumerator
  @enumerator ||= ::Enumerator.new do |y|
    lines = data_enumerator

    first_line = generate_row_from begin
      lines.next
    rescue StopIteration => ex
      ''
    end

    local_header = if self.header
      first_line
    else
      lines.rewind
      generate_default_header_from first_line
    end

    loop do
      y << TSV::Row.new(generate_row_from(lines.next).freeze, local_header.freeze)
    end
  end
end
with_header() click to toggle source
# File lib/tsv/table.rb, line 16
def with_header
  self.class.new(self.source, header: true)
end
without_header() click to toggle source
# File lib/tsv/table.rb, line 20
def without_header
  self.class.new(self.source, header: false)
end

Protected Instance Methods

generate_default_header_from(example_line) click to toggle source
# File lib/tsv/table.rb, line 57
def generate_default_header_from(example_line)
  (0...example_line.length).to_a.map(&:to_s)
end
generate_row_from(str) click to toggle source
# File lib/tsv/table.rb, line 53
def generate_row_from(str)
  str.to_s.chomp.split("\t", -1)
end