drawio_dsl 0.5.4 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.templates/basic/schema_require.rb +3 -1
  3. data/.builders/generators/project_plans/drawio_dsl.rb +19 -15
  4. data/.builders/generators/project_plans/k_doc.rb +39 -0
  5. data/.builders/generators/sample_diagrams/05-samples.rb +23 -0
  6. data/.builders/generators/sample_diagrams/10-page-margin.rb +4 -8
  7. data/.builders/generators/sample_diagrams/15-grid-direction.rb +9 -7
  8. data/.builders/generators/sample_diagrams/16-grid-alignment.rb +6 -9
  9. data/.builders/generators/sample_diagrams/20-styles.rb +43 -45
  10. data/.builders/generators/sample_diagrams/25-themes.rb +21 -8
  11. data/.builders/generators/sample_diagrams/50-willoughby-council.rb +5 -6
  12. data/.rubocop.yml +3 -1
  13. data/CHANGELOG.md +22 -0
  14. data/README.md +6 -3
  15. data/docs/project_done.svg +1 -1
  16. data/docs/project_in_progress.svg +1 -1
  17. data/docs/project_todo.svg +1 -1
  18. data/docs/samples/grid-alignment-center.svg +3 -0
  19. data/docs/samples/grid-alignment.svg +3 -0
  20. data/docs/samples/grid-direction-horizontal.svg +3 -0
  21. data/docs/samples/grid-direction-vertical.svg +3 -0
  22. data/docs/samples/samples.md +48 -0
  23. data/docs/samples/samples.svg +3 -0
  24. data/docs/samples/styles-glass.svg +3 -0
  25. data/docs/samples/styles-plain.svg +3 -0
  26. data/docs/samples/styles-rounded.svg +3 -0
  27. data/docs/samples/styles-shadow.svg +3 -0
  28. data/docs/samples/styles-sketch.svg +3 -0
  29. data/docs/samples/themes-circle.svg +3 -0
  30. data/docs/samples/themes-random.svg +3 -0
  31. data/docs/samples/themes-square.svg +3 -0
  32. data/docs/samples/willoughby-council.svg +3 -0
  33. data/lib/drawio_dsl/drawio.rb +16 -0
  34. data/lib/drawio_dsl/schema/_.rb +2 -0
  35. data/lib/drawio_dsl/schema/node.rb +6 -0
  36. data/lib/drawio_dsl/schema/page.rb +4 -0
  37. data/lib/drawio_dsl/schema/virtual/anchor.rb +24 -0
  38. data/lib/drawio_dsl/version.rb +1 -1
  39. data/lib/drawio_dsl/xml_builder.rb +6 -5
  40. data/package-lock.json +2 -2
  41. data/package.json +1 -1
  42. metadata +20 -3
  43. data/.builders/generators/sample_diagrams/30-shapes.rb +0 -23
@@ -27,6 +27,7 @@ module DrawioDsl
27
27
 
28
28
  add(file_name, content: diagram.build, **opts)
29
29
 
30
+ # if last_save_file_name is nil then you are not in execute mode
30
31
  @last_save_file_name = k_builder.last_output_file
31
32
 
32
33
  self
@@ -50,6 +51,21 @@ module DrawioDsl
50
51
 
51
52
  self
52
53
  end
54
+
55
+ def export_png(output_file_name, page: 1)
56
+ return unless last_save_file_name
57
+ return unless File.exist?(last_save_file_name)
58
+
59
+ page -= 1 # use zero based index
60
+
61
+ output_file_name = "#{output_file_name}.png" unless output_file_name.end_with?('.png')
62
+
63
+ command = "/Applications/draw.io.app/Contents/MacOS/draw.io '#{last_save_file_name}' -p #{page} -x -o #{output_file_name}"
64
+
65
+ run_command(command)
66
+
67
+ self
68
+ end
53
69
  end
54
70
 
55
71
  # DrawioDsl::DrawioPage is created when you call .page on the draw-io DSL.
@@ -49,3 +49,5 @@ require_relative 'shapes/triangle'
49
49
  require_relative 'shapes/embed_row'
50
50
  require_relative 'shapes/embed_col50'
51
51
  require_relative 'shapes/embed_col200'
52
+
53
+ require_relative 'virtual/anchor'
@@ -7,11 +7,13 @@ module DrawioDsl
7
7
  class Node
8
8
  attr_accessor :id
9
9
  attr_accessor :page
10
+ attr_accessor :parent
10
11
  attr_accessor :classification
11
12
 
12
13
  def initialize(page, **args)
13
14
  @page = page
14
15
  @id = args[:id]
16
+ @parent = args[:parent]
15
17
  @classification = args[:classification] || :unknown
16
18
  end
17
19
 
@@ -22,6 +24,10 @@ module DrawioDsl
22
24
  }
23
25
  end
24
26
 
27
+ def root?
28
+ parent.nil?
29
+ end
30
+
25
31
  # :nocov:
26
32
  # rubocop:disable Metrics/AbcSize
27
33
  def debug(format: :detail)
@@ -87,6 +87,10 @@ module DrawioDsl
87
87
  end
88
88
 
89
89
  @nodes = NodeList.new # []
90
+
91
+ # add anchor nodes
92
+ @nodes.add(DrawioDsl::Schema::Anchor.new(self, id: "page_root_#{id}"))
93
+ @nodes.add(DrawioDsl::Schema::Anchor.new(self, id: "node_root_#{id}"))
90
94
  end
91
95
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
92
96
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ # Provides an anchor point on the page for elements to hang from
6
+ class Anchor < Node
7
+ def initialize(page, **args)
8
+ args[:classification] = :anchor
9
+ super(page, **args)
10
+ end
11
+
12
+ # xml.mxCell(id: "#{page.id}-A")
13
+ # xml.mxCell(id: "#{page.id}-B", parent: "#{page.id}-A")
14
+
15
+ def as_xml(xml)
16
+ if parent
17
+ xml.mxCell(id: id, parent: parent.id)
18
+ else
19
+ xml.mxCell(id: id)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DrawioDsl
4
- VERSION = '0.5.4'
4
+ VERSION = '0.5.7'
5
5
  end
@@ -28,7 +28,7 @@ module DrawioDsl
28
28
  end
29
29
  end
30
30
 
31
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/BlockLength
31
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
32
32
  def build_page(xml, page)
33
33
  xml.diagram(id: page.id, name: page.name) do
34
34
  xml.mxGraphModel(
@@ -50,15 +50,16 @@ module DrawioDsl
50
50
  shadow: page.page_shadow
51
51
  ) do
52
52
  xml.root do
53
- xml.mxCell(id: "#{page.id}-A")
54
- xml.mxCell(id: "#{page.id}-B", parent: "#{page.id}-A")
53
+ # xml.mxCell(id: "#{page.id}-A")
54
+ # xml.mxCell(id: "#{page.id}-B", parent: "#{page.id}-A")
55
55
  page.nodes.all.each do |node|
56
- node.as_xml(xml) if node.classification == :shape
56
+ # puts node.classification
57
+ node.as_xml(xml) if %i[shape anchor].include?(node.classification)
57
58
  end
58
59
  end
59
60
  end
60
61
  end
61
62
  end
62
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/BlockLength
63
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
63
64
  end
64
65
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "drawio_dsl",
3
- "version": "0.5.4",
3
+ "version": "0.5.7",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "drawio_dsl",
9
- "version": "0.5.4",
9
+ "version": "0.5.7",
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.5.4",
3
+ "version": "0.5.7",
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.5.4
4
+ version: 0.5.7
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-08 00:00:00.000000000 Z
11
+ date: 2022-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_config
@@ -86,12 +86,13 @@ files:
86
86
  - ".builders/generators/01-bootstrap.rb"
87
87
  - ".builders/generators/02-generate-app.rb"
88
88
  - ".builders/generators/project_plans/drawio_dsl.rb"
89
+ - ".builders/generators/project_plans/k_doc.rb"
90
+ - ".builders/generators/sample_diagrams/05-samples.rb"
89
91
  - ".builders/generators/sample_diagrams/10-page-margin.rb"
90
92
  - ".builders/generators/sample_diagrams/15-grid-direction.rb"
91
93
  - ".builders/generators/sample_diagrams/16-grid-alignment.rb"
92
94
  - ".builders/generators/sample_diagrams/20-styles.rb"
93
95
  - ".builders/generators/sample_diagrams/25-themes.rb"
94
- - ".builders/generators/sample_diagrams/30-shapes.rb"
95
96
  - ".builders/generators/sample_diagrams/50-willoughby-council.rb"
96
97
  - ".releaserc.json"
97
98
  - ".rspec"
@@ -110,6 +111,21 @@ files:
110
111
  - docs/project_done.svg
111
112
  - docs/project_in_progress.svg
112
113
  - docs/project_todo.svg
114
+ - docs/samples/grid-alignment-center.svg
115
+ - docs/samples/grid-alignment.svg
116
+ - docs/samples/grid-direction-horizontal.svg
117
+ - docs/samples/grid-direction-vertical.svg
118
+ - docs/samples/samples.md
119
+ - docs/samples/samples.svg
120
+ - docs/samples/styles-glass.svg
121
+ - docs/samples/styles-plain.svg
122
+ - docs/samples/styles-rounded.svg
123
+ - docs/samples/styles-shadow.svg
124
+ - docs/samples/styles-sketch.svg
125
+ - docs/samples/themes-circle.svg
126
+ - docs/samples/themes-random.svg
127
+ - docs/samples/themes-square.svg
128
+ - docs/samples/willoughby-council.svg
113
129
  - lib/drawio_dsl.rb
114
130
  - lib/drawio_dsl/configuration.rb
115
131
  - lib/drawio_dsl/configuration_extension.rb
@@ -168,6 +184,7 @@ files:
168
184
  - lib/drawio_dsl/schema/shapes/step.rb
169
185
  - lib/drawio_dsl/schema/shapes/tick.rb
170
186
  - lib/drawio_dsl/schema/shapes/triangle.rb
187
+ - lib/drawio_dsl/schema/virtual/anchor.rb
171
188
  - lib/drawio_dsl/version.rb
172
189
  - lib/drawio_dsl/xml_builder.rb
173
190
  - package-lock.json
@@ -1,23 +0,0 @@
1
- KManager.action :bootstrap do
2
- action do
3
-
4
- # :rounded, :shadow, :sketch, :glass
5
- director = DrawioDsl::Drawio
6
- .init(k_builder)
7
- .diagram(theme: :style_06)
8
- .page('Shapes', margin_left: 0, margin_top: 0) do
9
- grid_layout(wrap_at: 5)
10
-
11
- KConfig.configuration.drawio.shapes.members.each do |shape|
12
- next if shape == :shape
13
-
14
- send(shape, title: shape.to_s, shape: shape)
15
- end
16
- end
17
-
18
- diagram = DrawioDsl::XmlBuilder.new(director.builder.diagram)
19
-
20
- File.write('../spec/.samples/drawio/30-shapes.xml', diagram.build)
21
- File.write('../spec/.samples/drawio/30-shapes.drawio', diagram.build)
22
- end
23
- end