Class: Nodaire::Tablatal

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/nodaire/tablatal/tablatal.rb,
lib/nodaire/tablatal/parser.rb

Overview

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.

Examples:

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

Defined Under Namespace

Classes: Parser

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#dataArray<Hash> (readonly)

Deprecated.

This will be removed in a future release. Use #to_a instead.

Returns:

  • (Array<Hash>)

Since:

  • 0.1.0



52
53
54
# File 'lib/nodaire/tablatal/tablatal.rb', line 52

def data
  @data
end

#errorsArray<String> (readonly)

Returns an array of zero or more error message strings.

Returns:

  • (Array<String>)

    an array of zero or more error message strings.

See Also:

Since:

  • 0.2.0



58
59
60
# File 'lib/nodaire/tablatal/tablatal.rb', line 58

def errors
  @errors
end

#keysArray (readonly)

Returns the keys from the first line of the source.

Returns:

  • (Array)

    the keys from the first line of the source.

Since:

  • 0.1.0



54
55
56
# File 'lib/nodaire/tablatal/tablatal.rb', line 54

def keys
  @keys
end

Class Method Details

.parse(source, symbolize_names: false) ⇒ Tablatal

Parse the document source.

Examples:

Read a Tablatal file

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

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

Read a Tablatal file and symbolize names

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

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

Parameters:

  • source (String)

    The document source to parse.

  • symbolize_names (Boolean) (defaults to: false)

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

Returns:

Since:

  • 0.2.0



83
84
85
86
87
# 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) ⇒ Tablatal

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

Examples:

Error handling

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

Parameters:

  • source (String)

    The document source to parse.

  • symbolize_names (Boolean) (defaults to: false)

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

Returns:

Raises:

Since:

  • 0.2.0



106
107
108
109
110
# 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

Instance Method Details

#[](index) ⇒ Hash

Returns the data for a given row index.

Examples:

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

Returns:

  • (Hash)

    the data for the given row index. If not found, returns nil.

Since:

  • 0.5.0



132
133
134
# File 'lib/nodaire/tablatal/tablatal.rb', line 132

def [](index)
  @data[index]
end

#each(&block) ⇒ Object

Enumerable

Since:

  • 0.1.0



171
172
173
# File 'lib/nodaire/tablatal/tablatal.rb', line 171

def each(&block)
  @data.each(&block)
end

#to_a(*args) ⇒ Array<Hash>

Convert the document to an array of hashes.

Returns:

  • (Array<Hash>)

Since:

  • 0.1.0



141
142
143
# File 'lib/nodaire/tablatal/tablatal.rb', line 141

def to_a(*args)
  @data.to_a(*args)
end

#to_csvString

Convert the document to CSV.

Returns:

  • (String)

Since:

  • 0.1.0



160
161
162
163
164
165
166
167
# 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) ⇒ String

Convert the document to JSON.

Returns:

  • (String)

Since:

  • 0.5.0



151
152
153
# File 'lib/nodaire/tablatal/tablatal.rb', line 151

def to_json(*args)
  @data.to_json(*args)
end

#valid?Boolean

Returns whether the source was parsed without errors.

Returns:

  • (Boolean)

    whether the source was parsed without errors.

See Also:

Since:

  • 0.2.0



117
118
119
# File 'lib/nodaire/tablatal/tablatal.rb', line 117

def valid?
  @errors.empty?
end