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

Defined Under Namespace

Classes: BuildEntry, Entry, LineParser, SieFile, Tokenizer

Constant Summary collapse

BEGINNING_OF_ARRAY =
"{"
END_OF_ARRAY =
"}"
ENTRY =

TODO: Could this format knowledge be shared with Tokenizer? It’s slightly different there.

/^\s*#/
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



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