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
@deprecated This will be removed in a future release. Use {#to_a} instead. @return [Array<Hash>]
@return [Array<String>] an array of zero or more error message strings. @see valid?
@since 0.2.0
@return [Array] the keys from the first line of the source.
Public Class Methods
# File lib/nodaire/tablatal/tablatal.rb, line 177 def initialize(parser) @data = parser.data @keys = parser.keys @errors = parser.errors end
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 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
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
Enumerable @private
# File lib/nodaire/tablatal/tablatal.rb, line 171 def each(&block) @data.each(&block) end
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
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
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
@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