gritty 0.1
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.md +4 -0
- data/Rakefile +27 -0
- data/lib/gritty.rb +50 -0
- data/test/test_gritty.rb +61 -0
- metadata +63 -0
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
|
4
|
+
PKG_FILES = Dir['Rakefile', 'README.md', 'lib/**', 'test/**']
|
5
|
+
PKG_VERSION = '0.1'
|
6
|
+
|
7
|
+
spec = Gem::Specification.new do |s|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.summary = 'Make GraphViz graphs out of simple Ruby objects'
|
10
|
+
s.name = 'gritty'
|
11
|
+
s.version = PKG_VERSION
|
12
|
+
s.authors = 'Ian Dees'
|
13
|
+
s.email = 'undees@gmail.com'
|
14
|
+
s.homepage = 'https://github.com/undees/gritty'
|
15
|
+
s.require_path = 'lib'
|
16
|
+
s.files = PKG_FILES
|
17
|
+
s.description = <<-EOF
|
18
|
+
This library makes GraphViz graphs out of Ruby objects, for very simple Ruby objects. It uses Ryan Davis's Graph gem under the hood. Pretty-print + Graph = Gritty.
|
19
|
+
EOF
|
20
|
+
s.add_runtime_dependency 'graph', '~> 2.5'
|
21
|
+
end
|
22
|
+
|
23
|
+
Gem::PackageTask.new(spec) do |pkg|
|
24
|
+
end
|
25
|
+
|
26
|
+
Rake::TestTask.new do |t|
|
27
|
+
end
|
data/lib/gritty.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'graph'
|
2
|
+
|
3
|
+
module Gritty
|
4
|
+
module AutoNode
|
5
|
+
def autonode label
|
6
|
+
@node_num = (@node_num || 0) + 1
|
7
|
+
name = "node#{@node_num}"
|
8
|
+
node name, label
|
9
|
+
name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class NodeBuilder
|
14
|
+
def initialize(graph)
|
15
|
+
@graph = graph
|
16
|
+
end
|
17
|
+
|
18
|
+
def build(obj, parent)
|
19
|
+
case obj
|
20
|
+
when Hash then
|
21
|
+
obj.each do |k, v|
|
22
|
+
node = @graph.autonode k.inspect
|
23
|
+
@graph.edge parent, node
|
24
|
+
build v, node
|
25
|
+
end
|
26
|
+
when Array then
|
27
|
+
obj.each do |o|
|
28
|
+
build o, parent
|
29
|
+
end
|
30
|
+
when Struct then
|
31
|
+
container = @graph.autonode obj.class.to_s
|
32
|
+
@graph.edge parent, container
|
33
|
+
|
34
|
+
obj.members.each do |k|
|
35
|
+
v = obj.send k
|
36
|
+
node = @graph.autonode k.inspect
|
37
|
+
@graph.edge container, node
|
38
|
+
build v, node
|
39
|
+
end
|
40
|
+
else
|
41
|
+
node = obj.inspect
|
42
|
+
@graph.edge parent, node
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Graph
|
49
|
+
include Gritty::AutoNode
|
50
|
+
end
|
data/test/test_gritty.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
$: << File.expand_path(File.basename(__FILE__) + '/../lib')
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/spec'
|
5
|
+
require 'gritty'
|
6
|
+
|
7
|
+
include Gritty
|
8
|
+
|
9
|
+
describe NodeBuilder do
|
10
|
+
it 'builds a simple graph' do
|
11
|
+
g = digraph do
|
12
|
+
input = [{:foo => {:bar => "baz"}},
|
13
|
+
{:bar => {:baz => "quux"}}]
|
14
|
+
builder = NodeBuilder.new self
|
15
|
+
builder.build input, 'root'
|
16
|
+
end
|
17
|
+
|
18
|
+
expected = <<HERE.strip
|
19
|
+
digraph
|
20
|
+
{
|
21
|
+
"node1" [ label = ":foo" ];
|
22
|
+
"node2" [ label = ":bar" ];
|
23
|
+
"node3" [ label = ":bar" ];
|
24
|
+
"node4" [ label = ":baz" ];
|
25
|
+
"root" -> "node1";
|
26
|
+
"root" -> "node3";
|
27
|
+
"node1" -> "node2";
|
28
|
+
"node2" -> "\\"baz\\"";
|
29
|
+
"node3" -> "node4";
|
30
|
+
"node4" -> "\\"quux\\"";
|
31
|
+
}
|
32
|
+
HERE
|
33
|
+
|
34
|
+
g.to_s.must_equal expected
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'understands Structs' do
|
38
|
+
Foo = Struct.new :bar, :baz
|
39
|
+
g = digraph do
|
40
|
+
input = Foo.new 'quux', 'quuux'
|
41
|
+
builder = NodeBuilder.new self
|
42
|
+
builder.build input, 'root'
|
43
|
+
end
|
44
|
+
|
45
|
+
expected = <<HERE.strip
|
46
|
+
digraph
|
47
|
+
{
|
48
|
+
"node1" [ label = "Foo" ];
|
49
|
+
"node2" [ label = ":bar" ];
|
50
|
+
"node3" [ label = ":baz" ];
|
51
|
+
"root" -> "node1";
|
52
|
+
"node1" -> "node2";
|
53
|
+
"node1" -> "node3";
|
54
|
+
"node2" -> "\\"quux\\"";
|
55
|
+
"node3" -> "\\"quuux\\"";
|
56
|
+
}
|
57
|
+
HERE
|
58
|
+
|
59
|
+
g.to_s.must_equal expected
|
60
|
+
end
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gritty
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ian Dees
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: graph
|
16
|
+
requirement: &70302944919460 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.5'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70302944919460
|
25
|
+
description: ! 'This library makes GraphViz graphs out of Ruby objects, for very simple
|
26
|
+
Ruby objects. It uses Ryan Davis''s Graph gem under the hood. Pretty-print + Graph
|
27
|
+
= Gritty.
|
28
|
+
|
29
|
+
'
|
30
|
+
email: undees@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- Rakefile
|
36
|
+
- README.md
|
37
|
+
- lib/gritty.rb
|
38
|
+
- test/test_gritty.rb
|
39
|
+
homepage: https://github.com/undees/gritty
|
40
|
+
licenses: []
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project:
|
59
|
+
rubygems_version: 1.8.11
|
60
|
+
signing_key:
|
61
|
+
specification_version: 3
|
62
|
+
summary: Make GraphViz graphs out of simple Ruby objects
|
63
|
+
test_files: []
|