graphvizml 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78dc36faf679576f5f913a3135a1247b6bbcfeb2
4
- data.tar.gz: 356e751c7b8dc79f8dc609b586fb49d0c25bce82
3
+ metadata.gz: de0694551027289ed8fa1585ad6b6c623ec452ba
4
+ data.tar.gz: 126a11754c78559bf196baab8c64df3f4f893981
5
5
  SHA512:
6
- metadata.gz: 6ccbb933bfa3271231bca47d52a3a9c8ce5b0a7dec25783dbda8a85938df88463929dd1e901262f3099057c12f32bc3b202a38379cf22a707a4dc38bf4af3e7d
7
- data.tar.gz: 491c0d9fdf2d41518f8254e3e57f5b3757f33537bda9ebaa3bab3d7b40f1498a8fc9bae244d1c24c1854480f3100b8c8ea0aa8d6b846956d507ec159017e3fb5
6
+ metadata.gz: 583cc6f8a779814a1388b734439b799342661490abd92472de500b9e1154eb11553ff71996640f106be09f73e4051ba6789b6469344d1a93a6676d6e460c33e0
7
+ data.tar.gz: 74f5895b91a83eecfbda1e3b0da57c3fca2a76fe67e135c32d3175c01504aeca370432f3b1508c072d6eacbebed4a05f2e41c64d34e8ac619e412fdfb5ebd184
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/graphvizml.rb CHANGED
@@ -14,34 +14,24 @@ class GraphVizML
14
14
 
15
15
  def initialize(obj)
16
16
 
17
- @doc = if obj.is_a? String then
17
+ xml = if obj.is_a? String then
18
18
 
19
- Domle.new(File.read @filename=obj)
19
+ File.read filename=obj
20
20
 
21
- elsif obj.is_a? Domle
21
+ elsif obj.is_a? Rexle or obj.is_a? Rexle::Element
22
22
 
23
- @filename = 'gvml.xml'
24
- obj
23
+ obj.xml
25
24
 
26
- end
25
+ end
27
26
 
28
- h = @doc.root.attributes
29
-
30
- @type = (h.has_key?(:type) ? h[:type].to_sym : :digraph)
27
+ doc = Domle.new(xml)
31
28
 
32
- h[:type] = @type.to_s
33
- h[:rankdir] = h.has_key?(:direction) ? h[:direction].to_s.upcase : 'LR'
34
-
35
- %i(recordx_type format_mask schema direction).each do |x|
36
- h.delete x; h.delete x.to_s
29
+ # check if the root node is gvml or nodes
30
+ @g = if doc.root.name == 'gvml' then
31
+ build_from_gvml doc
32
+ elsif doc.root.name == 'nodes'
33
+ build_from_nodes doc
37
34
  end
38
-
39
- # remove any entries with an empty value
40
- h.each {|key, value| h.delete key if value.empty?}
41
-
42
- @g = Graphviz::Graph.new h
43
-
44
- build()
45
35
 
46
36
  end
47
37
 
@@ -71,42 +61,19 @@ class GraphVizML
71
61
 
72
62
  private
73
63
 
74
- def build
64
+ def build_from_gvml(doc)
65
+
66
+ g = Graphviz::Graph.new format_summary_attributes(doc.root.attributes)
75
67
 
76
- e_nodes = @doc.root.element 'nodes'
77
- e_edges = @doc.root.element 'edges'
68
+ e_nodes = doc.root.element 'nodes'
69
+ e_edges = doc.root.element 'edges'
78
70
 
79
71
 
80
72
  # add the nodes
81
73
 
82
74
  nodes = e_nodes.root.xpath('records/a | records/node').inject({}) do |r,e|
83
75
 
84
- node = if e.name == 'a' then
85
-
86
- url = e.attributes[:href]
87
- child = e.element 'node'
88
- child.attributes[:url] = url
89
-
90
- child
91
- else
92
- e
93
- end
94
-
95
- h = node.attributes
96
-
97
- id = h[:gid]
98
- label = node.text('label')
99
-
100
- # shape options: box, ellipse, record, diamond, circle, polygon, point
101
-
102
- style = {}
103
- style[:shape] = h[:shape] || 'box'
104
- style[:URL] = h[:url] if h[:url]
105
-
106
- #puts "adding node id: %s label: %s" % [id, label]
107
-
108
- # the nil is replaced by the Graphviz node object
109
- r.merge(id => [label, node.style.merge(style), nil])
76
+ r.merge fetch_node(e)
110
77
 
111
78
  end
112
79
 
@@ -114,7 +81,7 @@ class GraphVizML
114
81
  # add the edges
115
82
 
116
83
  id_1 = e_edges.root.element('records/edge/records/node/attribute::gid').to_s
117
- nodes[id_1][-1] = @g.add_node(nodes[id_1][0])
84
+ nodes[id_1][-1] = g.add_node(nodes[id_1][0])
118
85
 
119
86
  e_edges.root.xpath('records/edge').each do |edge|
120
87
 
@@ -131,14 +98,112 @@ class GraphVizML
131
98
 
132
99
  end
133
100
 
101
+ format_attributes nodes
102
+
103
+ return g
104
+ end
105
+
106
+ def build_from_nodes(doc)
107
+
108
+
109
+ g = Graphviz::Graph.new format_summary_attributes(doc.root.attributes)
110
+
111
+
112
+ # add the nodes
113
+
114
+ nodes = doc.root.xpath('//a | //node').inject({}) do |r,e|
115
+
116
+ r.merge fetch_node(e)
117
+
118
+ end
119
+
120
+ # add the edges
121
+
122
+ id_1 = nodes.first[0]
123
+ nodes[id_1][-1] = g.add_node(nodes[id_1][0])
124
+
125
+
126
+ doc.root.each_recursive do |node|
127
+
128
+ node.xpath('node').each do |child|
129
+
130
+ id1, id2 = node.object_id, child.object_id
131
+
132
+ label = child.attributes[:connection].to_s
133
+ #puts "adding edge id1: %s id2: %s label: %s" % [id1, id2, label]
134
+ nodes[id2][-1] ||= nodes[id1].last.add_node(nodes[id2][0])
135
+ attributes = child.style.merge({label: label})
136
+
137
+ conn = nodes[id1][-1].connections.last
138
+ conn.attributes[:label] = label
139
+ child.style.each {|key,val| conn.attributes[key] = m(val) }
140
+
141
+ end
142
+ end
143
+
144
+ format_attributes nodes
145
+
146
+ g
147
+
148
+ end
149
+
150
+ def fetch_node(e)
151
+
152
+ node = if e.name == 'a' then
153
+
154
+ url = e.attributes[:href]
155
+ child = e.element 'node'
156
+ child.attributes[:url] = url
157
+
158
+ child
159
+ else
160
+ e
161
+ end
162
+
163
+ h = node.attributes
164
+
165
+ id = h[:gid] || node.object_id
166
+ label = node.text('label')
167
+
168
+ # shape options: box, ellipse, record, diamond, circle, polygon, point
169
+
170
+ style = {}
171
+ style[:shape] = h[:shape] || 'box'
172
+ style[:URL] = h[:url] if h[:url]
173
+
174
+ #puts "adding node id: %s label: %s" % [id, label]
175
+
176
+ # the nil is replaced by the Graphviz node object
177
+ {id => [label, node.style.merge(style), nil]}
178
+
179
+ end
180
+
181
+ def format_attributes(nodes)
182
+
134
183
  nodes.each do |id, x|
135
184
 
136
185
  _, attributes, obj = x
137
186
  attributes.each {|key, val| obj.attributes[key] = m(val) }
138
187
 
139
- end
188
+ end
189
+
190
+ end
191
+
192
+ def format_summary_attributes(h)
193
+
194
+ type = (h.has_key?(:type) ? h[:type].to_sym : :digraph)
140
195
 
141
- :build
196
+ h[:type] = type.to_s
197
+ h[:rankdir] = h.has_key?(:direction) ? h[:direction].to_s.upcase : 'LR'
198
+
199
+ %i(recordx_type format_mask schema direction).each do |x|
200
+ h.delete x; h.delete x.to_s
201
+ end
202
+
203
+ # remove any entries with an empty value
204
+ h.each {|key, value| h.delete key if value.empty?}
205
+
206
+ h
142
207
  end
143
208
 
144
209
  # modify the value if it matches the following criteria
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.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  0fBBWVqwHyWs77T9gCuDZmQrw2NmfyhNWhBw0iljBXo7WLDNB3x0nP6mYTzk47O8
32
32
  sL5FGYJNgQqFlw==
33
33
  -----END CERTIFICATE-----
34
- date: 2017-09-09 00:00:00.000000000 Z
34
+ date: 2017-09-10 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: domle
metadata.gz.sig CHANGED
Binary file