Ruby|Gviz gem 내부 DSL의 기본
Ruby|Gviz gem 내부 DSL의 기본
개요
Gviz gem의 내부 DSL에 대한 기본 구성 요소
※ 저는 graphiviz를 따로 사용해 본 적이 없는 상태에서 Gviz를 사용하기 시작했습니다.
이 점에서 이상한 기술이 있을 수 있다.
node
노드gviz의 DSL에서 route + 노드 이름 (코드) 으로 기술합니다.
매개변수가 길어져서 여러 개를 지정할 수 있습니다.
소스 코드
nodes.rbrequire 'gviz'
Graph do
route :Hubot
route :Kandan
route :GitLab, :GitLabCI
save(:nodes, :png)
end
출력
nodeset을 통해 정의된 node 목록에 접근할 수 있습니다.
해시를 얻으려면 @nodes를 통해 방문할 수 있다.
소스 코드
nodeset.rbrequire '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.rbrequire '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.rbrequire '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.rbrequire '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
출력
인용하다
require 'gviz'
Graph do
route :Hubot
route :Kandan
route :GitLab, :GitLabCI
save(:nodes, :png)
end
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={}>}
require 'gviz'
Graph do
route Kandan: :Hubot
route Hubot: :Kandan
route GitLab: :Hubot
route GitLab: :GitLabCI
save(:edges, :png)
end
[:same, :min, :max, :source, :sink]
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
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
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
http://melborne.github.io/2014/02/27/gviz-posts/
https://github.com/melborne/Gviz
Reference
이 문제에 관하여(Ruby|Gviz gem 내부 DSL의 기본), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tbpgr/items/9037fb05745dfac930ed텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)