drawio_dsl 0.11.1 → 0.11.4

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/config/configuration.json +157 -16
  4. data/docs/domain_model.drawio +89 -89
  5. data/docs/domain_model.json +267 -267
  6. data/docs/printspeak-architecture-controllers-custom.drawio +9 -9
  7. data/docs/printspeak-architecture-controllers.drawio +47 -47
  8. data/docs/printspeak-architecture-generator-custom.drawio +16 -10
  9. data/docs/printspeak-architecture-generator.drawio +268 -0
  10. data/docs/project-plan/project.drawio +92 -89
  11. data/docs/project-plan/project_done.svg +1 -1
  12. data/docs/project-plan/project_in_progress.svg +1 -1
  13. data/docs/project-plan/project_todo.svg +1 -1
  14. data/docs/tailwind_domain_model-custom.drawio +104 -0
  15. data/docs/tailwind_domain_model.json +288 -0
  16. data/docs/tailwind_domain_model.svg +3 -0
  17. data/lib/drawio_dsl/configuration.rb +36 -24
  18. data/lib/drawio_dsl/dom_builder_shapes.rb +78 -0
  19. data/lib/drawio_dsl/drawio_shapes.rb +121 -43
  20. data/lib/drawio_dsl/schema/_.rb +13 -0
  21. data/lib/drawio_dsl/schema/element.rb +4 -0
  22. data/lib/drawio_dsl/schema/line.rb +33 -3
  23. data/lib/drawio_dsl/schema/{texts/.rb → lines/dash.rb} +2 -2
  24. data/lib/drawio_dsl/schema/{elements/.rb → lines/dash24.rb} +2 -2
  25. data/lib/drawio_dsl/schema/lines/dash32.rb +9 -0
  26. data/lib/drawio_dsl/schema/lines/dash44.rb +9 -0
  27. data/lib/drawio_dsl/schema/lines/dash_dot.rb +9 -0
  28. data/lib/drawio_dsl/schema/lines/dash_dot_dot.rb +9 -0
  29. data/lib/drawio_dsl/schema/lines/dash_long_dash.rb +9 -0
  30. data/lib/drawio_dsl/schema/lines/{.rb → dot.rb} +2 -2
  31. data/lib/drawio_dsl/schema/lines/dot_dot_dot.rb +9 -0
  32. data/lib/drawio_dsl/schema/lines/double.rb +9 -0
  33. data/lib/drawio_dsl/schema/lines/double_dash.rb +9 -0
  34. data/lib/drawio_dsl/schema/lines/double_dot.rb +9 -0
  35. data/lib/drawio_dsl/schema/lines/long_dash.rb +9 -0
  36. data/lib/drawio_dsl/schema/shape.rb +6 -1
  37. data/lib/drawio_dsl/schema/text.rb +4 -0
  38. data/lib/drawio_dsl/version.rb +1 -1
  39. data/package-lock.json +2 -2
  40. data/package.json +1 -1
  41. metadata +19 -5
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1302px" height="522px" viewBox="-0.5 -0.5 1302 522"><defs/><g><rect x="20" y="0" width="160" height="160" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 80px; margin-left: 21px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind GEM</div></div></div></foreignObject><text x="100" y="84" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Tailwind GEM</text></switch></g><rect x="240" y="0" width="160" height="160" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 80px; margin-left: 241px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Configuration</div></div></div></foreignObject><text x="320" y="84" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Configuration</text></switch></g><rect x="440" y="0" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 0px; margin-left: 440px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Configuration</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">collections: A&lt;Collection&gt;</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">themes: A&lt;Theme&gt;</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">data_shapes: A&lt;DataShape&gt;</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">component_groups: A&lt;ComponentGroup&gt;</p></div></div></div></foreignObject><text x="440" y="84" fill="#333333" font-family="Helvetica" font-size="12px">Configuration...</text></switch></g><rect x="660" y="0" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 0px; margin-left: 660px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Collection</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">component_groups: A&lt;ComponentGroup&gt;</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">default_themes: A&lt;Theme&gt;</p></div></div></div></foreignObject><text x="660" y="84" fill="#333333" font-family="Helvetica" font-size="12px">Collection...</text></switch></g><rect x="880" y="0" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 0px; margin-left: 880px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Theme</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p></div></div></div></foreignObject><text x="880" y="84" fill="#333333" font-family="Helvetica" font-size="12px">Theme...</text></switch></g><rect x="1100" y="0" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 0px; margin-left: 1100px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>ComponentGroup</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">collection: Collection</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">components: A&lt;Component&gt;</p></div></div></div></foreignObject><text x="1100" y="84" fill="#333333" font-family="Helvetica" font-size="12px">ComponentGroup...</text></switch></g><rect x="0" y="180" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 180px; margin-left: 0px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Component</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">data_shape: DataShape</p></div></div></div></foreignObject><text x="0" y="264" fill="#333333" font-family="Helvetica" font-size="12px">Component...</text></switch></g><rect x="220" y="180" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 180px; margin-left: 220px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>DataShape</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p></div></div></div></foreignObject><text x="220" y="264" fill="#333333" font-family="Helvetica" font-size="12px">DataShape...</text></switch></g><rect x="460" y="180" width="160" height="160" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 260px; margin-left: 461px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Schema</div></div></div></foreignObject><text x="540" y="264" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Schema</text></switch></g><rect x="660" y="180" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 180px; margin-left: 660px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>WebSite</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">target_folder: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">base_collection: Collection</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">theme: Theme</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">root: Page</p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">favourite_components() : A&lt;Component&gt;</p></div></div></div></foreignObject><text x="660" y="264" fill="#333333" font-family="Helvetica" font-size="12px">WebSite...</text></switch></g><rect x="880" y="180" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 180px; margin-left: 880px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Page</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">sub_folder: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">level: Integer</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">pages: A&lt;Page&gt;</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">components: A&lt;Component&gt;</p></div></div></div></foreignObject><text x="880" y="264" fill="#333333" font-family="Helvetica" font-size="12px">Page...</text></switch></g><rect x="1100" y="180" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 180px; margin-left: 1100px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Component</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">key: Symbol</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">name: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">description: String</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">component_group: ComponentGroup</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">data_shape: DataShape</p></div></div></div></foreignObject><text x="1100" y="264" fill="#333333" font-family="Helvetica" font-size="12px">Component...</text></switch></g><rect x="20" y="360" width="160" height="160" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 440px; margin-left: 21px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind Generator</div></div></div></foreignObject><text x="100" y="444" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Tailwind Generator</text></switch></g><rect x="240" y="360" width="160" height="160" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 440px; margin-left: 241px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Tailwind DSL</div></div></div></foreignObject><text x="320" y="444" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Tailwind DSL</text></switch></g><rect x="440" y="360" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 360px; margin-left: 440px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>TailwindDsl</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">website()</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">page()</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">component()</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">save()</p></div></div></div></foreignObject><text x="440" y="444" fill="#333333" font-family="Helvetica" font-size="12px">TailwindDsl...</text></switch></g><rect x="680" y="360" width="160" height="160" fill="#f5f5f5" stroke="#666666" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 440px; margin-left: 681px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">DataBuilder</div></div></div></foreignObject><text x="760" y="444" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">DataBuilder</text></switch></g><rect x="880" y="360" width="200" height="160" fill="#ffe6cc" stroke="#d79b00" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 160px; padding-top: 360px; margin-left: 880px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 200px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>BaseDataBuilder</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">obj: Hash</p></div></div></div></foreignObject><text x="880" y="444" fill="#333333" font-family="Helvetica" font-size="12px">BaseDataBuilder...</text></switch></g><rect x="1120" y="360" width="160" height="160" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 162px; height: 160px; padding-top: 360px; margin-left: 1120px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 160px; height: 160px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: normal; overflow-wrap: normal;"><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><i>&lt;&lt; MixIn &gt;&gt;</i></p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px ; text-align: center"><b>Factory</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">data()</p><p style="margin: 0px ; margin-left: 4px ; margin-bottom: 4px">data_instance()</p></div></div></div></foreignObject><text x="1120" y="444" fill="#333333" font-family="Helvetica" font-size="12px">&lt;&lt; MixIn &gt;&gt;...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
@@ -80,14 +80,7 @@ module DrawioDsl
80
80
  # Elements
81
81
 
82
82
  def element(key)
83
- elements[key] || ElementShapeConfig.new(
84
- key: :square,
85
- x: 0,
86
- y: 0,
87
- w: 160,
88
- h: 160,
89
- style_modifiers: ''
90
- )
83
+ elements[key] || default_element
91
84
  end
92
85
 
93
86
  def elements
@@ -108,6 +101,17 @@ module DrawioDsl
108
101
  @elements
109
102
  end
110
103
 
104
+ def default_element
105
+ @default_element ||= ElementShapeConfig.new(
106
+ key: :square,
107
+ x: 0,
108
+ y: 0,
109
+ w: 160,
110
+ h: 160,
111
+ style_modifiers: ''
112
+ )
113
+ end
114
+
111
115
  def element_keys
112
116
  elements.keys
113
117
  end
@@ -119,14 +123,7 @@ module DrawioDsl
119
123
  # Lines
120
124
 
121
125
  def line(key)
122
- lines[key] || LineShapeConfig.new(
123
- key: :solid,
124
- x: 0,
125
- y: 0,
126
- w: 50,
127
- h: 50,
128
- style_modifiers: 'edgeStyle=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0'
129
- )
126
+ lines[key] || default_line
130
127
  end
131
128
 
132
129
  def lines
@@ -147,6 +144,17 @@ module DrawioDsl
147
144
  @lines
148
145
  end
149
146
 
147
+ def default_line
148
+ @default_line ||= LineShapeConfig.new(
149
+ key: :solid,
150
+ x: 0,
151
+ y: 0,
152
+ w: 50,
153
+ h: 50,
154
+ style_modifiers: 'edgeStyle=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0'
155
+ )
156
+ end
157
+
150
158
  def line_keys
151
159
  lines.keys
152
160
  end
@@ -156,14 +164,7 @@ module DrawioDsl
156
164
  end
157
165
 
158
166
  def text(key)
159
- texts[key] || TextShapeConfig.new(
160
- key: :p,
161
- x: 0,
162
- y: 0,
163
- w: 100,
164
- h: 50,
165
- style_modifiers: 'text;fontSize=16;fontStyle=1;fillColor=none'
166
- )
167
+ texts[key] || default_text
167
168
  end
168
169
 
169
170
  # Texts
@@ -186,6 +187,17 @@ module DrawioDsl
186
187
  @texts
187
188
  end
188
189
 
190
+ def default_text
191
+ @default_line ||= TextShapeConfig.new(
192
+ key: :p,
193
+ x: 0,
194
+ y: 0,
195
+ w: 100,
196
+ h: 50,
197
+ style_modifiers: 'text;fontSize=16;fontStyle=1;fillColor=none'
198
+ )
199
+ end
200
+
189
201
  def text_keys
190
202
  texts.keys
191
203
  end
@@ -10,6 +10,84 @@ module DrawioDsl
10
10
  add_shape(solid)
11
11
  end
12
12
 
13
+ def add_dash(id = nil, **opts, &block)
14
+ opts = { id: id }.merge(opts) if id
15
+ dash = DrawioDsl::Schema::Dash.new(current_page, **opts, &block)
16
+ add_shape(dash)
17
+ end
18
+
19
+ def add_dot(id = nil, **opts, &block)
20
+ opts = { id: id }.merge(opts) if id
21
+ dot = DrawioDsl::Schema::Dot.new(current_page, **opts, &block)
22
+ add_shape(dot)
23
+ end
24
+
25
+ def add_dash_dot(id = nil, **opts, &block)
26
+ opts = { id: id }.merge(opts) if id
27
+ dash_dot = DrawioDsl::Schema::DashDot.new(current_page, **opts, &block)
28
+ add_shape(dash_dot)
29
+ end
30
+
31
+ def add_dash_dot_dot(id = nil, **opts, &block)
32
+ opts = { id: id }.merge(opts) if id
33
+ dash_dot_dot = DrawioDsl::Schema::DashDotDot.new(current_page, **opts, &block)
34
+ add_shape(dash_dot_dot)
35
+ end
36
+
37
+ def add_dot_dot_dot(id = nil, **opts, &block)
38
+ opts = { id: id }.merge(opts) if id
39
+ dot_dot_dot = DrawioDsl::Schema::DotDotDot.new(current_page, **opts, &block)
40
+ add_shape(dot_dot_dot)
41
+ end
42
+
43
+ def add_long_dash(id = nil, **opts, &block)
44
+ opts = { id: id }.merge(opts) if id
45
+ long_dash = DrawioDsl::Schema::LongDash.new(current_page, **opts, &block)
46
+ add_shape(long_dash)
47
+ end
48
+
49
+ def add_dash_long_dash(id = nil, **opts, &block)
50
+ opts = { id: id }.merge(opts) if id
51
+ dash_long_dash = DrawioDsl::Schema::DashLongDash.new(current_page, **opts, &block)
52
+ add_shape(dash_long_dash)
53
+ end
54
+
55
+ def add_dash24(id = nil, **opts, &block)
56
+ opts = { id: id }.merge(opts) if id
57
+ dash24 = DrawioDsl::Schema::Dash24.new(current_page, **opts, &block)
58
+ add_shape(dash24)
59
+ end
60
+
61
+ def add_dash32(id = nil, **opts, &block)
62
+ opts = { id: id }.merge(opts) if id
63
+ dash32 = DrawioDsl::Schema::Dash32.new(current_page, **opts, &block)
64
+ add_shape(dash32)
65
+ end
66
+
67
+ def add_dash44(id = nil, **opts, &block)
68
+ opts = { id: id }.merge(opts) if id
69
+ dash44 = DrawioDsl::Schema::Dash44.new(current_page, **opts, &block)
70
+ add_shape(dash44)
71
+ end
72
+
73
+ def add_double(id = nil, **opts, &block)
74
+ opts = { id: id }.merge(opts) if id
75
+ double = DrawioDsl::Schema::Double.new(current_page, **opts, &block)
76
+ add_shape(double)
77
+ end
78
+
79
+ def add_double_dash(id = nil, **opts, &block)
80
+ opts = { id: id }.merge(opts) if id
81
+ double_dash = DrawioDsl::Schema::DoubleDash.new(current_page, **opts, &block)
82
+ add_shape(double_dash)
83
+ end
84
+
85
+ def add_double_dot(id = nil, **opts, &block)
86
+ opts = { id: id }.merge(opts) if id
87
+ double_dot = DrawioDsl::Schema::DoubleDot.new(current_page, **opts, &block)
88
+ add_shape(double_dot)
89
+ end
90
+
13
91
  def add_h1(id = nil, **opts, &block)
14
92
  opts = { id: id }.merge(opts) if id
15
93
  h1 = DrawioDsl::Schema::H1.new(current_page, **opts, &block)
@@ -5,94 +5,120 @@ module DrawioDsl
5
5
  # :nocov:
6
6
  module DrawioShapes
7
7
  def random(**opts)
8
- case rand(44)
8
+ case rand(57)
9
9
  when 0
10
10
  solid(**opts)
11
11
  when 1
12
- h1(**opts)
12
+ dash(**opts)
13
13
  when 2
14
- h2(**opts)
14
+ dot(**opts)
15
15
  when 3
16
- h3(**opts)
16
+ dash_dot(**opts)
17
17
  when 4
18
- h4(**opts)
18
+ dash_dot_dot(**opts)
19
19
  when 5
20
- h5(**opts)
20
+ dot_dot_dot(**opts)
21
21
  when 6
22
- h6(**opts)
22
+ long_dash(**opts)
23
23
  when 7
24
- p(**opts)
24
+ dash_long_dash(**opts)
25
25
  when 8
26
- actor(**opts)
26
+ dash24(**opts)
27
27
  when 9
28
- actor2(**opts)
28
+ dash32(**opts)
29
29
  when 10
30
- callout(**opts)
30
+ dash44(**opts)
31
31
  when 11
32
- callout2(**opts)
32
+ double(**opts)
33
33
  when 12
34
- callout3(**opts)
34
+ double_dash(**opts)
35
35
  when 13
36
- callout4(**opts)
36
+ double_dot(**opts)
37
37
  when 14
38
- circle(**opts)
38
+ h1(**opts)
39
39
  when 15
40
- cloud(**opts)
40
+ h2(**opts)
41
41
  when 16
42
- container(**opts)
42
+ h3(**opts)
43
43
  when 17
44
- container2(**opts)
44
+ h4(**opts)
45
45
  when 18
46
- container3(**opts)
46
+ h5(**opts)
47
47
  when 19
48
- container4(**opts)
48
+ h6(**opts)
49
49
  when 20
50
- cross(**opts)
50
+ p(**opts)
51
51
  when 21
52
- envelop(**opts)
52
+ actor(**opts)
53
53
  when 22
54
- database(**opts)
54
+ actor2(**opts)
55
55
  when 23
56
- db_json(**opts)
56
+ callout(**opts)
57
57
  when 24
58
- diamond(**opts)
58
+ callout2(**opts)
59
59
  when 25
60
- document(**opts)
60
+ callout3(**opts)
61
61
  when 26
62
- ellipse(**opts)
62
+ callout4(**opts)
63
63
  when 27
64
- group(**opts)
64
+ circle(**opts)
65
65
  when 28
66
- hexagon(**opts)
66
+ cloud(**opts)
67
67
  when 29
68
- interface(**opts)
68
+ container(**opts)
69
69
  when 30
70
- klass(**opts)
70
+ container2(**opts)
71
71
  when 31
72
- note(**opts)
72
+ container3(**opts)
73
73
  when 32
74
- process(**opts)
74
+ container4(**opts)
75
75
  when 33
76
- rectangle(**opts)
76
+ cross(**opts)
77
77
  when 34
78
- rectangle2(**opts)
78
+ envelop(**opts)
79
79
  when 35
80
- square(**opts)
80
+ database(**opts)
81
81
  when 36
82
- step(**opts)
82
+ db_json(**opts)
83
83
  when 37
84
- tick(**opts)
84
+ diamond(**opts)
85
85
  when 38
86
- todo(**opts)
86
+ document(**opts)
87
87
  when 39
88
- face(**opts)
88
+ ellipse(**opts)
89
89
  when 40
90
- triangle(**opts)
90
+ group(**opts)
91
91
  when 41
92
- embed_row(**opts)
92
+ hexagon(**opts)
93
93
  when 42
94
- embed_col50(**opts)
94
+ interface(**opts)
95
95
  when 43
96
+ klass(**opts)
97
+ when 44
98
+ note(**opts)
99
+ when 45
100
+ process(**opts)
101
+ when 46
102
+ rectangle(**opts)
103
+ when 47
104
+ rectangle2(**opts)
105
+ when 48
106
+ square(**opts)
107
+ when 49
108
+ step(**opts)
109
+ when 50
110
+ tick(**opts)
111
+ when 51
112
+ todo(**opts)
113
+ when 52
114
+ face(**opts)
115
+ when 53
116
+ triangle(**opts)
117
+ when 54
118
+ embed_row(**opts)
119
+ when 55
120
+ embed_col50(**opts)
121
+ when 56
96
122
  embed_col200(**opts)
97
123
  end
98
124
  end
@@ -101,6 +127,58 @@ module DrawioDsl
101
127
  builder.add_solid(id, **opts, &block)
102
128
  end
103
129
 
130
+ def dash(id = nil, **opts, &block)
131
+ builder.add_dash(id, **opts, &block)
132
+ end
133
+
134
+ def dot(id = nil, **opts, &block)
135
+ builder.add_dot(id, **opts, &block)
136
+ end
137
+
138
+ def dash_dot(id = nil, **opts, &block)
139
+ builder.add_dash_dot(id, **opts, &block)
140
+ end
141
+
142
+ def dash_dot_dot(id = nil, **opts, &block)
143
+ builder.add_dash_dot_dot(id, **opts, &block)
144
+ end
145
+
146
+ def dot_dot_dot(id = nil, **opts, &block)
147
+ builder.add_dot_dot_dot(id, **opts, &block)
148
+ end
149
+
150
+ def long_dash(id = nil, **opts, &block)
151
+ builder.add_long_dash(id, **opts, &block)
152
+ end
153
+
154
+ def dash_long_dash(id = nil, **opts, &block)
155
+ builder.add_dash_long_dash(id, **opts, &block)
156
+ end
157
+
158
+ def dash24(id = nil, **opts, &block)
159
+ builder.add_dash24(id, **opts, &block)
160
+ end
161
+
162
+ def dash32(id = nil, **opts, &block)
163
+ builder.add_dash32(id, **opts, &block)
164
+ end
165
+
166
+ def dash44(id = nil, **opts, &block)
167
+ builder.add_dash44(id, **opts, &block)
168
+ end
169
+
170
+ def double(id = nil, **opts, &block)
171
+ builder.add_double(id, **opts, &block)
172
+ end
173
+
174
+ def double_dash(id = nil, **opts, &block)
175
+ builder.add_double_dash(id, **opts, &block)
176
+ end
177
+
178
+ def double_dot(id = nil, **opts, &block)
179
+ builder.add_double_dot(id, **opts, &block)
180
+ end
181
+
104
182
  def h1(id = nil, **opts, &block)
105
183
  builder.add_h1(id, **opts, &block)
106
184
  end
@@ -56,6 +56,19 @@ require_relative 'elements/embed_col200'
56
56
 
57
57
  # Connector lines
58
58
  require_relative 'lines/solid'
59
+ require_relative 'lines/dash'
60
+ require_relative 'lines/dot'
61
+ require_relative 'lines/dash_dot'
62
+ require_relative 'lines/dash_dot_dot'
63
+ require_relative 'lines/dot_dot_dot'
64
+ require_relative 'lines/long_dash'
65
+ require_relative 'lines/dash_long_dash'
66
+ require_relative 'lines/dash24'
67
+ require_relative 'lines/dash32'
68
+ require_relative 'lines/dash44'
69
+ require_relative 'lines/double'
70
+ require_relative 'lines/double_dash'
71
+ require_relative 'lines/double_dot'
59
72
 
60
73
  # Text elements such as h1, h2, p, etc.
61
74
  require_relative 'texts/h1'
@@ -18,6 +18,10 @@ module DrawioDsl
18
18
  @gradient = args[:gradient] || theme_palette.gradient
19
19
  @font_color = args[:font_color] || theme_palette.font_color
20
20
  end
21
+
22
+ def default_configuration
23
+ KConfig.configuration.drawio.shape.default_element
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -5,19 +5,49 @@ module DrawioDsl
5
5
  # Text represents lines, usually used for drawing a connection between two elements.
6
6
  class Line < Shape
7
7
  class << self
8
- def configure_as(key)
8
+ attr_reader :default_stroke
9
+ attr_reader :default_design
10
+
11
+ def configure_as(key, stroke: nil, design: nil)
9
12
  configure_shape(key, :line)
13
+ @default_stroke = stroke
14
+ @default_design = design
10
15
  end
11
16
  end
12
17
 
13
18
  attr_accessor :source
14
19
  attr_accessor :target
20
+ attr_accessor :c1 # compass_point1 = :n, :ne, :e, :se, :s, :sw, :w, :nw
21
+ attr_accessor :c2 # compass_point2 = :n, :ne, :e, :se, :s, :sw, :w, :nw
22
+ attr_accessor :stroke
23
+ attr_accessor :design
15
24
 
25
+ # rubocop:disable Metrics/AbcSize
16
26
  def apply_defaults(args)
17
27
  super(args)
18
28
 
19
- @source = args[:source]
20
- @target = args[:target]
29
+ @source = args[:source]
30
+ @target = args[:target]
31
+ @c1 = args[:c1] || :nw
32
+ @c2 = args[:c2] || :ne
33
+ @stroke = args[:stroke] || self.class.default_stroke
34
+ @design = args[:design] || self.class.default_design
35
+ @fill_color = args[:fill_color] || theme_palette.fill_color
36
+ @stroke_color = args[:stroke_color] || theme_palette.stroke_color
37
+ end
38
+ # rubocop:enable Metrics/AbcSize
39
+
40
+ def default_configuration
41
+ KConfig.configuration.drawio.shape.default_line
42
+ end
43
+
44
+ def base_modifiers
45
+ return @base_modifiers if defined? @base_modifiers
46
+
47
+ stroke_modifiers = KConfig.configuration.drawio.stroke(stroke)
48
+ design_modifiers = KConfig.configuration.drawio.connector.design(design)
49
+
50
+ @base_modifiers = [stroke_modifiers, design_modifiers].reject(&:empty?).join(';')
21
51
  end
22
52
  end
23
53
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module DrawioDsl
4
4
  module Schema
5
- class P < Text
6
- configure_as(:p)
5
+ class Dash < Line
6
+ configure_as(:dash, stroke: :dash)
7
7
  end
8
8
  end
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module DrawioDsl
4
4
  module Schema
5
- class EmbedCol200 < Element
6
- configure_as(:embed_col200)
5
+ class Dash24 < Line
6
+ configure_as(:dash24, stroke: :dash24)
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class Dash32 < Line
6
+ configure_as(:dash32, stroke: :dash32)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class Dash44 < Line
6
+ configure_as(:dash44, stroke: :dash44)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class DashDot < Line
6
+ configure_as(:dash_dot, stroke: :dash_dot)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class DashDotDot < Line
6
+ configure_as(:dash_dot_dot, stroke: :dash_dot_dot)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class DashLongDash < Line
6
+ configure_as(:dash_long_dash, stroke: :dash_long_dash)
7
+ end
8
+ end
9
+ end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module DrawioDsl
4
4
  module Schema
5
- class Solid < Line
6
- configure_as(:solid)
5
+ class Dot < Line
6
+ configure_as(:dot, stroke: :dot)
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class DotDotDot < Line
6
+ configure_as(:dot_dot_dot, stroke: :dot_dot_dot)
7
+ end
8
+ end
9
+ end