drawio_dsl 0.8.2 → 0.8.5
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 +4 -4
- data/.builders/.data/shapes.json +193 -9
- data/.builders/.templates/basic/drawio_extensions.rb +2 -1
- data/.builders/.templates/basic/drawio_shapes.rb +1 -1
- data/.builders/blueprint/shapes.rb +88 -4
- data/.builders/generators/20-drawio-extensions.rb +1 -1
- data/.builders/generators/domain_diagram.rb +473 -0
- data/.builders/generators/parking-map.png +0 -0
- data/.builders/generators/parking_app.rb +110 -0
- data/.builders/generators/printspeak-architecture-generator.rb +45 -0
- data/.builders/generators/project-plan.rb +14 -7
- data/.builders/generators/sample_diagrams/35-ids-and-arrows.rb +16 -6
- data/CHANGELOG.md +22 -0
- data/README.md +5 -3
- data/docs/domain-modal/domain_model.drawio +265 -0
- data/docs/domain-modal/domain_model.svg +3 -0
- data/docs/domain-modal/domain_model_custom.drawio +408 -0
- data/docs/domain-modal/domain_model_custom.png +0 -0
- data/docs/domain-modal.md +9 -0
- data/docs/parking_app.drawio +25 -0
- data/docs/parking_app.svg +3 -0
- data/docs/printspeak-architecture-generator.drawio +31 -0
- data/docs/printspeak-architecture-generator.svg +3 -0
- data/docs/project-plan/project.drawio +72 -48
- data/docs/project-plan/project_done.svg +1 -1
- data/docs/project-plan/project_in_progress.svg +1 -1
- data/docs/project-plan/project_todo.svg +1 -1
- data/docs/samples/styles-glass.svg +1 -1
- data/docs/samples/styles-rounded.svg +1 -1
- data/docs/samples/styles-sketch.svg +1 -1
- data/lib/drawio_dsl/configuration_shapes.rb +7 -3
- data/lib/drawio_dsl/dom_builder.rb +1 -1
- data/lib/drawio_dsl/dom_builder_shapes.rb +19 -7
- data/lib/drawio_dsl/drawio.rb +0 -19
- data/lib/drawio_dsl/drawio_extensions.rb +3 -2
- data/lib/drawio_dsl/drawio_extensions_active.rb +1 -1
- data/lib/drawio_dsl/drawio_page.rb +22 -0
- data/lib/drawio_dsl/drawio_shapes.rb +58 -46
- data/lib/drawio_dsl/formatters/base_formatter.rb +1 -1
- data/lib/drawio_dsl/formatters/html_builder.rb +1 -1
- data/lib/drawio_dsl/formatters/interface_formatter.rb +1 -1
- data/lib/drawio_dsl/formatters/klass_formatter.rb +1 -1
- data/lib/drawio_dsl/formatters/style_builder.rb +1 -1
- data/lib/drawio_dsl/schema/_.rb +3 -1
- data/lib/drawio_dsl/schema/shapes/database.rb +9 -0
- data/lib/drawio_dsl/schema/shapes/db_json.rb +9 -0
- data/lib/drawio_dsl/schema/shapes/shape.rb +19 -0
- data/lib/drawio_dsl/version.rb +1 -1
- data/lib/drawio_dsl/xml_builder.rb +1 -1
- data/lib/drawio_dsl.rb +1 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +18 -2
@@ -0,0 +1,473 @@
|
|
1
|
+
KManager.action :domain_model do
|
2
|
+
action do
|
3
|
+
|
4
|
+
DrawioDsl::Drawio
|
5
|
+
.init(k_builder, on_exist: :write, on_action: :execute)
|
6
|
+
.diagram(theme: :style_04)
|
7
|
+
.page('Domain Modal', margin_left: 0, margin_top: 0, rounded: 0, background: '#fafafa') do
|
8
|
+
grid_layout(wrap_at: 6, grid_w: 180, grid_h: 180)
|
9
|
+
|
10
|
+
shape_element = :rectangle2 # hexagon, diamond, ellipse
|
11
|
+
shape_element_w = 75
|
12
|
+
shape_element_h = 50
|
13
|
+
shape_element_theme = :style_03
|
14
|
+
|
15
|
+
# need a blank
|
16
|
+
# square(fill_color: '#fafafa', stroke_color: '#fafafa', font_color: '#333333')
|
17
|
+
|
18
|
+
square(title: 'Configuration', theme: :style_01)
|
19
|
+
|
20
|
+
klass(description: '') do
|
21
|
+
format
|
22
|
+
.header('ShapeDefaults')
|
23
|
+
.field(:type, type: :symbol)
|
24
|
+
.field(:category, type: :symbol)
|
25
|
+
.field(:x, type: :integer)
|
26
|
+
.field(:y, type: :integer)
|
27
|
+
.field(:w, type: :integer)
|
28
|
+
.field(:h, type: :integer)
|
29
|
+
.field(:style_modifiers, type: :string)
|
30
|
+
end
|
31
|
+
|
32
|
+
klass(description: '') do
|
33
|
+
format
|
34
|
+
.header('ShapeThemeStyle')
|
35
|
+
.field(:theme, type: :symbol)
|
36
|
+
.field(:fill_color, type: :string)
|
37
|
+
.field(:stroke_color, type: :string)
|
38
|
+
.field(:font_color, type: :string)
|
39
|
+
end
|
40
|
+
|
41
|
+
klass(description: 'Configuration container for the DrawIO DSL') do
|
42
|
+
format
|
43
|
+
.header('Configuration')
|
44
|
+
.field(:base_style, type: :Struct)
|
45
|
+
.field(:shapes, type: 'Hash<Struct>')
|
46
|
+
.field(:themes, type: :Hash)
|
47
|
+
.method('+ <ConfigurationThemes>')
|
48
|
+
.method('+ <ConfigurationShapes>')
|
49
|
+
end
|
50
|
+
|
51
|
+
interface(description: 'Used to attach configuration to KConfig module', theme: :style_02) do
|
52
|
+
format
|
53
|
+
.header('ConfigurationExtension', interface_type: 'MixIn')
|
54
|
+
.field(:drawio, type: :Configuration)
|
55
|
+
end
|
56
|
+
|
57
|
+
interface(description: 'Attach predefined DrawIO shapes to KConfig module', theme: :style_02) do
|
58
|
+
format
|
59
|
+
.header('ConfigurationShapes', interface_type: 'MixIn')
|
60
|
+
.method(:add_shapes)
|
61
|
+
end
|
62
|
+
|
63
|
+
interface(description: 'Configuration for each theme', theme: :style_02) do
|
64
|
+
format
|
65
|
+
.header('ConfigurationThemes', interface_type: 'MixIn')
|
66
|
+
.method(:add_theme)
|
67
|
+
.method(:add_themes)
|
68
|
+
end
|
69
|
+
|
70
|
+
square(title: 'DOM Builder', theme: :style_01)
|
71
|
+
|
72
|
+
klass(description: 'Build Document object model to represent DrawioDsl output file.') do
|
73
|
+
format
|
74
|
+
.header('DomBuilder')
|
75
|
+
.field(:actions, type: :Array)
|
76
|
+
.field(:last_action, type: :Hash)
|
77
|
+
.field(:focus_node, type: :Anchor)
|
78
|
+
.field(:current_page, type: :Page)
|
79
|
+
.field(:dom)
|
80
|
+
.method(:reset)
|
81
|
+
.method(:queue_action)
|
82
|
+
.method(:set_diagram)
|
83
|
+
.method(:diagram)
|
84
|
+
.method(:add_page)
|
85
|
+
.method(:add_grid_layout)
|
86
|
+
.method(:add_flex_layout)
|
87
|
+
.method(:add_layout)
|
88
|
+
.method(:add_shape)
|
89
|
+
.method('+ <DomBuilderShapes>')
|
90
|
+
end
|
91
|
+
|
92
|
+
interface(description: 'Builder methods for each shape, line and text element to attach to DomBuilder.', theme: :style_02) do
|
93
|
+
format
|
94
|
+
.header('DomBuilderShapes', interface_type: 'MixIn')
|
95
|
+
.method('add_* (for each shape)')
|
96
|
+
end
|
97
|
+
|
98
|
+
square(title: 'DrawIO DSL', theme: :style_01)
|
99
|
+
|
100
|
+
klass(description: 'DSL for draw-io diagrams') do
|
101
|
+
format
|
102
|
+
.header('Drawio')
|
103
|
+
.method(:diagram)
|
104
|
+
.method(:page)
|
105
|
+
.method(:save)
|
106
|
+
.method(:osave)
|
107
|
+
.method(:export_svg)
|
108
|
+
.method(:export_png)
|
109
|
+
end
|
110
|
+
|
111
|
+
klass(description: 'DSL for draw-io diagrams') do
|
112
|
+
format
|
113
|
+
.header('DrawioPage')
|
114
|
+
.method(:grid_layout)
|
115
|
+
.method(:flex_layout)
|
116
|
+
.method('+ <DrawioShapes>')
|
117
|
+
end
|
118
|
+
|
119
|
+
interface(description: 'List of DSL methods for each common shape', theme: :style_02) do
|
120
|
+
format
|
121
|
+
.header('DrawioShapes', interface_type: 'MixIn')
|
122
|
+
.method(:random)
|
123
|
+
.method('* (for each shape)')
|
124
|
+
end
|
125
|
+
|
126
|
+
square(title: '1000 Extension Shapes', theme: :style_01)
|
127
|
+
|
128
|
+
klass(description: '1000s of extension shapes derived from Extensions.js that can be used via the add_shape method') do
|
129
|
+
format
|
130
|
+
.header('DrawioExtensions')
|
131
|
+
.field(:sections, type: :Array)
|
132
|
+
.field(:current_section, type: :Hash)
|
133
|
+
.method(:section)
|
134
|
+
.method(:shape)
|
135
|
+
.method(:to_h)
|
136
|
+
.method(:build_extensions)
|
137
|
+
.method(:configure_extensions)
|
138
|
+
.method('+ <DrawioExtensionsActive>')
|
139
|
+
end
|
140
|
+
|
141
|
+
interface(description: 'Mark shapes as active or not, based on incomplete style being made inactive', theme: :style_02) do
|
142
|
+
format
|
143
|
+
.header('DrawioExtensionsActive', interface_type: 'MixIn')
|
144
|
+
.method(:apply_active_flags)
|
145
|
+
.method(:check_if_active)
|
146
|
+
end
|
147
|
+
|
148
|
+
klass(description: 'Layout engine is responsible for laying out the elements on the page') do
|
149
|
+
format
|
150
|
+
.header('LayoutEngine')
|
151
|
+
.field(:page, type: :Page)
|
152
|
+
.field(:current_page, type: :Page)
|
153
|
+
.field(:current_layout, type: :Layout)
|
154
|
+
.method(:call)
|
155
|
+
.method(:traverse_node)
|
156
|
+
.method(:process_node)
|
157
|
+
end
|
158
|
+
|
159
|
+
klass(description: 'Build the DrawioDsl XML file that is the basis of any draw-io diagrams.') do
|
160
|
+
format
|
161
|
+
.header('XmlBuilder')
|
162
|
+
.field(:diagram)
|
163
|
+
.method(:build)
|
164
|
+
end
|
165
|
+
|
166
|
+
square(title: 'Formatters', theme: :style_01)
|
167
|
+
|
168
|
+
klass(description: 'HTML builder has methods for common HTML elements that get written sequentially') do
|
169
|
+
format
|
170
|
+
.header('HtmlBuilder')
|
171
|
+
.field(:element_style_defaults, type: :Hash)
|
172
|
+
.method(:default_for)
|
173
|
+
.method(:style_for)
|
174
|
+
.method(:empty?)
|
175
|
+
.method(:exist?)
|
176
|
+
.method(:as_html)
|
177
|
+
.method(:hr)
|
178
|
+
.method(:b)
|
179
|
+
.method(:p)
|
180
|
+
.method(:add_line)
|
181
|
+
.method(:add_placeholder)
|
182
|
+
.method(:group)
|
183
|
+
.method(:build_lines)
|
184
|
+
.method(:lines)
|
185
|
+
.method(:groups)
|
186
|
+
end
|
187
|
+
|
188
|
+
interface(description: 'Create an instance of a HTML formatter on the shape', theme: :style_02) do
|
189
|
+
format
|
190
|
+
.header('Factory', interface_type: 'MixIn')
|
191
|
+
.method(:formatter)
|
192
|
+
.method(:format_instance)
|
193
|
+
end
|
194
|
+
|
195
|
+
klass(description: 'Base for any HTML formatter') do
|
196
|
+
format
|
197
|
+
.header('BaseFormatter')
|
198
|
+
.field(:html, type: :String)
|
199
|
+
.method(:empty?)
|
200
|
+
.method(:as_html)
|
201
|
+
end
|
202
|
+
|
203
|
+
klass(description: 'Format the HTML to display an interface on a class diagram') do
|
204
|
+
format
|
205
|
+
.header('InterfaceFormatter')
|
206
|
+
.method(:header)
|
207
|
+
.method(:field)
|
208
|
+
.method(:method)
|
209
|
+
.method(:as_html)
|
210
|
+
end
|
211
|
+
|
212
|
+
klass(description: 'Format the HTML to display an class on a class diagram') do
|
213
|
+
format
|
214
|
+
.header('KlassFormatter')
|
215
|
+
.method(:header)
|
216
|
+
.method(:field)
|
217
|
+
.method(:method)
|
218
|
+
.method(:as_html)
|
219
|
+
end
|
220
|
+
|
221
|
+
klass(description: 'style_builder') do
|
222
|
+
format
|
223
|
+
.header('StyleBuilder')
|
224
|
+
.field(:defaults, type: :Hash)
|
225
|
+
.field(:custom, type: :Hash)
|
226
|
+
.method(:customize)
|
227
|
+
.method(:style)
|
228
|
+
.method(:style_attribute)
|
229
|
+
.method(:build)
|
230
|
+
end
|
231
|
+
|
232
|
+
square(title: 'Schema', theme: :style_01)
|
233
|
+
|
234
|
+
klass(description: 'Shape is a graphical element, it can be a shape, a text, or a group') do
|
235
|
+
format
|
236
|
+
.header('Shape')
|
237
|
+
.field(:category, type: :Symbol)
|
238
|
+
.field(:theme, type: :Symbol)
|
239
|
+
.field(:title, type: :String)
|
240
|
+
.field(:value, type: :String)
|
241
|
+
.field(:white_space, type: :int)
|
242
|
+
.field(:html, type: :int)
|
243
|
+
.field(:rounded, type: :int)
|
244
|
+
.field(:shadow, type: :int)
|
245
|
+
.field(:glass, type: :int)
|
246
|
+
.field(:sketch, type: :int)
|
247
|
+
.field(:fill_color, type: :String)
|
248
|
+
.field(:stroke_color, type: :String)
|
249
|
+
.field(:font_color, type: :String)
|
250
|
+
.field(:gradient, type: :String)
|
251
|
+
.field(:x, type: :int)
|
252
|
+
.field(:y, type: :int)
|
253
|
+
.field(:w, type: :int)
|
254
|
+
.field(:h, type: :int)
|
255
|
+
.field(:style_modifiers, type: :Hash)
|
256
|
+
.field(:source, type: 'Symbol (id)')
|
257
|
+
.field(:target, type: 'Symbol (id)')
|
258
|
+
.method('> configure_shape')
|
259
|
+
.method(:initialize)
|
260
|
+
.method(:shape_defaults)
|
261
|
+
.method(:apply_defaults)
|
262
|
+
.method(:format)
|
263
|
+
.method(:style)
|
264
|
+
.method(:as_xml)
|
265
|
+
.method(:draw_element)
|
266
|
+
.method(:draw_line)
|
267
|
+
.method(:to_h)
|
268
|
+
end
|
269
|
+
|
270
|
+
klass(description: 'common_style') do
|
271
|
+
format
|
272
|
+
.header('CommonStyle')
|
273
|
+
.field(:white_space, type: :int)
|
274
|
+
.field(:html, type: :int)
|
275
|
+
.field(:rounded, type: :int)
|
276
|
+
.field(:shadow, type: :int)
|
277
|
+
.field(:glass, type: :int)
|
278
|
+
.field(:sketch, type: :int)
|
279
|
+
.method(:to_h)
|
280
|
+
end
|
281
|
+
|
282
|
+
klass(description: 'default_palette') do
|
283
|
+
format
|
284
|
+
.header('DefaultPalette')
|
285
|
+
.field(:fill_color, type: :String)
|
286
|
+
.field(:stroke_color, type: :String)
|
287
|
+
.field(:font_color, type: :String)
|
288
|
+
.field(:gradient, type: :String)
|
289
|
+
.method(:to_h)
|
290
|
+
end
|
291
|
+
|
292
|
+
klass(description: 'diagram') do
|
293
|
+
format
|
294
|
+
.header('Diagram')
|
295
|
+
.field(:host, type: :String)
|
296
|
+
.field(:theme, type: :String)
|
297
|
+
.field(:style, type: :CommonStyle)
|
298
|
+
.field(:palette, type: :DefaultPalette)
|
299
|
+
.field(:pages, type: :Array)
|
300
|
+
.method(:to_h)
|
301
|
+
end
|
302
|
+
klass(description: 'node') do
|
303
|
+
format
|
304
|
+
.header('Node')
|
305
|
+
.field(:id, type: :String)
|
306
|
+
.field(:page, type: :Page)
|
307
|
+
.field(:parent, type: :Node)
|
308
|
+
.field(:classification, type: :String)
|
309
|
+
.field(:type, type: :String)
|
310
|
+
.field(:nodes, type: :Array)
|
311
|
+
.method(:initialize)
|
312
|
+
.method(:to_h)
|
313
|
+
.method(:root?)
|
314
|
+
.method(:add_node)
|
315
|
+
end
|
316
|
+
|
317
|
+
klass(description: 'node_list') do
|
318
|
+
format
|
319
|
+
.header('NodeList')
|
320
|
+
.field(:nodes, type: :Array)
|
321
|
+
.method(:add)
|
322
|
+
.method(:all)
|
323
|
+
.method(:shapes)
|
324
|
+
.method(:layouts)
|
325
|
+
.method(:length)
|
326
|
+
.method(:empty?)
|
327
|
+
.method(:any?)
|
328
|
+
.method(:first)
|
329
|
+
.method(:as_xml)
|
330
|
+
.method(:to_h)
|
331
|
+
end
|
332
|
+
|
333
|
+
klass(description: 'page') do
|
334
|
+
format
|
335
|
+
.header('Page')
|
336
|
+
.field(:diagram, type: :Diagram)
|
337
|
+
.field(:position_x, type: :int)
|
338
|
+
.field(:position_y, type: :int)
|
339
|
+
.field(:id, type: :String)
|
340
|
+
.field(:active, type: :bool)
|
341
|
+
.field(:name, type: :String)
|
342
|
+
.field(:theme, type: :Symbol)
|
343
|
+
.field(:style, type: :CommonStyle)
|
344
|
+
.field(:palette, type: :DefaultPalette)
|
345
|
+
.field(:margin_left, type: :int)
|
346
|
+
.field(:margin_top, type: :int)
|
347
|
+
.field(:nodes, type: :Array)
|
348
|
+
.field(:grid, type: :String)
|
349
|
+
.field(:grid_size, type: :int)
|
350
|
+
.field(:guides, type: :String)
|
351
|
+
.field(:tooltips, type: :String)
|
352
|
+
.field(:connect, type: :String)
|
353
|
+
.field(:arrows, type: :String)
|
354
|
+
.field(:fold, type: :String)
|
355
|
+
.field(:page_no, type: :String)
|
356
|
+
.field(:page_scale, type: :String)
|
357
|
+
.field(:page_width, type: :String)
|
358
|
+
.field(:page_height, type: :String)
|
359
|
+
.field(:background, type: :String)
|
360
|
+
.field(:page_shadow, type: :String)
|
361
|
+
.field(:math, type: :String)
|
362
|
+
.field(:active?, type: :Boolean)
|
363
|
+
.method(:add_node)
|
364
|
+
.method(:as_xml)
|
365
|
+
.method(:to_h)
|
366
|
+
.method(:settings)
|
367
|
+
end
|
368
|
+
|
369
|
+
square(title: 'Schema/Layouts', theme: :style_01)
|
370
|
+
|
371
|
+
klass(description: 'flex_layout') do
|
372
|
+
format
|
373
|
+
.header('FlexLayout')
|
374
|
+
.field(:direction, type: :String)
|
375
|
+
.field(:wrap_at, type: :int)
|
376
|
+
.field(:gap, type: :int)
|
377
|
+
.field(:perpendicular_max, type: :int)
|
378
|
+
.method(:position_shape)
|
379
|
+
.method(:to_h)
|
380
|
+
end
|
381
|
+
|
382
|
+
klass(description: 'grid_layout') do
|
383
|
+
format
|
384
|
+
.header('GridLayout')
|
385
|
+
.field(:direction, type: :String)
|
386
|
+
.field(:wrap_at, type: :int)
|
387
|
+
.field(:grid_size, type: :int)
|
388
|
+
.field(:grid_w, type: :int)
|
389
|
+
.field(:grid_h, type: :int)
|
390
|
+
.field(:cell_no, type: :int)
|
391
|
+
.field(:h_align, type: :String)
|
392
|
+
.field(:v_align, type: :String)
|
393
|
+
.method(:position_shape)
|
394
|
+
.method(:to_h)
|
395
|
+
end
|
396
|
+
|
397
|
+
klass(description: 'layout') do
|
398
|
+
format
|
399
|
+
.header('Layout')
|
400
|
+
.field(:anchor_x, type: :String)
|
401
|
+
.field(:anchor_y, type: :String)
|
402
|
+
.method(:fire_after_init)
|
403
|
+
.method(:after_init)
|
404
|
+
.method(:to_h)
|
405
|
+
end
|
406
|
+
|
407
|
+
|
408
|
+
square(title: 'Schema/virtual', theme: :style_01)
|
409
|
+
send(shape_element, title: 'anchor' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
410
|
+
square(title: 'Schema/shapes', theme: :style_01)
|
411
|
+
|
412
|
+
grid_layout(wrap_at: 12, grid_w: 90, grid_h: 70)
|
413
|
+
|
414
|
+
send(shape_element, title: 'actor' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
415
|
+
send(shape_element, title: 'actor2' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
416
|
+
send(shape_element, title: 'callout' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
417
|
+
send(shape_element, title: 'callout2' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
418
|
+
send(shape_element, title: 'callout3' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
419
|
+
send(shape_element, title: 'callout4' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
420
|
+
send(shape_element, title: 'circle' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
421
|
+
send(shape_element, title: 'cloud' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
422
|
+
send(shape_element, title: 'container' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
423
|
+
send(shape_element, title: 'container2' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
424
|
+
send(shape_element, title: 'container3' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
425
|
+
send(shape_element, title: 'container4' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
426
|
+
send(shape_element, title: 'cross' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
427
|
+
send(shape_element, title: 'database' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
428
|
+
send(shape_element, title: 'db_json' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
429
|
+
send(shape_element, title: 'diamond' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
430
|
+
send(shape_element, title: 'document' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
431
|
+
send(shape_element, title: 'ellipse' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
432
|
+
send(shape_element, title: 'embed_col200' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
433
|
+
send(shape_element, title: 'embed_col50' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
434
|
+
send(shape_element, title: 'embed_row' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
435
|
+
send(shape_element, title: 'envelop' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
436
|
+
send(shape_element, title: 'face' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
437
|
+
send(shape_element, title: 'h1' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
438
|
+
send(shape_element, title: 'h2' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
439
|
+
send(shape_element, title: 'h3' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
440
|
+
send(shape_element, title: 'h4' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
441
|
+
send(shape_element, title: 'h5' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
442
|
+
send(shape_element, title: 'h6' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
443
|
+
send(shape_element, title: 'hexagon' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
444
|
+
send(shape_element, title: 'interface' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
445
|
+
send(shape_element, title: 'klass' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
446
|
+
send(shape_element, title: 'line' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
447
|
+
send(shape_element, title: 'note' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
448
|
+
send(shape_element, title: 'p' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
449
|
+
send(shape_element, title: 'process' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
450
|
+
send(shape_element, title: 'rectangle' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
451
|
+
send(shape_element, title: 'rectangle2' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
452
|
+
send(shape_element, title: 'shape' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
453
|
+
send(shape_element, title: 'square' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
454
|
+
send(shape_element, title: 'step' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
455
|
+
send(shape_element, title: 'tick' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
456
|
+
send(shape_element, title: 'todo' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
457
|
+
send(shape_element, title: 'triangle' , w: shape_element_w, h: shape_element_h, theme: shape_element_theme)
|
458
|
+
|
459
|
+
end
|
460
|
+
.cd(:docs)
|
461
|
+
.save('domain_model.drawio')
|
462
|
+
.export_svg('domain_model', page: 1)
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
KManager.opts.app_name = 'domain_model'
|
467
|
+
KManager.opts.sleep = 2
|
468
|
+
KManager.opts.reboot_on_kill = 0
|
469
|
+
KManager.opts.reboot_sleep = 4
|
470
|
+
KManager.opts.exception_style = :short
|
471
|
+
KManager.opts.show.time_taken = true
|
472
|
+
KManager.opts.show.finished = true
|
473
|
+
KManager.opts.show.finished_message = 'FINISHED :)'
|
Binary file
|
@@ -0,0 +1,110 @@
|
|
1
|
+
KManager.action :parking_app do
|
2
|
+
action do
|
3
|
+
|
4
|
+
DrawioDsl::Drawio
|
5
|
+
.init(k_builder, on_exist: :write, on_action: :execute)
|
6
|
+
.diagram(theme: :style_04)
|
7
|
+
.page('Domain Modal', margin_left: 0, margin_top: 0, rounded: 0, background: '#fafafa') do
|
8
|
+
grid_layout(wrap_at: 6)
|
9
|
+
|
10
|
+
# Two apps in the market for parking currently do the following:
|
11
|
+
#
|
12
|
+
# Allow an officer to see if a car is parked legally or not
|
13
|
+
# Officer can book the car and if it is parked illegally
|
14
|
+
# Officer can print out the penalty infringement notice (PIN)
|
15
|
+
# The vehicle operator (driver) can use the app to buy a ticket for a parking space
|
16
|
+
#
|
17
|
+
# System is integrated with State Debt Recovery System
|
18
|
+
#
|
19
|
+
# Two actors involved:
|
20
|
+
# Officer will book illegal cars
|
21
|
+
# - An officer can be a: Parking cop, Police officer, Ranger or parking station attendant.
|
22
|
+
# - Examples of parking station attendants include, McDonald'se, Wilsons Car Park, etc. (limited GEO fence)
|
23
|
+
# The vehicle operator will pay the ticket for parking space
|
24
|
+
#
|
25
|
+
# What can be booked? Anything that is a registered vehicle.
|
26
|
+
# - Truck, Bus, Car, Motorcycle, Trailer, etc.
|
27
|
+
# - They all have a number plate.
|
28
|
+
#
|
29
|
+
# Goal is to build a better app
|
30
|
+
|
31
|
+
# What is wrong with the current apps?
|
32
|
+
#
|
33
|
+
# When I book a car, I say it is outside of house #5, Bondi road.
|
34
|
+
|
35
|
+
# What can be improved?
|
36
|
+
#
|
37
|
+
# AI can be used to detect the vehicle definition.
|
38
|
+
|
39
|
+
actor2(title: 'Officer', description: 'Officer can book illegal cars')
|
40
|
+
actor2(title: 'Vehicle operator', description: 'vehicle operator can buy a ticket for a parking space')
|
41
|
+
|
42
|
+
# square
|
43
|
+
|
44
|
+
# should there be vehicle, the definition.
|
45
|
+
# should there be vehicle, the instance of the definition.
|
46
|
+
|
47
|
+
klass do # table in the database
|
48
|
+
format
|
49
|
+
.header('Vehicle', description: 'Any vehicle with a registration number plate, Truck, Bus, Car, Motorcycle, Trailer')
|
50
|
+
.field(:make)
|
51
|
+
.field(:model)
|
52
|
+
.field(:type) # Bus, Sedan, Station Wagon, 4WD, Motorcycle, Trailer, Caravan, Car+Caravan, Van etc.
|
53
|
+
.field(:registration_number)
|
54
|
+
.field(:heavy_vehicle)
|
55
|
+
end
|
56
|
+
|
57
|
+
klass do
|
58
|
+
format
|
59
|
+
.header('Chalk', description: 'Noting that a vehicle is parked at a specific time and location')
|
60
|
+
.field(:date_time) # 9am (from chalk)
|
61
|
+
.field(:vehicle)
|
62
|
+
.field(:location_geo_long) # , value: '-33.8425248')
|
63
|
+
.field(:location_geo_lat) # , value: '151.2054196')
|
64
|
+
end
|
65
|
+
|
66
|
+
klass do
|
67
|
+
format
|
68
|
+
.header('Pin', description: 'Penalty infringement notice (PIN)')
|
69
|
+
.field(:date_time)
|
70
|
+
.field(:vehicle)
|
71
|
+
.field(:location_address) # can AI be used auto suggest to populate this field, and then the officer can alter if needed.
|
72
|
+
.field(:location_geo_long) #, value: '-33.8425248')
|
73
|
+
.field(:location_geo_lat) #, value: '151.2054196')
|
74
|
+
.field(:location_photo)
|
75
|
+
.field(:photos)
|
76
|
+
.field(:offense_chalk_time) # 9am (from chalk)
|
77
|
+
.field(:offense_offence_limit_time) # 2 hours - has to be after chalk time (and is based on signage)
|
78
|
+
.field(:offense_pin_time) # has to be after offense limit time
|
79
|
+
end
|
80
|
+
|
81
|
+
# square(title: 'Schema/virtual', theme: :style_01)
|
82
|
+
# diamond(title: 'anchor')
|
83
|
+
|
84
|
+
# klass do
|
85
|
+
# format
|
86
|
+
# .header('Container', description: 'A container acts a base data object for any data that requires tagging')
|
87
|
+
# end
|
88
|
+
# square(title: 'Documents', theme: :style_01)
|
89
|
+
# interface(theme: :style_02) do
|
90
|
+
# format
|
91
|
+
# .header('Block Processor', interface_type: 'MixIn', description: 'Provide data load events, dependency and import management')
|
92
|
+
# .field(:block, type: :proc)
|
93
|
+
# .field(:block_state, type: :symbol)
|
94
|
+
# .method(:depend_on)
|
95
|
+
# end
|
96
|
+
end
|
97
|
+
.cd(:docs)
|
98
|
+
.save('parking_app.drawio')
|
99
|
+
.export_svg('parking_app', page: 1)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
KManager.opts.app_name = 'domain_diagram'
|
104
|
+
KManager.opts.sleep = 2
|
105
|
+
KManager.opts.reboot_on_kill = 0
|
106
|
+
KManager.opts.reboot_sleep = 4
|
107
|
+
KManager.opts.exception_style = :short
|
108
|
+
KManager.opts.show.time_taken = true
|
109
|
+
KManager.opts.show.finished = true
|
110
|
+
KManager.opts.show.finished_message = 'FINISHED :)'
|
@@ -0,0 +1,45 @@
|
|
1
|
+
KManager.action :printspeak_architecture_generator do
|
2
|
+
action do
|
3
|
+
|
4
|
+
DrawioDsl::Drawio
|
5
|
+
.init(k_builder, on_exist: :write, on_action: :execute)
|
6
|
+
.diagram(theme: :style_04)
|
7
|
+
.page('Style-Plain', margin_left: 0, margin_top: 0, rounded: 0, background: '#fafafa') do
|
8
|
+
grid_layout(wrap_at: 6)
|
9
|
+
|
10
|
+
square(title: 'Data Documents', theme: :style_01)
|
11
|
+
|
12
|
+
klass do
|
13
|
+
format
|
14
|
+
.header('Container', description: '')
|
15
|
+
end
|
16
|
+
|
17
|
+
db_json(title: 'db_schema.json', description: 'A model of the database schema based on schema.rb')
|
18
|
+
db_json(title: 'domain_model.json', description: 'A model of domain based db_schema.json and annotated with model and controller code')
|
19
|
+
db_json(title: 'sql_count.json', description: 'Latest SQL counts from production, normalized into a JSON file across regions')
|
20
|
+
db_json(title: 'rubocop.json', description: 'Takes a rubo_cop.txt file parse it so that you can see what issues are in the ruby application')
|
21
|
+
db_json(title: 'data_context.json', description: 'A model of the data context based on domain_model.json and data_context.json')
|
22
|
+
db_json(title: 'routes.json', description: 'Run rails routes and build up a model of what we use')
|
23
|
+
|
24
|
+
interface(theme: :style_02) do
|
25
|
+
format
|
26
|
+
.header('Block Processor', interface_type: 'Subsystems', description: '')
|
27
|
+
.field(:block, type: :proc)
|
28
|
+
.field(:block_state, type: :symbol)
|
29
|
+
.method(:depend_on)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
.cd(:docs)
|
33
|
+
.save('printspeak-architecture-generator.drawio')
|
34
|
+
.export_svg('printspeak-architecture-generator', page: 1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
KManager.opts.app_name = 'domain_diagram'
|
39
|
+
KManager.opts.sleep = 2
|
40
|
+
KManager.opts.reboot_on_kill = 0
|
41
|
+
KManager.opts.reboot_sleep = 4
|
42
|
+
KManager.opts.exception_style = :short
|
43
|
+
KManager.opts.show.time_taken = true
|
44
|
+
KManager.opts.show.finished = true
|
45
|
+
KManager.opts.show.finished_message = 'FINISHED :)'
|
@@ -9,12 +9,16 @@ KManager.action :project_plan do
|
|
9
9
|
# h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
|
10
10
|
# p(x: 350, y: 40, w: 400, h: 80, title: 'Project plan - In progress')
|
11
11
|
|
12
|
-
grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
|
13
|
-
|
14
|
-
todo(title: '
|
15
|
-
todo(title: '
|
12
|
+
grid_layout(y: 90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
|
13
|
+
|
14
|
+
todo(title: 'build a domain (class) diagram')
|
15
|
+
todo(title: 'group box, like a regular box but with a top aligned h1 style title')
|
16
|
+
todo(title: 'class html builder to support include/extend modules, class methods and regular html nodes such as p, h1.. ul, li')
|
16
17
|
todo(title: 'add new shapes related to line connectors')
|
18
|
+
todo(title: 'line connector aliases gives a simple way to use predefined line configurations')
|
17
19
|
todo(title: 'line connectors need to support autolinking using ids')
|
20
|
+
todo(title: 'line connectors should not effect the grid positioning systems')
|
21
|
+
todo(title: 'export diagram json for use with a different DSL builder')
|
18
22
|
end
|
19
23
|
.page('To Do', theme: :style_02, margin_left: 0, margin_top: 0) do
|
20
24
|
|
@@ -26,10 +30,9 @@ KManager.action :project_plan do
|
|
26
30
|
todo(title: 'add page background to theme, use it whenever the theme is set at a diagram/page level')
|
27
31
|
todo(title: 'move DrawioDsl::Formatters::Factory::FORMATTERS to resource file')
|
28
32
|
todo(title: 'move DrawioDsl::Formatters::StyleBuilder::MAPPINGS to resource file')
|
29
|
-
todo(title: 'need to setup new project plans')
|
30
33
|
todo(title: 'settings style attributes need to de-duplicate, might be best to utilize the new StyleBuilder class')
|
31
34
|
todo(title: 'write SVG directly into other projects')
|
32
|
-
todo(title: 'add :shape and :text
|
35
|
+
todo(title: 'add :shape, :line and :text to random shape generator')
|
33
36
|
todo(title: 'Nodes need to support child nodes')
|
34
37
|
todo(title: 'Grid layout does not position itself in relation to the last element')
|
35
38
|
todo(title: 'Dynamic sized shapes that expand to the size of their text')
|
@@ -45,6 +48,11 @@ KManager.action :project_plan do
|
|
45
48
|
|
46
49
|
grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
|
47
50
|
|
51
|
+
todo(title: 'build configuration for line strokes %i[dashed dotted dashdot dashdotdot dotdotdot longdash)')
|
52
|
+
todo(title: 'build configuration for line compass %i[n ne e se s sw w nw]')
|
53
|
+
todo(title: 'build configuration for line shape %i[style1 style2 style3 style4]')
|
54
|
+
todo(title: 'build configuration for arrows %i[straight triangle diamond circle cross short default none plain skewed_dash concave er_many er_one er_one_optional er_one_mandatory er_many_optional er_many_mandatory]')
|
55
|
+
todo(title: 'refactor the shape->text_only (boolean) to category (symbol)')
|
48
56
|
todo(title: 'ensure that ids are working as expected')
|
49
57
|
todo(title: 'alter the initial parameter of all shapes so that it can be an ID, without named attribute')
|
50
58
|
todo(title: 'move project-plan files')
|
@@ -63,7 +71,6 @@ KManager.action :project_plan do
|
|
63
71
|
todo(title: 'add export as .PNG, needs to take a page number as the PNG will not support multiple pages')
|
64
72
|
todo(title: 'add export as .SVG, needs to take a page number as the SVG will not support multiple pages')
|
65
73
|
todo(title: 'add save as .drawio')
|
66
|
-
|
67
74
|
end
|
68
75
|
.cd(:docs)
|
69
76
|
.save('project-plan/project.drawio')
|