rviz 0.0.2

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.
data/README.rdoc ADDED
@@ -0,0 +1,78 @@
1
+ = Rviz: An Other Ruby Interface for Graphviz
2
+
3
+ Provide a simple OOP interface and designed easy to extend.
4
+
5
+ g = Rviz::Graph.new
6
+ g.set('bgcolor', 'kahki')
7
+ g.set('dpi', '300')
8
+ g.set('rankdir', 'LR')
9
+ node_a = g.add_node('Node A', 'diamond')
10
+ node_b = g.add_node('Node B', 'box')
11
+ edge_a = g.add_edge('Node A', '', 'Node B', '', {arrowhead: 'onormal'})
12
+
13
+ node_a.set('fillcolor', 'yellow')
14
+ g.node('Node A').set('fillcolor', 'yellow') # same as above
15
+
16
+ other_node = Rviz::Node.new('The Node', 'diamond')
17
+ g.add(other_node) # same as g.add_node(...)
18
+
19
+ g.output('some.dot') # generate a dot file
20
+ g.output # send output to STDOUT
21
+
22
+ An easy way to create <tt>record</tt> and <tt>Mrecord</tt> type of nodes:
23
+
24
+ g.add_record('Record A')
25
+ g.node('Record A').add_row('A Row 1', true) # add an anchor
26
+ g.node('Record A').add_row('A Row 2', true) # add an anchor
27
+ g.node('Record A').add_row('A Row 3', true) # add an anchor
28
+
29
+ g.add_record('Record B')
30
+ g.node('Record B').add_row('B Row 1', true) # add an anchor
31
+ g.add_edge('Record A', 'A Row 2', 'Record B', 'B Row 1', {label: 'link A:2 to B:1'})
32
+
33
+ You can extend <tt>Rviz</tt> very easy:
34
+
35
+ # in file red_note.rb
36
+ module Rviz
37
+ class RedNote < Note
38
+ def initialize name
39
+ @attrs[:name] = name
40
+ @attrs[:shape] = 'note'
41
+ @attrs[:style] = 'filled'
42
+ @attrs[:fillcolor] = 'red'
43
+ end
44
+ end
45
+ end
46
+
47
+ # in your program:
48
+ g = Rviz::Graph.new
49
+ g.add(Rviz::RedNote.new('Red'))
50
+ g.output('notes.dot')
51
+
52
+ And you can also mixin the <tt>Graph</tt> class:
53
+
54
+ # in file red_note.rb
55
+ module Rviz
56
+ class RedNote < Note
57
+ def initialize name
58
+ @attrs[:name] = name
59
+ @attrs[:shape] = 'note'
60
+ @attrs[:style] = 'filled'
61
+ @attrs[:fillcolor] = 'red'
62
+ end
63
+ end
64
+ end
65
+
66
+ module Rviz
67
+ class Graph
68
+ def add_red_note name
69
+ self.add(RedNote(name))
70
+ end
71
+ end
72
+ end
73
+
74
+ # now in your main program:
75
+ g = Rviz::Graph.new
76
+ g.add_red_note('Bloody Notes')
77
+ g.output('notes.dot')
78
+
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new('spec')
3
+
4
+
Binary file
data/examples/hello.rb ADDED
@@ -0,0 +1,4 @@
1
+ $:.unshift "lib", "../lib"
2
+ require 'rviz'
3
+
4
+ Rviz::Graph.new.add("Hello").add("World").link("Hello", "", "World").output
Binary file
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ $:.unshift "lib", "../lib"
3
+ require 'rviz'
4
+
5
+ g = Rviz::Graph.new
6
+ g.add(Rviz::Record.new('To', {color: 'blue'}))
7
+ g.add(Rviz::Mrecord.new('Fu', {color: 'green'}))
8
+
9
+ g.node('To').add_row("Hello").add_row("World", true)
10
+ g.node('Fu').add_row("你好", true).add_row("世界")
11
+
12
+ g.link('To', "World", 'Fu', "你好")
13
+ g.output
data/lib/rviz/edge.rb ADDED
@@ -0,0 +1,30 @@
1
+ module Rviz
2
+ # represent a ->
3
+ class Edge
4
+ attr_reader :attrs
5
+
6
+ def initialize from_node, from_anchor, to_node, to_anchor = nil, attributes = {}
7
+ @from, @from_anchor, @to, @to_anchor, @attrs = from_node, from_anchor, to_node, to_anchor, attributes
8
+ end
9
+
10
+ def node_anchor node, anchor
11
+ if anchor and anchor.size > 0
12
+ quote(node) + ":" + anchor
13
+ else
14
+ quote(node)
15
+ end
16
+ end
17
+
18
+ include Helper
19
+
20
+ # output to dot format
21
+ def to_s
22
+ from, to = node_anchor(@from, @from_anchor), node_anchor(@to, @to_anchor)
23
+ if @attrs.keys.size > 0
24
+ sprintf "%s -> %s [%s]", from, to, self.attrs_to_s
25
+ else
26
+ sprintf "%s -> %s", from, to
27
+ end
28
+ end
29
+ end
30
+ end
data/lib/rviz/graph.rb ADDED
@@ -0,0 +1,96 @@
1
+ module Rviz
2
+ class Graph
3
+ attr_accessor :subgraphs, :nodes, :edges
4
+
5
+ def initialize attrs = {}
6
+ @attrs = attrs
7
+ @nodes = Hash.new
8
+ @edges = Array.new
9
+ @links = Array.new
10
+ @subgraphs = Hash.new
11
+ end
12
+
13
+ def graph_start type = "digraph", name = "G"
14
+ "#{type} #{name} {"
15
+ end
16
+
17
+ def graph_end; "}" end
18
+
19
+ include Rviz::Helper
20
+ def graph_attr
21
+ @attrs["charset"] = "UTF-8" unless @attrs["charset"]
22
+ sprintf(" graph [%s]", self.attrs_to_s)
23
+ end
24
+
25
+ def node_attr
26
+ ' node [fontname="Arial Unicode MS", fontsize=9, width=2.0];'
27
+ end
28
+
29
+ def edge_attr
30
+ ' edge [fontname="Arial Unicode MS", fontsize=7];'
31
+ end
32
+
33
+ # return a specific node from the node list
34
+ def node name
35
+ @nodes[name]
36
+ end
37
+
38
+ # add a node or create a node with name, shae and attributes
39
+ def add name, shape='box', attrs = {}
40
+ if name.is_a?(Node)
41
+ node = name
42
+ name = name.name
43
+ else
44
+ node = Node.new(name, shape, attrs)
45
+ end
46
+
47
+ @nodes[name] = node
48
+ self
49
+ end
50
+
51
+ # create edge between two nodes
52
+ def link from_name, from_anchor, to_name, to_anchor = "", attrs = {}
53
+ @links << [from_name, from_anchor, to_name, to_anchor, attrs]
54
+ self
55
+ end
56
+
57
+ def add_edge from_name, from_anchor, to_name, to_anchor, attrs = {}
58
+ @edges << Edge.new(from_name, from_anchor, to_name, to_anchor, attrs)
59
+ self
60
+ end
61
+
62
+ ## output dot language source to file or to STDOUT
63
+ def output file=STDOUT
64
+ fh = file
65
+ fh = File.open(file, "w:utf-8") if file.is_a?(String)
66
+
67
+ fh.puts self.graph_start
68
+ fh.puts self.graph_attr
69
+ fh.puts self.node_attr
70
+ fh.puts self.edge_attr
71
+
72
+ @nodes.each {|n,node| fh.puts " " + node.to_s}
73
+
74
+ @links.each do |ary|
75
+ raise "#{ary[0]} not found as a node" unless @nodes[ary[0]] # from
76
+ raise "#{ary[2]} not found as a node" unless @nodes[ary[2]] # to
77
+ if %w[Mrecord record].include?(@nodes[ary[0]].shape)
78
+ ary[1] = @nodes[ary[0]].get_anchor(ary[1])
79
+ ary[3] = @nodes[ary[2]].get_anchor(ary[3])
80
+ end
81
+ @edges << Edge.new(*ary)
82
+ end
83
+
84
+ @edges.each {|e| fh.puts " " + e.to_s}
85
+
86
+ fh.puts self.graph_end
87
+ fh.close
88
+ end
89
+ end
90
+
91
+ class SubGraph
92
+ attr_accessor :name
93
+ def graph_start; " subgraph #{self.name} {" end
94
+ def graph_end; " }" end
95
+ end
96
+ end
data/lib/rviz/node.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Rviz
2
+ class Node
3
+ attr_accessor :name
4
+ def initialize name, shape = "box", attrs = {}
5
+ @name = name
6
+ @attrs = {"shape" => shape}.merge attrs
7
+ end
8
+
9
+ def shape
10
+ @attrs["shape"]
11
+ end
12
+
13
+ include Rviz::Helper
14
+
15
+ # print out as dot source
16
+ def to_s
17
+ sprintf '%s [%s]', self.quote(@name), self.attrs_to_s
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,57 @@
1
+ module Rviz
2
+ class Record < Node
3
+ def initialize name, attrs = {}
4
+ super name, "record", attrs
5
+ @label_rows = Array.new
6
+ @anchors = Hash.new
7
+ end
8
+
9
+ # from row_name returns the id corresponds to the anchor
10
+ def get_anchor_id row_name
11
+ @anchors[row_name]
12
+ end
13
+
14
+ # get the anchor name used for edge link
15
+ def get_anchor row_name
16
+ "f" + self.get_anchor_id(row_name).to_s
17
+ end
18
+
19
+ def add_row row_name, create_anchor = false, port_pos = 'n'
20
+ if create_anchor
21
+ anchor_id = @anchors.keys.size + 1
22
+ @anchors[row_name] = anchor_id
23
+ row_name.gsub!(/([\/\|\\\<\>])/, '-') # escape special characters
24
+ row_name = "<f#{anchor_id.to_s}>" + row_name
25
+ end
26
+ if port_pos
27
+ raise "unknown port_pos, should in l, r or n" unless %w[l r n].include? port_pos
28
+ end
29
+ @label_rows << [row_name, port_pos]
30
+ self
31
+ end
32
+
33
+ def label_with_rows
34
+ labels = Array.new
35
+ i =0
36
+ @label_rows.each do |a|
37
+ str, lr = a[0], a[1]
38
+ str += " \\" + lr if %w[l r].include? lr
39
+ labels << str
40
+ end
41
+ labels.join('|')
42
+ end
43
+
44
+ def to_s
45
+ @attrs['label'] = self.label_with_rows
46
+ super
47
+ end
48
+ end
49
+
50
+ # a convenient way to inherit Record functions
51
+ class Mrecord < Record
52
+ def initialize name, attrs = {}
53
+ super name, attrs
54
+ @attrs["shape"] = "Mrecord"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,4 @@
1
+ module Rviz
2
+ VERSION = '0.0.2'
3
+ end
4
+
data/lib/rviz.rb ADDED
@@ -0,0 +1,32 @@
1
+ module Rviz
2
+ module Helper
3
+ # convert attr hash to a string in dot format
4
+ def attrs_to_s
5
+ attr_strs = Array.new
6
+
7
+ @attrs.each do |k,v|
8
+ k = self.quote(k)
9
+ v = self.quote(v)
10
+ attr_strs << sprintf('%s=%s', k, v)
11
+ end
12
+ attr_strs.join(", ")
13
+ end
14
+
15
+ def set key, value
16
+ @attrs[key] = value
17
+ end
18
+
19
+ def quote str
20
+ if str.match(/\W/)
21
+ %Q{"#{str.to_s}"}
22
+ else
23
+ str.to_s
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ require "rviz/edge.rb"
30
+ require "rviz/graph.rb"
31
+ require "rviz/node.rb"
32
+ require "rviz/record.rb"
data/rviz.gemspec ADDED
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require 'rviz/version'
3
+
4
+ Gem::Specification.new 'rviz', Rviz::VERSION do |s|
5
+ s.description = "Rviz is an other ruby interface to graphviz."
6
+ s.summary = "Graphviz ruby interface"
7
+ s.authors = ["Huang Wei"]
8
+ s.email = "huangw@pe-po.com"
9
+ s.homepage = "https://github.com/huangw/rviz-gem"
10
+ s.files = `git ls-files`.split("\n") - %w[.gitignore]
11
+ s.test_files = Dir.glob("{spec,test}/**/*.rb")
12
+ s.rdoc_options = %w[--line-numbers --inline-source --title Rviz --main README.rdoc --encoding=UTF-8]
13
+
14
+ s.add_development_dependency 'rspec', '~> 2.5'
15
+ end
16
+
data/spec/edge_spec.rb ADDED
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ describe Rviz::Edge do
4
+ describe "#to_s" do
5
+ it "should format a plain link" do
6
+ Rviz::Edge.new("A", "", "B").to_s.should eq "A -> B"
7
+ end
8
+
9
+ it "should format link with from anchor" do
10
+ Rviz::Edge.new("A", "a", "B").to_s.should eq "A:a -> B"
11
+ end
12
+
13
+ it "should format link with to anchor" do
14
+ Rviz::Edge.new("A", "", "B", "b").to_s.should eq "A -> B:b"
15
+ end
16
+
17
+ it "should format link with both anchor" do
18
+ Rviz::Edge.new("A", "a", "B", "b").to_s.should eq "A:a -> B:b"
19
+ end
20
+
21
+ it "should format link with special from node" do
22
+ Rviz::Edge.new("A C", "a", "B", "b").to_s.should eq %q|"A C":a -> B:b|
23
+ end
24
+
25
+ it "should format link with special nodes" do
26
+ Rviz::Edge.new("A C", "a", "B D", "b").to_s.should eq %q|"A C":a -> "B D":b|
27
+ end
28
+
29
+ it "should format link with label attributes" do
30
+ Rviz::Edge.new("A B C", "a", "B", "", {label: "Send to me"}).to_s.should eq %q{"A B C":a -> B [label="Send to me"]}
31
+ end
32
+
33
+ it "should format link with more attributes" do
34
+ Rviz::Edge.new("A B C", "a", "B", "", {label: "Send to me", color: "black"}).to_s.should eq %q{"A B C":a -> B [label="Send to me", color=black]}
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe Rviz::Graph do
4
+ it "can generate a empty graph" do
5
+ # pass
6
+ end
7
+ end
data/spec/node_spec.rb ADDED
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ describe Rviz::Node do
4
+ describe "#to_s" do
5
+ it "should return a node in plain format" do
6
+ Rviz::Node.new("glue").to_s.should eq %Q{glue [shape=box]}
7
+ end
8
+
9
+ it "should return a note with specific shape and attribute" do
10
+ Rviz::Node.new("glue", "note", {color: "red"}).to_s.should eq %Q{glue [shape=note, color=red]}
11
+ end
12
+ end
13
+ end
14
+
15
+ describe Rviz::Record do
16
+ describe "#to_s" do
17
+ it "should return a record node in plain format" do
18
+ ar = Rviz::Record.new('a_record')
19
+ ar.add_row("A Row")
20
+ ar.add_row("B Row")
21
+ ar.to_s.should eq %Q{a_record [shape=record, label="A Row|B Row"]}
22
+ end
23
+
24
+ it "should return a record node with an anchor" do
25
+ ar = Rviz::Record.new('a_record')
26
+ ar.add_row("A Row", true)
27
+ ar.add_row("B Row")
28
+ ar.to_s.should eq %Q{a_record [shape=record, label="<f1>A Row|B Row"]}
29
+ end
30
+
31
+ it "should return a record node with more anchors" do
32
+ ar = Rviz::Record.new('a_record')
33
+ ar.add_row("A Row", true)
34
+ ar.add_row("B Row", true)
35
+ ar.add_row("C Row", true)
36
+ ar.to_s.should eq %Q{a_record [shape=record, label="<f1>A Row|<f2>B Row|<f3>C Row"]}
37
+ end
38
+ end
39
+
40
+ describe "#get_anchor" do
41
+ it "should labeled some row with proper id" do
42
+ ar = Rviz::Record.new('a_record')
43
+ ar.add_row("A Row", true)
44
+ ar.add_row("B Row", true)
45
+ ar.add_row("C Row", true)
46
+ ar.get_anchor_id("C Row").should eq(3)
47
+ ar.get_anchor("B Row").should eq("f2")
48
+ end
49
+ end
50
+ end
51
+
52
+ describe Rviz::Mrecord do
53
+ describe "#to_s" do
54
+ it "should have a shape of Mrecord" do
55
+ Rviz::Mrecord.new('m_record').shape.should eq "Mrecord"
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe Rviz do
4
+ describe "#attrs_to_s" do
5
+ it "return attribute set in format" do
6
+ # mock up
7
+ m = Rviz::Edge.new "from", "", "to", ""
8
+ m.set("label", "full stack")
9
+ m.attrs_to_s.should eq(%q{label="full stack"})
10
+ end
11
+
12
+ it "return initial attributes in format" do
13
+ m = Rviz::Edge.new "from", "", "to", "", {arrowhead: "onormal"}
14
+ m.set("label", "full stack")
15
+ m.attrs_to_s.should eq(%q{arrowhead=onormal, label="full stack"})
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+ require 'rviz'
3
+
4
+ RSpec.configure do |config|
5
+ config.color_enabled = true
6
+ config.formatter = 'documentation'
7
+ end
data/tags ADDED
@@ -0,0 +1,33 @@
1
+ !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2
+ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3
+ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
4
+ !_TAG_PROGRAM_NAME Exuberant Ctags //
5
+ !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
6
+ !_TAG_PROGRAM_VERSION 5.8 //
7
+ Edge lib/rviz/edge.rb /^ class Edge$/;" c class:Rviz
8
+ Graph lib/rviz/graph.rb /^ class Graph$/;" c class:Rviz
9
+ Helper lib/rviz.rb /^ module Helper$/;" m class:Rviz
10
+ Mrecord lib/rviz/record.rb /^ class Mrecord < Record$/;" c class:Rviz
11
+ Node lib/rviz/node.rb /^ class Node$/;" c class:Rviz
12
+ Record lib/rviz/record.rb /^ class Record < Node$/;" c class:Rviz
13
+ Rviz lib/rviz.rb /^module Rviz$/;" m
14
+ Rviz lib/rviz/edge.rb /^module Rviz$/;" m
15
+ Rviz lib/rviz/graph.rb /^module Rviz$/;" m
16
+ Rviz lib/rviz/node.rb /^module Rviz$/;" m
17
+ Rviz lib/rviz/record.rb /^module Rviz$/;" m
18
+ Rviz lib/rviz/version.rb /^module Rviz$/;" m
19
+ SubGraph lib/rviz/graph.rb /^ class SubGraph$/;" c class:Rviz
20
+ add_row lib/rviz/record.rb /^ def add_row row_name, create_anchor = false, port_pos = 'n'$/;" f class:Rviz.Record
21
+ attrs_to_s lib/rviz.rb /^ def attrs_to_s$/;" f class:Rviz.Helper
22
+ get_anchor_id lib/rviz/record.rb /^ def get_anchor_id row_name$/;" f class:Rviz.Record
23
+ initialize lib/rviz/edge.rb /^ def initialize from_node, from_anchor, to_node, to_anchor = nil, attributes = {}$/;" f class:Rviz.Edge
24
+ initialize lib/rviz/node.rb /^ def initialize name, shape = "box", attrs = {}$/;" f class:Rviz.Node
25
+ initialize lib/rviz/record.rb /^ def initialize name, attrs = {}$/;" f class:Rviz.Mrecord
26
+ initialize lib/rviz/record.rb /^ def initialize name, attrs = {}$/;" f class:Rviz.Record
27
+ label_with_rows lib/rviz/record.rb /^ def label_with_rows$/;" f class:Rviz.Record
28
+ node_anchor lib/rviz/edge.rb /^ def node_anchor node, anchor$/;" f class:Rviz.Edge
29
+ quote lib/rviz.rb /^ def quote str$/;" f class:Rviz.Helper
30
+ set lib/rviz.rb /^ def set key, value$/;" f class:Rviz.Helper
31
+ to_s lib/rviz/edge.rb /^ def to_s$/;" f class:Rviz.Edge
32
+ to_s lib/rviz/node.rb /^ def to_s$/;" f class:Rviz.Node
33
+ to_s lib/rviz/record.rb /^ def to_s$/;" f class:Rviz.Record
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rviz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Huang Wei
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.5'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.5'
30
+ description: Rviz is an other ruby interface to graphviz.
31
+ email: huangw@pe-po.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - README.rdoc
37
+ - Rakefile
38
+ - examples/hello.png
39
+ - examples/hello.rb
40
+ - examples/record.png
41
+ - examples/record.rb
42
+ - lib/rviz.rb
43
+ - lib/rviz/edge.rb
44
+ - lib/rviz/graph.rb
45
+ - lib/rviz/node.rb
46
+ - lib/rviz/record.rb
47
+ - lib/rviz/version.rb
48
+ - rviz.gemspec
49
+ - spec/edge_spec.rb
50
+ - spec/graph_spec.rb
51
+ - spec/node_spec.rb
52
+ - spec/rviz_helper_spec.rb
53
+ - spec/spec_helper.rb
54
+ - tags
55
+ homepage: https://github.com/huangw/rviz-gem
56
+ licenses: []
57
+ post_install_message:
58
+ rdoc_options:
59
+ - --line-numbers
60
+ - --inline-source
61
+ - --title
62
+ - Rviz
63
+ - --main
64
+ - README.rdoc
65
+ - --encoding=UTF-8
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 1.8.25
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Graphviz ruby interface
86
+ test_files:
87
+ - spec/edge_spec.rb
88
+ - spec/graph_spec.rb
89
+ - spec/node_spec.rb
90
+ - spec/rviz_helper_spec.rb
91
+ - spec/spec_helper.rb