Class: Architect::Parser
- Inherits:
-
Object
- Object
- Architect::Parser
- Defined in:
- lib/architect/parser.rb
Overview
Parses yUML files
Instance Method Summary collapse
-
#get_node(markup) ⇒ Object
- markup
-
string containing content inside square brackets Returns Note or Class.
-
#get_statements(diagram) ⇒ Object
- diagram
-
String containing yUML markup Returns list of statments in diagram markup.
-
#parse(diagram) ⇒ Object
- diagram
-
String containing yUML markup Returns list of classes and list of associations in diagram.
-
#parse_statement(statement) ⇒ Object
- statement
-
String containing statement Returns a list of classes markup and association markup in the statement.
Instance Method Details
#get_node(markup) ⇒ Object
- markup
-
string containing content inside square brackets
Returns Note or Class
56 57 58 59 60 61 62 |
# 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) ⇒ Object
- diagram
-
String containing yUML markup
Returns list of statments in diagram markup
24 25 26 27 28 29 30 31 32 33 34 35 |
# 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) ⇒ Object
- diagram
-
String containing yUML markup
Returns list of classes and list of associations in diagram
12 13 14 15 16 17 18 19 20 |
# 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) ⇒ Object
- statement
-
String containing statement
Returns a list of classes markup and association markup in the statement
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 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 |