Sha256: 41fdbe4a477585d789edd76a715284947d93e1f563cfbc0e98ff1e5162d2c979

Contents?: true

Size: 764 Bytes

Versions: 5

Compression:

Stored size: 764 Bytes

Contents

require "csv"

module Duracloud
  module TSV
    # @return [CSV::Table]
    def csv
      @csv ||= CSV::Table.new([]).tap do |csv|
        header_line, rows = tsv.split(/\r?\n/, 2)
        headers = header_line.split("\t").map { |h| h.downcase.gsub(/-/, "_") }
        header_row = CSV::Row.new(headers, headers, true)
        csv << header_row
        rows.split(/\r?\n/).each do |row|
          csv << row.split("\t")
        end
      end
    end

    # @return [Enumerator] rows as hashes
    def rows
      Enumerator.new do |e|
        csv.by_row!.each do |row|
          next if row.header_row?
          e << row.to_hash
        end
      end
    end

    def tsv
      raise NotImplementedError, "Including module must implement `tsv`."
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
duracloud-client-0.2.0 lib/duracloud/tsv.rb
duracloud-client-0.1.5 lib/duracloud/tsv.rb
duracloud-client-0.1.4 lib/duracloud/tsv.rb
duracloud-client-0.1.3 lib/duracloud/tsv.rb
duracloud-client-0.1.2 lib/duracloud/tsv.rb