graph 2.2.0 → 2.3.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/gallery/cluster.rb +0 -28
- data/gallery/fsm.rb +0 -21
- data/gallery/unix.rb +0 -55
- data/lib/graph.rb +70 -17
- data/test/test_graph.rb +17 -3
- metadata +12 -13
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 2.3.0 / 2011-10-04
|
2
|
+
|
3
|
+
* 7 minor enhancements:
|
4
|
+
|
5
|
+
* Added CompoundAttribute
|
6
|
+
* Added arrowhead, arrowtail, and arrowsize attribute methods.
|
7
|
+
* Added default arrowhead attribute helpers (vee, box, dot, etc)..
|
8
|
+
* Added fontsize
|
9
|
+
* Attribute#+ now returns a CompoundAttribute
|
10
|
+
* Colorscheme is now passed down to subgraphs.
|
11
|
+
* font shortcut no longer takes optional fontsize.
|
12
|
+
|
1
13
|
=== 2.2.0 / 2011-08-12
|
2
14
|
|
3
15
|
* 3 minor enhancements:
|
data/gallery/cluster.rb
CHANGED
@@ -1,33 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
|
3
|
-
# digraph G {
|
4
|
-
#
|
5
|
-
# subgraph cluster_0 {
|
6
|
-
# style=filled;
|
7
|
-
# color=lightgrey;
|
8
|
-
# node [style=filled,color=white];
|
9
|
-
# a0 -> a1 -> a2 -> a3;
|
10
|
-
# label = "process #1";
|
11
|
-
# }
|
12
|
-
#
|
13
|
-
# subgraph cluster_1 {
|
14
|
-
# node [style=filled];
|
15
|
-
# b0 -> b1 -> b2 -> b3;
|
16
|
-
# label = "process #2";
|
17
|
-
# color=blue
|
18
|
-
# }
|
19
|
-
# start -> a0;
|
20
|
-
# start -> b0;
|
21
|
-
# a1 -> b3;
|
22
|
-
# b2 -> a3;
|
23
|
-
# a3 -> a0;
|
24
|
-
# a3 -> end;
|
25
|
-
# b3 -> end;
|
26
|
-
#
|
27
|
-
# start [shape=Mdiamond];
|
28
|
-
# end [shape=Msquare];
|
29
|
-
# }
|
30
|
-
|
31
3
|
require "graph"
|
32
4
|
|
33
5
|
digraph do
|
data/gallery/fsm.rb
CHANGED
@@ -1,26 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
# digraph finite_state_machine {
|
4
|
-
# rankdir=LR;
|
5
|
-
# size="8,5"
|
6
|
-
# node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
|
7
|
-
# node [shape = circle];
|
8
|
-
# LR_0 -> LR_2 [ label = "SS(B)" ];
|
9
|
-
# LR_0 -> LR_1 [ label = "SS(S)" ];
|
10
|
-
# LR_1 -> LR_3 [ label = "S($end)" ];
|
11
|
-
# LR_2 -> LR_6 [ label = "SS(b)" ];
|
12
|
-
# LR_2 -> LR_5 [ label = "SS(a)" ];
|
13
|
-
# LR_2 -> LR_4 [ label = "S(A)" ];
|
14
|
-
# LR_5 -> LR_7 [ label = "S(b)" ];
|
15
|
-
# LR_5 -> LR_5 [ label = "S(a)" ];
|
16
|
-
# LR_6 -> LR_6 [ label = "S(b)" ];
|
17
|
-
# LR_6 -> LR_5 [ label = "S(a)" ];
|
18
|
-
# LR_7 -> LR_8 [ label = "S(b)" ];
|
19
|
-
# LR_7 -> LR_5 [ label = "S(a)" ];
|
20
|
-
# LR_8 -> LR_6 [ label = "S(b)" ];
|
21
|
-
# LR_8 -> LR_5 [ label = "S(a)" ];
|
22
|
-
# }
|
23
|
-
|
24
3
|
require "graph"
|
25
4
|
|
26
5
|
digraph do
|
data/gallery/unix.rb
CHANGED
@@ -1,60 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
|
3
|
-
# /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */
|
4
|
-
# digraph unix {
|
5
|
-
# size="6,6";
|
6
|
-
# node [color=lightblue2, style=filled];
|
7
|
-
# "5th Edition" -> "6th Edition";
|
8
|
-
# "5th Edition" -> "PWB 1.0";
|
9
|
-
# "6th Edition" -> "LSX";
|
10
|
-
# "6th Edition" -> "1 BSD";
|
11
|
-
# "6th Edition" -> "Mini Unix";
|
12
|
-
# "6th Edition" -> "Wollongong";
|
13
|
-
# "6th Edition" -> "Interdata";
|
14
|
-
# "Interdata" -> "Unix/TS 3.0";
|
15
|
-
# "Interdata" -> "PWB 2.0";
|
16
|
-
# "Interdata" -> "7th Edition";
|
17
|
-
# "7th Edition" -> "8th Edition";
|
18
|
-
# "7th Edition" -> "32V";
|
19
|
-
# "7th Edition" -> "V7M";
|
20
|
-
# "7th Edition" -> "Ultrix-11";
|
21
|
-
# "7th Edition" -> "Xenix";
|
22
|
-
# "7th Edition" -> "UniPlus+";
|
23
|
-
# "V7M" -> "Ultrix-11";
|
24
|
-
# "8th Edition" -> "9th Edition";
|
25
|
-
# "1 BSD" -> "2 BSD";
|
26
|
-
# "2 BSD" -> "2.8 BSD";
|
27
|
-
# "2.8 BSD" -> "Ultrix-11";
|
28
|
-
# "2.8 BSD" -> "2.9 BSD";
|
29
|
-
# "32V" -> "3 BSD";
|
30
|
-
# "3 BSD" -> "4 BSD";
|
31
|
-
# "4 BSD" -> "4.1 BSD";
|
32
|
-
# "4.1 BSD" -> "4.2 BSD";
|
33
|
-
# "4.1 BSD" -> "2.8 BSD";
|
34
|
-
# "4.1 BSD" -> "8th Edition";
|
35
|
-
# "4.2 BSD" -> "4.3 BSD";
|
36
|
-
# "4.2 BSD" -> "Ultrix-32";
|
37
|
-
# "PWB 1.0" -> "PWB 1.2";
|
38
|
-
# "PWB 1.0" -> "USG 1.0";
|
39
|
-
# "PWB 1.2" -> "PWB 2.0";
|
40
|
-
# "USG 1.0" -> "CB Unix 1";
|
41
|
-
# "USG 1.0" -> "USG 2.0";
|
42
|
-
# "CB Unix 1" -> "CB Unix 2";
|
43
|
-
# "CB Unix 2" -> "CB Unix 3";
|
44
|
-
# "CB Unix 3" -> "Unix/TS++";
|
45
|
-
# "CB Unix 3" -> "PDP-11 Sys V";
|
46
|
-
# "USG 2.0" -> "USG 3.0";
|
47
|
-
# "USG 3.0" -> "Unix/TS 3.0";
|
48
|
-
# "PWB 2.0" -> "Unix/TS 3.0";
|
49
|
-
# "Unix/TS 1.0" -> "Unix/TS 3.0";
|
50
|
-
# "Unix/TS 3.0" -> "TS 4.0";
|
51
|
-
# "Unix/TS++" -> "TS 4.0";
|
52
|
-
# "CB Unix 3" -> "TS 4.0";
|
53
|
-
# "TS 4.0" -> "System V.0";
|
54
|
-
# "System V.0" -> "System V.2";
|
55
|
-
# "System V.2" -> "System V.3";
|
56
|
-
# }
|
57
|
-
|
58
3
|
require "graph"
|
59
4
|
|
60
5
|
digraph "unix" do
|
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.3.0" # :nodoc:
|
11
11
|
|
12
12
|
LIGHT_COLORS = %w(gray lightblue lightcyan lightgray lightpink
|
13
13
|
lightslategray lightsteelblue white)
|
@@ -52,6 +52,10 @@ class Graph
|
|
52
52
|
|
53
53
|
STYLES = %w(dashed dotted solid invis bold filled diagonals rounded)
|
54
54
|
|
55
|
+
ARROW_RE = /(?:o?[lr]?(?:box|crow|diamond|dot|inv|none|normal|tee|vee)){1,4}/
|
56
|
+
|
57
|
+
ARROWS = %w(box crow diamond dot inv none normal tee vee)
|
58
|
+
|
55
59
|
STYLES.each do |name|
|
56
60
|
define_method(name) { style name }
|
57
61
|
end
|
@@ -61,7 +65,13 @@ class Graph
|
|
61
65
|
end
|
62
66
|
|
63
67
|
SHAPES.each do |name|
|
64
|
-
|
68
|
+
method_name = name.downcase.sub(/none/, 'shape_none')
|
69
|
+
define_method(method_name) { shape name }
|
70
|
+
end
|
71
|
+
|
72
|
+
ARROWS.each do |name|
|
73
|
+
method_name = name.sub(/none/, 'arrow_none')
|
74
|
+
define_method(method_name) { arrowhead name }
|
65
75
|
end
|
66
76
|
|
67
77
|
##
|
@@ -122,6 +132,9 @@ class Graph
|
|
122
132
|
@edge_attribs = []
|
123
133
|
@subgraphs = []
|
124
134
|
|
135
|
+
self.scheme = graph.scheme if graph
|
136
|
+
node_attribs << scheme if scheme
|
137
|
+
|
125
138
|
instance_eval(&block) if block
|
126
139
|
end
|
127
140
|
|
@@ -140,6 +153,20 @@ class Graph
|
|
140
153
|
nodes[name]
|
141
154
|
end
|
142
155
|
|
156
|
+
def arrowhead shape
|
157
|
+
raise ArgumentError, "Bad arrow shape: #{shape}" unless shape =~ ARROW_RE
|
158
|
+
Attribute.new "arrowhead = #{shape}"
|
159
|
+
end
|
160
|
+
|
161
|
+
def arrowtail shape
|
162
|
+
raise ArgumentError, "Bad arrow shape: #{shape}" unless shape =~ ARROW_RE
|
163
|
+
Attribute.new "arrowtail = #{shape}"
|
164
|
+
end
|
165
|
+
|
166
|
+
def arrowsize size
|
167
|
+
Attribute.new "arrowsize = #{size}"
|
168
|
+
end
|
169
|
+
|
143
170
|
##
|
144
171
|
# A convenience method to set the global node attributes to use boxes.
|
145
172
|
|
@@ -160,24 +187,23 @@ class Graph
|
|
160
187
|
# and it will generate accessors for each fillcolor as well as push
|
161
188
|
# the colorscheme onto the node_attribs.
|
162
189
|
|
190
|
+
attr_accessor :scheme
|
191
|
+
|
163
192
|
def colorscheme name, n = nil
|
164
|
-
scheme = Attribute.new "colorscheme = #{name}#{n}"
|
193
|
+
self.scheme = Attribute.new "colorscheme = #{name}#{n}"
|
165
194
|
max = COLOR_SCHEME_MAX[name.to_sym]
|
166
195
|
|
167
|
-
if max
|
168
|
-
node_attribs << scheme
|
169
|
-
|
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
|
196
|
+
node_attribs << scheme if max
|
177
197
|
|
178
198
|
scheme
|
179
199
|
end
|
180
200
|
|
201
|
+
(1..COLOR_SCHEME_MAX.values.max).map { |m|
|
202
|
+
define_method "c#{m}" do
|
203
|
+
Graph::Attribute.new("fillcolor = #{m}")
|
204
|
+
end
|
205
|
+
}
|
206
|
+
|
181
207
|
##
|
182
208
|
# Define one or more edges.
|
183
209
|
#
|
@@ -221,9 +247,12 @@ class Graph
|
|
221
247
|
# Shortcut method to create a new font Attribute instance. You can
|
222
248
|
# pass in both the name and an optional font size.
|
223
249
|
|
224
|
-
def font name
|
225
|
-
Attribute.new "fontname = #{name.inspect}"
|
226
|
-
|
250
|
+
def font name
|
251
|
+
Attribute.new "fontname = #{name.inspect}"
|
252
|
+
end
|
253
|
+
|
254
|
+
def fontsize size
|
255
|
+
Attribute.new "fontsize = #{size}"
|
227
256
|
end
|
228
257
|
|
229
258
|
##
|
@@ -372,7 +401,31 @@ class Graph
|
|
372
401
|
# bad_nodes = red + filled + diamond
|
373
402
|
|
374
403
|
def + style
|
375
|
-
|
404
|
+
c = CompoundAttribute.new
|
405
|
+
c.push self
|
406
|
+
c.push style
|
407
|
+
c
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
class CompoundAttribute < Attribute
|
412
|
+
def initialize attr = []
|
413
|
+
super
|
414
|
+
end
|
415
|
+
|
416
|
+
def push attrib
|
417
|
+
attr.push attrib
|
418
|
+
end
|
419
|
+
|
420
|
+
def << thing
|
421
|
+
attr.each do |subattr|
|
422
|
+
subattr << thing # allows for recursive compound attributes
|
423
|
+
end
|
424
|
+
self
|
425
|
+
end
|
426
|
+
|
427
|
+
def to_s
|
428
|
+
attr.join ", "
|
376
429
|
end
|
377
430
|
end
|
378
431
|
|
data/test/test_graph.rb
CHANGED
@@ -39,7 +39,6 @@ class TestGraph < MiniTest::Unit::TestCase
|
|
39
39
|
def test_colorscheme
|
40
40
|
assert_attribute "colorscheme", "blah", graph.colorscheme("blah")
|
41
41
|
assert_empty graph.node_attribs
|
42
|
-
refute_respond_to graph, :c1
|
43
42
|
end
|
44
43
|
|
45
44
|
def test_colorscheme_n
|
@@ -63,7 +62,8 @@ class TestGraph < MiniTest::Unit::TestCase
|
|
63
62
|
|
64
63
|
def test_font_size
|
65
64
|
# cheating... but I didn't want to write a more complex assertion
|
66
|
-
assert_attribute "fontname", '"blah"
|
65
|
+
assert_attribute "fontname", '"blah"', graph.font("blah")
|
66
|
+
assert_attribute "fontsize", '12', graph.fontsize(12)
|
67
67
|
end
|
68
68
|
|
69
69
|
def test_digraph
|
@@ -278,7 +278,8 @@ class TestAttribute < MiniTest::Unit::TestCase
|
|
278
278
|
|
279
279
|
c = a + b
|
280
280
|
|
281
|
-
assert_equal
|
281
|
+
assert_equal [a, b], c.attr
|
282
|
+
assert_equal "blah, halb", c.to_s
|
282
283
|
end
|
283
284
|
|
284
285
|
def test_to_s
|
@@ -286,6 +287,19 @@ class TestAttribute < MiniTest::Unit::TestCase
|
|
286
287
|
end
|
287
288
|
end
|
288
289
|
|
290
|
+
class TestCompoundAttribute < TestAttribute
|
291
|
+
def test_lshift
|
292
|
+
b = Graph::Attribute.new "halb"
|
293
|
+
n = Graph::Node.new nil, nil
|
294
|
+
|
295
|
+
c = a + b
|
296
|
+
|
297
|
+
c << n # paint the node with a + b
|
298
|
+
|
299
|
+
assert_equal [a, b], n.attributes
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
289
303
|
class TestNode < MiniTest::Unit::TestCase
|
290
304
|
attr_accessor :n
|
291
305
|
|
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: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 2.
|
10
|
+
version: 2.3.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-10-04 00:00:00 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
@@ -44,14 +44,13 @@ dependencies:
|
|
44
44
|
requirement: &id001 !ruby/object:Gem::Requirement
|
45
45
|
none: false
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - ~>
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
hash:
|
49
|
+
hash: 9
|
50
50
|
segments:
|
51
51
|
- 2
|
52
|
-
-
|
53
|
-
|
54
|
-
version: 2.4.0
|
52
|
+
- 5
|
53
|
+
version: "2.5"
|
55
54
|
type: :development
|
56
55
|
version_requirements: *id001
|
57
56
|
- !ruby/object:Gem::Dependency
|
@@ -62,11 +61,11 @@ dependencies:
|
|
62
61
|
requirements:
|
63
62
|
- - ~>
|
64
63
|
- !ruby/object:Gem::Version
|
65
|
-
hash:
|
64
|
+
hash: 27
|
66
65
|
segments:
|
67
66
|
- 2
|
68
|
-
-
|
69
|
-
version: "2.
|
67
|
+
- 12
|
68
|
+
version: "2.12"
|
70
69
|
type: :development
|
71
70
|
version_requirements: *id002
|
72
71
|
description: |-
|
@@ -149,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
148
|
requirements: []
|
150
149
|
|
151
150
|
rubyforge_project: seattlerb
|
152
|
-
rubygems_version: 1.8.
|
151
|
+
rubygems_version: 1.8.10
|
153
152
|
signing_key:
|
154
153
|
specification_version: 3
|
155
154
|
summary: Graph is a type of hash that outputs in graphviz's dot format
|
metadata.gz.sig
CHANGED
Binary file
|