sirena 0.1.0

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 (382) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build_deploy.yml +59 -0
  3. data/.github/workflows/links.yml +85 -0
  4. data/.github/workflows/rake.yml +15 -0
  5. data/.github/workflows/release.yml +27 -0
  6. data/.gitignore +68 -0
  7. data/.rspec +3 -0
  8. data/.rubocop.yml +14 -0
  9. data/.rubocop_todo.yml +70 -0
  10. data/ARCHITECTURE.md +744 -0
  11. data/Gemfile +12 -0
  12. data/LICENSE +25 -0
  13. data/README.adoc +357 -0
  14. data/Rakefile +11 -0
  15. data/docs/.gitignore +1 -0
  16. data/docs/Gemfile +13 -0
  17. data/docs/_config.yml +182 -0
  18. data/docs/_diagram_types/architecture-diagram.adoc +314 -0
  19. data/docs/_diagram_types/block-diagram.adoc +345 -0
  20. data/docs/_diagram_types/c4-diagram.adoc +559 -0
  21. data/docs/_diagram_types/class-diagram.adoc +816 -0
  22. data/docs/_diagram_types/er-diagram.adoc +719 -0
  23. data/docs/_diagram_types/error-diagram.adoc +114 -0
  24. data/docs/_diagram_types/examples/flowchart-examples.adoc +29 -0
  25. data/docs/_diagram_types/flowchart.adoc +488 -0
  26. data/docs/_diagram_types/gantt-chart.adoc +502 -0
  27. data/docs/_diagram_types/git-graph.adoc +600 -0
  28. data/docs/_diagram_types/index.adoc +192 -0
  29. data/docs/_diagram_types/info-diagram.adoc +103 -0
  30. data/docs/_diagram_types/kanban-diagram.adoc +262 -0
  31. data/docs/_diagram_types/mindmap.adoc +603 -0
  32. data/docs/_diagram_types/packet-diagram.adoc +378 -0
  33. data/docs/_diagram_types/pie-chart.adoc +335 -0
  34. data/docs/_diagram_types/quadrant-chart.adoc +406 -0
  35. data/docs/_diagram_types/radar-chart.adoc +528 -0
  36. data/docs/_diagram_types/requirement-diagram.adoc +416 -0
  37. data/docs/_diagram_types/sankey-diagram.adoc +357 -0
  38. data/docs/_diagram_types/sequence-diagram.adoc +664 -0
  39. data/docs/_diagram_types/state-diagram.adoc +658 -0
  40. data/docs/_diagram_types/timeline.adoc +352 -0
  41. data/docs/_diagram_types/treemap-diagram.adoc +462 -0
  42. data/docs/_diagram_types/user-journey.adoc +602 -0
  43. data/docs/_features/index.adoc +129 -0
  44. data/docs/_guides/cli-reference.adoc +203 -0
  45. data/docs/_guides/index.adoc +56 -0
  46. data/docs/_guides/installation.adoc +100 -0
  47. data/docs/_guides/quick-start.adoc +132 -0
  48. data/docs/_pages/comparison.adoc +441 -0
  49. data/docs/_pages/compatibility.adoc +300 -0
  50. data/docs/_pages/index.adoc +39 -0
  51. data/docs/_references/index.adoc +103 -0
  52. data/docs/_tutorials/index.adoc +57 -0
  53. data/docs/index.adoc +166 -0
  54. data/docs/lychee.toml +54 -0
  55. data/examples/.gitignore +10 -0
  56. data/examples/README.adoc +196 -0
  57. data/examples/README.md +64 -0
  58. data/examples/architecture/01-basic-services.mmd +9 -0
  59. data/examples/architecture/01-basic-services.svg +37 -0
  60. data/examples/architecture/02-service-groups.mmd +16 -0
  61. data/examples/architecture/02-service-groups.svg +55 -0
  62. data/examples/architecture/README.adoc +79 -0
  63. data/examples/block/01-basic-blocks.mmd +13 -0
  64. data/examples/block/01-basic-blocks.svg +44 -0
  65. data/examples/block/02-block-shapes.mmd +13 -0
  66. data/examples/block/02-block-shapes.svg +47 -0
  67. data/examples/block/README.adoc +85 -0
  68. data/examples/c4/01-context-diagram.mmd +10 -0
  69. data/examples/c4/01-context-diagram.svg +45 -0
  70. data/examples/c4/02-container-diagram.mmd +24 -0
  71. data/examples/c4/02-container-diagram.svg +105 -0
  72. data/examples/c4/README.adoc +92 -0
  73. data/examples/class_diagram/01-basic-classes.mmd +61 -0
  74. data/examples/class_diagram/01-basic-classes.svg +117 -0
  75. data/examples/class_diagram/02-relationships.mmd +61 -0
  76. data/examples/class_diagram/02-relationships.svg +129 -0
  77. data/examples/class_diagram/README.adoc +93 -0
  78. data/examples/er_diagram/01-basic-entities.mmd +64 -0
  79. data/examples/er_diagram/01-basic-entities.svg +5 -0
  80. data/examples/er_diagram/02-cardinality.mmd +57 -0
  81. data/examples/er_diagram/02-cardinality.svg +125 -0
  82. data/examples/er_diagram/README.adoc +88 -0
  83. data/examples/error/01-basic-error.mmd +1 -0
  84. data/examples/error/01-basic-error.svg +13 -0
  85. data/examples/error/02-error-display.mmd +1 -0
  86. data/examples/error/02-error-display.svg +13 -0
  87. data/examples/error/README.adoc +71 -0
  88. data/examples/error_message_example.svg +13 -0
  89. data/examples/flowchart/00-original.mmd +13 -0
  90. data/examples/flowchart/00-original.svg +5 -0
  91. data/examples/flowchart/01-basic-flow.mmd +7 -0
  92. data/examples/flowchart/01-basic-flow.svg +52 -0
  93. data/examples/flowchart/01-basic-flow.yml +13 -0
  94. data/examples/flowchart/02*.svg +87 -0
  95. data/examples/flowchart/02-node-shapes.mmd +9 -0
  96. data/examples/flowchart/02-node-shapes.svg +33 -0
  97. data/examples/flowchart/03-edge-types.mmd +7 -0
  98. data/examples/flowchart/03-edge-types.svg +53 -0
  99. data/examples/flowchart/04-subgraphs.mmd +9 -0
  100. data/examples/flowchart/04-subgraphs.svg +33 -0
  101. data/examples/flowchart/05-styling.mmd +9 -0
  102. data/examples/flowchart/05-styling.svg +33 -0
  103. data/examples/flowchart/06-complex-flow.mmd +8 -0
  104. data/examples/flowchart/06-complex-flow.svg +59 -0
  105. data/examples/flowchart/README.adoc +167 -0
  106. data/examples/gantt/01-simple-timeline.* +14 -0
  107. data/examples/gantt/01-simple-timeline.mmd +6 -0
  108. data/examples/gantt/01-simple-timeline.svg +26 -0
  109. data/examples/gantt/02-task-dependencies.mmd +6 -0
  110. data/examples/gantt/02-task-dependencies.svg +26 -0
  111. data/examples/gantt/README.adoc +86 -0
  112. data/examples/git_graph/01-linear-history.mmd +12 -0
  113. data/examples/git_graph/01-linear-history.svg +26 -0
  114. data/examples/git_graph/02-branching.mmd +12 -0
  115. data/examples/git_graph/02-branching.svg +26 -0
  116. data/examples/git_graph/README.adoc +73 -0
  117. data/examples/info/02-showinfo.mmd +1 -0
  118. data/examples/info/02-showinfo.svg +10 -0
  119. data/examples/info/README.adoc +58 -0
  120. data/examples/info_showinfo_example.svg +10 -0
  121. data/examples/kanban/01-simple-board.mmd +8 -0
  122. data/examples/kanban/01-simple-board.svg +43 -0
  123. data/examples/kanban/02-workflow.mmd +8 -0
  124. data/examples/kanban/02-workflow.svg +43 -0
  125. data/examples/kanban/README.adoc +79 -0
  126. data/examples/mindmap/01-simple-tree.mmd +19 -0
  127. data/examples/mindmap/01-simple-tree.svg +61 -0
  128. data/examples/mindmap/02-knowledge-map.mmd +19 -0
  129. data/examples/mindmap/02-knowledge-map.svg +61 -0
  130. data/examples/mindmap/README.adoc +77 -0
  131. data/examples/packet/01-basic-packet.* +17 -0
  132. data/examples/packet/01-basic-packet.mmd +4 -0
  133. data/examples/packet/01-basic-packet.svg +82 -0
  134. data/examples/packet/README.adoc +58 -0
  135. data/examples/pie/01-simple-chart.mmd +5 -0
  136. data/examples/pie/01-simple-chart.svg +17 -0
  137. data/examples/pie/02-labeled-slices.mmd +6 -0
  138. data/examples/pie/02-labeled-slices.svg +19 -0
  139. data/examples/pie/README.adoc +75 -0
  140. data/examples/quadrant/01-basic-quadrant.mmd +13 -0
  141. data/examples/quadrant/01-basic-quadrant.svg +33 -0
  142. data/examples/quadrant/02-positioned-items.mmd +14 -0
  143. data/examples/quadrant/02-positioned-items.svg +35 -0
  144. data/examples/quadrant/README.adoc +84 -0
  145. data/examples/radar/01-simple-radar.* +5 -0
  146. data/examples/radar/01-simple-radar.mmd +3 -0
  147. data/examples/radar/01-simple-radar.svg +25 -0
  148. data/examples/radar/02-multiple-curves.mmd +4 -0
  149. data/examples/radar/02-multiple-curves.svg +43 -0
  150. data/examples/radar/README.adoc +75 -0
  151. data/examples/requirement/01-basic-requirements.mmd +23 -0
  152. data/examples/requirement/01-basic-requirements.svg +49 -0
  153. data/examples/requirement/02-risk-levels.mmd +23 -0
  154. data/examples/requirement/02-risk-levels.svg +49 -0
  155. data/examples/requirement/README.adoc +85 -0
  156. data/examples/sankey/01-simple-flow.mmd +7 -0
  157. data/examples/sankey/01-simple-flow.svg +34 -0
  158. data/examples/sankey/02-multi-stage.mmd +11 -0
  159. data/examples/sankey/02-multi-stage.svg +44 -0
  160. data/examples/sankey/README.adoc +74 -0
  161. data/examples/sequence/01-basic-sequence.mmd +27 -0
  162. data/examples/sequence/01-basic-sequence.svg +5 -0
  163. data/examples/sequence/02-activations.mmd +17 -0
  164. data/examples/sequence/02-activations.svg +78 -0
  165. data/examples/sequence/README.adoc +86 -0
  166. data/examples/state_diagram/01-simple-states.mmd +29 -0
  167. data/examples/state_diagram/01-simple-states.svg +5 -0
  168. data/examples/state_diagram/02-composite.mmd +19 -0
  169. data/examples/state_diagram/02-composite.svg +81 -0
  170. data/examples/state_diagram/README.adoc +90 -0
  171. data/examples/timeline/01-simple-timeline.mmd +11 -0
  172. data/examples/timeline/01-simple-timeline.svg +36 -0
  173. data/examples/timeline/02-periods.mmd +15 -0
  174. data/examples/timeline/02-periods.svg +47 -0
  175. data/examples/timeline/README.adoc +78 -0
  176. data/examples/treemap/01-basic-treemap.mmd +12 -0
  177. data/examples/treemap/01-basic-treemap.svg +59 -0
  178. data/examples/treemap/README.adoc +59 -0
  179. data/examples/user_journey/01-simple-journey.mmd +23 -0
  180. data/examples/user_journey/01-simple-journey.svg +5 -0
  181. data/examples/user_journey/02-multi-actor.mmd +18 -0
  182. data/examples/user_journey/02-multi-actor.svg +129 -0
  183. data/examples/user_journey/README.adoc +81 -0
  184. data/examples/xychart/01-line-chart.mmd +5 -0
  185. data/examples/xychart/01-line-chart.svg +43 -0
  186. data/examples/xychart/02-bar-chart.mmd +7 -0
  187. data/examples/xychart/02-bar-chart.svg +48 -0
  188. data/examples/xychart/README.adoc +80 -0
  189. data/exe/sirena +7 -0
  190. data/lib/sirena/cli.rb +138 -0
  191. data/lib/sirena/commands/batch.rb +117 -0
  192. data/lib/sirena/commands/render.rb +80 -0
  193. data/lib/sirena/commands/types.rb +29 -0
  194. data/lib/sirena/commands/version.rb +24 -0
  195. data/lib/sirena/diagram/architecture.rb +46 -0
  196. data/lib/sirena/diagram/base.rb +61 -0
  197. data/lib/sirena/diagram/block.rb +81 -0
  198. data/lib/sirena/diagram/c4.rb +328 -0
  199. data/lib/sirena/diagram/class_diagram.rb +385 -0
  200. data/lib/sirena/diagram/er_diagram.rb +238 -0
  201. data/lib/sirena/diagram/error.rb +38 -0
  202. data/lib/sirena/diagram/flowchart.rb +160 -0
  203. data/lib/sirena/diagram/gantt.rb +71 -0
  204. data/lib/sirena/diagram/git_graph.rb +36 -0
  205. data/lib/sirena/diagram/info.rb +38 -0
  206. data/lib/sirena/diagram/kanban.rb +178 -0
  207. data/lib/sirena/diagram/mindmap.rb +54 -0
  208. data/lib/sirena/diagram/packet.rb +79 -0
  209. data/lib/sirena/diagram/pie.rb +115 -0
  210. data/lib/sirena/diagram/quadrant.rb +138 -0
  211. data/lib/sirena/diagram/radar.rb +52 -0
  212. data/lib/sirena/diagram/requirement.rb +133 -0
  213. data/lib/sirena/diagram/sankey.rb +217 -0
  214. data/lib/sirena/diagram/sequence.rb +242 -0
  215. data/lib/sirena/diagram/state_diagram.rb +237 -0
  216. data/lib/sirena/diagram/timeline.rb +171 -0
  217. data/lib/sirena/diagram/treemap.rb +84 -0
  218. data/lib/sirena/diagram/user_journey.rb +149 -0
  219. data/lib/sirena/diagram/xy_chart.rb +76 -0
  220. data/lib/sirena/diagram.rb +8 -0
  221. data/lib/sirena/diagram_registry.rb +101 -0
  222. data/lib/sirena/engine.rb +292 -0
  223. data/lib/sirena/parser/architecture.rb +41 -0
  224. data/lib/sirena/parser/base.rb +41 -0
  225. data/lib/sirena/parser/block.rb +72 -0
  226. data/lib/sirena/parser/c4.rb +53 -0
  227. data/lib/sirena/parser/class_diagram.rb +63 -0
  228. data/lib/sirena/parser/er_diagram.rb +40 -0
  229. data/lib/sirena/parser/error.rb +49 -0
  230. data/lib/sirena/parser/flowchart.rb +71 -0
  231. data/lib/sirena/parser/gantt.rb +60 -0
  232. data/lib/sirena/parser/git_graph.rb +95 -0
  233. data/lib/sirena/parser/grammars/architecture.rb +145 -0
  234. data/lib/sirena/parser/grammars/block.rb +190 -0
  235. data/lib/sirena/parser/grammars/c4.rb +226 -0
  236. data/lib/sirena/parser/grammars/class_diagram.rb +284 -0
  237. data/lib/sirena/parser/grammars/common.rb +84 -0
  238. data/lib/sirena/parser/grammars/er_diagram.rb +114 -0
  239. data/lib/sirena/parser/grammars/error.rb +40 -0
  240. data/lib/sirena/parser/grammars/flowchart.rb +298 -0
  241. data/lib/sirena/parser/grammars/gantt.rb +252 -0
  242. data/lib/sirena/parser/grammars/git_graph.rb +167 -0
  243. data/lib/sirena/parser/grammars/info.rb +58 -0
  244. data/lib/sirena/parser/grammars/kanban.rb +83 -0
  245. data/lib/sirena/parser/grammars/mindmap.rb +115 -0
  246. data/lib/sirena/parser/grammars/packet.rb +73 -0
  247. data/lib/sirena/parser/grammars/pie.rb +128 -0
  248. data/lib/sirena/parser/grammars/quadrant.rb +199 -0
  249. data/lib/sirena/parser/grammars/radar.rb +150 -0
  250. data/lib/sirena/parser/grammars/requirement.rb +188 -0
  251. data/lib/sirena/parser/grammars/sankey.rb +104 -0
  252. data/lib/sirena/parser/grammars/sequence.rb +247 -0
  253. data/lib/sirena/parser/grammars/state_diagram.rb +172 -0
  254. data/lib/sirena/parser/grammars/timeline.rb +142 -0
  255. data/lib/sirena/parser/grammars/treemap.rb +120 -0
  256. data/lib/sirena/parser/grammars/xy_chart.rb +120 -0
  257. data/lib/sirena/parser/info.rb +49 -0
  258. data/lib/sirena/parser/kanban.rb +97 -0
  259. data/lib/sirena/parser/mindmap.rb +106 -0
  260. data/lib/sirena/parser/packet.rb +76 -0
  261. data/lib/sirena/parser/pie.rb +49 -0
  262. data/lib/sirena/parser/quadrant.rb +57 -0
  263. data/lib/sirena/parser/radar.rb +104 -0
  264. data/lib/sirena/parser/requirement.rb +70 -0
  265. data/lib/sirena/parser/sankey.rb +64 -0
  266. data/lib/sirena/parser/sequence.rb +51 -0
  267. data/lib/sirena/parser/state_diagram.rb +69 -0
  268. data/lib/sirena/parser/timeline.rb +57 -0
  269. data/lib/sirena/parser/transforms/architecture.rb +97 -0
  270. data/lib/sirena/parser/transforms/block.rb +254 -0
  271. data/lib/sirena/parser/transforms/c4.rb +347 -0
  272. data/lib/sirena/parser/transforms/class_diagram.rb +352 -0
  273. data/lib/sirena/parser/transforms/er_diagram.rb +169 -0
  274. data/lib/sirena/parser/transforms/error.rb +58 -0
  275. data/lib/sirena/parser/transforms/flowchart.rb +293 -0
  276. data/lib/sirena/parser/transforms/gantt.rb +215 -0
  277. data/lib/sirena/parser/transforms/git_graph.rb +160 -0
  278. data/lib/sirena/parser/transforms/info.rb +58 -0
  279. data/lib/sirena/parser/transforms/kanban.rb +176 -0
  280. data/lib/sirena/parser/transforms/mindmap.rb +227 -0
  281. data/lib/sirena/parser/transforms/packet.rb +63 -0
  282. data/lib/sirena/parser/transforms/pie.rb +143 -0
  283. data/lib/sirena/parser/transforms/quadrant.rb +177 -0
  284. data/lib/sirena/parser/transforms/radar.rb +126 -0
  285. data/lib/sirena/parser/transforms/requirement.rb +272 -0
  286. data/lib/sirena/parser/transforms/sankey.rb +122 -0
  287. data/lib/sirena/parser/transforms/sequence.rb +342 -0
  288. data/lib/sirena/parser/transforms/state_diagram.rb +292 -0
  289. data/lib/sirena/parser/transforms/timeline.rb +177 -0
  290. data/lib/sirena/parser/transforms/treemap.rb +81 -0
  291. data/lib/sirena/parser/transforms/xy_chart.rb +132 -0
  292. data/lib/sirena/parser/treemap.rb +98 -0
  293. data/lib/sirena/parser/user_journey.rb +120 -0
  294. data/lib/sirena/parser/xy_chart.rb +114 -0
  295. data/lib/sirena/parser.rb +8 -0
  296. data/lib/sirena/renderer/architecture.rb +251 -0
  297. data/lib/sirena/renderer/base.rb +251 -0
  298. data/lib/sirena/renderer/block.rb +286 -0
  299. data/lib/sirena/renderer/c4.rb +490 -0
  300. data/lib/sirena/renderer/class_diagram.rb +499 -0
  301. data/lib/sirena/renderer/er_diagram.rb +417 -0
  302. data/lib/sirena/renderer/error.rb +131 -0
  303. data/lib/sirena/renderer/flowchart.rb +301 -0
  304. data/lib/sirena/renderer/gantt.rb +331 -0
  305. data/lib/sirena/renderer/git_graph.rb +368 -0
  306. data/lib/sirena/renderer/info.rb +93 -0
  307. data/lib/sirena/renderer/kanban.rb +295 -0
  308. data/lib/sirena/renderer/mindmap.rb +396 -0
  309. data/lib/sirena/renderer/packet.rb +239 -0
  310. data/lib/sirena/renderer/pie.rb +235 -0
  311. data/lib/sirena/renderer/quadrant.rb +292 -0
  312. data/lib/sirena/renderer/radar.rb +323 -0
  313. data/lib/sirena/renderer/requirement.rb +371 -0
  314. data/lib/sirena/renderer/sankey.rb +255 -0
  315. data/lib/sirena/renderer/sequence.rb +424 -0
  316. data/lib/sirena/renderer/state_diagram.rb +328 -0
  317. data/lib/sirena/renderer/timeline.rb +304 -0
  318. data/lib/sirena/renderer/treemap.rb +152 -0
  319. data/lib/sirena/renderer/user_journey.rb +331 -0
  320. data/lib/sirena/renderer/xy_chart.rb +452 -0
  321. data/lib/sirena/renderer.rb +8 -0
  322. data/lib/sirena/svg/circle.rb +41 -0
  323. data/lib/sirena/svg/document.rb +103 -0
  324. data/lib/sirena/svg/element.rb +65 -0
  325. data/lib/sirena/svg/ellipse.rb +33 -0
  326. data/lib/sirena/svg/group.rb +71 -0
  327. data/lib/sirena/svg/line.rb +49 -0
  328. data/lib/sirena/svg/path.rb +76 -0
  329. data/lib/sirena/svg/polygon.rb +43 -0
  330. data/lib/sirena/svg/polyline.rb +35 -0
  331. data/lib/sirena/svg/rect.rb +57 -0
  332. data/lib/sirena/svg/style.rb +44 -0
  333. data/lib/sirena/svg/text.rb +72 -0
  334. data/lib/sirena/svg.rb +19 -0
  335. data/lib/sirena/text_measurement.rb +71 -0
  336. data/lib/sirena/theme/builtin/dark.yml +70 -0
  337. data/lib/sirena/theme/builtin/default.yml +80 -0
  338. data/lib/sirena/theme/builtin/high_contrast.yml +70 -0
  339. data/lib/sirena/theme/builtin/light.yml +70 -0
  340. data/lib/sirena/theme/color_palette.rb +48 -0
  341. data/lib/sirena/theme/effect_styles.rb +28 -0
  342. data/lib/sirena/theme/registry.rb +41 -0
  343. data/lib/sirena/theme/shape_styles.rb +28 -0
  344. data/lib/sirena/theme/spacing_config.rb +24 -0
  345. data/lib/sirena/theme/typography.rb +30 -0
  346. data/lib/sirena/theme.rb +69 -0
  347. data/lib/sirena/transform/architecture.rb +273 -0
  348. data/lib/sirena/transform/base.rb +199 -0
  349. data/lib/sirena/transform/block.rb +215 -0
  350. data/lib/sirena/transform/c4.rb +288 -0
  351. data/lib/sirena/transform/class_diagram.rb +296 -0
  352. data/lib/sirena/transform/er_diagram.rb +204 -0
  353. data/lib/sirena/transform/error.rb +39 -0
  354. data/lib/sirena/transform/flowchart.rb +161 -0
  355. data/lib/sirena/transform/gantt.rb +253 -0
  356. data/lib/sirena/transform/git_graph.rb +283 -0
  357. data/lib/sirena/transform/info.rb +39 -0
  358. data/lib/sirena/transform/kanban.rb +180 -0
  359. data/lib/sirena/transform/mindmap.rb +251 -0
  360. data/lib/sirena/transform/packet.rb +185 -0
  361. data/lib/sirena/transform/pie.rb +62 -0
  362. data/lib/sirena/transform/quadrant.rb +167 -0
  363. data/lib/sirena/transform/radar.rb +227 -0
  364. data/lib/sirena/transform/requirement.rb +233 -0
  365. data/lib/sirena/transform/sankey.rb +212 -0
  366. data/lib/sirena/transform/sequence.rb +143 -0
  367. data/lib/sirena/transform/state_diagram.rb +228 -0
  368. data/lib/sirena/transform/timeline.rb +139 -0
  369. data/lib/sirena/transform/treemap.rb +120 -0
  370. data/lib/sirena/transform/user_journey.rb +207 -0
  371. data/lib/sirena/transform/xy_chart.rb +273 -0
  372. data/lib/sirena/transform.rb +8 -0
  373. data/lib/sirena/version.rb +5 -0
  374. data/lib/sirena.rb +328 -0
  375. data/lib/tasks/benchmark.rake +532 -0
  376. data/lib/tasks/examples.rake +468 -0
  377. data/lib/tasks/generate_mermaid_fixtures.rake +363 -0
  378. data/lib/tasks/mermaid_fixtures.rake +46 -0
  379. data/scripts/extract_mermaid_tests.rb +493 -0
  380. data/scripts/rename_to_sirena.rb +73 -0
  381. data/sirena.gemspec +47 -0
  382. metadata +529 -0
@@ -0,0 +1,85 @@
1
+ = Block Diagram Examples
2
+
3
+ == Purpose
4
+
5
+ Block diagrams provide a flexible way to visualize system components and their relationships using a column-based layout. They are ideal for showing architectural overviews, data flows, and component interactions with spatial organization.
6
+
7
+ == When to Use
8
+
9
+ * System architecture and component layout
10
+ * Data flow and pipeline visualization
11
+ * Infrastructure and deployment diagrams
12
+ * Microservices architecture overview
13
+ * Multi-tier application structure
14
+
15
+ == Syntax Overview
16
+
17
+ [source,mermaid]
18
+ ----
19
+ block-beta
20
+ columns 3
21
+
22
+ Frontend["Frontend"]
23
+ Backend["Backend"]
24
+ Database["Database"]
25
+
26
+ Frontend --> Backend
27
+ Backend --> Database
28
+ ----
29
+
30
+ **Layout**: `columns N` - Define column-based grid layout
31
+
32
+ **Block Types**:
33
+ - `Label["Text"]` - Basic block
34
+ - `Label(("Text"))` - Circle block
35
+ - `Label{{"Text"}}` - Hexagon block
36
+ - `Label[["Text"]]` - Subroutine block
37
+ - `space` - Empty cell
38
+
39
+ **Connections**:
40
+ - `-->` - Arrow connection between blocks
41
+ - Multi-line connections for complex flows
42
+
43
+ **Compound Blocks**: Group related blocks together
44
+
45
+ == Examples
46
+
47
+ === 01: Basic Blocks
48
+
49
+ Demonstrates a simple architecture layout with frontend, backend, database, cache, and message queue components connected in a column-based grid.
50
+
51
+ **File**: link:01-basic-blocks.mmd[01-basic-blocks.mmd]
52
+
53
+ [source,mermaid]
54
+ ----
55
+ include::01-basic-blocks.mmd[]
56
+ ----
57
+
58
+ image::01-basic-blocks.svg[]
59
+
60
+ == Features Demonstrated
61
+
62
+ [%header,cols="1,1"]
63
+ |===
64
+ | Feature | Example
65
+
66
+ | Column-based layout
67
+ | 01
68
+
69
+ | Basic blocks
70
+ | 01
71
+
72
+ | Block connections
73
+ | 01
74
+
75
+ | Space elements
76
+ | 01
77
+
78
+ | Multi-component architecture
79
+ | 01
80
+ |===
81
+
82
+ == Additional Resources
83
+
84
+ * link:../../README.adoc[Main Documentation]
85
+ * https://mermaid.js.org/syntax/block.html[Mermaid Block Diagram Documentation]
@@ -0,0 +1,10 @@
1
+ C4Context
2
+ title System Context Diagram
3
+ Person(user, "User", "A system user")
4
+ System(webapp, "Web Application", "Main application")
5
+ System_Ext(email, "Email System", "Sends notifications")
6
+ SystemDb(db, "Database", "Stores user data")
7
+
8
+ Rel(user, webapp, "Uses")
9
+ Rel(webapp, email, "Sends emails")
10
+ Rel(webapp, db, "Reads/Writes")
@@ -0,0 +1,45 @@
1
+ <svg
2
+ width="790.0"
3
+ height="450.0"
4
+ viewBox="0 0 790 450"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="rel_0">
9
+ <line stroke="#707070" stroke-width="2" x1="120.0" y1="140.0" x2="372.0" y2="110.0"/>
10
+ <polygon fill="#707070" stroke="#707070" points="380,110 372,106 372,114"/>
11
+ <text fill="#000000" x="250.0" y="110.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Uses</text>
12
+ </g>
13
+ <g id="rel_1">
14
+ <line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="622.0" y2="110.0"/>
15
+ <polygon fill="#707070" stroke="#707070" points="630,110 622,106 622,114"/>
16
+ <text fill="#000000" x="505.0" y="95.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Sends emails</text>
17
+ </g>
18
+ <g id="rel_2">
19
+ <line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="122.0" y2="310.0"/>
20
+ <polygon fill="#707070" stroke="#707070" points="130,310 138,306 138,314"/>
21
+ <text fill="#000000" x="255.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Reads/Writes</text>
22
+ </g>
23
+ <g id="element-user">
24
+ <rect fill="#08427B" stroke="#073B6F" stroke-width="2" x="50.0" y="50.0" width="140.0" height="180.0" rx="10.0" ry="10.0"/>
25
+ <circle fill="#FFFFFF" cx="120.0" cy="80.0" r="16.0"/>
26
+ <ellipse fill="#FFFFFF"/>
27
+ <text fill="#FFFFFF" x="120.0" y="145.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">User</text>
28
+ <text fill="#FFFFFF" x="120.0" y="161.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">A system user</text>
29
+ </g>
30
+ <g id="element-webapp">
31
+ <rect fill="#1168BD" stroke="#0B4884" stroke-width="2" x="300.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
32
+ <text fill="#FFFFFF" x="380.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Web Application</text>
33
+ <text fill="#FFFFFF" x="380.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Main application</text>
34
+ </g>
35
+ <g id="element-email">
36
+ <rect fill="#1168BD" stroke="#0B4884" stroke-width="2" x="550.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
37
+ <text fill="#FFFFFF" x="630.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Email System</text>
38
+ <text fill="#FFFFFF" x="630.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Sends notifications</text>
39
+ </g>
40
+ <g id="element-db">
41
+ <rect fill="#1168BD" stroke="#0B4884" stroke-width="2" x="50.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
42
+ <text fill="#FFFFFF" x="130.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Database</text>
43
+ <text fill="#FFFFFF" x="130.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Stores user data</text>
44
+ </g>
45
+ </svg>
@@ -0,0 +1,24 @@
1
+ C4Container
2
+ title Container Diagram - E-commerce System
3
+
4
+ Person(customer, "Customer", "Online shopper")
5
+
6
+ System_Boundary(ecommerce, "E-commerce System") {
7
+ Container(webapp, "Web Application", "React", "Provides UI")
8
+ Container(api, "API Gateway", "Node.js", "Routes requests")
9
+ Container(order, "Order Service", "Java", "Handles orders")
10
+ Container(payment, "Payment Service", "Python", "Processes payments")
11
+ ContainerDb(db, "Database", "PostgreSQL", "Stores data")
12
+ Container(cache, "Cache", "Redis", "Session storage")
13
+ }
14
+
15
+ System_Ext(paymentGW, "Payment Gateway", "External payment processor")
16
+
17
+ Rel(customer, webapp, "Uses", "HTTPS")
18
+ Rel(webapp, api, "Calls", "REST/JSON")
19
+ Rel(api, order, "Routes to")
20
+ Rel(api, payment, "Routes to")
21
+ Rel(order, db, "Reads/Writes", "SQL")
22
+ Rel(payment, db, "Reads/Writes", "SQL")
23
+ Rel(webapp, cache, "Stores sessions")
24
+ Rel(payment, paymentGW, "Processes via", "HTTPS")
@@ -0,0 +1,105 @@
1
+ <svg
2
+ width="930.0"
3
+ height="660.0"
4
+ viewBox="0 0 930 660"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="boundary-ecommerce">
9
+ <rect fill="#FFFFFF" stroke="#9BA7B4" stroke-width="2" x="50.0" y="50.0" width="800.0" height="530.0" rx="8.0" ry="8.0" stroke-dasharray="10,5"/>
10
+ <text fill="#000000" x="60.0" y="70.0" font-family="Arial, sans-serif" font-size="16" font-weight="bold">E-commerce System</text>
11
+ </g>
12
+ <g id="rel_0">
13
+ <line stroke="#707070" stroke-width="2" x1="370.0" y1="140.0" x2="122.0" y2="110.0"/>
14
+ <polygon fill="#707070" stroke="#707070" points="130,110 138,106 138,114"/>
15
+ <text fill="#000000" x="250.0" y="110.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Uses</text>
16
+ <text fill="#000000" x="250.0" y="124.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[HTTPS]</text>
17
+ </g>
18
+ <g id="rel_1">
19
+ <line stroke="#707070" stroke-width="2" x1="130.0" y1="110.0" x2="372.0" y2="110.0"/>
20
+ <polygon fill="#707070" stroke="#707070" points="380,110 372,106 372,114"/>
21
+ <text fill="#000000" x="255.0" y="95.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Calls</text>
22
+ <text fill="#000000" x="255.0" y="109.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[REST/JSON]</text>
23
+ </g>
24
+ <g id="rel_2">
25
+ <line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="622.0" y2="110.0"/>
26
+ <polygon fill="#707070" stroke="#707070" points="630,110 622,106 622,114"/>
27
+ <text fill="#000000" x="505.0" y="95.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Routes to</text>
28
+ </g>
29
+ <g id="rel_3">
30
+ <line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="122.0" y2="310.0"/>
31
+ <polygon fill="#707070" stroke="#707070" points="130,310 138,306 138,314"/>
32
+ <text fill="#000000" x="255.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Routes to</text>
33
+ </g>
34
+ <g id="rel_4">
35
+ <line stroke="#707070" stroke-width="2" x1="630.0" y1="110.0" x2="372.0" y2="310.0"/>
36
+ <polygon fill="#707070" stroke="#707070" points="380,310 388,306 388,314"/>
37
+ <text fill="#000000" x="505.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Reads/Writes</text>
38
+ <text fill="#000000" x="505.0" y="209.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[SQL]</text>
39
+ </g>
40
+ <g id="rel_5">
41
+ <line stroke="#707070" stroke-width="2" x1="130.0" y1="310.0" x2="372.0" y2="310.0"/>
42
+ <polygon fill="#707070" stroke="#707070" points="380,310 372,306 372,314"/>
43
+ <text fill="#000000" x="255.0" y="295.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Reads/Writes</text>
44
+ <text fill="#000000" x="255.0" y="309.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[SQL]</text>
45
+ </g>
46
+ <g id="rel_6">
47
+ <line stroke="#707070" stroke-width="2" x1="130.0" y1="110.0" x2="622.0" y2="310.0"/>
48
+ <polygon fill="#707070" stroke="#707070" points="630,310 622,306 622,314"/>
49
+ <text fill="#000000" x="380.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Stores sessions</text>
50
+ </g>
51
+ <g id="rel_7">
52
+ <line stroke="#707070" stroke-width="2" x1="130.0" y1="310.0" x2="622.0" y2="110.0"/>
53
+ <polygon fill="#707070" stroke="#707070" points="630,110 622,106 622,114"/>
54
+ <text fill="#000000" x="380.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Processes via</text>
55
+ <text fill="#000000" x="380.0" y="209.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[HTTPS]</text>
56
+ </g>
57
+ <g id="element-webapp">
58
+ <rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="50.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
59
+ <text fill="#FFFFFF" x="130.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Web Application</text>
60
+ <text fill="#FFFFFF" x="130.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">React</text>
61
+ <text fill="#FFFFFF" x="130.0" y="102.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Provides UI]</text>
62
+ </g>
63
+ <g id="element-api">
64
+ <rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="300.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
65
+ <text fill="#FFFFFF" x="380.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">API Gateway</text>
66
+ <text fill="#FFFFFF" x="380.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Node.js</text>
67
+ <text fill="#FFFFFF" x="380.0" y="102.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Routes requests]</text>
68
+ </g>
69
+ <g id="element-order">
70
+ <rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="550.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
71
+ <text fill="#FFFFFF" x="630.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Order Service</text>
72
+ <text fill="#FFFFFF" x="630.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Java</text>
73
+ <text fill="#FFFFFF" x="630.0" y="102.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Handles orders]</text>
74
+ </g>
75
+ <g id="element-payment">
76
+ <rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="50.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
77
+ <text fill="#FFFFFF" x="130.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Payment Service</text>
78
+ <text fill="#FFFFFF" x="130.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Python</text>
79
+ <text fill="#FFFFFF" x="130.0" y="302.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Processes payments]</text>
80
+ </g>
81
+ <g id="element-db">
82
+ <rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="300.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
83
+ <text fill="#FFFFFF" x="380.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Database</text>
84
+ <text fill="#FFFFFF" x="380.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">PostgreSQL</text>
85
+ <text fill="#FFFFFF" x="380.0" y="302.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Stores data]</text>
86
+ </g>
87
+ <g id="element-cache">
88
+ <rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="550.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
89
+ <text fill="#FFFFFF" x="630.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Cache</text>
90
+ <text fill="#FFFFFF" x="630.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Redis</text>
91
+ <text fill="#FFFFFF" x="630.0" y="302.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Session storage]</text>
92
+ </g>
93
+ <g id="element-customer">
94
+ <rect fill="#08427B" stroke="#073B6F" stroke-width="2" x="300.0" y="50.0" width="140.0" height="180.0" rx="10.0" ry="10.0"/>
95
+ <circle fill="#FFFFFF" cx="370.0" cy="80.0" r="16.0"/>
96
+ <ellipse fill="#FFFFFF"/>
97
+ <text fill="#FFFFFF" x="370.0" y="145.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Customer</text>
98
+ <text fill="#FFFFFF" x="370.0" y="161.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Online shopper</text>
99
+ </g>
100
+ <g id="element-paymentGW">
101
+ <rect fill="#8F8F8F" stroke="#6B6B6B" stroke-width="2" x="550.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
102
+ <text fill="#FFFFFF" x="630.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Payment Gateway</text>
103
+ <text fill="#FFFFFF" x="630.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">External payment processor</text>
104
+ </g>
105
+ </svg>
@@ -0,0 +1,92 @@
1
+ = C4 Diagram Examples
2
+
3
+ == Purpose
4
+
5
+ C4 diagrams provide a hierarchical approach to software architecture visualization through four levels: Context, Container, Component, and Code. They help communicate system architecture to different audiences with varying levels of technical detail.
6
+
7
+ == When to Use
8
+
9
+ * Software system architecture documentation
10
+ * Microservices and distributed system design
11
+ * System context and external dependencies
12
+ * Container-level deployment architecture
13
+ * Component-level internal structure
14
+
15
+ == Syntax Overview
16
+
17
+ [source,mermaid]
18
+ ----
19
+ C4Context
20
+ title System Context
21
+
22
+ Person(user, "User", "System user")
23
+ System(app, "Application", "Main system")
24
+ System_Ext(ext, "External", "External system")
25
+
26
+ Rel(user, app, "Uses")
27
+ Rel(app, ext, "Calls")
28
+ ----
29
+
30
+ **Element Types**:
31
+ - `Person(id, label, descr)` - User/actor
32
+ - `System(id, label, descr)` - Internal system
33
+ - `System_Ext(id, label, descr)` - External system
34
+ - `SystemDb(id, label, descr)` - Database
35
+ - `Container(id, label, tech, descr)` - Container
36
+ - `Component(id, label, tech, descr)` - Component
37
+
38
+ **Relationships**:
39
+ - `Rel(from, to, label)` - Basic relationship
40
+ - `Rel(from, to, label, tech)` - With technology
41
+ - `BiRel()` - Bidirectional relationship
42
+
43
+ **Boundaries**:
44
+ - `Boundary(id, label)` - Group elements
45
+ - `System_Boundary()` - System boundary
46
+ - `Enterprise_Boundary()` - Enterprise boundary
47
+
48
+ == Examples
49
+
50
+ === 01: Context Diagram
51
+
52
+ Demonstrates a system context view showing users, the main application, and external dependencies with their relationships.
53
+
54
+ **File**: link:01-context-diagram.mmd[01-context-diagram.mmd]
55
+
56
+ [source,mermaid]
57
+ ----
58
+ include::01-context-diagram.mmd[]
59
+ ----
60
+
61
+ image::01-context-diagram.svg[]
62
+
63
+ == Features Demonstrated
64
+
65
+ [%header,cols="1,1"]
66
+ |===
67
+ | Feature | Example
68
+
69
+ | Person/User definition
70
+ | 01
71
+
72
+ | System definition
73
+ | 01
74
+
75
+ | External systems
76
+ | 01
77
+
78
+ | Database systems
79
+ | 01
80
+
81
+ | Basic relationships
82
+ | 01
83
+
84
+ | Diagram titles
85
+ | 01
86
+ |===
87
+
88
+ == Additional Resources
89
+
90
+ * link:../../README.adoc[Main Documentation]
91
+ * https://c4model.com/[C4 Model Official Site]
92
+ * https://mermaid.js.org/syntax/c4.html[Mermaid C4 Diagram Documentation]
@@ -0,0 +1,61 @@
1
+ classDiagram
2
+ class Animal {
3
+ +String name
4
+ +int age
5
+ +String species
6
+ +makeSound() void
7
+ +eat(food Food) void
8
+ +sleep() void
9
+ }
10
+
11
+ class Mammal {
12
+ +String furColor
13
+ +bool warmBlooded
14
+ +giveBirth() void
15
+ }
16
+
17
+ class Bird {
18
+ +bool canFly
19
+ +String featherColor
20
+ +layEggs() void
21
+ }
22
+
23
+ class Dog {
24
+ +String breed
25
+ +bark() void
26
+ +fetch(item Item) void
27
+ }
28
+
29
+ class Cat {
30
+ +bool indoor
31
+ +int lives
32
+ +meow() void
33
+ +purr() void
34
+ }
35
+
36
+ class Eagle {
37
+ +float wingSpan
38
+ +hunt() void
39
+ +soar() void
40
+ }
41
+
42
+ class Penguin {
43
+ +swim() void
44
+ +slide() void
45
+ }
46
+
47
+ Animal <|-- Mammal
48
+ Animal <|-- Bird
49
+ Mammal <|-- Dog
50
+ Mammal <|-- Cat
51
+ Bird <|-- Eagle
52
+ Bird <|-- Penguin
53
+
54
+ class Owner {
55
+ +String name
56
+ +String address
57
+ +List~Animal~ pets
58
+ +adoptPet(pet Animal) void
59
+ }
60
+
61
+ Owner "1" --> "*" Animal : owns
@@ -0,0 +1,117 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg
3
+ width="247.0"
4
+ height="244.0"
5
+ viewBox="0 0 247.0 244"
6
+ version="1.2"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <g id="defs"/>
10
+ <g id="rel-Mammal_to_Animal">
11
+ <line stroke="#000000" stroke-width="2"/>
12
+ <polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,0 65.0,8.660254037844387 75.0,8.660254037844387"/>
13
+ </g>
14
+ <g id="rel-Bird_to_Animal">
15
+ <line stroke="#000000" stroke-width="2"/>
16
+ <polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,0 65.0,8.660254037844387 75.0,8.660254037844387"/>
17
+ </g>
18
+ <g id="rel-Dog_to_Mammal">
19
+ <line stroke="#000000" stroke-width="2"/>
20
+ <polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,52 61.33974596215561,47.0 61.33974596215561,57.0"/>
21
+ </g>
22
+ <g id="rel-Cat_to_Mammal">
23
+ <line stroke="#000000" stroke-width="2"/>
24
+ <polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,104 75.0,95.33974596215562 65.0,95.33974596215562"/>
25
+ </g>
26
+ <g id="rel-Eagle_to_Bird">
27
+ <line stroke="#000000" stroke-width="2"/>
28
+ <polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,52 61.33974596215561,47.0 61.33974596215561,57.0"/>
29
+ </g>
30
+ <g id="rel-Penguin_to_Bird">
31
+ <line stroke="#000000" stroke-width="2"/>
32
+ <polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,0 65.0,8.660254037844387 75.0,8.660254037844387"/>
33
+ </g>
34
+ <g id="rel-Owner_to_Animal">
35
+ <line stroke="#000000" stroke-width="2"/>
36
+ <text fill="#000000" x="70.0" y="77.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11">owns</text>
37
+ <text fill="#000000" x="5.0" y="77.0" font-family="Arial, sans-serif" font-size="10">1</text>
38
+ <text fill="#000000" x="135.0" y="77.0" text-anchor="end" font-family="Arial, sans-serif" font-size="10">*</text>
39
+ </g>
40
+ <g id="class-Animal">
41
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="164.0" rx="3.0" ry="3.0"/>
42
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Animal</text>
43
+ <line stroke="#000000" stroke-width="1"/>
44
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
45
+ <text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ int</text>
46
+ <text fill="#000000" x="10.0" y="79.0" font-family="monospace" font-size="12">+ String</text>
47
+ <line stroke="#000000" stroke-width="1"/>
48
+ <text fill="#000000" x="10.0" y="112.0" font-family="monospace" font-size="12">+ makeSound()</text>
49
+ <text fill="#000000" x="10.0" y="130.0" font-family="monospace" font-size="12">+ eat(foodFood)</text>
50
+ <text fill="#000000" x="10.0" y="148.0" font-family="monospace" font-size="12">+ sleep()</text>
51
+ </g>
52
+ <g id="class-Mammal">
53
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
54
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Mammal</text>
55
+ <line stroke="#000000" stroke-width="1"/>
56
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
57
+ <text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ bool</text>
58
+ <line stroke="#000000" stroke-width="1"/>
59
+ <text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ giveBirth()</text>
60
+ </g>
61
+ <g id="class-Bird">
62
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
63
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Bird</text>
64
+ <line stroke="#000000" stroke-width="1"/>
65
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ bool</text>
66
+ <text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ String</text>
67
+ <line stroke="#000000" stroke-width="1"/>
68
+ <text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ layEggs()</text>
69
+ </g>
70
+ <g id="class-Dog">
71
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
72
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Dog</text>
73
+ <line stroke="#000000" stroke-width="1"/>
74
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
75
+ <line stroke="#000000" stroke-width="1"/>
76
+ <text fill="#000000" x="10.0" y="76.0" font-family="monospace" font-size="12">+ bark()</text>
77
+ <text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ fetch(itemItem)</text>
78
+ </g>
79
+ <g id="class-Cat">
80
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="124.0" rx="3.0" ry="3.0"/>
81
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Cat</text>
82
+ <line stroke="#000000" stroke-width="1"/>
83
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ bool</text>
84
+ <text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ int</text>
85
+ <line stroke="#000000" stroke-width="1"/>
86
+ <text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ meow()</text>
87
+ <text fill="#000000" x="10.0" y="112.0" font-family="monospace" font-size="12">+ purr()</text>
88
+ </g>
89
+ <g id="class-Eagle">
90
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
91
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Eagle</text>
92
+ <line stroke="#000000" stroke-width="1"/>
93
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ float</text>
94
+ <line stroke="#000000" stroke-width="1"/>
95
+ <text fill="#000000" x="10.0" y="76.0" font-family="monospace" font-size="12">+ hunt()</text>
96
+ <text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ soar()</text>
97
+ </g>
98
+ <g id="class-Penguin">
99
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="82.0" rx="3.0" ry="3.0"/>
100
+ <text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Penguin</text>
101
+ <line stroke="#000000" stroke-width="1"/>
102
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ swim()</text>
103
+ <text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ slide()</text>
104
+ </g>
105
+ <g id="class-Owner">
106
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="167.0" height="164.0" rx="3.0" ry="3.0"/>
107
+ <text fill="#000000" x="83.5" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Owner</text>
108
+ <line stroke="#000000" stroke-width="1"/>
109
+ <text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
110
+ <text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ String</text>
111
+ <text fill="#000000" x="10.0" y="79.0" font-family="monospace" font-size="12">+ List</text>
112
+ <text fill="#000000" x="10.0" y="97.0" font-family="monospace" font-size="12">~ Animal</text>
113
+ <text fill="#000000" x="10.0" y="115.0" font-family="monospace" font-size="12">~ pets</text>
114
+ <line stroke="#000000" stroke-width="1"/>
115
+ <text fill="#000000" x="10.0" y="148.0" font-family="monospace" font-size="12">+ adoptPet(petAnimal)</text>
116
+ </g>
117
+ </svg>
@@ -0,0 +1,61 @@
1
+ classDiagram
2
+ class Animal {
3
+ +String name
4
+ +int age
5
+ +String species
6
+ +makeSound() void
7
+ +eat(food Food) void
8
+ +sleep() void
9
+ }
10
+
11
+ class Mammal {
12
+ +String furColor
13
+ +bool warmBlooded
14
+ +giveBirth() void
15
+ }
16
+
17
+ class Bird {
18
+ +bool canFly
19
+ +String featherColor
20
+ +layEggs() void
21
+ }
22
+
23
+ class Dog {
24
+ +String breed
25
+ +bark() void
26
+ +fetch(item Item) void
27
+ }
28
+
29
+ class Cat {
30
+ +bool indoor
31
+ +int lives
32
+ +meow() void
33
+ +purr() void
34
+ }
35
+
36
+ class Eagle {
37
+ +float wingSpan
38
+ +hunt() void
39
+ +soar() void
40
+ }
41
+
42
+ class Penguin {
43
+ +swim() void
44
+ +slide() void
45
+ }
46
+
47
+ Animal <|-- Mammal
48
+ Animal <|-- Bird
49
+ Mammal <|-- Dog
50
+ Mammal <|-- Cat
51
+ Bird <|-- Eagle
52
+ Bird <|-- Penguin
53
+
54
+ class Owner {
55
+ +String name
56
+ +String address
57
+ +List~Animal~ pets
58
+ +adoptPet(pet Animal) void
59
+ }
60
+
61
+ Owner "1" --> "*" Animal : owns