class Architect::Parser
Parses yUML files
Public Instance Methods
get_node(markup)
click to toggle source
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