class Architect::Parser

Parses yUML files

Public Instance Methods

get_node(markup) click to toggle source
markup

string containing content inside square brackets

Returns Note or Class

# File lib/architect/parser.rb, line 56
def get_node(markup)
  if /^note/i.match(markup) != nil
    return Note.new(markup)
  else
    return Class.new(markup)
  end
end
get_statements(diagram) click to toggle source
diagram

String containing yUML markup

Returns list of statments in diagram markup

# File lib/architect/parser.rb, line 24
def get_statements(diagram)
  statements = diagram.split(/\][,\s]*\[/) # split on "]*["
  
  #insert removed square brackets back
  statements = statements.each_with_index.map do |statement, i|
    statement = statement.strip
    statement = "[" + statement if statement[0] != "["
    statement = statement + "]" if statement[-1] != "]"
    statement
  end
  return statements
end
parse(diagram) click to toggle source
diagram

String containing yUML markup

Returns list of classes and list of associations in diagram

# File lib/architect/parser.rb, line 12
def parse(diagram)
  elements = []
  statements = get_statements(diagram)
  statements.each do |statement|
    new_elements = parse_statement(statement)
    elements = elements + new_elements
  end
  return elements
end
parse_statement(statement) click to toggle source
statement

String containing statement

Returns a list of classes markup and association markup in the statement

# File lib/architect/parser.rb, line 39
def parse_statement(statement)
  pattern = /\[(?<node1>.+?)\](?<association>.+?)\[(?<node2>.+)\]/ 
  tokens = pattern.match(statement)
  if tokens
    node1 = get_node(tokens[:node1])
    node2 = get_node(tokens[:node2])
    association = Association.new(node1, node2, tokens[:association])
    return [node1, node2, association]
  else
    tokens = /\[(?<node1>.*)\]/.match(statement)
    node1 = get_node(tokens[:node1])
    return [node1]
  end
end