Sha256: febf3160f57b89075be092d07100c5635b3047e19c06469a9335cad512198ffe
Contents?: true
Size: 1.07 KB
Versions: 2
Compression:
Stored size: 1.07 KB
Contents
class Tableware class Parser class TableWithoutHeaderError < StandardError; end ROW_START = /^\s*\|/ ROW_END = /\|\s*$/ def arrays(input) make_arrays(input) end def hashes(input) items = make_arrays(input) raise TableWithoutHeaderError, 'Sorry, only text tables with headers rows can be turned into hashes' unless @headers items.map! { |row| @headers.zip(row).to_h } end private def make_arrays(input) lines = prepare_lines(input) lines[@data_start..-1].map { |line| parse_line(line) } end private def prepare_lines(input) lines = input.strip.lines @data_start = lines[1] =~ /^\s*[-=\|]+\s*$/ ? 2 : 0 if @data_start.nonzero? @headers = parse_line(lines[0]) .map!(&:downcase) .map! { |head| head.gsub(/\s+/, '_') } .map!(&:to_sym) end lines end private def parse_line(line) line .sub(ROW_START, '') .sub(ROW_END, '') .split('|') .map!(&:strip) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tableware-0.1.2 | lib/tableware/parser.rb |
tableware-0.1.1 | lib/tableware/parser.rb |