graphvizml 0.6.3 → 0.7.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/graphvizml.rb +107 -103
- data.tar.gz.sig +0 -0
- metadata +47 -47
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7ff946ca6dcb3ec1f3acd62e8da4205acb9c91a3e9702b86bd3ed79ad6a19fb2
|
|
4
|
+
data.tar.gz: 6d252b72c6b334382dc460b62f7dd1e015d024ce8a7ad1311db03adb7758122b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: deebccfd290ebe9bfe5ce6d787a671bd2814ab50da49f139c00eb15231aa431692eaebcceee5611001cfe2a1b2318fb9fa69bd352b470668e3b3435305a989a5
|
|
7
|
+
data.tar.gz: 4ad9301354ec3da5c5adba3eaf80465338f92a6422a4d32e819fbb07158cd2252af4f95ef8c0ec4c1c4ae6813e304242d12488c60ffd966d2633642cc1f7ca0d
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/lib/graphvizml.rb
CHANGED
|
@@ -7,6 +7,7 @@ require 'domle'
|
|
|
7
7
|
require 'graphviz'
|
|
8
8
|
require 'line-tree'
|
|
9
9
|
require 'tempfile'
|
|
10
|
+
require 'rxfreader'
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
module RegGem
|
|
@@ -19,7 +20,7 @@ hkey_gems
|
|
|
19
20
|
require graphvizml
|
|
20
21
|
class GraphVizML
|
|
21
22
|
media_type svg
|
|
22
|
-
'
|
|
23
|
+
'
|
|
23
24
|
end
|
|
24
25
|
end
|
|
25
26
|
|
|
@@ -30,42 +31,42 @@ class GraphVizML
|
|
|
30
31
|
attr_reader :g
|
|
31
32
|
|
|
32
33
|
def initialize(obj=nil, debug: false, fill: 'transparent', stroke: '#000', text_color: '#000')
|
|
33
|
-
|
|
34
|
+
|
|
34
35
|
@debug = debug
|
|
35
36
|
@fill, @stroke, @text_color = fill, stroke, text_color
|
|
36
|
-
|
|
37
|
+
|
|
37
38
|
if obj then
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
|
|
40
|
+
|
|
40
41
|
xml = if obj.is_a? Rexle or obj.is_a? Rexle::Element
|
|
41
|
-
|
|
42
|
+
|
|
42
43
|
obj.xml
|
|
43
|
-
|
|
44
|
-
else
|
|
45
|
-
|
|
44
|
+
|
|
45
|
+
else
|
|
46
|
+
|
|
46
47
|
s = RXFHelper.read(obj).first
|
|
47
|
-
|
|
48
|
+
|
|
48
49
|
if s =~ /<\?graphvizml\b/ then
|
|
49
|
-
|
|
50
|
-
import_string s
|
|
51
|
-
|
|
50
|
+
|
|
51
|
+
import_string s
|
|
52
|
+
|
|
52
53
|
else
|
|
53
|
-
|
|
54
|
+
|
|
54
55
|
if @debug then
|
|
55
56
|
#File.write '/tmp/graphviz.xml', xml
|
|
56
|
-
puts('graphvizml xml: ' + s.inspect)
|
|
57
|
-
end
|
|
58
|
-
|
|
57
|
+
puts('graphvizml xml: ' + s.inspect)
|
|
58
|
+
end
|
|
59
|
+
|
|
59
60
|
s
|
|
60
|
-
|
|
61
|
+
|
|
61
62
|
end
|
|
62
|
-
|
|
63
|
+
|
|
63
64
|
end
|
|
64
|
-
|
|
65
|
+
|
|
65
66
|
@g = build_from_nodes Domle.new(xml)
|
|
66
|
-
|
|
67
|
+
|
|
67
68
|
end
|
|
68
|
-
|
|
69
|
+
|
|
69
70
|
@css = "
|
|
70
71
|
.node ellipse {stroke: #{stroke}; fill: #{fill}}
|
|
71
72
|
.node text {fill: #{text_color}}
|
|
@@ -74,81 +75,85 @@ class GraphVizML
|
|
|
74
75
|
"
|
|
75
76
|
|
|
76
77
|
end
|
|
77
|
-
|
|
78
|
+
|
|
78
79
|
def import(obj)
|
|
79
|
-
|
|
80
|
-
s =
|
|
80
|
+
|
|
81
|
+
s = RXFReader.read(obj).first
|
|
81
82
|
xml = import_string s
|
|
83
|
+
puts('graphvizml/import xml: ' + xml.inspect).debug if @debug
|
|
82
84
|
@g = build_from_nodes Domle.new(xml)
|
|
83
85
|
self
|
|
84
|
-
|
|
86
|
+
|
|
85
87
|
end
|
|
86
88
|
|
|
87
|
-
|
|
89
|
+
|
|
88
90
|
def to_dot()
|
|
91
|
+
|
|
89
92
|
@g.to_dot
|
|
93
|
+
|
|
90
94
|
end
|
|
91
95
|
|
|
92
|
-
|
|
96
|
+
|
|
93
97
|
# returns an SVG blob
|
|
94
98
|
#
|
|
95
99
|
def to_svg()
|
|
96
100
|
f = Tempfile.new('graphvizml')
|
|
97
|
-
Graphviz::output(@g, format: 'svg', path: f.path)
|
|
101
|
+
#jr 26-01-2022 Graphviz::output(@g, format: 'svg', path: f.path)
|
|
102
|
+
Graphviz.output(@g, path: f.path, format: 'svg')
|
|
98
103
|
s = File.read f.path
|
|
99
104
|
#s.sub!('xmlns:xlink="http://www.w3.org/1999/xlink"','')
|
|
100
105
|
#s.sub!('xlink:','') # not yet implemented because of a local namespace issue
|
|
101
|
-
s.lines.insert(8, css_code()).join
|
|
106
|
+
s.lines.insert(8, css_code()).join
|
|
102
107
|
end
|
|
103
108
|
|
|
104
|
-
|
|
109
|
+
|
|
105
110
|
private
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
|
|
112
|
+
|
|
108
113
|
def build_from_nodes(doc)
|
|
109
114
|
|
|
110
115
|
puts 'inside build_from_nodes'.info if @debug
|
|
111
116
|
|
|
112
|
-
g = Graphviz::Graph.new format_summary_attributes(doc.root.attributes)
|
|
113
|
-
|
|
114
|
-
# add the nodes
|
|
117
|
+
g = Graphviz::Graph.new **format_summary_attributes(doc.root.attributes)
|
|
118
|
+
|
|
119
|
+
# add the nodes
|
|
115
120
|
|
|
116
121
|
nodes = doc.root.xpath('//node').inject({}) do |r,e|
|
|
117
|
-
|
|
122
|
+
|
|
118
123
|
r.merge fetch_node(e)
|
|
119
124
|
|
|
120
125
|
end
|
|
121
|
-
|
|
126
|
+
|
|
122
127
|
if @debug then
|
|
123
|
-
puts 'nodes: ' + nodes.inspect
|
|
128
|
+
puts 'nodes: ' + nodes.inspect
|
|
124
129
|
puts 'doc: ' + doc.root.xml.inspect
|
|
125
130
|
end
|
|
126
131
|
|
|
127
132
|
a = doc.root.element('style/text()').to_s.strip.split(/}/).map do |entry|
|
|
128
|
-
|
|
133
|
+
|
|
129
134
|
puts 'entry: ' + entry.inspect if @debug
|
|
130
135
|
|
|
131
136
|
raw_selector,raw_styles = entry.split(/{/,2)
|
|
132
137
|
|
|
133
|
-
h = raw_styles.strip.split(/;/).inject({}) do |r, x|
|
|
138
|
+
h = raw_styles.strip.split(/;/).inject({}) do |r, x|
|
|
134
139
|
k, v = x.split(/:/,2).map(&:strip)
|
|
135
140
|
r.merge(k.to_sym => v)
|
|
136
141
|
end
|
|
137
142
|
|
|
138
143
|
[raw_selector.split(/,\s*/).map(&:strip), h]
|
|
139
144
|
end
|
|
140
|
-
|
|
145
|
+
|
|
141
146
|
puts ' a: ' + a.inspect if @debug
|
|
142
|
-
|
|
147
|
+
|
|
143
148
|
|
|
144
149
|
edge_style = a.any? ? a.find {|x| x[0].grep(/edge/).any?}.last : []
|
|
145
150
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
# add the edges
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
# add the edges
|
|
149
154
|
|
|
150
155
|
id_1 = nodes.first[0]
|
|
151
|
-
nodes[id_1][-1] = g.add_node(nodes[id_1][0])
|
|
156
|
+
nodes[id_1][-1] = g.add_node(nodes[id_1][0])
|
|
152
157
|
|
|
153
158
|
|
|
154
159
|
doc.root.each_recursive do |node|
|
|
@@ -156,7 +161,7 @@ class GraphVizML
|
|
|
156
161
|
next unless node.name == 'node'
|
|
157
162
|
|
|
158
163
|
node.xpath('a/node | node').each do |child|
|
|
159
|
-
|
|
164
|
+
|
|
160
165
|
id1, id2 = node.object_id, child.object_id
|
|
161
166
|
|
|
162
167
|
label = child.attributes[:connection].to_s
|
|
@@ -167,128 +172,127 @@ class GraphVizML
|
|
|
167
172
|
|
|
168
173
|
conn = nodes[id1][-1].connections.last
|
|
169
174
|
conn.attributes[:label] = label
|
|
170
|
-
|
|
171
|
-
edge_style.each {|key,val| conn.attributes[key] = m(val) }
|
|
172
|
-
|
|
175
|
+
|
|
176
|
+
edge_style.each {|key,val| conn.attributes[key] = m(val) }
|
|
177
|
+
|
|
173
178
|
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
format_attributes nodes
|
|
177
|
-
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
format_attributes nodes
|
|
182
|
+
|
|
178
183
|
g
|
|
179
|
-
|
|
184
|
+
|
|
180
185
|
end
|
|
181
|
-
|
|
186
|
+
|
|
182
187
|
def css_code()
|
|
183
|
-
<<EOF
|
|
188
|
+
<<EOF
|
|
184
189
|
<defs>
|
|
185
190
|
<style type='text/css'><![CDATA[
|
|
186
191
|
#{@css}
|
|
187
192
|
]]></style>
|
|
188
|
-
</defs>
|
|
189
|
-
|
|
193
|
+
</defs>
|
|
194
|
+
|
|
190
195
|
EOF
|
|
191
|
-
end
|
|
192
|
-
|
|
196
|
+
end
|
|
197
|
+
|
|
193
198
|
def fetch_node(node)
|
|
194
199
|
|
|
195
200
|
puts 'inside fetch_node'.info if @debug
|
|
196
|
-
|
|
201
|
+
|
|
197
202
|
h = node.attributes
|
|
198
203
|
#puts 'h: ' + h.inspect
|
|
199
204
|
puts('graphvizml/fetch_node h: ' + h.inspect) if @debug
|
|
200
|
-
|
|
205
|
+
|
|
201
206
|
if node.parent.name == 'a' then
|
|
202
|
-
|
|
207
|
+
|
|
203
208
|
url = node.parent.attributes[:href]
|
|
204
209
|
h[:url] = url if url
|
|
205
|
-
|
|
206
|
-
end
|
|
210
|
+
|
|
211
|
+
end
|
|
207
212
|
|
|
208
213
|
id = h[:gid] || node.object_id
|
|
209
214
|
label = node.text('label')
|
|
210
|
-
|
|
215
|
+
|
|
211
216
|
# shape options: box, ellipse, record, diamond, circle, polygon, point
|
|
212
|
-
|
|
217
|
+
|
|
213
218
|
style = {}
|
|
214
219
|
|
|
215
220
|
style[:shape] = h[:shape] if h[:shape] and !h[:shape].empty?
|
|
216
221
|
style[:URL] = h[:url] if h[:url]
|
|
217
222
|
|
|
218
223
|
#puts "adding node id: %s label: %s" % [id, label]
|
|
219
|
-
|
|
220
|
-
# the nil is replaced by the Graphviz node object
|
|
224
|
+
|
|
225
|
+
# the nil is replaced by the Graphviz node object
|
|
221
226
|
{id => [label, node.style.merge(style), nil]}
|
|
222
|
-
|
|
227
|
+
|
|
223
228
|
end
|
|
224
|
-
|
|
229
|
+
|
|
225
230
|
def format_attributes(nodes)
|
|
226
|
-
|
|
231
|
+
|
|
227
232
|
nodes.each do |id, x|
|
|
228
233
|
|
|
229
234
|
_, attributes, obj = x
|
|
230
235
|
next unless obj
|
|
231
236
|
attributes.each {|key, val| obj.attributes[key] = m(val) }
|
|
232
|
-
|
|
233
|
-
end
|
|
237
|
+
|
|
238
|
+
end
|
|
234
239
|
|
|
235
240
|
end
|
|
236
|
-
|
|
241
|
+
|
|
237
242
|
def format_summary_attributes(h)
|
|
238
|
-
|
|
239
|
-
type = (h.has_key?(:type) ? h[:type].to_sym : :digraph)
|
|
243
|
+
|
|
244
|
+
type = (h.has_key?(:type) ? h[:type].to_sym : :digraph)
|
|
240
245
|
|
|
241
246
|
h[:type] = type.to_s
|
|
242
247
|
h[:rankdir] = h.has_key?(:direction) ? h[:direction].to_s.upcase : 'LR'
|
|
243
|
-
|
|
244
|
-
%i(recordx_type format_mask schema direction).each do |x|
|
|
248
|
+
|
|
249
|
+
%i(recordx_type format_mask schema direction).each do |x|
|
|
245
250
|
h.delete x; h.delete x.to_s
|
|
246
251
|
end
|
|
247
|
-
|
|
252
|
+
|
|
248
253
|
# remove any entries with an empty value
|
|
249
|
-
h.each {|key, value| h.delete key if value.empty?}
|
|
250
|
-
|
|
254
|
+
h.each {|key, value| h.delete key if value.empty?}
|
|
255
|
+
|
|
251
256
|
h
|
|
252
257
|
end
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
def import_string(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
s2 = s.slice(/<\?graphvizml\b[^>]*\?>/)
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def import_string(s)
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
s2 = s.slice!(/<\?graphvizml\b[^>]*\?>/)
|
|
260
264
|
|
|
261
265
|
if s2 then
|
|
262
|
-
|
|
266
|
+
|
|
263
267
|
attributes = %w(id fill stroke text_color).inject({}) do |r, keyword|
|
|
264
268
|
found = s2[/(?<=#{keyword}=['"])[^'"]+/]
|
|
265
269
|
found ? r.merge(keyword.to_sym => found) : r
|
|
266
270
|
end
|
|
267
|
-
|
|
271
|
+
|
|
268
272
|
fill, stroke, text_color = %i(fill stroke text_color).map do |x|
|
|
269
273
|
attributes[x] ? attributes[x] : method(x).call
|
|
270
274
|
end
|
|
271
|
-
|
|
275
|
+
|
|
272
276
|
@css = "
|
|
273
277
|
.node ellipse {stroke: #{stroke}; fill: #{fill}}
|
|
274
278
|
.node text {fill: #{text_color}}
|
|
275
279
|
.edge path {stroke: #{stroke}}
|
|
276
280
|
.edge polygon {stroke: #{stroke}; fill: #{stroke}}
|
|
277
|
-
"
|
|
278
|
-
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
xml = LineTree.new(s, root: 'nodes', debug:
|
|
282
|
-
|
|
281
|
+
"
|
|
282
|
+
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
xml = LineTree.new(s, root: 'nodes', debug: @debug).to_xml
|
|
286
|
+
|
|
283
287
|
end
|
|
284
|
-
|
|
288
|
+
|
|
285
289
|
# modify the value if it matches the following criteria
|
|
286
290
|
#
|
|
287
291
|
def m(s)
|
|
288
|
-
|
|
292
|
+
|
|
289
293
|
# is it a shorthand hexcode? e.g. #fff
|
|
290
294
|
s.gsub(/^#([\da-f]{3})$/)\
|
|
291
295
|
{ '#' + ($1).chars.inject([]) {|r,x| r << x + x}.join}
|
|
292
296
|
end
|
|
293
|
-
|
|
297
|
+
|
|
294
298
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: graphvizml
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- James Robertson
|
|
@@ -11,31 +11,31 @@ cert_chain:
|
|
|
11
11
|
- |
|
|
12
12
|
-----BEGIN CERTIFICATE-----
|
|
13
13
|
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMTI2MTk0ODM4WhcN
|
|
15
|
+
MjMwMTI2MTk0ODM4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDXvh01
|
|
17
|
+
vamU8KghEdMGyDHKZFFvDe0WS24O2Z9+aqxDnwBFqhYc7OrPtNltbBcOWSPU8sZ2
|
|
18
|
+
WnMohFCcyEFvbX0krCmHQuKp3EDtgV2jkwRRM4ZTdMPsxbl0ewt4OBGWBgRqpPva
|
|
19
|
+
QQj4nY+70eS2p4Z9NxtKJkjrTaScItrYC8So439THliv6fE/X1wmVthA87QRoLLv
|
|
20
|
+
Nn0ExY9cUkCRhpQ+BKgysDiShBkVeVMD5krTToeF375dhQjYumB6pfRcR3FwZtwA
|
|
21
|
+
21uslDaVbd2QQ+jvQ7UdvtkAYEtxdQd2sgXlVArLoQq8c7yYZY7OuQtXj71YMJBs
|
|
22
|
+
SyEW5mN3jNpkA34I8K6oxSCtktOpplNVN+qnqEDl0zn1x+ltC99Fw61iwZ0TUuNZ
|
|
23
|
+
iMT7KIkYzaxf2cI9KkPuy8QRBf8h+d1zhNj738isW9DncA8rVlRNbQAnj6zrkUPQ
|
|
24
|
+
3or24nFsBjLhxG55VtrgG0tYmMdtD4YYZc+AcgjS7PxMLp0xLPMduwq4ftUCAwEA
|
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUITb4eCGd
|
|
26
|
+
35h+35s7ViJVcpR86bYwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
|
27
27
|
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/
|
|
36
|
-
|
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEACtwXE0bRRrEC5NqayvsRvVTLJYs1mHMWBfsPXBFZ
|
|
29
|
+
auEcRhToEKNQfW1eQxYMyaMiLVphzoPTAKgM36SrCd6fbSS40djlX8tXlr9N7EIC
|
|
30
|
+
8cV4BiDWNTyNItJgsZpDSXvWmorO0sxFdS3bX+wGpIqjTucov3xCL29oipOTed78
|
|
31
|
+
CiGPYDYX2ddYBPv4DCnKRlmpbQPSEAv+Vr4MIXK2DIz/pNKhVkO60CkhQLfbmuIt
|
|
32
|
+
tHEHxLaJBrdFImPRVRDbCA7h+a5QyotAldi99hPBCdxS5CyAaFQkn5ScfyBbGOla
|
|
33
|
+
88GxnM8dyYQwA7jGKJzEVP4Oe2tIlC66Cuvt9aFJY5ILYAvn8yaL9Zz/jfvK/txT
|
|
34
|
+
g5jRbEphIM24ZKx4Ujg457ks1jQG6qQxzJOQk1dDKsKzY+75/npWJbZFPCdpEX1l
|
|
35
|
+
n5la83UsDTB94LHIHb/W8YdApT3vWP/4nxl+/aAPJPBgyN8mZ4Td0FFgbaPGbW4e
|
|
36
|
+
PxZXxv6QqQ7uOHhRsvNRkYj3
|
|
37
37
|
-----END CERTIFICATE-----
|
|
38
|
-
date:
|
|
38
|
+
date: 2022-02-23 00:00:00.000000000 Z
|
|
39
39
|
dependencies:
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: domle
|
|
@@ -43,62 +43,62 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '0.
|
|
46
|
+
version: '0.6'
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 0.
|
|
49
|
+
version: 0.6.0
|
|
50
50
|
type: :runtime
|
|
51
51
|
prerelease: false
|
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
53
53
|
requirements:
|
|
54
54
|
- - "~>"
|
|
55
55
|
- !ruby/object:Gem::Version
|
|
56
|
-
version: '0.
|
|
56
|
+
version: '0.6'
|
|
57
57
|
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 0.
|
|
59
|
+
version: 0.6.0
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
61
|
name: graphviz
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements:
|
|
64
|
-
- - ">="
|
|
65
|
-
- !ruby/object:Gem::Version
|
|
66
|
-
version: 1.1.0
|
|
67
64
|
- - "~>"
|
|
68
65
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '1.
|
|
66
|
+
version: '1.2'
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 1.2.1
|
|
70
70
|
type: :runtime
|
|
71
71
|
prerelease: false
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
|
74
|
-
- - ">="
|
|
75
|
-
- !ruby/object:Gem::Version
|
|
76
|
-
version: 1.1.0
|
|
77
74
|
- - "~>"
|
|
78
75
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: '1.
|
|
76
|
+
version: '1.2'
|
|
77
|
+
- - ">="
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: 1.2.1
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: line-tree
|
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
|
83
83
|
requirements:
|
|
84
|
-
- - ">="
|
|
85
|
-
- !ruby/object:Gem::Version
|
|
86
|
-
version: 0.8.0
|
|
87
84
|
- - "~>"
|
|
88
85
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0.
|
|
86
|
+
version: '0.9'
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 0.9.3
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0.8.0
|
|
97
94
|
- - "~>"
|
|
98
95
|
- !ruby/object:Gem::Version
|
|
99
|
-
version: '0.
|
|
96
|
+
version: '0.9'
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: 0.9.3
|
|
100
100
|
description:
|
|
101
|
-
email:
|
|
101
|
+
email: digital.robertson@gmail.com
|
|
102
102
|
executables: []
|
|
103
103
|
extensions: []
|
|
104
104
|
extra_rdoc_files: []
|
|
@@ -116,14 +116,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
116
116
|
requirements:
|
|
117
117
|
- - ">="
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version:
|
|
119
|
+
version: 3.0.2
|
|
120
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
122
|
- - ">="
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: '0'
|
|
125
125
|
requirements: []
|
|
126
|
-
rubygems_version: 3.
|
|
126
|
+
rubygems_version: 3.2.22
|
|
127
127
|
signing_key:
|
|
128
128
|
specification_version: 4
|
|
129
129
|
summary: Generates an SVG file from GraphViz using a GraphViz Markup Language file
|
metadata.gz.sig
CHANGED
|
Binary file
|