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")
= 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 && 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([:parameters]),
"return_type" => [: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
|