digraph systemModel { rankdir="LR"; node[shape="record"]; #subgraph clusterModels { # label="Models" User[label=" User | role | password hash"]; #} ApplicationController[label="ApplicationController (abstract base class)"]; #subgraph clusterControllers { # label="Controllers"; MainController[label=" MainController | show_homepage() | edit_settings() | update_settings()"]; TournamentController[label=" TournamentController | listTournaments | newTournament | showTournament | editTournament | endTournament"]; MessageController; LoginController[label=" LoginController | showForm | login | logout"]; SearchController; UserController; MatchController; #} #subgraph clusterViews { # label="views/"; subgraph clusterCommonViews { label="views/common/"; common_permission_denied; common_invalid; } subgraph clusterMainViews { label="views/main/"; main_homepage; main_edit; } subgraph clusterLoginViews { label="views/login/"; login_form } subgraph clusterTournamentViews { label="views/tournament/"; tournament_index; tournament_new; tournament_show; tournament_edit; } subgraph clusterMessageViews { label="views/message/"; message_private; message_new_alert; } #} MainController -> ApplicationController[arrowhead="onormal"]; MainController:index -> main_homepage; MainController:edit -> main_edit; MainController:edit -> common_permission_denied; MainController:update -> main_edit; MainController:update -> common_permission_denied; TournamentController -> ApplicationController[arrowhead="onormal"]; TournamentController:index -> tournament_index; TournamentController:new -> tournament_new; TournamentController:show -> tournament_show; TournamentController:edit -> tournament_edit; TournamentController:edit -> common_permission_denied; TournamentController:delete -> common_permission_denied; MessageController -> ApplicationController[arrowhead="onormal"]; MessageController -> message_private; MessageController -> message_new_alert; LoginController -> ApplicationController[arrowhead="onormal"]; LoginController:index -> login_form; LoginController:login -> common_permission_denied; LoginController:logout -> common_invalid; SearchController -> ApplicationController[arrowhead="onormal"]; UserController -> ApplicationController[arrowhead="onormal"]; MatchController -> ApplicationController[arrowhead="onormal"]; }