graph 2.1.0 → 2.2.0
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.tar.gz.sig +0 -0
- data/History.txt +12 -0
- data/README.txt +1 -1
- data/lib/graph.rb +58 -5
- data/test/test_graph.rb +66 -0
- metadata +13 -14
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 2.2.0 / 2011-08-12
|
2
|
+
|
3
|
+
* 3 minor enhancements:
|
4
|
+
|
5
|
+
* Added brewer color scheme support: colorscheme(:reds, 5) creates c1 - c5.
|
6
|
+
* Added cluster subgraph shortcut
|
7
|
+
* added Node.connected? and Node.orphan?
|
8
|
+
|
9
|
+
* 1 bug fix:
|
10
|
+
|
11
|
+
* Fixed output of single node graphs. (aja)
|
12
|
+
|
1
13
|
=== 2.1.0 / 2011-05-26
|
2
14
|
|
3
15
|
* 3 minor enhancements:
|
data/README.txt
CHANGED
data/lib/graph.rb
CHANGED
@@ -7,7 +7,7 @@ require "enumerator"
|
|
7
7
|
# dot format.
|
8
8
|
|
9
9
|
class Graph
|
10
|
-
VERSION = "2.
|
10
|
+
VERSION = "2.2.0" # :nodoc:
|
11
11
|
|
12
12
|
LIGHT_COLORS = %w(gray lightblue lightcyan lightgray lightpink
|
13
13
|
lightslategray lightsteelblue white)
|
@@ -27,6 +27,22 @@ class Graph
|
|
27
27
|
"dodgerblue", "sienna", "limegreen", "royalblue",
|
28
28
|
"darkorange", "blue"]
|
29
29
|
|
30
|
+
##
|
31
|
+
# Defines the brewer color schemes and the maximum number of colors
|
32
|
+
# in each set.
|
33
|
+
|
34
|
+
COLOR_SCHEME_MAX = {
|
35
|
+
:accent => 8, :blues => 9, :brbg => 11, :bugn => 9,
|
36
|
+
:dark2 => 8, :gnbu => 9, :greens => 9, :greys => 9,
|
37
|
+
:oranges => 9, :orrd => 9, :paired => 12, :pastel1 => 9,
|
38
|
+
:pastel2 => 8, :piyg => 11, :prgn => 11, :pubu => 9,
|
39
|
+
:pubugn => 9, :puor => 11, :purd => 9, :purples => 9,
|
40
|
+
:rdbu => 11, :rdgy => 11, :rdylbu => 11, :rdylgn => 11,
|
41
|
+
:reds => 9, :set1 => 9, :set2 => 8, :set3 => 12,
|
42
|
+
:spectral => 11, :ylgn => 9, :ylgnbu => 9, :ylorbr => 9,
|
43
|
+
:ylorrd => 9
|
44
|
+
}
|
45
|
+
|
30
46
|
SHAPES = %w(Mcircle Mdiamond Msquare box box3d circle component
|
31
47
|
diamond doublecircle doubleoctagon egg ellipse folder
|
32
48
|
hexagon house invhouse invtrapezium invtriangle none
|
@@ -139,10 +155,27 @@ class Graph
|
|
139
155
|
end
|
140
156
|
|
141
157
|
##
|
142
|
-
# Shortcut method to create a new colorscheme Attribute instance.
|
158
|
+
# Shortcut method to create a new colorscheme Attribute instance. If
|
159
|
+
# passed +n+, +name+ must match one of the brewer color scheme names
|
160
|
+
# and it will generate accessors for each fillcolor as well as push
|
161
|
+
# the colorscheme onto the node_attribs.
|
162
|
+
|
163
|
+
def colorscheme name, n = nil
|
164
|
+
scheme = Attribute.new "colorscheme = #{name}#{n}"
|
165
|
+
max = COLOR_SCHEME_MAX[name.to_sym]
|
166
|
+
|
167
|
+
if max then
|
168
|
+
node_attribs << scheme
|
143
169
|
|
144
|
-
|
145
|
-
|
170
|
+
mc = (class << self; self; end)
|
171
|
+
|
172
|
+
(1..n).map { |m|
|
173
|
+
mc.send :attr_accessor, "c#{m}"
|
174
|
+
self.send "c#{m}=", Graph::Attribute.new("fillcolor = #{m}")
|
175
|
+
}
|
176
|
+
end
|
177
|
+
|
178
|
+
scheme
|
146
179
|
end
|
147
180
|
|
148
181
|
##
|
@@ -257,6 +290,15 @@ class Graph
|
|
257
290
|
Graph.new name, self, &block
|
258
291
|
end
|
259
292
|
|
293
|
+
##
|
294
|
+
# Shortcut method to create a clustered subgraph in the current
|
295
|
+
# graph. Use with the top-level +digraph+ method in block form for a
|
296
|
+
# graph DSL.
|
297
|
+
|
298
|
+
def cluster name, &block
|
299
|
+
subgraph "cluster_#{name}", &block
|
300
|
+
end
|
301
|
+
|
260
302
|
##
|
261
303
|
# Outputs a graphviz graph.
|
262
304
|
|
@@ -284,7 +326,7 @@ class Graph
|
|
284
326
|
end
|
285
327
|
|
286
328
|
nodes.each do |name, node|
|
287
|
-
result << " #{node};" if graph or node.attributes?
|
329
|
+
result << " #{node};" if graph or node.attributes? or node.orphan?
|
288
330
|
end
|
289
331
|
|
290
332
|
edges.each do |from, deps|
|
@@ -397,6 +439,17 @@ class Graph
|
|
397
439
|
|
398
440
|
attr_accessor :name
|
399
441
|
|
442
|
+
def connected?
|
443
|
+
node = self.name
|
444
|
+
edges = graph.edges
|
445
|
+
|
446
|
+
edges.include?(name) or edges.any? { |from, deps| deps.include? name }
|
447
|
+
end
|
448
|
+
|
449
|
+
def orphan?
|
450
|
+
not connected?
|
451
|
+
end
|
452
|
+
|
400
453
|
##
|
401
454
|
# Create a new Node. Takes a parent graph and a name.
|
402
455
|
|
data/test/test_graph.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "rubygems"
|
1
2
|
require "minitest/autorun"
|
2
3
|
require "tmpdir"
|
3
4
|
require "graph"
|
@@ -37,6 +38,19 @@ class TestGraph < MiniTest::Unit::TestCase
|
|
37
38
|
|
38
39
|
def test_colorscheme
|
39
40
|
assert_attribute "colorscheme", "blah", graph.colorscheme("blah")
|
41
|
+
assert_empty graph.node_attribs
|
42
|
+
refute_respond_to graph, :c1
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_colorscheme_n
|
46
|
+
cs = graph.colorscheme("reds", 5)
|
47
|
+
assert_attribute "colorscheme", "reds5", cs
|
48
|
+
assert_equal [cs], graph.node_attribs
|
49
|
+
assert_equal "fillcolor = 1", graph.c1.to_s
|
50
|
+
assert_equal "fillcolor = 2", graph.c2.to_s
|
51
|
+
assert_equal "fillcolor = 3", graph.c3.to_s
|
52
|
+
assert_equal "fillcolor = 4", graph.c4.to_s
|
53
|
+
assert_equal "fillcolor = 5", graph.c5.to_s
|
40
54
|
end
|
41
55
|
|
42
56
|
def test_fillcolor
|
@@ -76,6 +90,19 @@ class TestGraph < MiniTest::Unit::TestCase
|
|
76
90
|
assert_equal %w(a), invert.edges["c"].keys
|
77
91
|
end
|
78
92
|
|
93
|
+
def test_node_orphan
|
94
|
+
exp = 'digraph { "B"; }'
|
95
|
+
|
96
|
+
y = digraph do node "B" end
|
97
|
+
|
98
|
+
assert_equal exp, y.to_s.gsub(/\s+/m, " ")
|
99
|
+
|
100
|
+
z = digraph do self["B"] end
|
101
|
+
|
102
|
+
assert_equal exp, z.to_s.gsub(/\s+/m, " ")
|
103
|
+
end
|
104
|
+
|
105
|
+
|
79
106
|
def test_label
|
80
107
|
graph.label "blah"
|
81
108
|
|
@@ -152,6 +179,17 @@ class TestGraph < MiniTest::Unit::TestCase
|
|
152
179
|
assert_equal 42, n
|
153
180
|
end
|
154
181
|
|
182
|
+
def test_cluster
|
183
|
+
n = nil
|
184
|
+
s = graph.cluster "blah" do
|
185
|
+
n = 42
|
186
|
+
end
|
187
|
+
|
188
|
+
assert_equal graph, s.graph
|
189
|
+
assert_equal "cluster_blah", s.name
|
190
|
+
assert_equal 42, n
|
191
|
+
end
|
192
|
+
|
155
193
|
def test_to_s
|
156
194
|
assert_graph graph, '"a" -> "b"'
|
157
195
|
|
@@ -255,6 +293,34 @@ class TestNode < MiniTest::Unit::TestCase
|
|
255
293
|
self.n = Graph::Node.new :graph, "n"
|
256
294
|
end
|
257
295
|
|
296
|
+
def test_connected_eh
|
297
|
+
graph = Graph.new
|
298
|
+
self.n = graph.node "n"
|
299
|
+
m = graph.node "m"
|
300
|
+
|
301
|
+
refute n.connected?
|
302
|
+
refute m.connected?
|
303
|
+
|
304
|
+
graph.edge("n", "m")
|
305
|
+
|
306
|
+
assert n.connected?
|
307
|
+
assert m.connected?
|
308
|
+
end
|
309
|
+
|
310
|
+
def test_orphan_eh
|
311
|
+
graph = Graph.new
|
312
|
+
self.n = graph.node "n"
|
313
|
+
m = graph.node "m"
|
314
|
+
|
315
|
+
assert n.orphan?
|
316
|
+
assert m.orphan?
|
317
|
+
|
318
|
+
graph.edge("n", "m")
|
319
|
+
|
320
|
+
refute n.orphan?
|
321
|
+
refute m.orphan?
|
322
|
+
end
|
323
|
+
|
258
324
|
def test_rshift
|
259
325
|
graph = Graph.new
|
260
326
|
self.n = graph.node "blah"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 2.
|
10
|
+
version: 2.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Davis
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
FBHgymkyj/AOSqKRIpXPhjC6
|
37
37
|
-----END CERTIFICATE-----
|
38
38
|
|
39
|
-
date: 2011-
|
39
|
+
date: 2011-08-13 00:00:00 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
@@ -46,12 +46,12 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
hash:
|
49
|
+
hash: 31
|
50
50
|
segments:
|
51
51
|
- 2
|
52
|
-
-
|
52
|
+
- 4
|
53
53
|
- 0
|
54
|
-
version: 2.
|
54
|
+
version: 2.4.0
|
55
55
|
type: :development
|
56
56
|
version_requirements: *id001
|
57
57
|
- !ruby/object:Gem::Dependency
|
@@ -60,14 +60,13 @@ dependencies:
|
|
60
60
|
requirement: &id002 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
|
-
- -
|
63
|
+
- - ~>
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
hash:
|
65
|
+
hash: 21
|
66
66
|
segments:
|
67
67
|
- 2
|
68
|
-
-
|
69
|
-
|
70
|
-
version: 2.9.4
|
68
|
+
- 11
|
69
|
+
version: "2.11"
|
71
70
|
type: :development
|
72
71
|
version_requirements: *id002
|
73
72
|
description: |-
|
@@ -120,7 +119,7 @@ files:
|
|
120
119
|
- lib/rubygems_plugin.rb
|
121
120
|
- test/test_graph.rb
|
122
121
|
- .gemtest
|
123
|
-
homepage:
|
122
|
+
homepage: https://github.com/seattlerb/graph
|
124
123
|
licenses: []
|
125
124
|
|
126
125
|
post_install_message:
|
@@ -150,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
149
|
requirements: []
|
151
150
|
|
152
151
|
rubyforge_project: seattlerb
|
153
|
-
rubygems_version: 1.8.
|
152
|
+
rubygems_version: 1.8.8
|
154
153
|
signing_key:
|
155
154
|
specification_version: 3
|
156
155
|
summary: Graph is a type of hash that outputs in graphviz's dot format
|
metadata.gz.sig
CHANGED
Binary file
|