Ruby|Gviz gem 내부 DSL의 기본

7868 단어 GraphvizRuby

Ruby|Gviz gem 내부 DSL의 기본


개요


Gviz gem의 내부 DSL에 대한 기본 구성 요소
※ 저는 graphiviz를 따로 사용해 본 적이 없는 상태에서 Gviz를 사용하기 시작했습니다.
이 점에서 이상한 기술이 있을 수 있다.

node


노드gviz의 DSL에서 route + 노드 이름 (코드) 으로 기술합니다.
매개변수가 길어져서 여러 개를 지정할 수 있습니다.

소스 코드


nodes.rb
require 'gviz'
Graph do
  route :Hubot
  route :Kandan
  route :GitLab, :GitLabCI
  save(:nodes, :png)
end

출력



nodeset을 통해 정의된 node 목록에 접근할 수 있습니다.
해시를 얻으려면 @nodes를 통해 방문할 수 있다.

소스 코드


nodeset.rb
require 'gviz'
require 'pp'

Graph do
  route :Hubot
  route :Kandan
  route :GitLab, :GitLabCI
  pp nodeset
  pp @nodes
end

출력

$ ruby nodeset.rb
[#<struct Gviz::Node id=:Hubot, attrs={}>,
 #<struct Gviz::Node id=:Kandan, attrs={}>,
 #<struct Gviz::Node id=:GitLab, attrs={}>,
 #<struct Gviz::Node id=:GitLabCI, attrs={}>]
 {:Hubot=>#<struct Gviz::Node id=:Hubot, attrs={}>,
 :Kandan=>#<struct Gviz::Node id=:Kandan, attrs={}>,
 :GitLab=>#<struct Gviz::Node id=:GitLab, attrs={}>,
 :GitLabCI=>#<struct Gviz::Node id=:GitLabCI, attrs={}>}

edge


가장자리gviz의 DSL에서 route+모서리(Hash)로 기술합니다.
매개변수가 길어져서 여러 개를 지정할 수 있습니다.

소스 코드


edges.rb
require 'gviz'
Graph do
  route Kandan: :Hubot
  route Hubot: :Kandan
  route GitLab: :Hubot
  route GitLab: :GitLabCI
  save(:edges, :png)
end

출력



edgeset


왜냐하면 node와 nodeset, edge와 edgeset은 같은 구성이기 때문이다
edgeset에 대한 설명을 생략합니다.

rank


다음 기호에서 도표의 등급을 설정합니다.
[:same, :min, :max, :source, :sink]

샘플 설정 1


rank.rb
require 'gviz'
Graph do
  route Kandan: :Hubot
  route Hubot: :Kandan
  route GitLab: :Hubot
  route GitLab: :GitLabCI
  rank :min, :Kandan
  rank :same, :GitLab, :Hubot
  rank :max, :GitLabCI
  save(:rank1, :png)
end

출력



샘플 설정 2

require 'gviz'
Graph do
  route Kandan: :Hubot
  route Hubot: :Kandan
  route GitLab: :Hubot
  route GitLab: :GitLabCI
  rank :max, :Kandan
  rank :same, :GitLab, :Hubot
  rank :min, :GitLabCI
  save(:rank2, :png)
end

출력



subgraph


하위 차트.

소스 코드


subgraph.rb
require 'gviz'
Graph do
  route Kandan: :Hubot
  route Hubot: :Kandan
  route GitLab: :Hubot
  route GitLab: :GitLabCI
  subgraph do
    global label:'GitLab CI'
    route :GitLabCI => :GitLabCiRunner1
    route :GitLabCI => :GitLabCiRunner2
  end
  save(:subgraph, :png)
end

출력



인용하다

  • Gviz 작성자의 Gviz 관련 기사 카탈로그 페이지
    http://melborne.github.io/2014/02/27/gviz-posts/
  • Gviz GitHub
    https://github.com/melborne/Gviz
  • 좋은 웹페이지 즐겨찾기