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
+ = Requirement Diagram Examples
2
+
3
+ == Purpose
4
+
5
+ Requirement diagrams model requirements, their relationships, and associated elements like risks and tests, commonly used in systems engineering.
6
+
7
+ == When to Use
8
+
9
+ * Requirements engineering
10
+ * System specification documentation
11
+ * Traceability matrices
12
+ * Risk assessment
13
+ * Verification planning
14
+
15
+ == Syntax Overview
16
+
17
+ [source,mermaid]
18
+ ----
19
+ requirementDiagram
20
+ requirement req1 {
21
+ id: 1
22
+ text: Requirement text
23
+ risk: high
24
+ verifymethod: test
25
+ }
26
+ element element1 {
27
+ type: system
28
+ }
29
+ req1 - satisfies -> element1
30
+ ----
31
+
32
+ == Examples
33
+
34
+ === 01: Basic Requirements
35
+
36
+ Demonstrates basic requirement definitions with relationships.
37
+
38
+ **File**: link:01-basic-requirements.mmd[01-basic-requirements.mmd]
39
+
40
+ [source,mermaid]
41
+ ----
42
+ include::01-basic-requirements.mmd[]
43
+ ----
44
+
45
+ image::01-basic-requirements.svg[]
46
+
47
+ === 02: Risk Levels
48
+
49
+ Showcases requirements with different risk levels and verification methods.
50
+
51
+ **File**: link:02-risk-levels.mmd[02-risk-levels.mmd]
52
+
53
+ [source,mermaid]
54
+ ----
55
+ include::02-risk-levels.mmd[]
56
+ ----
57
+
58
+ image::02-risk-levels.svg[]
59
+
60
+ == Features Demonstrated
61
+
62
+ [%header,cols="1,1"]
63
+ |===
64
+ | Feature | Example
65
+
66
+ | Requirement definition
67
+ | 01, 02
68
+
69
+ | Risk levels
70
+ | 02
71
+
72
+ | Verification methods
73
+ | 01, 02
74
+
75
+ | Element relationships
76
+ | 01, 02
77
+
78
+ | Traceability links
79
+ | 01, 02
80
+ |===
81
+
82
+ == Additional Resources
83
+
84
+ * link:../../README.adoc[Main Documentation]
85
+ * https://mermaid.js.org/syntax/requirementDiagram.html[Mermaid Requirement Diagram Documentation]
@@ -0,0 +1,7 @@
1
+ sankey-beta
2
+ Engineering, Development, 100
3
+ Engineering, Testing, 50
4
+ Development, Frontend, 60
5
+ Development, Backend, 40
6
+ Testing, QA, 35
7
+ Testing, UAT, 15
@@ -0,0 +1,34 @@
1
+ <svg
2
+ width="546.0"
3
+ height="410.0"
4
+ viewBox="0 0 546 410"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <path fill="#4472C4" stroke="none" opacity="0.4" d="M 95 95.0 C 152.5 95.0, 152.5 95.0, 210 95.0 L 210 145.0 C 152.5 145.0, 152.5 145.0, 95 145.0 Z"/>
9
+ <text fill="#000000" x="152.5" y="120.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">100</text>
10
+ <path fill="#ED7D31" stroke="none" opacity="0.4" d="M 95 107.0 C 152.5 107.0, 152.5 177.0, 210 177.0 L 210 203.0 C 152.5 203.0, 152.5 133.0, 95 133.0 Z"/>
11
+ <text fill="#000000" x="152.5" y="155.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">50</text>
12
+ <path fill="#A5A5A5" stroke="none" opacity="0.4" d="M 250 104.5 C 305.0 104.5, 305.0 104.5, 360 104.5 L 360 135.5 C 305.0 135.5, 305.0 135.5, 250 135.5 Z"/>
13
+ <text fill="#000000" x="305.0" y="120.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">60</text>
14
+ <path fill="#FFC000" stroke="none" opacity="0.4" d="M 250 109.5 C 305.0 109.5, 305.0 179.5, 360 179.5 L 360 200.5 C 305.0 200.5, 305.0 130.5, 250 130.5 Z"/>
15
+ <text fill="#000000" x="305.0" y="155.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">40</text>
16
+ <path fill="#5B9BD5" stroke="none" opacity="0.4" d="M 240 180.5 C 300.0 180.5, 300.0 250.5, 360 250.5 L 360 269.5 C 300.0 269.5, 300.0 199.5, 240 199.5 Z"/>
17
+ <text fill="#000000" x="300.0" y="225.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">35</text>
18
+ <path fill="#70AD47" stroke="none" opacity="0.4" d="M 240 185.5 C 300.0 185.5, 300.0 325.5, 360 325.5 L 360 334.5 C 300.0 334.5, 300.0 194.5, 240 194.5 Z"/>
19
+ <text fill="#000000" x="300.0" y="260.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">15</text>
20
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="60.0" y="100.0" width="35.0" height="40.0" rx="3.0" ry="3.0"/>
21
+ <text fill="#FFFFFF" x="77.0" y="125.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Engineering</text>
22
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="210.0" y="100.0" width="40.0" height="40.0" rx="3.0" ry="3.0"/>
23
+ <text fill="#FFFFFF" x="230.0" y="125.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Development</text>
24
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="210.0" y="170.0" width="30.0" height="40.0" rx="3.0" ry="3.0"/>
25
+ <text fill="#FFFFFF" x="225.0" y="195.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Testing</text>
26
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="360.0" y="100.0" width="26.0" height="40.0" rx="3.0" ry="3.0"/>
27
+ <text fill="#FFFFFF" x="373.0" y="125.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Frontend</text>
28
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="360.0" y="170.0" width="24.0" height="40.0" rx="3.0" ry="3.0"/>
29
+ <text fill="#FFFFFF" x="372.0" y="195.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Backend</text>
30
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="360.0" y="240.0" width="24.0" height="40.0" rx="3.0" ry="3.0"/>
31
+ <text fill="#FFFFFF" x="372.0" y="265.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">QA</text>
32
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="360.0" y="310.0" width="22.0" height="40.0" rx="3.0" ry="3.0"/>
33
+ <text fill="#FFFFFF" x="371.0" y="335.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">UAT</text>
34
+ </svg>
@@ -0,0 +1,11 @@
1
+ sankey-beta
2
+ Oil,Transportation,200
3
+ Oil,Industry,100
4
+ Oil,Residential,50
5
+ NaturalGas,PowerGeneration,120
6
+ NaturalGas,Industry,50
7
+ NaturalGas,Residential,30
8
+ Coal,PowerGeneration,100
9
+ Coal,Industry,50
10
+ Renewable,PowerGeneration,80
11
+ Renewable,Residential,20
@@ -0,0 +1,44 @@
1
+ <svg
2
+ width="405.0"
3
+ height="410.0"
4
+ viewBox="0 0 405 410"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <path fill="#4472C4" stroke="none" opacity="0.4" d="M 98 95.0 C 154.0 95.0, 154.0 165.0, 210 165.0 L 210 215.0 C 154.0 215.0, 154.0 145.0, 98 145.0 Z"/>
9
+ <text fill="#000000" x="154.0" y="155.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">200</text>
10
+ <path fill="#ED7D31" stroke="none" opacity="0.4" d="M 98 107.0 C 154.0 107.0, 154.0 247.0, 210 247.0 L 210 273.0 C 154.0 273.0, 154.0 133.0, 98 133.0 Z"/>
11
+ <text fill="#000000" x="154.0" y="190.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">100</text>
12
+ <path fill="#A5A5A5" stroke="none" opacity="0.4" d="M 98 113.0 C 154.0 113.0, 154.0 323.0, 210 323.0 L 210 337.0 C 154.0 337.0, 154.0 127.0, 98 127.0 Z"/>
13
+ <text fill="#000000" x="154.0" y="225.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">50</text>
14
+ <path fill="#FFC000" stroke="none" opacity="0.4" d="M 90 174.5 C 150.0 174.5, 150.0 104.5, 210 104.5 L 210 135.5 C 150.0 135.5, 150.0 205.5, 90 205.5 Z"/>
15
+ <text fill="#000000" x="150.0" y="155.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">120</text>
16
+ <path fill="#5B9BD5" stroke="none" opacity="0.4" d="M 90 183.0 C 150.0 183.0, 150.0 253.0, 210 253.0 L 210 267.0 C 150.0 267.0, 150.0 197.0, 90 197.0 Z"/>
17
+ <text fill="#000000" x="150.0" y="225.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">50</text>
18
+ <path fill="#70AD47" stroke="none" opacity="0.4" d="M 90 185.5 C 150.0 185.5, 150.0 325.5, 210 325.5 L 210 334.5 C 150.0 334.5, 150.0 194.5, 90 194.5 Z"/>
19
+ <text fill="#000000" x="150.0" y="260.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">30</text>
20
+ <path fill="#C00000" stroke="none" opacity="0.4" d="M 88 247.0 C 149.0 247.0, 149.0 107.0, 210 107.0 L 210 133.0 C 149.0 133.0, 149.0 273.0, 88 273.0 Z"/>
21
+ <text fill="#000000" x="149.0" y="190.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">100</text>
22
+ <path fill="#7030A0" stroke="none" opacity="0.4" d="M 88 253.0 C 149.0 253.0, 149.0 253.0, 210 253.0 L 210 267.0 C 149.0 267.0, 149.0 267.0, 88 267.0 Z"/>
23
+ <text fill="#000000" x="149.0" y="260.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">50</text>
24
+ <path fill="#4472C4" stroke="none" opacity="0.4" d="M 85 319.5 C 147.5 319.5, 147.5 109.5, 210 109.5 L 210 130.5 C 147.5 130.5, 147.5 340.5, 85 340.5 Z"/>
25
+ <text fill="#000000" x="147.5" y="225.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">80</text>
26
+ <path fill="#ED7D31" stroke="none" opacity="0.4" d="M 85 326.5 C 147.5 326.5, 147.5 326.5, 210 326.5 L 210 333.5 C 147.5 333.5, 147.5 333.5, 85 333.5 Z"/>
27
+ <text fill="#000000" x="147.5" y="330.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0">20</text>
28
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="60.0" y="100.0" width="38.0" height="40.0" rx="3.0" ry="3.0"/>
29
+ <text fill="#FFFFFF" x="79.0" y="125.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Oil</text>
30
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="210.0" y="170.0" width="30.0" height="40.0" rx="3.0" ry="3.0"/>
31
+ <text fill="#FFFFFF" x="225.0" y="195.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Transportation</text>
32
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="210.0" y="240.0" width="30.0" height="40.0" rx="3.0" ry="3.0"/>
33
+ <text fill="#FFFFFF" x="225.0" y="265.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Industry</text>
34
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="210.0" y="310.0" width="25.0" height="40.0" rx="3.0" ry="3.0"/>
35
+ <text fill="#FFFFFF" x="222.0" y="335.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Residential</text>
36
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="60.0" y="170.0" width="30.0" height="40.0" rx="3.0" ry="3.0"/>
37
+ <text fill="#FFFFFF" x="75.0" y="195.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">NaturalGas</text>
38
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="210.0" y="100.0" width="35.0" height="40.0" rx="3.0" ry="3.0"/>
39
+ <text fill="#FFFFFF" x="227.0" y="125.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">PowerGeneration</text>
40
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="60.0" y="240.0" width="28.0" height="40.0" rx="3.0" ry="3.0"/>
41
+ <text fill="#FFFFFF" x="74.0" y="265.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Coal</text>
42
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="60.0" y="310.0" width="25.0" height="40.0" rx="3.0" ry="3.0"/>
43
+ <text fill="#FFFFFF" x="72.0" y="335.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12.0" font-weight="bold">Renewable</text>
44
+ </svg>
@@ -0,0 +1,74 @@
1
+ = Sankey Diagram Examples
2
+
3
+ == Purpose
4
+
5
+ Sankey diagrams visualize flow quantities between nodes, showing how values split and combine through a system.
6
+
7
+ == When to Use
8
+
9
+ * Energy flow visualization
10
+ * Resource allocation tracking
11
+ * Material flow analysis
12
+ * Budget distribution
13
+ * Process flow quantification
14
+
15
+ == Syntax Overview
16
+
17
+ [source,mermaid]
18
+ ----
19
+ sankey-beta
20
+ Source,Target,100
21
+ Source,Another,50
22
+ ----
23
+
24
+ == Examples
25
+
26
+ === 01: Simple Flow
27
+
28
+ Demonstrates basic sankey diagram with flow relationships.
29
+
30
+ **File**: link:01-simple-flow.mmd[01-simple-flow.mmd]
31
+
32
+ [source,mermaid]
33
+ ----
34
+ include::01-simple-flow.mmd[]
35
+ ----
36
+
37
+ image::01-simple-flow.svg[]
38
+
39
+ === 02: Multi-Stage
40
+
41
+ Showcases complex multi-stage flow diagram.
42
+
43
+ **File**: link:02-multi-stage.mmd[02-multi-stage.mmd]
44
+
45
+ [source,mermaid]
46
+ ----
47
+ include::02-multi-stage.mmd[]
48
+ ----
49
+
50
+ image::02-multi-stage.svg[]
51
+
52
+ == Features Demonstrated
53
+
54
+ [%header,cols="1,1"]
55
+ |===
56
+ | Feature | Example
57
+
58
+ | Basic flows
59
+ | 01, 02
60
+
61
+ | Flow quantities
62
+ | 01, 02
63
+
64
+ | Multi-stage flows
65
+ | 02
66
+
67
+ | Node relationships
68
+ | 01, 02
69
+ |===
70
+
71
+ == Additional Resources
72
+
73
+ * link:../../README.adoc[Main Documentation]
74
+ * https://mermaid.js.org/syntax/sankey.html[Mermaid Sankey Documentation]
@@ -0,0 +1,27 @@
1
+ sequenceDiagram
2
+ participant User
3
+ participant WebApp
4
+ participant API
5
+ participant Database
6
+ participant Cache
7
+
8
+ User->>+WebApp: Request Product Page
9
+ WebApp->>+Cache: Check Cache
10
+ Cache-->>-WebApp: Cache Miss
11
+
12
+ WebApp->>+API: GET /api/product/123
13
+ API->>+Database: SELECT * FROM products WHERE id=123
14
+ Database-->>-API: Product Data
15
+ API-->>-WebApp: JSON Response
16
+
17
+ WebApp->>+Cache: Store in Cache
18
+ Cache-->>-WebApp: Cached
19
+
20
+ WebApp-->>-User: Render Product Page
21
+
22
+ Note over User,Cache: Subsequent request will hit cache
23
+
24
+ User->>+WebApp: Refresh Page
25
+ WebApp->>+Cache: Check Cache
26
+ Cache-->>-WebApp: Cache Hit
27
+ WebApp-->>-User: Render Product Page (Fast)
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="400" height="200" viewBox="0 0 400 200" version="1.2" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="50" y="50" width="300" height="100" fill="#f0f0f0" stroke="#000000" stroke-width="2"/>
4
+ <text x="200" y="100" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" fill="#000000">Sequence Diagram (parser needs fixes)</text>
5
+ </svg>
@@ -0,0 +1,17 @@
1
+ sequenceDiagram
2
+ participant Client
3
+ participant Server
4
+ participant Database
5
+ participant Cache
6
+
7
+ Client->>+Server: Request data
8
+ Server->>+Database: Query data
9
+ Database-->>-Server: Return results
10
+ Server->>+Cache: Store in cache
11
+ Cache-->>-Server: Cached
12
+ Server-->>-Client: Response
13
+
14
+ Client->>+Server: Request same data
15
+ Server->>+Cache: Check cache
16
+ Cache-->>-Server: Cache hit
17
+ Server-->>-Client: Fast response
@@ -0,0 +1,78 @@
1
+ <svg
2
+ width="680.0"
3
+ height="820.0"
4
+ viewBox="0 0 680 820"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <line stroke="#000000" stroke-width="1" x1="80.0" y1="60.0" x2="80.0" y2="760.0" stroke-dasharray="5,5"/>
9
+ <line stroke="#000000" stroke-width="1" x1="220.0" y1="60.0" x2="220.0" y2="760.0" stroke-dasharray="5,5"/>
10
+ <line stroke="#000000" stroke-width="1" x1="360.0" y1="60.0" x2="360.0" y2="760.0" stroke-dasharray="5,5"/>
11
+ <line stroke="#000000" stroke-width="1" x1="500.0" y1="60.0" x2="500.0" y2="760.0" stroke-dasharray="5,5"/>
12
+ <g id="message-0">
13
+ <line stroke="#000000" stroke-width="2" x1="80.0" y1="120.0" x2="212.0" y2="120.0"/>
14
+ <polygon fill="#000000" stroke="#000000" points="220,120 212,116 212,124"/>
15
+ <text fill="#000000" x="150.0" y="110.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Request data</text>
16
+ </g>
17
+ <g id="message-1">
18
+ <line stroke="#000000" stroke-width="2" x1="220.0" y1="180.0" x2="352.0" y2="180.0"/>
19
+ <polygon fill="#000000" stroke="#000000" points="360,180 352,176 352,184"/>
20
+ <text fill="#000000" x="290.0" y="170.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Query data</text>
21
+ </g>
22
+ <g id="message-2">
23
+ <line stroke="#000000" stroke-width="2" x1="360.0" y1="240.0" x2="212.0" y2="240.0" stroke-dasharray="5,5"/>
24
+ <polygon fill="#000000" stroke="#000000" points="220,240 228,236 228,244"/>
25
+ <text fill="#000000" x="290.0" y="230.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Return results</text>
26
+ </g>
27
+ <g id="message-3">
28
+ <line stroke="#000000" stroke-width="2" x1="220.0" y1="300.0" x2="492.0" y2="300.0"/>
29
+ <polygon fill="#000000" stroke="#000000" points="500,300 492,296 492,304"/>
30
+ <text fill="#000000" x="360.0" y="290.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Store in cache</text>
31
+ </g>
32
+ <g id="message-4">
33
+ <line stroke="#000000" stroke-width="2" x1="500.0" y1="360.0" x2="212.0" y2="360.0" stroke-dasharray="5,5"/>
34
+ <polygon fill="#000000" stroke="#000000" points="220,360 228,356 228,364"/>
35
+ <text fill="#000000" x="360.0" y="350.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Cached</text>
36
+ </g>
37
+ <g id="message-5">
38
+ <line stroke="#000000" stroke-width="2" x1="220.0" y1="420.0" x2="72.0" y2="420.0" stroke-dasharray="5,5"/>
39
+ <polygon fill="#000000" stroke="#000000" points="80,420 88,416 88,424"/>
40
+ <text fill="#000000" x="150.0" y="410.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Response</text>
41
+ </g>
42
+ <g id="message-6">
43
+ <line stroke="#000000" stroke-width="2" x1="80.0" y1="480.0" x2="212.0" y2="480.0"/>
44
+ <polygon fill="#000000" stroke="#000000" points="220,480 212,476 212,484"/>
45
+ <text fill="#000000" x="150.0" y="470.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Request same data</text>
46
+ </g>
47
+ <g id="message-7">
48
+ <line stroke="#000000" stroke-width="2" x1="220.0" y1="540.0" x2="492.0" y2="540.0"/>
49
+ <polygon fill="#000000" stroke="#000000" points="500,540 492,536 492,544"/>
50
+ <text fill="#000000" x="360.0" y="530.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Check cache</text>
51
+ </g>
52
+ <g id="message-8">
53
+ <line stroke="#000000" stroke-width="2" x1="500.0" y1="600.0" x2="212.0" y2="600.0" stroke-dasharray="5,5"/>
54
+ <polygon fill="#000000" stroke="#000000" points="220,600 228,596 228,604"/>
55
+ <text fill="#000000" x="360.0" y="590.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Cache hit</text>
56
+ </g>
57
+ <g id="message-9">
58
+ <line stroke="#000000" stroke-width="2" x1="220.0" y1="660.0" x2="72.0" y2="660.0" stroke-dasharray="5,5"/>
59
+ <polygon fill="#000000" stroke="#000000" points="80,660 88,656 88,664"/>
60
+ <text fill="#000000" x="150.0" y="650.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Fast response</text>
61
+ </g>
62
+ <g id="participant-Client">
63
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="20.0" y="20.0" width="120.0" height="40.0" rx="5.0" ry="5.0"/>
64
+ <text fill="#000000" x="80.0" y="40.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Client</text>
65
+ </g>
66
+ <g id="participant-Server">
67
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="160.0" y="20.0" width="120.0" height="40.0" rx="5.0" ry="5.0"/>
68
+ <text fill="#000000" x="220.0" y="40.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Server</text>
69
+ </g>
70
+ <g id="participant-Database">
71
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="300.0" y="20.0" width="120.0" height="40.0" rx="5.0" ry="5.0"/>
72
+ <text fill="#000000" x="360.0" y="40.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Database</text>
73
+ </g>
74
+ <g id="participant-Cache">
75
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="440.0" y="20.0" width="120.0" height="40.0" rx="5.0" ry="5.0"/>
76
+ <text fill="#000000" x="500.0" y="40.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Cache</text>
77
+ </g>
78
+ </svg>
@@ -0,0 +1,86 @@
1
+ = Sequence Diagram Examples
2
+
3
+ == Purpose
4
+
5
+ Sequence diagrams visualize interactions between objects or components over time, showing the order of messages exchanged in a particular scenario. They are essential for documenting API workflows, system interactions, and communication protocols.
6
+
7
+ == When to Use
8
+
9
+ * API request/response flows and service interactions
10
+ * Authentication and authorization sequences
11
+ * Asynchronous message exchanges and event processing
12
+ * Transaction workflows and state changes
13
+ * System integration scenarios and data flows
14
+
15
+ == Syntax Overview
16
+
17
+ [source,mermaid]
18
+ ----
19
+ sequenceDiagram
20
+ participant Alice
21
+ participant Bob
22
+
23
+ Alice->>Bob: Hello Bob
24
+ Bob-->>Alice: Hi Alice
25
+
26
+ Note over Alice,Bob: Conversation
27
+ ----
28
+
29
+ **Participants**: Define entities using `participant Name`
30
+
31
+ **Message Types**:
32
+ - `->>` - Solid arrow
33
+ - `-->>` - Dotted arrow (response)
34
+ - `->>+` - Activate lifeline
35
+ - `-->>-` - Deactivate lifeline
36
+
37
+ **Additional Elements**:
38
+ - `Note over A,B: Text` - Add notes
39
+ - `loop` - Repeating sequences
40
+ - `alt`/`else` - Conditional flows
41
+ - `par` - Parallel execution
42
+
43
+ == Examples
44
+
45
+ === 01: Basic Sequence
46
+
47
+ Demonstrates a complete request/response flow with caching, showing participant interactions and activation/deactivation of lifelines.
48
+
49
+ **File**: link:01-basic-sequence.mmd[01-basic-sequence.mmd]
50
+
51
+ [source,mermaid]
52
+ ----
53
+ include::01-basic-sequence.mmd[]
54
+ ----
55
+
56
+ image::01-basic-sequence.svg[]
57
+
58
+ == Features Demonstrated
59
+
60
+ [%header,cols="1,1"]
61
+ |===
62
+ | Feature | Example
63
+
64
+ | Participant declaration
65
+ | 01
66
+
67
+ | Solid arrows (requests)
68
+ | 01
69
+
70
+ | Dotted arrows (responses)
71
+ | 01
72
+
73
+ | Activation/deactivation
74
+ | 01
75
+
76
+ | Notes
77
+ | 01
78
+
79
+ | Multi-step workflows
80
+ | 01
81
+ |===
82
+
83
+ == Additional Resources
84
+
85
+ * link:../../README.adoc[Main Documentation]
86
+ * https://mermaid.js.org/syntax/sequenceDiagram.html[Mermaid Sequence Diagram Documentation]
@@ -0,0 +1,29 @@
1
+ stateDiagram-v2
2
+ [*] --> Idle
3
+
4
+ Idle --> Connecting : connect()
5
+ Connecting --> Connected : success
6
+ Connecting --> Error : failure
7
+
8
+ state Connected {
9
+ [*] --> Authenticated
10
+ Authenticated --> Active
11
+
12
+ state Active {
13
+ [*] --> Reading
14
+ Reading --> Writing : write_request
15
+ Writing --> Reading : write_complete
16
+ Reading --> Processing : process_data
17
+ Processing --> Reading : complete
18
+ }
19
+
20
+ Active --> Suspended : suspend()
21
+ Suspended --> Active : resume()
22
+ }
23
+
24
+ Connected --> Disconnecting : disconnect()
25
+ Error --> Idle : reset()
26
+ Disconnecting --> Idle : complete
27
+ Suspended --> Disconnecting : timeout
28
+
29
+ Idle --> [*] : shutdown()
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="400" height="200" viewBox="0 0 400 200" version="1.2" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="50" y="50" width="300" height="100" fill="#f0f0f0" stroke="#000000" stroke-width="2"/>
4
+ <text x="200" y="100" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" fill="#000000">State Diagram (parser needs fixes)</text>
5
+ </svg>
@@ -0,0 +1,19 @@
1
+ stateDiagram-v2
2
+ [*] --> Application
3
+
4
+ state Application {
5
+ [*] --> Idle
6
+ Idle --> Processing : Start
7
+
8
+ state Processing {
9
+ [*] --> Validating
10
+ Validating --> Executing : Valid
11
+ Validating --> Failed : Invalid
12
+ Executing --> Success
13
+ Executing --> Failed
14
+ }
15
+
16
+ Processing --> Idle : Complete
17
+ }
18
+
19
+ Application --> [*]
@@ -0,0 +1,81 @@
1
+ <svg
2
+ width="753.0"
3
+ height="600.0"
4
+ viewBox="0 0 753.0 600"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="transition-start_1_to_Application">
9
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 65 65 L 358.5 75" marker-end="url(#arrowhead)"/>
10
+ </g>
11
+ <g id="transition-start_1_to_Idle">
12
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 65 65 L 600 75" marker-end="url(#arrowhead)"/>
13
+ </g>
14
+ <g id="transition-Idle_to_Processing">
15
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 600 75 L 105.0 275" marker-end="url(#arrowhead)"/>
16
+ <text fill="#000000" x="352.5" y="167.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Start</text>
17
+ </g>
18
+ <g id="transition-start_1_to_Validating">
19
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 65 65 L 355.0 275" marker-end="url(#arrowhead)"/>
20
+ </g>
21
+ <g id="transition-Validating_to_Executing">
22
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 355.0 275 L 601.5 275" marker-end="url(#arrowhead)"/>
23
+ <text fill="#000000" x="478.25" y="267.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Valid</text>
24
+ </g>
25
+ <g id="transition-Validating_to_Failed">
26
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 355.0 275 L 100 475" marker-end="url(#arrowhead)"/>
27
+ <text fill="#000000" x="227.5" y="367.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Invalid</text>
28
+ </g>
29
+ <g id="transition-Executing_to_Success">
30
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 601.5 275 L 350 475" marker-end="url(#arrowhead)"/>
31
+ </g>
32
+ <g id="transition-Executing_to_Failed">
33
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 601.5 275 L 100 475" marker-end="url(#arrowhead)"/>
34
+ </g>
35
+ <g id="transition-Processing_to_Idle">
36
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 105.0 275 L 600 75" marker-end="url(#arrowhead)"/>
37
+ <text fill="#000000" x="352.5" y="167.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Complete</text>
38
+ </g>
39
+ <g id="transition-Application_to_end_2">
40
+ <path fill="none" stroke="#000000" stroke-width="2" d="M 358.5 75 L 565 465" marker-end="url(#arrowhead)"/>
41
+ </g>
42
+ <g id="state-start_1">
43
+ <circle fill="#000000" stroke="none" cx="65.0" cy="65.0" r="15.0"/>
44
+ <text fill="#000000" x="65.0" y="65.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">[*]</text>
45
+ </g>
46
+ <g id="state-Application">
47
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="300.0" y="50.0" width="117.0" height="50.0" rx="10.0" ry="10.0"/>
48
+ <text fill="#000000" x="358.5" y="75.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Application</text>
49
+ </g>
50
+ <g id="state-Idle">
51
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="550.0" y="50.0" width="100.0" height="50.0" rx="10.0" ry="10.0"/>
52
+ <text fill="#000000" x="600.0" y="75.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Idle</text>
53
+ </g>
54
+ <g id="state-Processing">
55
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="50.0" y="250.0" width="110.0" height="50.0" rx="10.0" ry="10.0"/>
56
+ <text fill="#000000" x="105.0" y="275.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Processing</text>
57
+ </g>
58
+ <g id="state-Validating">
59
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="300.0" y="250.0" width="110.0" height="50.0" rx="10.0" ry="10.0"/>
60
+ <text fill="#000000" x="355.0" y="275.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Validating</text>
61
+ </g>
62
+ <g id="state-Executing">
63
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="550.0" y="250.0" width="103.0" height="50.0" rx="10.0" ry="10.0"/>
64
+ <text fill="#000000" x="601.5" y="275.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Executing</text>
65
+ </g>
66
+ <g id="state-Failed">
67
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="50.0" y="450.0" width="100.0" height="50.0" rx="10.0" ry="10.0"/>
68
+ <text fill="#000000" x="100.0" y="475.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Failed</text>
69
+ </g>
70
+ <g id="state-Success">
71
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2" x="300.0" y="450.0" width="100.0" height="50.0" rx="10.0" ry="10.0"/>
72
+ <text fill="#000000" x="350.0" y="475.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">Success</text>
73
+ </g>
74
+ <g id="state-end_2">
75
+ <g>
76
+ <circle fill="none" stroke="#000000" stroke-width="2" cx="565.0" cy="465.0" r="15.0"/>
77
+ <circle fill="#000000" stroke="none" cx="565.0" cy="465.0" r="10.0"/>
78
+ </g>
79
+ <text fill="#000000" x="565.0" y="465.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" dominant-baseline="middle">[*]</text>
80
+ </g>
81
+ </svg>