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,600 @@
1
+ = Git graph diagrams
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ == Overview
6
+
7
+ Git graph diagrams in Sirena visualize Git repository history, showing commits,
8
+ branches, merges, and cherry-pick operations. These diagrams provide a clear
9
+ visual representation of version control workflows, making them ideal for
10
+ documentation, tutorials, and code review discussions.
11
+
12
+ Git graphs are useful for:
13
+
14
+ * Documenting branching strategies and workflows
15
+ * Visualizing feature development and integration
16
+ * Creating tutorials on Git operations
17
+ * Illustrating merge and rebase scenarios
18
+ * Showing release management processes
19
+ * Explaining cherry-pick operations in pull requests
20
+
21
+ == Syntax specification
22
+
23
+ === Diagram declaration
24
+
25
+ Git graphs are declared using the `gitGraph` keyword with optional orientation:
26
+
27
+ [source,mermaid]
28
+ ----
29
+ gitGraph
30
+ <diagram-content>
31
+ ----
32
+
33
+ ==== Orientation
34
+
35
+ The layout direction can be specified immediately after the keyword:
36
+
37
+ [source,mermaid]
38
+ ----
39
+ gitGraph LR:
40
+ <diagram-content>
41
+ ----
42
+
43
+ Options:
44
+
45
+ * Default (no specification) - Top to bottom layout
46
+ * `TB:` or `BT:` - Top to bottom / bottom to top (vertical)
47
+ * `LR:` - Left to right (horizontal)
48
+ * `:` - Use default orientation
49
+
50
+ === Commits
51
+
52
+ Commits are the basic building blocks of a git graph:
53
+
54
+ [source,mermaid]
55
+ ----
56
+ commit
57
+ ----
58
+
59
+ ==== Commit with options
60
+
61
+ Commits can have custom identifiers, types, and tags:
62
+
63
+ [source,mermaid]
64
+ ----
65
+ commit id: "abc123"
66
+ commit type: HIGHLIGHT
67
+ commit tag: "v1.0.0"
68
+ commit id: "Initial" type: NORMAL tag: "release"
69
+ ----
70
+
71
+ Where:
72
+
73
+ `id`:: Custom identifier for the commit (quoted or unquoted string)
74
+ `type`:: Visual style of the commit (NORMAL, REVERSE, HIGHLIGHT)
75
+ `tag`:: Version tag or label displayed above the commit
76
+
77
+ === Branches
78
+
79
+ ==== Creating a branch
80
+
81
+ Create a new branch from the current branch:
82
+
83
+ [source,mermaid]
84
+ ----
85
+ branch feature-x
86
+ ----
87
+
88
+ ==== Branch with ordering
89
+
90
+ Control the vertical positioning of branches:
91
+
92
+ [source,mermaid]
93
+ ----
94
+ branch develop order: 1
95
+ branch feature order: 2
96
+ ----
97
+
98
+ Lower order numbers appear higher in the diagram layout.
99
+
100
+ === Switching branches
101
+
102
+ ==== Checkout
103
+
104
+ Switch to an existing branch using `checkout`:
105
+
106
+ [source,mermaid]
107
+ ----
108
+ checkout develop
109
+ ----
110
+
111
+ ==== Switch
112
+
113
+ Alternative syntax using `switch`:
114
+
115
+ [source,mermaid]
116
+ ----
117
+ switch develop
118
+ ----
119
+
120
+ Both `checkout` and `switch` are functionally equivalent.
121
+
122
+ === Merge operations
123
+
124
+ Merge a branch into the current branch:
125
+
126
+ [source,mermaid]
127
+ ----
128
+ merge feature-branch
129
+ ----
130
+
131
+ ==== Merge with options
132
+
133
+ Merges can have custom identifiers, types, and tags:
134
+
135
+ [source,mermaid]
136
+ ----
137
+ merge feature id: "merge-1" type: HIGHLIGHT tag: "v2.0"
138
+ ----
139
+
140
+ === Cherry-pick operations
141
+
142
+ Cherry-pick commits from one branch to another:
143
+
144
+ [source,mermaid]
145
+ ----
146
+ cherry-pick id: "abc123"
147
+ ----
148
+
149
+ ==== Cherry-pick with parent
150
+
151
+ Specify the parent commit for the cherry-pick:
152
+
153
+ [source,mermaid]
154
+ ----
155
+ cherry-pick id: "commit-id" parent: "parent-id"
156
+ ----
157
+
158
+ ==== Cherry-pick with tag
159
+
160
+ Add a tag to a cherry-picked commit:
161
+
162
+ [source,mermaid]
163
+ ----
164
+ cherry-pick id: "feature-commit" tag: "backport"
165
+ ----
166
+
167
+ === Commit types
168
+
169
+ Three visual styles are available for commits:
170
+
171
+ [cols="2,3"]
172
+ |===
173
+ |Type |Description
174
+
175
+ |`NORMAL`
176
+ |Default commit style with filled circle
177
+
178
+ |`REVERSE`
179
+ |Hollow circle with colored border
180
+
181
+ |`HIGHLIGHT`
182
+ |Emphasized commit with highlight color
183
+ |===
184
+
185
+ == Examples
186
+
187
+ === Simple linear history
188
+
189
+ .Basic commit sequence
190
+ [example]
191
+ ====
192
+ [source,mermaid]
193
+ ----
194
+ gitGraph
195
+ commit id: "Initial commit"
196
+ commit id: "Add feature"
197
+ commit id: "Fix bug"
198
+ commit id: "Release" tag: "v1.0"
199
+ ----
200
+
201
+ This creates a simple linear history with four commits, where the last commit
202
+ is tagged as version 1.0.
203
+ ====
204
+
205
+ === Feature branch workflow
206
+
207
+ .Creating and merging a feature branch
208
+ [example]
209
+ ====
210
+ [source,mermaid]
211
+ ----
212
+ gitGraph
213
+ commit id: "Initial"
214
+ branch develop
215
+ checkout develop
216
+ commit id: "Setup"
217
+ branch feature
218
+ checkout feature
219
+ commit id: "Implement feature"
220
+ commit id: "Add tests"
221
+ checkout develop
222
+ merge feature
223
+ checkout main
224
+ merge develop tag: "v1.0"
225
+ ----
226
+
227
+ This demonstrates:
228
+
229
+ * Creating a develop branch from main
230
+ * Creating a feature branch from develop
231
+ * Working on the feature with multiple commits
232
+ * Merging the feature back to develop
233
+ * Merging develop to main with a release tag
234
+ ====
235
+
236
+ === Multiple parallel branches
237
+
238
+ .Working with multiple feature branches
239
+ [example]
240
+ ====
241
+ [source,mermaid]
242
+ ----
243
+ gitGraph
244
+ commit id: "Start"
245
+ branch feature-a
246
+ branch feature-b
247
+ checkout feature-a
248
+ commit id: "Feature A - Step 1"
249
+ commit id: "Feature A - Step 2"
250
+ checkout feature-b
251
+ commit id: "Feature B - Step 1"
252
+ checkout main
253
+ commit id: "Hotfix"
254
+ checkout feature-a
255
+ merge main id: "Sync hotfix"
256
+ commit id: "Feature A - Complete"
257
+ checkout main
258
+ merge feature-a
259
+ checkout feature-b
260
+ commit id: "Feature B - Complete"
261
+ checkout main
262
+ merge feature-b
263
+ ----
264
+
265
+ This shows:
266
+
267
+ * Multiple feature branches created simultaneously
268
+ * Independent development on each branch
269
+ * Hotfix applied to main and synchronized to feature-a
270
+ * Sequential merging of completed features
271
+ ====
272
+
273
+ === Using commit types for emphasis
274
+
275
+ .Visual differentiation with commit types
276
+ [example]
277
+ ====
278
+ [source,mermaid]
279
+ ----
280
+ gitGraph
281
+ commit id: "Init"
282
+ commit id: "Regular work" type: NORMAL
283
+ branch feature
284
+ checkout feature
285
+ commit id: "Important change" type: HIGHLIGHT
286
+ commit id: "Experimental" type: REVERSE
287
+ commit id: "Feature done" type: HIGHLIGHT
288
+ checkout main
289
+ merge feature tag: "v2.0"
290
+ ----
291
+
292
+ This demonstrates:
293
+
294
+ * `NORMAL` - Standard commits (default)
295
+ * `HIGHLIGHT` - Important or milestone commits
296
+ * `REVERSE` - Experimental or tentative commits
297
+ * Using types to visually distinguish commit importance
298
+ ====
299
+
300
+ === Cherry-pick operation
301
+
302
+ .Backporting a fix with cherry-pick
303
+ [example]
304
+ ====
305
+ [source,mermaid]
306
+ ----
307
+ gitGraph
308
+ commit id: "Base"
309
+ branch develop
310
+ checkout develop
311
+ commit id: "Feature 1"
312
+ commit id: "Feature 2"
313
+ commit id: "Critical fix"
314
+ checkout main
315
+ cherry-pick id: "Critical fix" tag: "backport"
316
+ checkout develop
317
+ commit id: "Feature 3"
318
+ ----
319
+
320
+ This shows:
321
+
322
+ * Development happening on develop branch
323
+ * A critical fix committed to develop
324
+ * Cherry-picking the fix back to main
325
+ * Tagging the cherry-picked commit as a backport
326
+ * Continued development on develop branch
327
+ ====
328
+
329
+ === Complex workflow with tags and types
330
+
331
+ .Real-world release workflow
332
+ [example]
333
+ ====
334
+ [source,mermaid]
335
+ ----
336
+ gitGraph
337
+ commit id: "v0.1.0" tag: "v0.1.0"
338
+ branch develop
339
+ checkout develop
340
+ commit id: "Setup CI"
341
+ branch feature-auth
342
+ checkout feature-auth
343
+ commit id: "Add login" type: HIGHLIGHT
344
+ commit id: "Add logout"
345
+ checkout develop
346
+ branch feature-api
347
+ checkout feature-api
348
+ commit id: "API endpoint"
349
+ checkout develop
350
+ merge feature-auth
351
+ commit id: "Integration tests"
352
+ checkout main
353
+ commit id: "Security patch" type: HIGHLIGHT
354
+ checkout develop
355
+ merge main id: "Sync security"
356
+ merge feature-api
357
+ commit id: "Prepare release" type: HIGHLIGHT
358
+ checkout main
359
+ merge develop tag: "v1.0.0"
360
+ ----
361
+
362
+ This comprehensive example includes:
363
+
364
+ * Initial release tag on main
365
+ * Develop branch for integration
366
+ * Multiple feature branches in parallel
367
+ * Security patch on main
368
+ * Synchronizing security patch to develop
369
+ * Merging features to develop
370
+ * Final release merge with version tag
371
+ * Using HIGHLIGHT type for important commits
372
+ ====
373
+
374
+ === Horizontal layout
375
+
376
+ .Left-to-right git graph
377
+ [example]
378
+ ====
379
+ [source,mermaid]
380
+ ----
381
+ gitGraph LR:
382
+ commit id: "Start"
383
+ branch feature
384
+ checkout feature
385
+ commit id: "Work"
386
+ commit id: "More work"
387
+ checkout main
388
+ merge feature tag: "done"
389
+ ----
390
+
391
+ This demonstrates:
392
+
393
+ * Horizontal layout using `LR:` orientation
394
+ * Better for wide displays or documentation
395
+ * Same functionality as vertical layout
396
+ ====
397
+
398
+ == Features
399
+
400
+ === Automatic branch creation
401
+
402
+ Branches are created automatically when first referenced:
403
+
404
+ [source,mermaid]
405
+ ----
406
+ gitGraph
407
+ commit
408
+ branch feature
409
+ checkout feature
410
+ commit
411
+ ----
412
+
413
+ The `main` branch exists by default as the starting point.
414
+
415
+ === Branch naming
416
+
417
+ Branch names can contain letters, numbers, hyphens, and underscores:
418
+
419
+ [source,mermaid]
420
+ ----
421
+ gitGraph
422
+ branch feature-123
423
+ branch bug_fix_2
424
+ branch dev-v2
425
+ ----
426
+
427
+ === Commit identifiers
428
+
429
+ Commit IDs can be quoted or unquoted:
430
+
431
+ [source,mermaid]
432
+ ----
433
+ gitGraph
434
+ commit id: abc123
435
+ commit id: "commit with spaces"
436
+ commit id: 'single-quoted'
437
+ ----
438
+
439
+ === Multiple options
440
+
441
+ Commits and merges can have multiple options:
442
+
443
+ [source,mermaid]
444
+ ----
445
+ gitGraph
446
+ commit id: "feat-1" type: HIGHLIGHT tag: "milestone"
447
+ branch develop
448
+ checkout develop
449
+ commit
450
+ checkout main
451
+ merge develop id: "release" type: HIGHLIGHT tag: "v1.0"
452
+ ----
453
+
454
+ === Branch ordering
455
+
456
+ Control visual layout with order numbers:
457
+
458
+ [source,mermaid]
459
+ ----
460
+ gitGraph
461
+ branch hotfix order: 0
462
+ branch main order: 1
463
+ branch develop order: 2
464
+ branch feature order: 3
465
+ ----
466
+
467
+ Lower numbers appear higher in the vertical layout.
468
+
469
+ == Limitations
470
+
471
+ === Currently not supported
472
+
473
+ The following Mermaid git graph features are not yet supported in Sirena:
474
+
475
+ * Comments using `%%`
476
+ * Custom styling with themes beyond built-in types
477
+ * Click events and links
478
+ * Custom branch colors
479
+ * Parallel merge visualization options
480
+
481
+ === Known issues
482
+
483
+ * Very complex graphs with many branches may require manual ordering
484
+ * Long commit IDs may overlap in compact layouts
485
+ * Cherry-pick visualization is simplified compared to actual Git behavior
486
+
487
+ == Best practices
488
+
489
+ === Use meaningful commit IDs
490
+
491
+ Choose descriptive identifiers for important commits:
492
+
493
+ [source,mermaid]
494
+ ----
495
+ %% Good
496
+ gitGraph
497
+ commit id: "Initial setup"
498
+ commit id: "Add authentication"
499
+ commit id: "Fix login bug"
500
+
501
+ %% Less clear
502
+ gitGraph
503
+ commit id: "a1b2c3"
504
+ commit id: "commit2"
505
+ commit id: "fix"
506
+ ----
507
+
508
+ === Tag releases and milestones
509
+
510
+ Use tags to mark important points in history:
511
+
512
+ [source,mermaid]
513
+ ----
514
+ gitGraph
515
+ commit id: "Development"
516
+ commit id: "Feature complete" tag: "RC1"
517
+ commit id: "Bug fixes"
518
+ commit id: "Production ready" tag: "v1.0.0"
519
+ ----
520
+
521
+ === Use commit types strategically
522
+
523
+ Apply types to emphasize important commits:
524
+
525
+ * `HIGHLIGHT` - Major features, releases, critical fixes
526
+ * `REVERSE` - Experimental changes, work-in-progress
527
+ * `NORMAL` - Regular development work (default)
528
+
529
+ [source,mermaid]
530
+ ----
531
+ gitGraph
532
+ commit type: NORMAL
533
+ commit type: HIGHLIGHT id: "Major feature" tag: "beta"
534
+ commit type: REVERSE id: "Experimental API"
535
+ commit type: NORMAL
536
+ ----
537
+
538
+ === Keep branch names concise
539
+
540
+ Use short, descriptive branch names:
541
+
542
+ [source,mermaid]
543
+ ----
544
+ %% Good
545
+ gitGraph
546
+ branch feature-auth
547
+ branch hotfix-login
548
+ branch release-2.0
549
+
550
+ %% Too verbose
551
+ gitGraph
552
+ branch feature-implement-user-authentication-system
553
+ branch hotfix-fix-the-login-page-redirect-issue
554
+ ----
555
+
556
+ === Order branches logically
557
+
558
+ Use branch ordering for clarity:
559
+
560
+ [source,mermaid]
561
+ ----
562
+ gitGraph
563
+ branch main order: 0
564
+ branch release order: 1
565
+ branch develop order: 2
566
+ branch feature order: 3
567
+ branch hotfix order: 4
568
+ ----
569
+
570
+ This creates a logical top-to-bottom hierarchy.
571
+
572
+ === Show complete workflows
573
+
574
+ Include all steps in your workflow:
575
+
576
+ [source,mermaid]
577
+ ----
578
+ gitGraph
579
+ commit id: "Start"
580
+ branch develop
581
+ checkout develop
582
+ commit id: "Work"
583
+ checkout main
584
+ merge develop
585
+ ----
586
+
587
+ Don't leave workflows incomplete or ambiguous.
588
+
589
+ === Choose appropriate orientation
590
+
591
+ Select layout based on your medium:
592
+
593
+ * Vertical (default) - Better for most documentation
594
+ * Horizontal (`LR:`) - Better for wide screens or presentations
595
+
596
+ == Related documentation
597
+
598
+ * <<index.adoc#,Diagram types overview>>
599
+ * <<flowchart.adoc#,Flowchart diagrams>>
600
+ * link:https://mermaid.js.org/syntax/gitgraph.html[Official Mermaid git graph documentation]