class EasySwig::Readers::CsvParser

Attributes

col_headers[RW]
table[RW]

Public Class Methods

new(csv_file, lang) click to toggle source
# File lib/readers/csv_parser.rb, line 8
def initialize csv_file, lang
  @lang = lang
  @csv_file=csv_file
  @col_headers = {}
  @table = []
  parse
end

Public Instance Methods

namespaces_from_csv() click to toggle source

Generate namespace object representations from an input CSV file

# File lib/readers/csv_parser.rb, line 40
def namespaces_from_csv
  obj=nil
  namespaces=[]
  last_ns=nil
  last_class=nil

  @table.each { |type|
    ignore = type['ignore']
    obj=nil
    case type['node_type']
      when 'namespace'
        obj=ApiNamespace.new(type)
        last_ns=obj
        namespaces << obj
      when 'class'
        type['parent'] = last_ns
        obj=ApiClass.new(type)
        last_class=obj            
        if ignore
          last_ns.ignored_classes << obj
        else
          last_ns.api_classes << obj
        end
      when 'enum'
        type['parent'] = last_ns
        obj=ApiEnum.new(type)
        if ignore
          last_ns.ignored_enums << obj
        else
          last_ns.api_enums << obj
        end            
      when 'function'
        type['parent'] = last_ns
        obj=ApiFunction.new(type)
        if ignore
          last_ns.ignored_functions << obj
        else
          last_ns.api_functions << obj
        end
      when 'variable'
        type['parent'] = last_ns
        obj=ApiVariable.new(type)
        if ignore
          last_ns.ignored_variables << obj
        else
          last_ns.api_variables << obj
        end
      when 'method'
        type['parent'] = last_class
        obj=ApiMethod.new(type)
        if ignore
          last_class.ignored_methods << obj
        else
          last_class.api_methods << obj
        end
      when 'innerclass'
        type['parent'] = last_class
        obj=ApiClass.new(type)
        if ignore
          last_class.ignored_innerclasses << obj
        else
          last_class.api_innerclasses << obj
        end            
      when 'innerenum'
        type['parent'] = last_class
        obj=ApiEnum.new(type)
        if ignore
          last_class.ignored_enums << obj
        else
          last_class.api_enums << obj
        end
      when 'attribute'
        type['parent'] = last_class
        obj=ApiAttribute.new(type)
        if ignore
          last_class.ignored_attributes << obj
        else
          last_class.api_attributes << obj
        end
      else
        raise "Malformed CSV Input: Node type " + type["node_type"] + " does not exist"
    end
  }
  namespaces
end
parse() click to toggle source
# File lib/readers/csv_parser.rb, line 16
def parse
  File.open(@csv_file) { |f|
    aux = f.readline
    var = aux.chomp.split(%r{[,\t]})
    until var[0]==nil || var[0].empty?
      @col_headers[var[0]] = var[1..-1]
      var = f.readline.chomp.split(%r{[,\t]})
    end
    until f.eof?
      row = f.readline.chomp.split(%r{[,\t]})
      row.each { |r| r.strip! }
      rowtype=row[0]
      if rowtype.nil? || rowtype.empty?
        next
      end
      row = @col_headers[rowtype].zip(row[1..-1]).flatten
      lang_features = EasySwig::Features.create_instance @lang 
      line = Hash['features', lang_features, 'node_type', rowtype, *row].delete_if { |k, v| k=="" || v.nil? || v.empty? }
      @table << line
    end
  }
end