lucidMachines 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.~lock.integration.csv# +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +32 -0
- data/README.md +39 -0
- data/Rakefile +2 -0
- data/aasm_export.rb +380 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/chart.rb +133 -0
- data/comptes/#comptes.rb# +66 -0
- data/comptes/comptes.rb +64 -0
- data/comptes/comptes.rb~ +56 -0
- data/comptes/credentials.json +1 -0
- data/comptes/token.yaml +2 -0
- data/credentials.json +1 -0
- data/elements.rb +111 -0
- data/exe/lucidMachines +6 -0
- data/exporter.rb +41 -0
- data/graphviz_export.rb +75 -0
- data/integration.csv +213 -0
- data/lib/lucidMachines/aasm_export.rb +376 -0
- data/lib/lucidMachines/chart.rb +132 -0
- data/lib/lucidMachines/cli.rb +68 -0
- data/lib/lucidMachines/elements.rb +107 -0
- data/lib/lucidMachines/exporter.rb +39 -0
- data/lib/lucidMachines/graphviz_export.rb +71 -0
- data/lib/lucidMachines/loader.rb +95 -0
- data/lib/lucidMachines/version.rb +3 -0
- data/lib/lucidMachines.rb +19 -0
- data/loader.rb +99 -0
- data/lucidMachines.gemspec +48 -0
- data/quickstart/quickstart/credentials.json +1 -0
- data/quickstart/quickstart/quickstart.rb +54 -0
- data/quickstart/quickstart/token.yaml +2 -0
- metadata +167 -0
data/integration.csv
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
Id,Name,Shape Library,Page ID,Contained By,Group,Line Source,Line Destination,Source Arrow,Destination Arrow,Text Area 1,Duration,GPS,ID,Nom,STEPS
|
2
|
+
1,Page,,,,,,,,,Page 1,,,,,
|
3
|
+
2,Text,Default,1,,,,,,,"Find file , 5 mins",5,,,,Find file
|
4
|
+
3,Test étapes,Default,1,,,,,,,"Download file , 10 mins",10,,,,Download file
|
5
|
+
4,Test étapes,Default,1,,,,,,,"Make coffee
|
6
|
+
, 3 mins",3,,,,"Make coffee
|
7
|
+
"
|
8
|
+
5,Test étapes,Default,1,,,,,,,"check download , 2 mins",2,,,,check download
|
9
|
+
6,Test étapes,Default,1,,,,,,,"Clean mug
|
10
|
+
, 2 mins",2,,,,"Clean mug
|
11
|
+
"
|
12
|
+
7,Test étapes,Default,1,,,,,,,"end , 1 mins",1,,,,end
|
13
|
+
8,Text,Default,1,11:1,,,,,,"ID: 2
|
14
|
+
Nom: Stockage1
|
15
|
+
GPS: ",,,2,Stockage1,
|
16
|
+
9,Text,Default,1,11:1,,,,,,"ID: 3
|
17
|
+
Nom: Stockage2
|
18
|
+
GPS: ",,,3,Stockage2,
|
19
|
+
10,Swim Lane,Flowchart Shapes,1,,,,,,,Stockage externe,,,,,
|
20
|
+
11,Swim Lane,Flowchart Shapes,1,,,,,,,Swim Lane,,,,,
|
21
|
+
12,Text,Default,1,10:1,,,,,,"ID: 2
|
22
|
+
Nom: Stockage1
|
23
|
+
GPS: ",,,2,Stockage1,
|
24
|
+
13,Text,Default,1,10:1,,,,,,Text,,,,,
|
25
|
+
14,Text,Default,1,10:1,,,,,,Text,,,,,
|
26
|
+
15,Line,,1,,,2,3,None,Arrow,,,,,,
|
27
|
+
16,Line,,1,,,3,4,None,Arrow,,,,,,
|
28
|
+
17,Line,,1,,,4,6,None,Arrow,,,,,,
|
29
|
+
18,Line,,1,,,6,7,None,Arrow,,,,,,
|
30
|
+
19,Line,,1,,,3,5,None,Arrow,,,,,,
|
31
|
+
20,Line,,1,,,5,7,None,Arrow,,,,,,
|
32
|
+
21,Page,,,,,,,,,Page 2,,,,,
|
33
|
+
22,SVGPathBlock2,,21,,,,,,,,,,,,
|
34
|
+
23,Text,Default,21,25:1,,,,,,"ID: 2
|
35
|
+
Nom: Stockage1
|
36
|
+
GPS: ",,,2,Stockage1,
|
37
|
+
24,Text,Default,21,25:1,,,,,,"ID: 3
|
38
|
+
Nom: Stockage2
|
39
|
+
GPS: ",,,3,Stockage2,
|
40
|
+
25,Swim Lane,Flowchart Shapes,21,,,,,,,Stockage externe,,,,,
|
41
|
+
26,Page,,,,,,,,,Root,,,,,
|
42
|
+
27,Page,,,,,,,,,Financement,,,,,
|
43
|
+
28,Process,Flowchart Shapes,27,,,,,,,Ouverture Financement,,,,,
|
44
|
+
29,Terminator,Flowchart Shapes,27,,,,,,,Financement acquis,,,,,
|
45
|
+
30,Terminator,Flowchart Shapes,27,,,,,,,Financement refusé,,,,,
|
46
|
+
31,Decision,Flowchart Shapes,27,,,,,,,Besoin financement,,,,,
|
47
|
+
32,Process,Flowchart Shapes,27,,,,,,,Recherche financement,,,,,
|
48
|
+
33,Process,Flowchart Shapes,27,,,,,,,Financement bancaire en cours,,,,,
|
49
|
+
34,Decision,Flowchart Shapes,27,,,,,,,accepté?,,,,,
|
50
|
+
35,Process,Flowchart Shapes,27,,,,,,,Proposition crédit,,,,,
|
51
|
+
36,Decision,Flowchart Shapes,27,,,,,,,accepté?,,,,,
|
52
|
+
37,Note,Flowchart Shapes,27,,,,,,,Initial,,,,,
|
53
|
+
38,Process,Flowchart Shapes,27,,,,,,,Attente décision,,,,,
|
54
|
+
39,Line,,27,,,31,32,None,Arrow,Yes,,,,,
|
55
|
+
40,Line,,27,,,31,29,None,Arrow,No,,,,,
|
56
|
+
41,Line,,27,,,28,31,None,Arrow,,,,,,
|
57
|
+
42,Line,,27,,,32,33,None,Arrow,,,,,,
|
58
|
+
43,Line,,27,,,33,34,None,Arrow,,,,,,
|
59
|
+
44,Line,,27,,,34,29,None,Arrow,Yes,,,,,
|
60
|
+
45,Line,,27,,,34,30,None,Arrow,No,,,,,
|
61
|
+
46,Line,,27,,,32,35,None,Arrow,,,,,,
|
62
|
+
47,Line,,27,,,35,36,None,Arrow,,,,,,
|
63
|
+
48,Line,,27,,,36,29,None,Arrow,Yes,,,,,
|
64
|
+
49,Line,,27,,,36,30,None,Arrow,No,,,,,
|
65
|
+
50,Line,,27,,,32,32,None,Arrow,Vérification solvabilité,,,,,
|
66
|
+
51,Line,,27,,,37,28,None,Arrow,,,,,,
|
67
|
+
52,Line,,27,,,35,38,Open Arrow,Hollow Arrow,,,,,,
|
68
|
+
53,Page,,,,,,,,,state machine def,,,,,
|
69
|
+
54,event,Flowchart Shapes,53,,,,,,,event,,,,,
|
70
|
+
55,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
71
|
+
56,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
72
|
+
57,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
73
|
+
58,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
74
|
+
59,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
75
|
+
60,state,Flowchart Shapes,53,,,,,,,state,,,,,
|
76
|
+
61,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
77
|
+
62,code,Flowchart Shapes,53,,,,,,,code,,,,,
|
78
|
+
63,state,Flowchart Shapes,53,,,,,,,state,,,,,
|
79
|
+
64,event,Flowchart Shapes,53,,,,,,,event1,,,,,
|
80
|
+
65,state,Flowchart Shapes,53,,,,,,,state,,,,,
|
81
|
+
66,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
82
|
+
67,state,Flowchart Shapes,53,,,,,,,state,,,,,
|
83
|
+
68,event,Flowchart Shapes,53,,,,,,,event1,,,,,
|
84
|
+
69,state,Flowchart Shapes,53,,,,,,,state,,,,,
|
85
|
+
70,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
86
|
+
71,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
87
|
+
72,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
88
|
+
73,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
89
|
+
74,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
90
|
+
75,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
91
|
+
76,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
92
|
+
77,Process,Flowchart Shapes,53,,,,,,,state,,,,,
|
93
|
+
78,Note,Flowchart Shapes,53,,,,,,,Initial,,,,,
|
94
|
+
79,method,Flowchart Shapes,53,,,,,,,method call,,,,,
|
95
|
+
80,transition,Flowchart Shapes,53,,,,,,,,,,,,
|
96
|
+
81,Line,,53,,,55,54,None,Arrow,before,,,,,
|
97
|
+
82,Line,,53,,,54,56,None,Arrow,after,,,,,
|
98
|
+
83,Line,,53,,,54,57,None,Arrow,error,,,,,
|
99
|
+
84,Line,,53,,,54,58,None,Arrow,success,,,,,
|
100
|
+
85,Line,,53,,,59,60,None,Arrow,before_enter,,,,,
|
101
|
+
86,Line,,53,,,61,54,None,Arrow,guard,,,,,
|
102
|
+
87,Line,,53,,,62,60,None,Arrow,before_enter,,,,,
|
103
|
+
88,Line,,53,,,63,80,None,Arrow,1,,,,,
|
104
|
+
89,Line,,53,,,80,65,None,Arrow,,,,,,
|
105
|
+
90,Line,,53,,,64,80,None,Arrow,,,,,,
|
106
|
+
91,Line,,53,,,66,80,None,Arrow,guard,,,,,
|
107
|
+
92,Line,,53,,,67,80,None,Arrow,1,,,,,
|
108
|
+
93,Line,,53,,,80,69,None,Arrow,,,,,,
|
109
|
+
94,Line,,53,,,68,80,None,Arrow,,,,,,
|
110
|
+
95,Line,,53,,,70,80,None,Arrow,after,,,,,
|
111
|
+
96,Line,,53,,,71,80,None,Arrow,success,,,,,
|
112
|
+
97,Line,,53,,,72,72,None,Arrow,after_all_transitions,,,,,
|
113
|
+
98,Line,,53,,,73,73,None,Arrow,before_all_events,,,,,
|
114
|
+
99,Line,,53,,,74,74,None,Arrow,after_all_events,,,,,
|
115
|
+
100,Line,,53,,,54,75,None,Arrow,before_success,,,,,
|
116
|
+
101,Line,,53,,,76,76,None,Arrow,error_on_all_events,,,,,
|
117
|
+
102,Line,,53,,,78,77,None,Arrow,,,,,,
|
118
|
+
103,Line,,53,,,79,79,None,Arrow,ensure_on_all_events,,,,,
|
119
|
+
104,Page,,,,,,,,,ex1,,,,,
|
120
|
+
105,Note,Flowchart Shapes,104,,,,,,,Initial,,,,,
|
121
|
+
106,state,Flowchart Shapes,104,,,,,,,running,,,,,
|
122
|
+
107,state,Flowchart Shapes,104,,,,,,,cleaning,,,,,
|
123
|
+
108,event,Flowchart Shapes,104,,,,,,,run,,,,,
|
124
|
+
109,event,Flowchart Shapes,104,,,,,,,clean,,,,,
|
125
|
+
110,event,Flowchart Shapes,104,,,,,,,sleep,,,,,
|
126
|
+
111,state,Flowchart Shapes,104,,,,,,,sleeping,,,,,
|
127
|
+
112,method,Flowchart Shapes,104,,,,,,,tie_shoes,,,,,
|
128
|
+
113,method,Flowchart Shapes,104,,,,,,,check_pillow,,,,,
|
129
|
+
114,code,Flowchart Shapes,104,,,,,,,"puts(""preparing to sleep"")",,,,,
|
130
|
+
115,Line,,104,,,105,111,None,Arrow,,,,,,
|
131
|
+
116,Line,,104,,,111,108,None,Arrow,,,,,,
|
132
|
+
117,Line,,104,,,108,106,None,Arrow,,,,,,
|
133
|
+
118,Line,,104,,,109,107,None,Arrow,,,,,,
|
134
|
+
119,Line,,104,,,110,111,None,Arrow,,,,,,
|
135
|
+
120,Line,,104,,,106,109,None,Arrow,,,,,,
|
136
|
+
121,Line,,104,,,106,110,None,Arrow,,,,,,
|
137
|
+
122,Line,,104,,,107,110,None,Arrow,,,,,,
|
138
|
+
123,Line,,104,,,112,108,None,Arrow,before,,,,,
|
139
|
+
124,Line,,104,,,113,111,None,Arrow,before_enter,,,,,
|
140
|
+
125,Line,,104,,,114,110,None,Arrow,before,,,,,
|
141
|
+
126,Page,,,,,,,,,ex2,,,,,
|
142
|
+
127,Note,Flowchart Shapes,126,,,,,,,Initial,,,,,
|
143
|
+
128,state,Flowchart Shapes,126,,,,,,,running,,,,,
|
144
|
+
129,event,Flowchart Shapes,126,,,,,,,run,,,,,
|
145
|
+
130,method,Flowchart Shapes,126,,,,,,,log_status_change,,,,,
|
146
|
+
131,method,Flowchart Shapes,126,,,,,,,do_something,,,,,
|
147
|
+
132,method,Flowchart Shapes,126,,,,,,,notify_somebody,,,,,
|
148
|
+
133,code,Flowchart Shapes,126,,,,,,,"puts(""preparing to run"")",,,,,
|
149
|
+
134,state,Flowchart Shapes,126,,,,,,,finished,,,,,
|
150
|
+
135,event,Flowchart Shapes,126,,,,,,,sleep,,,,,
|
151
|
+
136,code,Flowchart Shapes,126,,,,,,,after do
...
end
error do |e|
....
end,,,,,
|
152
|
+
137,method,Flowchart Shapes,126,,,,,,,method1,,,,,
|
153
|
+
138,method,Flowchart Shapes,126,,,,,,,method2,,,,,
|
154
|
+
139,transition,Flowchart Shapes,126,,,,,,,,,,,,
|
155
|
+
140,transition,Flowchart Shapes,126,,,,,,,,,,,,
|
156
|
+
141,state,Flowchart Shapes,126,,,,,,,sleeping,,,,,
|
157
|
+
142,Line,,126,,,127,141,None,Arrow,,,,,,
|
158
|
+
143,Line,,126,,,130,130,None,Arrow,after_all_transitions,,,,,
|
159
|
+
144,Line,,126,,,131,141,None,Arrow,before_enter,,,,,
|
160
|
+
145,Line,,126,,,133,129,None,Arrow,before,,,,,
|
161
|
+
146,Line,,126,,,139,128,None,Arrow,,,,,,
|
162
|
+
147,Line,,126,,,139,129,None,Arrow,,,,,,
|
163
|
+
148,Line,,126,,,128,140,None,Arrow,,,,,,
|
164
|
+
149,Line,,126,,,140,134,None,Arrow,,,,,,
|
165
|
+
150,Line,,126,,,140,129,None,Arrow,,,,,,
|
166
|
+
151,Line,,126,,,128,135,None,Arrow,,,,,,
|
167
|
+
152,Line,,126,,,137,135,None,Arrow,after,,,,,
|
168
|
+
153,Line,,126,,,138,135,None,Arrow,error,,,,,
|
169
|
+
154,Line,,126,,,132,129,None,Arrow,after,,,,,
|
170
|
+
155,Line,,126,,,141,139,None,Arrow,,,,,,
|
171
|
+
156,Line,,126,,,135,141,None,Arrow,,,,,,
|
172
|
+
157,Page,,,,,,,,,ex3,,,,,
|
173
|
+
158,Process,Flowchart Shapes,157,,,,,,,idle,,,,,
|
174
|
+
159,Note,Flowchart Shapes,157,,,,,,,Initial,,,,,
|
175
|
+
160,state,Flowchart Shapes,157,,,,,,,cleaning,,,,,
|
176
|
+
161,event,Flowchart Shapes,157,,,,,,,clean,,,,,
|
177
|
+
162,method,Flowchart Shapes,157,,,,,,,cleaning_needed?,,,,,
|
178
|
+
163,event,Flowchart Shapes,157,,,,,,,clean_if_needed,,,,,
|
179
|
+
164,transition,Flowchart Shapes,157,,,,,,,,,,,,
|
180
|
+
165,transition,Flowchart Shapes,157,,,,,,,,,,,,
|
181
|
+
166,event,Flowchart Shapes,157,,,,,,,clean_if_dirty,,,,,
|
182
|
+
167,method,Flowchart Shapes,157,,,,,,,if_dirty?,,,,,
|
183
|
+
168,Line,,157,,,159,158,None,Arrow,,,,,,
|
184
|
+
169,Line,,157,,,158,161,None,Arrow,,,,,,
|
185
|
+
170,Line,,157,,,161,160,None,Arrow,Yes,,,,,
|
186
|
+
171,Line,,157,,,162,161,None,Arrow,guard,,,,,
|
187
|
+
172,Line,,157,,,158,164,None,Arrow,1,,,,,
|
188
|
+
173,Line,,157,,,164,160,None,Arrow,,,,,,
|
189
|
+
174,Line,,157,,,163,164,None,Arrow,,,,,,
|
190
|
+
175,Line,,157,,,158,165,None,Arrow,2,,,,,
|
191
|
+
176,Line,,157,,,165,158,None,Arrow,,,,,,
|
192
|
+
177,Line,,157,,,163,165,None,Arrow,,,,,,
|
193
|
+
178,Line,,157,,,158,166,None,Arrow,,,,,,
|
194
|
+
179,Line,,157,,,166,160,None,Arrow,,,,,,
|
195
|
+
180,Line,,157,,,167,166,None,Arrow,guard,,,,,
|
196
|
+
181,Line,,157,,,162,164,None,Arrow,guard,,,,,
|
197
|
+
182,Page,,,,,,,,,ex4,,,,,
|
198
|
+
183,Process,Flowchart Shapes,182,,,,,,,stage1,,,,,
|
199
|
+
184,Note,Flowchart Shapes,182,,,,,,,Initial,,,,,
|
200
|
+
185,state,Flowchart Shapes,182,,,,,,,stage3,,,,,
|
201
|
+
186,state,Flowchart Shapes,182,,,,,,,2,,,,,
|
202
|
+
187,event,Flowchart Shapes,182,,,,,,,stage1_completed,,,,,
|
203
|
+
188,transition,Flowchart Shapes,182,,,,,,,,,,,,
|
204
|
+
189,transition,Flowchart Shapes,182,,,,,,,,,,,,
|
205
|
+
190,method,Flowchart Shapes,182,,,,,,,stage2_completed?,,,,,
|
206
|
+
191,Line,,182,,,184,183,None,Arrow,,,,,,
|
207
|
+
192,Line,,182,,,187,188,None,Arrow,Yes,,,,,
|
208
|
+
193,Line,,182,,,187,189,None,Arrow,No,,,,,
|
209
|
+
194,Line,,182,,,183,189,None,Arrow,2,,,,,
|
210
|
+
195,Line,,182,,,190,188,None,Arrow,,,,,,
|
211
|
+
196,Line,,182,,,188,185,None,Arrow,,,,,,
|
212
|
+
197,Line,,182,,,189,186,None,Arrow,,,,,,
|
213
|
+
198,Line,,182,,,183,188,None,Arrow,1,,,,,
|
@@ -0,0 +1,376 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class AASMExport
|
4
|
+
|
5
|
+
EventCallbacks = ["before", "guards", "guard",
|
6
|
+
"before_enter", "enter",
|
7
|
+
"before_success",
|
8
|
+
"success", "after",
|
9
|
+
"error", "ensure"]
|
10
|
+
|
11
|
+
GlobalEventCallbacks = ["before_all_events", "after_all_events",
|
12
|
+
"error_on_all_events", "ensure_on_all_events"]
|
13
|
+
|
14
|
+
StateCallbacks = ["before_exit", "exit",
|
15
|
+
"before_enter", "enter",
|
16
|
+
"after_exit", "after_enter"]
|
17
|
+
|
18
|
+
TransitionCallbacks = ["guard", "guards", "after", "success"]
|
19
|
+
GlobalTransitionCallbacks = ["after_all_transitions"]
|
20
|
+
|
21
|
+
attr_reader :method_names
|
22
|
+
|
23
|
+
def initialize(chart)
|
24
|
+
@chart = chart
|
25
|
+
init_method_names
|
26
|
+
create
|
27
|
+
end
|
28
|
+
|
29
|
+
def init_method_names
|
30
|
+
@method_names = []
|
31
|
+
end
|
32
|
+
|
33
|
+
def method_names
|
34
|
+
# @method_names = @method_names.uniq
|
35
|
+
# return @method_names
|
36
|
+
|
37
|
+
# unique, no trailing spaces, inside spaces are underscores
|
38
|
+
@method_names.uniq.map{|t| sanitize(t)}
|
39
|
+
end
|
40
|
+
|
41
|
+
def sanitize(name)
|
42
|
+
name.strip.tr " ", "_"
|
43
|
+
end
|
44
|
+
|
45
|
+
def create
|
46
|
+
@states = @chart.get_blocks_of_type "state"
|
47
|
+
@states = @states + @chart.get_blocks_of_type("Process")
|
48
|
+
# puts "States count: " + @states.size.to_s
|
49
|
+
|
50
|
+
@events = @chart.get_blocks_of_type "event"
|
51
|
+
@events = @events + @chart.get_blocks_of_type("Decision")
|
52
|
+
# puts "Events count: " + @events.size.to_s
|
53
|
+
|
54
|
+
## Arrows between states are also events
|
55
|
+
## handled in generate_events_code
|
56
|
+
|
57
|
+
create_multi_events
|
58
|
+
end
|
59
|
+
|
60
|
+
attr_reader :transitions
|
61
|
+
|
62
|
+
def create_multi_events
|
63
|
+
transitions = @chart.get_blocks_of_type("transition") +
|
64
|
+
@chart.get_blocks_of_type("Summing Junction")
|
65
|
+
|
66
|
+
# puts transitions.size.to_s + " found"
|
67
|
+
|
68
|
+
@transitions = {}
|
69
|
+
# Hash with events as keys
|
70
|
+
## Values: Array of [from_state, to_state]
|
71
|
+
## ex: { event1 => [[[state1], state2], [[state1, state4], state3]] }
|
72
|
+
|
73
|
+
# puts "raw transitions found " + transitions.size.to_s
|
74
|
+
|
75
|
+
## select the valid one
|
76
|
+
transitions.each do |t|
|
77
|
+
# Link from a block.
|
78
|
+
# and link to a block.
|
79
|
+
# and link from or to an event.
|
80
|
+
|
81
|
+
from_states = t.links_from_type("state") + t.links_from_type("Process")
|
82
|
+
to_state = t.links_to_type("state") + t.links_to_type("Process")
|
83
|
+
|
84
|
+
event = t.links_to_type("event") + t.links_from_type("event")
|
85
|
+
event = event + t.links_to_type("Decision") + t.links_from_type("Decision")
|
86
|
+
|
87
|
+
priority = 0
|
88
|
+
t.links_from.each do |l, e|
|
89
|
+
if(l.text.to_i != 0)
|
90
|
+
priority = l.text.to_i
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
## Remove possible duplicate links...
|
95
|
+
from_states.uniq!
|
96
|
+
to_state.uniq!
|
97
|
+
event.uniq!
|
98
|
+
|
99
|
+
if from_states.size < 1 or to_state.size != 1 or event.size != 1
|
100
|
+
print_warning(event, from_states, to_state)
|
101
|
+
next
|
102
|
+
end
|
103
|
+
|
104
|
+
event = event.first
|
105
|
+
to_state = to_state.first
|
106
|
+
|
107
|
+
# puts "Adding, from " + from_states.first.text + " to " + to_state.text + " through " + event.text
|
108
|
+
## get the ID from the link.
|
109
|
+
|
110
|
+
# Find the priority
|
111
|
+
all_links = t.links_to.merge(t.links_from)
|
112
|
+
prio = 0
|
113
|
+
from_states.each do |s|
|
114
|
+
link = all_links.key(to_state)
|
115
|
+
next if link.nil? or link.text.nil?
|
116
|
+
link_prio = link.to_i
|
117
|
+
prio = link_prio if link_prio > prio
|
118
|
+
end
|
119
|
+
# puts "Priority found " + prio.to_s if prio != 0
|
120
|
+
|
121
|
+
@transitions[event] = [] if @transitions[event].nil?
|
122
|
+
@transitions[event] << [from_states, to_state, priority, t]
|
123
|
+
end
|
124
|
+
|
125
|
+
# puts "Transitions found " + @transitions.size.to_s
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
def print_warning(event, from_states, to_state)
|
130
|
+
|
131
|
+
if(event.size != 1)
|
132
|
+
puts "Warning: Transition without any event !" if event.size == 0
|
133
|
+
|
134
|
+
if event.size > 1
|
135
|
+
puts "Warning: Transition with multiple events !"
|
136
|
+
event.each do |e|
|
137
|
+
puts " - Event: " + e.to_s
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
if(to_state != 1)
|
143
|
+
puts "Warning: Transition without output !" if to_state.size == 0
|
144
|
+
puts "Warning: Transition with multiple outputs !" if to_state.size > 1
|
145
|
+
end
|
146
|
+
|
147
|
+
if(from_states.size < 1)
|
148
|
+
puts "Warning: Transition without input !" if from_states.size == 0
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
def generate_state_code
|
154
|
+
states_code = ""
|
155
|
+
@states.each do |state|
|
156
|
+
|
157
|
+
code = " state :" + sanitize(state.text)
|
158
|
+
code = code + ", :initial => true" if state.initial
|
159
|
+
|
160
|
+
callback_code = generate_callback(state, "method", StateCallbacks)
|
161
|
+
|
162
|
+
states_code = states_code + code + callback_code + "\n"
|
163
|
+
end
|
164
|
+
states_code + "\n"
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def generate_events_code
|
170
|
+
|
171
|
+
events_code = ""
|
172
|
+
|
173
|
+
## Arrows between two blocks are events.
|
174
|
+
@chart.links.each_value do |link|
|
175
|
+
if (@chart.blocks[link.source].type == "state" or
|
176
|
+
@chart.blocks[link.source].type == "process") and
|
177
|
+
(@chart.blocks[link.destination].type == "state" or
|
178
|
+
@chart.blocks[link.destination].type == "process") and
|
179
|
+
not link.text.nil?
|
180
|
+
|
181
|
+
name = sanitize(link.text)
|
182
|
+
|
183
|
+
code = <<-SMALL_EVENT
|
184
|
+
event :#{name} do
|
185
|
+
transitions :from => :#{@chart.blocks[link.source].text}, :to => :#{@chart.blocks[link.destination].text}
|
186
|
+
end
|
187
|
+
|
188
|
+
SMALL_EVENT
|
189
|
+
|
190
|
+
events_code = events_code + code
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
@events.each do |event|
|
195
|
+
code = " event :" + sanitize(event.text)
|
196
|
+
|
197
|
+
## Add event :before :after...
|
198
|
+
callback_code = generate_callback(event, "method", EventCallbacks)
|
199
|
+
|
200
|
+
code = code + callback_code + " do \n"
|
201
|
+
|
202
|
+
## Add the code if it is defined.
|
203
|
+
code = code + generate_code_callback(event, EventCallbacks)
|
204
|
+
|
205
|
+
## Simple case: This event links from and to a state
|
206
|
+
inputs = event.links_from_type "state"
|
207
|
+
outputs = event.links_to_type "state"
|
208
|
+
|
209
|
+
inputs = inputs + event.links_from_type("Process")
|
210
|
+
outputs = outputs + event.links_to_type("Process")
|
211
|
+
|
212
|
+
|
213
|
+
if inputs.size > 0 and outputs.size == 1
|
214
|
+
transition = transition_code(event,
|
215
|
+
inputs,
|
216
|
+
outputs.first)
|
217
|
+
code = code + transition + "\n"
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
unless @transitions[event].nil?
|
222
|
+
## Sort by ID if present
|
223
|
+
|
224
|
+
@sorted = @transitions[event].each.sort do |tr|
|
225
|
+
input, output, priority = tr
|
226
|
+
priority
|
227
|
+
end
|
228
|
+
|
229
|
+
@sorted.each do |t|
|
230
|
+
inputs, output, priority, t_element = t
|
231
|
+
transition = transition_code(event, inputs, output)
|
232
|
+
transition_callback = generate_callback(t_element,
|
233
|
+
"method",
|
234
|
+
TransitionCallbacks)
|
235
|
+
code = code + transition + transition_callback + "\n"
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
code = code + " end\n\n"
|
240
|
+
events_code = events_code + code
|
241
|
+
end
|
242
|
+
|
243
|
+
events_code
|
244
|
+
end
|
245
|
+
|
246
|
+
def transition_code(event, inputs, output)
|
247
|
+
|
248
|
+
code = " transitions :from => "
|
249
|
+
if inputs.size == 1
|
250
|
+
code = code + ":" + sanitize(inputs[0].text)
|
251
|
+
else
|
252
|
+
code = code + "["
|
253
|
+
inputs.each do |input|
|
254
|
+
code = code + ":" + sanitize(input.text) + ","
|
255
|
+
end
|
256
|
+
## remove last ","
|
257
|
+
code = code.chop + "]"
|
258
|
+
end
|
259
|
+
|
260
|
+
code = code + ", :to => :" + sanitize(output.text)
|
261
|
+
## TODO: add options
|
262
|
+
|
263
|
+
# TransitionCallbacks
|
264
|
+
## Add event :before :after... METHOD out of this
|
265
|
+
## Not yet testable
|
266
|
+
# callback_code = generate_callback(event, "method", TransitionCallbacks)
|
267
|
+
callback_code = ""
|
268
|
+
|
269
|
+
return code + callback_code
|
270
|
+
end
|
271
|
+
|
272
|
+
def generate_callback(event, element_type, callbacks)
|
273
|
+
|
274
|
+
## TODO: Handle the Guards -> create an array
|
275
|
+
l1 = event.links_to.each.select{|link, e| e.type.eql? element_type }
|
276
|
+
l2 = event.links_from.each.select{|link, e| e.type.eql? element_type }
|
277
|
+
links = l1 + l2
|
278
|
+
code = ""
|
279
|
+
unless links.empty?
|
280
|
+
links.each do |l|
|
281
|
+
|
282
|
+
link = l[0]
|
283
|
+
element = l[1]
|
284
|
+
if(callbacks.any? link.text)
|
285
|
+
code = code + ", :" + sanitize(link.text) +
|
286
|
+
" => :" + sanitize(element.text)
|
287
|
+
|
288
|
+
@method_names << element.text
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
292
|
+
return code
|
293
|
+
end
|
294
|
+
|
295
|
+
def generate_code_callback(event, callbacks)
|
296
|
+
l1 = event.links_to.each.select{|link, e| e.type.eql? "code" }
|
297
|
+
l2 = event.links_from.each.select{|link, e| e.type.eql? "code" }
|
298
|
+
links = l1 + l2
|
299
|
+
code = ""
|
300
|
+
|
301
|
+
unless links.empty?
|
302
|
+
links.each do |l|
|
303
|
+
link = l[0]
|
304
|
+
element = l[1]
|
305
|
+
|
306
|
+
if(callbacks.any? link.text)
|
307
|
+
code = code + " " + link.text + " do"
|
308
|
+
|
309
|
+
if link.text == "error"
|
310
|
+
code = code + " |e|\n"
|
311
|
+
else
|
312
|
+
code = code + "\n"
|
313
|
+
end
|
314
|
+
indent = " "
|
315
|
+
element.text.split("\n").each do |t|
|
316
|
+
code = code + indent + t
|
317
|
+
end
|
318
|
+
|
319
|
+
code = code + "\n end\n"
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
return code
|
324
|
+
end
|
325
|
+
|
326
|
+
# Generate code that creates methods for each
|
327
|
+
# method declared in the graph.
|
328
|
+
def generate_methods_placeholder
|
329
|
+
code = "\n"
|
330
|
+
method_names().each do |method_name|
|
331
|
+
|
332
|
+
code = code + <<-METH
|
333
|
+
def #{method_name}
|
334
|
+
puts "Please implement the method #{method_name}"
|
335
|
+
true
|
336
|
+
end
|
337
|
+
|
338
|
+
METH
|
339
|
+
end
|
340
|
+
return code
|
341
|
+
end
|
342
|
+
|
343
|
+
# Generate methods that are not already
|
344
|
+
# Defined in the class.
|
345
|
+
def generate_methods_placeholder_for(klass, debug: true)
|
346
|
+
method_names().each do |method_name|
|
347
|
+
if klass.method_defined? method_name.to_sym
|
348
|
+
puts "Found: #{method_name}. " if debug
|
349
|
+
next
|
350
|
+
end
|
351
|
+
|
352
|
+
puts "To implement: #{method_name}. " if debug
|
353
|
+
klass.define_method method_name.to_sym do
|
354
|
+
puts "Please implement the method #{method_name}"
|
355
|
+
true
|
356
|
+
end
|
357
|
+
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
# Export the document to code (String)
|
362
|
+
# It exports only the aasm code, not the
|
363
|
+
# methods called by it.
|
364
|
+
def export
|
365
|
+
start = <<-START
|
366
|
+
aasm do
|
367
|
+
START
|
368
|
+
|
369
|
+
finish = <<-END
|
370
|
+
end
|
371
|
+
END
|
372
|
+
return start + generate_state_code +
|
373
|
+
generate_events_code + finish
|
374
|
+
# generate_methods_placeholder
|
375
|
+
end
|
376
|
+
end
|