Class: MendixBridge::MicroflowParser

Inherits:
Object
  • Object
show all
Defined in:
lib/mendix_bridge/microflow_parser.rb

Class Method Summary collapse

Class Method Details

.parse(description) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/mendix_bridge/microflow_parser.rb', line 6

def parse(description)
  mdl = description.fetch("mdl")
  header = mdl.match(
    /\b(?:microflow|nanoflow)\s+(?<name>[\w.]+)\s*\((?<parameters>.*?)\)\s*(?:returns\s+(?<returns>\S+))?/im
  )
  body = mdl[/\nbegin\s*\n(?<body>.*)\nend;\s*(?:\n|$)/im, :body]

  return { "mdl" => mdl, "parse_status" => "unsupported" } unless header && body

  activities = parse_activities(body)
  microflow_calls = calls(mdl, "microflow")
  nanoflow_calls = calls(mdl, "nanoflow")
  javascript_action_calls = calls(mdl, "javascript action")
  {
    "parameters" => parse_parameters(header[:parameters]),
    "return_type" => header[:returns],
    "folder" => mdl[/^folder\s+'([^']*)'/i, 1],
    "variables" => activities.filter_map { |activity| activity["result_variable"] }.uniq,
    "activities" => activities,
    "calls" => all_calls(mdl),
    "microflow_calls" => microflow_calls,
    "nanoflow_calls" => nanoflow_calls,
    "javascript_action_calls" => javascript_action_calls,
    "execute_roles" => mdl.scan(
      /^grant\s+execute\s+on\s+microflow\s+[\w.]+\s+to\s+([\w.]+)/i
    ).flatten,
    "mdl" => mdl,
    "parse_status" => "parsed"
  }.compact
end