Class: Sie::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/sie/parser.rb,
lib/sie/parser/entry.rb,
lib/sie/parser/sie_file.rb,
lib/sie/parser/tokenizer.rb,
lib/sie/parser/build_entry.rb,
lib/sie/parser/entry_types.rb,
lib/sie/parser/line_parser.rb,
lib/sie/parser/tokenizer/token.rb,
lib/sie/parser/tokenizer/character.rb

Defined Under Namespace

Classes: BuildEntry, Entry, LineParser, SieFile, Tokenizer

Constant Summary collapse

BEGINNING_OF_ARRAY =

TODO: Could this format knowledge be centrailized somewhere, some of this is duplicated in Character.

"{"
END_OF_ARRAY =
"}"
ENTRY =
/^#/
ENTRY_TYPES =
{
  "adress" => [ 'kontakt', 'utdelningsadr', 'postadr', 'tel' ],
  "bkod" => [ 'SNI-kod' ],
  "dim" => [ 'dimensionsnr', 'namn' ],
  "enhet" => [ 'kontonr', 'enhet' ],
  "flagga" => [ 'x' ],
  "fnamn" => [ 'foretagsnamn' ],
  "fnr" => [ 'foretagsid' ],
  "format" => [ 'PC8' ],
  "ftyp" => [ 'foretagstyp' ],
  "gen" => [ 'datum', 'sign' ],
  "ib" => [ 'arsnr', 'konto', 'saldo', 'kvantitet' ],
  "konto" => [ 'kontonr', 'kontonamn' ],
  "kptyp" => [ 'typ' ],
  "ktyp" => [ 'kontonr', 'kontotyp' ],
  "objekt" => [ 'dimensionsnr', 'objektnr', 'objektnamn' ],
  "oib" => [ 'arsnr', 'konto', { name: 'objekt', type: [ 'dimensionsnr', 'objektnr' ] }, 'saldo', 'kvantitet' ],
  "omfattn" => [ 'datum' ],
  "orgnr" => [ 'orgnr', 'forvnr', 'verknr' ],
  "oub" => [ 'arsnr', 'konto', { name: 'objekt', type: [ 'dimensionsnr', 'objektnr' ] }, 'saldo', 'kvantitet' ],
  "pbudget" => [ 'arsnr', 'period', 'konto', { name: 'objekt', type: [ 'dimensionsnr', 'objektnr' ] }, 'saldo', 'kvantitet' ],
  "program" => [ 'programnamn', 'version' ],
  "prosa" => [ 'text' ],
  "psaldo" => [ 'arsnr', 'period', 'konto', { name: 'objekt', type: [ 'dimensionsnr', 'objektnr' ] }, 'saldo', 'kvantitet' ],
  "rar" => [ 'arsnr', 'start', 'slut' ],
  "res" => [ 'ars', 'konto', 'saldo', 'kvantitet' ],
  "sietyp" => [ 'typnr' ],
  "sru" => [ 'konto', 'SRU-kod' ],
  "taxar" => [ 'ar' ],
  "trans" => [ 'kontonr', { name: 'objektlista', type: [ 'dimensionsnr', 'objektnr' ], many: true }, 'belopp', 'transdat', 'transtext', 'kvantitet', 'sign' ],
  "rtrans" => [ 'kontonr', { name: 'objektlista', type: [ 'dimensionsnr', 'objektnr' ], many: true }, 'belopp', 'transdat', 'transtext', 'kvantitet', 'sign' ],
  "btrans" => [ 'kontonr', { name: 'objektlista', type: [ 'dimensionsnr', 'objektnr' ], many: true }, 'belopp', 'transdat', 'transtext', 'kvantitet', 'sign' ],
  "ub" => [ 'arsnr', 'konto', 'saldo', 'kvantitet' ],
  "underdim" => [ 'dimensionsnr', 'namn', 'superdimension' ],
  "valuta" => [ 'valutakod' ],
  "ver" => [ 'serie', 'vernr', 'verdatum', 'vertext', 'regdatum', 'sign' ]
}

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Parser

Returns a new instance of Parser.



14
15
16
# File 'lib/sie/parser.rb', line 14

def initialize(options = {})
  @options = options
end

Instance Method Details

#parse(io) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/sie/parser.rb', line 18

def parse(io)
  stack = []
  sie_file = SieFile.new
  current = sie_file

  io.each_line do |line|
    line = line.chomp

    case line
    when BEGINNING_OF_ARRAY
      stack << current
      current = current.entries.last
    when END_OF_ARRAY
      current = stack.pop
    when ENTRY
      current.entries << parse_line(line)
    end
  end

  sie_file
end