drawio_dsl 0.8.5 → 0.8.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.data/shapes.json +9 -0
  3. data/.builders/blueprint/shapes.rb +1 -0
  4. data/.builders/generators/domain_diagram.rb +1 -0
  5. data/.builders/generators/project-plan.rb +8 -4
  6. data/.builders/generators/sample_diagrams/20-styles.rb +2 -2
  7. data/.builders/generators/sample_diagrams/30-html-shapes.rb +36 -14
  8. data/.builders/generators/sample_diagrams/35-ids-and-arrows.rb +0 -2
  9. data/.vscode/settings.json +2 -1
  10. data/CHANGELOG.md +22 -0
  11. data/README.md +0 -7
  12. data/docs/domain-modal/domain_model_custom.svg +1 -0
  13. data/docs/domain-modal.md +1 -1
  14. data/docs/domain_model.drawio +265 -0
  15. data/docs/domain_model.json +1038 -0
  16. data/docs/domain_model.svg +3 -0
  17. data/docs/project-plan/project.drawio +68 -56
  18. data/docs/project-plan/project_done.svg +1 -1
  19. data/docs/project-plan/project_in_progress.svg +1 -1
  20. data/docs/project-plan/project_todo.svg +1 -1
  21. data/docs/samples/styles-glass.svg +1 -1
  22. data/docs/samples/styles-plain.svg +1 -1
  23. data/docs/samples/styles-rounded.svg +1 -1
  24. data/docs/samples/styles-shadow.svg +1 -1
  25. data/docs/samples/styles-sketch.svg +1 -1
  26. data/lib/drawio_dsl/configuration_shapes.rb +3 -1
  27. data/lib/drawio_dsl/dom_builder_shapes.rb +7 -1
  28. data/lib/drawio_dsl/drawio.rb +16 -0
  29. data/lib/drawio_dsl/drawio_shapes.rb +22 -16
  30. data/lib/drawio_dsl/formatters/base_formatter.rb +120 -0
  31. data/lib/drawio_dsl/formatters/html_builder.rb +39 -0
  32. data/lib/drawio_dsl/formatters/interface_formatter.rb +13 -1
  33. data/lib/drawio_dsl/formatters/klass_formatter.rb +13 -1
  34. data/lib/drawio_dsl/schema/_.rb +1 -0
  35. data/lib/drawio_dsl/schema/shapes/group.rb +9 -0
  36. data/lib/drawio_dsl/version.rb +1 -1
  37. data/package-lock.json +2 -2
  38. data/package.json +1 -1
  39. metadata +7 -3
  40. data/docs/domain-modal/domain_model_custom.png +0 -0
@@ -3,7 +3,7 @@
3
3
  # Attach configuration to the DrawIO DSL module
4
4
  # :nocov:
5
5
  module DrawioDsl
6
- # Attach predefined shapes DrawIO KConfig module
6
+ # Used to attach configuration to KConfig module
7
7
  module ConfigurationShapes
8
8
  ShapeDefaults = Struct.new(:type, :category, :x, :y, :w, :h, :style_modifiers, keyword_init: true)
9
9
  Shapes = Struct.new(
@@ -35,6 +35,7 @@ module DrawioDsl
35
35
  :diamond,
36
36
  :document,
37
37
  :ellipse,
38
+ :group,
38
39
  :hexagon,
39
40
  :interface,
40
41
  :klass,
@@ -84,6 +85,7 @@ module DrawioDsl
84
85
  diamond: ShapeDefaults.new(type: :diamond, x: 0, category: :element, y: 0, w: 100, h: 100, style_modifiers: 'rhombus'),
85
86
  document: ShapeDefaults.new(type: :document, x: 0, category: :element, y: 0, w: 160, h: 160, style_modifiers: 'shape=mxgraph.basic.document'),
86
87
  ellipse: ShapeDefaults.new(type: :ellipse, x: 0, category: :element, y: 0, w: 200, h: 120, style_modifiers: 'ellipse'),
88
+ group: ShapeDefaults.new(type: :group, x: 0, category: :element, y: 0, w: 210, h: 210, style_modifiers: 'fontSize=20;verticalAlign=top'),
87
89
  hexagon: ShapeDefaults.new(type: :hexagon, x: 0, category: :element, y: 0, w: 200, h: 120, style_modifiers: 'shape=hexagon'),
88
90
  interface: ShapeDefaults.new(type: :interface, x: 0, category: :element, y: 0, w: 160, h: 160, style_modifiers: 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'),
89
91
  klass: ShapeDefaults.new(type: :klass, x: 0, category: :element, y: 0, w: 160, h: 160, style_modifiers: 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'),
@@ -2,7 +2,7 @@
2
2
 
3
3
  # :nocov:
4
4
  module DrawioDsl
5
- # Builder methods for each shape, line and text element to attach to DomBuilder.
5
+ # DrawioDsl is a DSL for draw-io diagrams.
6
6
  module DomBuilderShapes
7
7
  def add_line(id = nil, **opts, &block)
8
8
  opts = { id: id }.merge(opts) if id
@@ -166,6 +166,12 @@ module DrawioDsl
166
166
  add_shape(ellipse)
167
167
  end
168
168
 
169
+ def add_group(id = nil, **opts, &block)
170
+ opts = { id: id }.merge(opts) if id
171
+ group = DrawioDsl::Schema::Group.new(current_page, **opts, &block)
172
+ add_shape(group)
173
+ end
174
+
169
175
  def add_hexagon(id = nil, **opts, &block)
170
176
  opts = { id: id }.merge(opts) if id
171
177
  hexagon = DrawioDsl::Schema::Hexagon.new(current_page, **opts, &block)
@@ -19,6 +19,7 @@ module DrawioDsl
19
19
 
20
20
  layout = DrawioDsl::LayoutEngine.new(builder.current_page)
21
21
  layout.call
22
+
22
23
  self
23
24
  end
24
25
 
@@ -37,6 +38,21 @@ module DrawioDsl
37
38
  save(file_name, **{ open: :write }.merge(opts))
38
39
  end
39
40
 
41
+ def save_json(file_name, **opts)
42
+ return unless last_save_file_name
43
+ return unless File.exist?(last_save_file_name)
44
+
45
+ file_name = "#{file_name}.json" unless file_name.end_with?('.json')
46
+
47
+ add(file_name, content: JSON.pretty_generate(builder.dom), **opts)
48
+
49
+ self
50
+ end
51
+
52
+ def osave_json(file_name, **opts)
53
+ save_json(file_name, **{ open: :write }.merge(opts))
54
+ end
55
+
40
56
  def export_svg(output_file_name, page: 1)
41
57
  return unless last_save_file_name
42
58
  return unless File.exist?(last_save_file_name)
@@ -5,7 +5,7 @@ module DrawioDsl
5
5
  # :nocov:
6
6
  module DrawioShapes
7
7
  def random(**opts)
8
- case rand(43)
8
+ case rand(44)
9
9
  when 0
10
10
  line(**opts)
11
11
  when 1
@@ -61,36 +61,38 @@ module DrawioDsl
61
61
  when 26
62
62
  ellipse(**opts)
63
63
  when 27
64
- hexagon(**opts)
64
+ group(**opts)
65
65
  when 28
66
- interface(**opts)
66
+ hexagon(**opts)
67
67
  when 29
68
- klass(**opts)
68
+ interface(**opts)
69
69
  when 30
70
- note(**opts)
70
+ klass(**opts)
71
71
  when 31
72
- process(**opts)
72
+ note(**opts)
73
73
  when 32
74
- rectangle(**opts)
74
+ process(**opts)
75
75
  when 33
76
- rectangle2(**opts)
76
+ rectangle(**opts)
77
77
  when 34
78
- square(**opts)
78
+ rectangle2(**opts)
79
79
  when 35
80
- step(**opts)
80
+ square(**opts)
81
81
  when 36
82
- tick(**opts)
82
+ step(**opts)
83
83
  when 37
84
- todo(**opts)
84
+ tick(**opts)
85
85
  when 38
86
- face(**opts)
86
+ todo(**opts)
87
87
  when 39
88
- triangle(**opts)
88
+ face(**opts)
89
89
  when 40
90
- embed_row(**opts)
90
+ triangle(**opts)
91
91
  when 41
92
- embed_col50(**opts)
92
+ embed_row(**opts)
93
93
  when 42
94
+ embed_col50(**opts)
95
+ when 43
94
96
  embed_col200(**opts)
95
97
  end
96
98
  end
@@ -203,6 +205,10 @@ module DrawioDsl
203
205
  builder.add_ellipse(id, **opts, &block)
204
206
  end
205
207
 
208
+ def group(id = nil, **opts, &block)
209
+ builder.add_group(id, **opts, &block)
210
+ end
211
+
206
212
  def hexagon(id = nil, **opts, &block)
207
213
  builder.add_hexagon(id, **opts, &block)
208
214
  end
@@ -12,6 +12,78 @@ module DrawioDsl
12
12
  @html = DrawioDsl::Formatters::HtmlBuilder.new(element_style_defaults)
13
13
  end
14
14
 
15
+ def hr(size: 1)
16
+ html.hr(size: size)
17
+
18
+ self
19
+ end
20
+
21
+ def b(content, **opts)
22
+ html.b(content, **opts)
23
+
24
+ self
25
+ end
26
+
27
+ def p(content, **opts)
28
+ html.p(content, **opts)
29
+
30
+ self
31
+ end
32
+
33
+ def h1(content, **opts)
34
+ html.h1(content, **opts)
35
+
36
+ self
37
+ end
38
+
39
+ def h2(content, **opts)
40
+ html.h2(content, **opts)
41
+
42
+ self
43
+ end
44
+
45
+ def h3(content, **opts)
46
+ html.h3(content, **opts)
47
+
48
+ self
49
+ end
50
+
51
+ def h4(content, **opts)
52
+ html.h4(content, **opts)
53
+
54
+ self
55
+ end
56
+
57
+ def h5(content, **opts)
58
+ html.h5(content, **opts)
59
+
60
+ self
61
+ end
62
+
63
+ def h6(content, **opts)
64
+ html.h6(content, **opts)
65
+
66
+ self
67
+ end
68
+
69
+ def ul_s(**opts)
70
+ html.ul_s(**opts)
71
+
72
+ self
73
+ end
74
+
75
+ def ul_e(**opts)
76
+ html.ul_e(**opts)
77
+
78
+ self
79
+ end
80
+
81
+ def li(content, **opts)
82
+ html.li(content, **opts)
83
+
84
+ self
85
+ end
86
+
15
87
  def empty?
16
88
  html.empty?
17
89
  end
@@ -19,6 +91,54 @@ module DrawioDsl
19
91
  def as_html(new_line: false)
20
92
  html.as_html(new_line: new_line)
21
93
  end
94
+
95
+ private
96
+
97
+ # useful defaults
98
+
99
+ def ratio
100
+ @ratio ||= 1.2
101
+ end
102
+
103
+ def base_margin_bottom
104
+ @base_margin_bottom ||= 4
105
+ end
106
+
107
+ def p_margin_bottom
108
+ @p_margin_bottom ||= base_margin_bottom
109
+ end
110
+
111
+ def b_margin_bottom
112
+ @b_margin_bottom ||= base_margin_bottom
113
+ end
114
+
115
+ def li_margin_bottom
116
+ @li_margin_bottom ||= base_margin_bottom
117
+ end
118
+
119
+ def h6_margin_bottom
120
+ @h6_margin_bottom ||= base_margin_bottom
121
+ end
122
+
123
+ def h5_margin_bottom
124
+ @h5_margin_bottom ||= h6_margin_bottom * ratio
125
+ end
126
+
127
+ def h4_margin_bottom
128
+ @h4_margin_bottom ||= h5_margin_bottom * ratio
129
+ end
130
+
131
+ def h3_margin_bottom
132
+ @h3_margin_bottom ||= h4_margin_bottom * ratio
133
+ end
134
+
135
+ def h2_margin_bottom
136
+ @h2_margin_bottom ||= h3_margin_bottom * ratio
137
+ end
138
+
139
+ def h1_margin_bottom
140
+ @h1_margin_bottom ||= h2_margin_bottom * ratio
141
+ end
22
142
  end
23
143
  end
24
144
  end
@@ -12,6 +12,9 @@ module DrawioDsl
12
12
  @element_style_defaults = element_style_defaults
13
13
  end
14
14
 
15
+ # Access the default styles for a HTML element
16
+ #
17
+ # Formatters can define the defaults styles for HTML elements such as <p>, <h1>, etc.
15
18
  def default_for(tag)
16
19
  element_style_defaults[tag] || {}
17
20
  end
@@ -48,6 +51,42 @@ module DrawioDsl
48
51
  add_line("<p#{style_for(:p, **opts)}>#{content}</p>")
49
52
  end
50
53
 
54
+ def h1(content, **opts)
55
+ add_line("<h1#{style_for(:h1, **opts)}>#{content}</h1>")
56
+ end
57
+
58
+ def h2(content, **opts)
59
+ add_line("<h2#{style_for(:h2, **opts)}>#{content}</h2>")
60
+ end
61
+
62
+ def h3(content, **opts)
63
+ add_line("<h3#{style_for(:h3, **opts)}>#{content}</h3>")
64
+ end
65
+
66
+ def h4(content, **opts)
67
+ add_line("<h4#{style_for(:h4, **opts)}>#{content}</h4>")
68
+ end
69
+
70
+ def h5(content, **opts)
71
+ add_line("<h5#{style_for(:h5, **opts)}>#{content}</h5>")
72
+ end
73
+
74
+ def h6(content, **opts)
75
+ add_line("<h6#{style_for(:h6, **opts)}>#{content}</h6>")
76
+ end
77
+
78
+ def li(content, **opts)
79
+ add_line("<li#{style_for(:li, **opts)}>#{content}</li>")
80
+ end
81
+
82
+ def ul_s(**opts)
83
+ add_line("<ul#{style_for(:ul, **opts)}>")
84
+ end
85
+
86
+ def ul_e(**_opts)
87
+ add_line('</ul>')
88
+ end
89
+
51
90
  def add_line(line)
52
91
  lines << line
53
92
  end
@@ -7,7 +7,19 @@ module DrawioDsl
7
7
  # Format the HTML to display an interface on a class diagram
8
8
  class InterfaceFormatter < BaseFormatter
9
9
  def initialize
10
- super({ p: { margin: '0px', margin_left: '4px', margin_top: '4px' } })
10
+ super(
11
+ {
12
+ p: { margin: '0px', margin_left: '4px', margin_bottom: "#{p_margin_bottom}px" },
13
+ b: { margin: '0px', margin_left: '4px', margin_bottom: "#{b_margin_bottom}px" },
14
+ h1: { margin: '0px', margin_left: '4px', margin_bottom: "#{h1_margin_bottom}px" },
15
+ h2: { margin: '0px', margin_left: '4px', margin_bottom: "#{h2_margin_bottom}px" },
16
+ h3: { margin: '0px', margin_left: '4px', margin_bottom: "#{h3_margin_bottom}px" },
17
+ h4: { margin: '0px', margin_left: '4px', margin_bottom: "#{h4_margin_bottom}px" },
18
+ h5: { margin: '0px', margin_left: '4px', margin_bottom: "#{h5_margin_bottom}px" },
19
+ h6: { margin: '0px', margin_left: '4px', margin_bottom: "#{h6_margin_bottom}px" },
20
+ li: { margin: '0px', margin_left: '4px', margin_bottom: "#{li_margin_bottom}px" }
21
+ }
22
+ )
11
23
  end
12
24
 
13
25
  def header(name, description: nil, interface_type: 'Interface')
@@ -7,7 +7,19 @@ module DrawioDsl
7
7
  # Format the HTML to display an class on a class diagram
8
8
  class KlassFormatter < BaseFormatter
9
9
  def initialize
10
- super({ p: { margin: '0px', margin_left: '4px', margin_top: '4px' } })
10
+ super(
11
+ {
12
+ p: { margin: '0px', margin_left: '4px', margin_bottom: "#{p_margin_bottom}px" },
13
+ b: { margin: '0px', margin_left: '4px', margin_bottom: "#{b_margin_bottom}px" },
14
+ h1: { margin: '0px', margin_left: '4px', margin_bottom: "#{h1_margin_bottom}px" },
15
+ h2: { margin: '0px', margin_left: '4px', margin_bottom: "#{h2_margin_bottom}px" },
16
+ h3: { margin: '0px', margin_left: '4px', margin_bottom: "#{h3_margin_bottom}px" },
17
+ h4: { margin: '0px', margin_left: '4px', margin_bottom: "#{h4_margin_bottom}px" },
18
+ h5: { margin: '0px', margin_left: '4px', margin_bottom: "#{h5_margin_bottom}px" },
19
+ h6: { margin: '0px', margin_left: '4px', margin_bottom: "#{h6_margin_bottom}px" },
20
+ li: { margin: '0px', margin_left: '4px', margin_bottom: "#{li_margin_bottom}px" }
21
+ }
22
+ )
11
23
  end
12
24
 
13
25
  def header(name, description: nil)
@@ -39,6 +39,7 @@ require_relative 'shapes/db_json'
39
39
  require_relative 'shapes/diamond'
40
40
  require_relative 'shapes/document'
41
41
  require_relative 'shapes/ellipse'
42
+ require_relative 'shapes/group'
42
43
  require_relative 'shapes/hexagon'
43
44
  require_relative 'shapes/interface'
44
45
  require_relative 'shapes/klass'
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class Group < Shape
6
+ configure_shape(:group)
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DrawioDsl
4
- VERSION = '0.8.5'
4
+ VERSION = '0.8.8'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "drawio_dsl",
3
- "version": "0.8.5",
3
+ "version": "0.8.8",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "drawio_dsl",
9
- "version": "0.8.5",
9
+ "version": "0.8.8",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drawio_dsl",
3
- "version": "0.8.5",
3
+ "version": "0.8.8",
4
4
  "description": "DrawIO DSL can build DrawIO diagrams using a Domain Specific Language",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drawio_dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.8.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-20 00:00:00.000000000 Z
11
+ date: 2022-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_config
@@ -119,7 +119,10 @@ files:
119
119
  - docs/domain-modal/domain_model.drawio
120
120
  - docs/domain-modal/domain_model.svg
121
121
  - docs/domain-modal/domain_model_custom.drawio
122
- - docs/domain-modal/domain_model_custom.png
122
+ - docs/domain-modal/domain_model_custom.svg
123
+ - docs/domain_model.drawio
124
+ - docs/domain_model.json
125
+ - docs/domain_model.svg
123
126
  - docs/extensions.md
124
127
  - docs/extensions/analyti_cs.svg
125
128
  - docs/extensions/android_inputs.svg
@@ -353,6 +356,7 @@ files:
353
356
  - lib/drawio_dsl/schema/shapes/embed_row.rb
354
357
  - lib/drawio_dsl/schema/shapes/envelop.rb
355
358
  - lib/drawio_dsl/schema/shapes/face.rb
359
+ - lib/drawio_dsl/schema/shapes/group.rb
356
360
  - lib/drawio_dsl/schema/shapes/h1.rb
357
361
  - lib/drawio_dsl/schema/shapes/h2.rb
358
362
  - lib/drawio_dsl/schema/shapes/h3.rb