yard-sd

Note: This README and the example are best viewed on http://rubydoc.info/github/dominikh/yard-sd/frames or a service supporting the yard-sd plugin.

Description

yard-sd allows embedding sequence diagrams directly in docstrings and files. During documentation generation, it replaces the text description with images.

Requirements

yard-sd needs YARD 0.7.5/0.8.0 to function properly.

Furthermore, yard-sd needs the following binaries:

  • pdflatex
  • convert (from the ImageMagick suite)
  • gs (Ghostscript, needed by convert)

Installation

$ gem install yard-sd

Usage

yard-sd defines a new language for code blocks called "sd". Like other languages, it can be used with the tripple-bang syntax (!!!LANG).

Example

Input

!!!sd
% size = 400

thread Alice
participant[2] Bob
participant[2] Eve

Alice -> Bob: Some message
Bob   -> Eve: Another message
Eve  --> Bob: Return value
noreturn

Output

Error: ["No such file or directory - pdflatex", ["/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `popen'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `block in to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `chdir'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:30:in `html_syntax_highlight_sd'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:206:in `html_syntax_highlight'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:650:in `block in parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `gsub'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:69:in `htmlify'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:5:in `htmlify'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:67:in `diskfile'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `block in yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:414:in `with_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/layout.erb:21:in `_erb_cache_0'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:289:in `erb'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:62:in `layout'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:136:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/engine.rb:89:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:149:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_file_command.rb:23:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_object_command.rb:18:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:141:in `route_docs'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:115:in `route'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:56:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/rack_adapter.rb:60:in `call'", "/app/app.rb:414:in `block (2 levels) in <class:DocServer>'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `block in compile!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (3 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1084:in `route_eval'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (2 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1115:in `block in process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1064:in `block in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `each'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1185:in `block in dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1180:in `dispatch!'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/sinatra.rb:23:in `dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `block in call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:985:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:261:in `call'", "/app/app.rb:192:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:41:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:30:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/conditional_get.rb:27:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/xss_header.rb:20:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/path_traversal.rb:18:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/json_csrf.rb:28:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/frame_options.rb:33:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/null_logger.rb:11:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:219:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/middleware.rb:99:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:2074:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `block in call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/configuration.rb:270:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:100:in `block in handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:344:in `with_force_shutdown'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:99:in `handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:443:in `process_client'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:245:in `block in run'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:151:in `block in spawn_thread'"]]

The format

A sequence diagram consists of two parts: the metadata (currently only the size) and the actual description of the diagram's content.

Metadata

The only currently supported and required metadata is the size of the diagram. You can either specify only a width (e.g. 500), only a height (e.g. x500) or both (e.g. 500x500). In most cases it makes sense to specify only one of the dimensions so the aspect ratio can be kept.

Content

The content itself can also be separated into two parts: The list of threads/participants (simply called participants from now on) and the messages between those.

Participants

In their most basic form, they consist of a type (thread or participant) and a name.

Example:

thread Alice
participant Bob

Output:

Error: ["No such file or directory - pdflatex", ["/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `popen'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `block in to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `chdir'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:30:in `html_syntax_highlight_sd'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:206:in `html_syntax_highlight'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:650:in `block in parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `gsub'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:69:in `htmlify'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:5:in `htmlify'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:67:in `diskfile'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `block in yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:414:in `with_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/layout.erb:21:in `_erb_cache_0'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:289:in `erb'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:62:in `layout'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:136:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/engine.rb:89:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:149:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_file_command.rb:23:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_object_command.rb:18:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:141:in `route_docs'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:115:in `route'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:56:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/rack_adapter.rb:60:in `call'", "/app/app.rb:414:in `block (2 levels) in <class:DocServer>'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `block in compile!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (3 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1084:in `route_eval'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (2 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1115:in `block in process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1064:in `block in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `each'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1185:in `block in dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1180:in `dispatch!'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/sinatra.rb:23:in `dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `block in call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:985:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:261:in `call'", "/app/app.rb:192:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:41:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:30:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/conditional_get.rb:27:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/xss_header.rb:20:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/path_traversal.rb:18:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/json_csrf.rb:28:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/frame_options.rb:33:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/null_logger.rb:11:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:219:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/middleware.rb:99:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:2074:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `block in call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/configuration.rb:270:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:100:in `block in handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:344:in `with_force_shutdown'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:99:in `handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:443:in `process_client'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:245:in `block in run'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:151:in `block in spawn_thread'"]]

It is also possible to specify the distance to the previous participant by adding a number in square brackets. The default is 0, so 1 will double the distance, 2 will triple it and so on.

Example:

thread Alice
participant[1] Bob

Output:

Error: ["No such file or directory - pdflatex", ["/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `popen'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `block in to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `chdir'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:30:in `html_syntax_highlight_sd'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:206:in `html_syntax_highlight'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:650:in `block in parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `gsub'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:69:in `htmlify'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:5:in `htmlify'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:67:in `diskfile'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `block in yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:414:in `with_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/layout.erb:21:in `_erb_cache_0'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:289:in `erb'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:62:in `layout'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:136:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/engine.rb:89:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:149:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_file_command.rb:23:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_object_command.rb:18:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:141:in `route_docs'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:115:in `route'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:56:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/rack_adapter.rb:60:in `call'", "/app/app.rb:414:in `block (2 levels) in <class:DocServer>'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `block in compile!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (3 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1084:in `route_eval'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (2 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1115:in `block in process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1064:in `block in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `each'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1185:in `block in dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1180:in `dispatch!'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/sinatra.rb:23:in `dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `block in call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:985:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:261:in `call'", "/app/app.rb:192:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:41:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:30:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/conditional_get.rb:27:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/xss_header.rb:20:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/path_traversal.rb:18:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/json_csrf.rb:28:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/frame_options.rb:33:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/null_logger.rb:11:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:219:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/middleware.rb:99:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:2074:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `block in call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/configuration.rb:270:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:100:in `block in handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:344:in `with_force_shutdown'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:99:in `handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:443:in `process_client'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:245:in `block in run'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:151:in `block in spawn_thread'"]]

Finally, it is also possible to assign aliases to avoid typing out long names over and over again.

Example:

participant "Alice, the wonderful girl" as Alice
participant Bob

Alice -> Bob: Yey

Output:

Error: ["No such file or directory - pdflatex", ["/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `popen'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `block in to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `chdir'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:30:in `html_syntax_highlight_sd'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:206:in `html_syntax_highlight'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:650:in `block in parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `gsub'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:69:in `htmlify'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:5:in `htmlify'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:67:in `diskfile'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `block in yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:414:in `with_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/layout.erb:21:in `_erb_cache_0'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:289:in `erb'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:62:in `layout'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:136:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/engine.rb:89:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:149:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_file_command.rb:23:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_object_command.rb:18:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:141:in `route_docs'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:115:in `route'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:56:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/rack_adapter.rb:60:in `call'", "/app/app.rb:414:in `block (2 levels) in <class:DocServer>'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `block in compile!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (3 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1084:in `route_eval'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (2 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1115:in `block in process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1064:in `block in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `each'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1185:in `block in dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1180:in `dispatch!'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/sinatra.rb:23:in `dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `block in call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:985:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:261:in `call'", "/app/app.rb:192:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:41:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:30:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/conditional_get.rb:27:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/xss_header.rb:20:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/path_traversal.rb:18:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/json_csrf.rb:28:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/frame_options.rb:33:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/null_logger.rb:11:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:219:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/middleware.rb:99:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:2074:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `block in call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/configuration.rb:270:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:100:in `block in handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:344:in `with_force_shutdown'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:99:in `handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:443:in `process_client'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:245:in `block in run'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:151:in `block in spawn_thread'"]]

Messages

The second part of description of the sequende diagram consists of messages between participants. Messages are denoted by an arrow and text (p1 -> p2: The message) while return values are denoted by a dashed arrow and also text (p2 --> p1: The return value). If a message has no return value, a noreturn has to be placed after the execution finished.

Example:

Alice -> Bob: Some message
Bob   -> Eve: Another message
Eve  --> Bob: Return value
noreturn

Output:

Error: ["No such file or directory - pdflatex", ["/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `popen'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `block in to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `chdir'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:30:in `html_syntax_highlight_sd'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:206:in `html_syntax_highlight'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:650:in `block in parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `gsub'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:69:in `htmlify'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:5:in `htmlify'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:67:in `diskfile'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `block in yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:414:in `with_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/layout.erb:21:in `_erb_cache_0'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:289:in `erb'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:62:in `layout'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:136:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/engine.rb:89:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:149:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_file_command.rb:23:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_object_command.rb:18:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:141:in `route_docs'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:115:in `route'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:56:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/rack_adapter.rb:60:in `call'", "/app/app.rb:414:in `block (2 levels) in <class:DocServer>'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `block in compile!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (3 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1084:in `route_eval'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (2 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1115:in `block in process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1064:in `block in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `each'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1185:in `block in dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1180:in `dispatch!'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/sinatra.rb:23:in `dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `block in call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:985:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:261:in `call'", "/app/app.rb:192:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:41:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:30:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/conditional_get.rb:27:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/xss_header.rb:20:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/path_traversal.rb:18:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/json_csrf.rb:28:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/frame_options.rb:33:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/null_logger.rb:11:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:219:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/middleware.rb:99:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:2074:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `block in call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/configuration.rb:270:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:100:in `block in handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:344:in `with_force_shutdown'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:99:in `handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:443:in `process_client'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:245:in `block in run'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:151:in `block in spawn_thread'"]]

Blocks

Furthermore, it is possible to group messages into blocks, for example for representing loops:

Example:

block "Name" "Description"
  Alice -> Bob: Msg1
  Bob --> Alice: Ret1

  block "Another name" "Nested blocks, yey"
    Alice -> Bob: Msg2
    noreturn

Alice -> Bob: Msg3
Bob --> Alice: Ret3

Output:

Error: ["No such file or directory - pdflatex", ["/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `popen'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:142:in `block in to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `chdir'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram/diagram.rb:140:in `to_png'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:30:in `html_syntax_highlight_sd'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:206:in `html_syntax_highlight'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:650:in `block in parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `gsub'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:641:in `parse_codeblocks'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/helpers/html_helper.rb:69:in `htmlify'", "/home/app/.gems/gems/yard-sd-0.0.4/lib/yard-sd/sequence_diagram_mixin.rb:5:in `htmlify'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:67:in `diskfile'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `block in yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:414:in `with_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:279:in `yieldall'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/layout.erb:21:in `_erb_cache_0'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:289:in `erb'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/templates/default/layout/html/setup.rb:62:in `layout'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:369:in `render_section'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:261:in `block (2 levels) in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `each'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:258:in `block in run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:400:in `add_options'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:257:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/template.rb:136:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/templates/engine.rb:89:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:149:in `render'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_file_command.rb:23:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/display_object_command.rb:18:in `run'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/base.rb:97:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `block in call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:91:in `call_without_fork'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/commands/library_command.rb:74:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/helpers.rb:186:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:141:in `route_docs'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:115:in `route'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/router.rb:56:in `call'", "/home/app/.gems/bundler/gems/yard-698b22cc2340/lib/yard/server/rack_adapter.rb:60:in `call'", "/app/app.rb:414:in `block (2 levels) in <class:DocServer>'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1763:in `block in compile!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (3 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1084:in `route_eval'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1066:in `block (2 levels) in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1115:in `block in process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1113:in `process_route'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1064:in `block in route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `each'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1061:in `route!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1185:in `block in dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1180:in `dispatch!'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/sinatra.rb:23:in `dispatch!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `block in call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `catch'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1156:in `invoke'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:996:in `call!'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:985:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:261:in `call'", "/app/app.rb:192:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:41:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/app/app.rb:30:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/conditional_get.rb:27:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/xss_header.rb:20:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/path_traversal.rb:18:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/json_csrf.rb:28:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/base.rb:53:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-protection-3.1.0/lib/rack/protection/frame_options.rb:33:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/null_logger.rb:11:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:219:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/probes/middleware.rb:84:in `call'", "/home/app/.gems/gems/skylight-5.3.4/lib/skylight/middleware.rb:99:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:2074:in `call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `block in call'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1847:in `synchronize'", "/home/app/.gems/gems/sinatra-3.1.0/lib/sinatra/base.rb:1633:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/configuration.rb:270:in `call'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:100:in `block in handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:344:in `with_force_shutdown'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/request.rb:99:in `handle_request'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:443:in `process_client'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/server.rb:245:in `block in run'", "/home/app/.gems/gems/puma-6.3.1/lib/puma/thread_pool.rb:151:in `block in spawn_thread'"]]

Blocks automatically get closed, based on the indentation level.

More information

For a more advanced example, see Example.md.

Caveats

yard-sd currently does not support Unicode.