class Nodaire::Tablatal

Interface for documents in Tablatal format.

Tablatal is a text file format which represents a 'list-type database'. This format was created by Devine Lu Linvega – see wiki.xxiivv.com/#tablatal for more information.

@example

require 'nodaire/tablatal'

source = <<~TBTL
  NAME    AGE   COLOR
  Erica   12    Opal
  Alex    23    Cyan
  Nike    34    Red
  Ruca    45    Grey
TBTL

doc = Nodaire::Tablatal.parse(source)

doc.valid?
#=> true

doc.keys
#=> ["NAME", "AGE", "COLOR"]

doc[0]['NAME']
#=> "Erica"

doc.to_a
#=> [{"NAME"=>"Erica", "AGE"=>"12", "COLOR"=>"Opal"}, ...]

doc.to_json
#=> '[{"NAME":"Erica","AGE":"12","COLOR":"Opal"},...]'

doc.to_csv
#=> "NAME,AGE,COLOR\nErica,12,Opal\nAlex,23,Cyan\n..."

@since 0.1.0

Attributes

data[R]

@deprecated This will be removed in a future release. Use {#to_a} instead. @return [Array<Hash>]

errors[R]

@return [Array<String>] an array of zero or more error message strings. @see valid? @since 0.2.0

keys[R]

@return [Array] the keys from the first line of the source.

Public Class Methods

new(parser) click to toggle source
# File lib/nodaire/tablatal/tablatal.rb, line 177
def initialize(parser)
  @data = parser.data
  @keys = parser.keys
  @errors = parser.errors
end
parse(source, symbolize_names: false) click to toggle source

Parse the document source.

@example Read a Tablatal file

source = File.read('example.tbtl')

doc = Nodaire::Tablatal.parse(source)
puts doc.first['NAME']

@example Read a Tablatal file and symbolize names

source = File.read('example.tbtl')

doc = Nodaire::Tablatal.parse(source, symbolize_names: true)
puts doc.first[:name]

@param [String] source The document source to parse. @param [Boolean] symbolize_names

If +true+, normalize key names and convert them to lowercase symbols.
If +false+, convert keys to uppercase strings.

@return [Tablatal] @since 0.2.0

# File lib/nodaire/tablatal/tablatal.rb, line 83
def self.parse(source, symbolize_names: false)
  parser = Parser.new(source, false, symbolize_names: symbolize_names)

  new(parser)
end
parse!(source, symbolize_names: false) click to toggle source

Parse the document source, raising an exception if a parser error occurs.

@example Error handling

begin
  doc = Nodaire::Tablatal.parse(source)
  puts doc.first
rescue Nodaire::ParserError => error
  puts error
end

@param (see .parse)

@return [Tablatal] @raise [ParserError] @since 0.2.0

# File lib/nodaire/tablatal/tablatal.rb, line 106
def self.parse!(source, symbolize_names: false)
  parser = Parser.new(source, true, symbolize_names: symbolize_names)

  new(parser)
end

Public Instance Methods

[](index) click to toggle source

Returns the data for a given row index.

@example

doc = Nodaire::Tablatal.parse(source)
puts doc[0]

@return [Hash] the data for the given row index.

If not found, returns +nil+.

@since 0.5.0

# File lib/nodaire/tablatal/tablatal.rb, line 132
def [](index)
  @data[index]
end
each(&block) click to toggle source

Enumerable @private

# File lib/nodaire/tablatal/tablatal.rb, line 171
def each(&block)
  @data.each(&block)
end
to_a(*args) click to toggle source

Convert the document to an array of hashes.

@return [Array<Hash>]

# File lib/nodaire/tablatal/tablatal.rb, line 141
def to_a(*args)
  @data.to_a(*args)
end
to_csv() click to toggle source

Convert the document to CSV.

@return [String]

# File lib/nodaire/tablatal/tablatal.rb, line 160
def to_csv
  CSV.generate do |csv|
    csv << keys
    data.each do |row|
      csv << keys.map { |key| row[key] }
    end
  end
end
to_json(*args) click to toggle source

Convert the document to JSON.

@return [String] @since 0.5.0

# File lib/nodaire/tablatal/tablatal.rb, line 151
def to_json(*args)
  @data.to_json(*args)
end
valid?() click to toggle source

@return [Boolean] whether the source was parsed without errors. @see errors @since 0.2.0

# File lib/nodaire/tablatal/tablatal.rb, line 117
def valid?
  @errors.empty?
end