depviz 0.4.0 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/depviz.rb +137 -63
  4. data.tar.gz.sig +0 -0
  5. metadata +43 -38
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05ada6d7a48c5f347acc4eab8947406b53d1b01966809b6fedb1ba7a7367c573
4
- data.tar.gz: 8d4bc6609bd75a80b5f57f2f734b76d5f28a503b045947e43c08799375fc88cf
3
+ metadata.gz: 0bea5e848933306a1774c6d5359f9129249c1c1eabae2e17a2272e25deba7014
4
+ data.tar.gz: e6a5bb5267bf93e7c38532538b4c98d3dbe437a3a17f6b1146ad682fae40f6af
5
5
  SHA512:
6
- metadata.gz: 6dc83fc3c3743fd1fb3c91023a574da6c49a7c29114c47717d2d5f1bab50c5c5f3034d45882d93b951167e06d5598ea302a051eaa986f648885905acb10b8081
7
- data.tar.gz: d457c0dc75540fb146b5403c34df33ff38bc0a4de1d9dfb2dc16fbb86513dc93a8c692be4973718a34295954c70165ec9a9df70621a11cde0ccb8c37a45a04f6
6
+ metadata.gz: 6682223bb805da84b4d4e639bdbb0cebce966a1f9b46f7b27395fa40aeab5e18536e5101aead00919a765aad58af19de6e060bf44091b1ca70ad266b943851eb
7
+ data.tar.gz: 6d2ae657451b3523ff329e3af5f653027da64d14d1924fa278576326e5af7abd0ff844ee56bc9775f81eb3edc845a957e4ede37bdae70c2767406a01d1dee5f3
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/depviz.rb CHANGED
@@ -8,41 +8,82 @@ require 'xml_to_sliml'
8
8
  require 'dependency_builder'
9
9
 
10
10
 
11
- class DepViz
12
-
11
+ module RegGem
12
+
13
+ def self.register()
14
+ '
15
+ hkey_gems
16
+ doctype
17
+ depviz
18
+ require depviz
19
+ class DepViz
20
+ media_type svg
21
+ '
22
+ end
23
+ end
24
+
25
+ class DepViz < PxGraphViz
26
+ using ColouredText
27
+
13
28
  class Item
14
-
15
- def initialize(s, root: nil, name: name, debug: false)
29
+
30
+ def initialize(s, root: nil, name: nil, debug: false)
16
31
  @s, @root, @name, @debug = s, root, name, debug
17
32
  end
18
-
33
+
19
34
  def dependencies()
20
-
35
+
21
36
  if @debug then
22
37
  puts 'inside DepViz::Item::dependencies'
23
38
  puts '@s: ' + @s.inspect
24
39
  puts '@root: ' + @root.inspect
25
40
  end
26
-
41
+
27
42
  a = LineTree.new(@s).to_doc.root.xpath('//' + @name)
28
43
  puts 'dep: a: ' + a.inspect if @debug
29
-
44
+
45
+ enclose = ->(a) do
46
+ a.length > 1 ? [a.first] << enclose.call(a[1..-1]) : a
47
+ end
48
+
30
49
  a2 = a.map do |x|
31
50
  puts ' dependencies x: ' + x.inspect if @debug
32
- x.backtrack.to_s.split('/')[1..-1]
51
+ enclose.call x.backtrack.to_s.split('/')[1..-1]
33
52
  end
53
+
34
54
  puts 'a2: ' + a2.inspect if @debug
35
-
36
- s = a2.map {|x| x.map.with_index {|y,i| ' ' * i + y }.join("\n")}\
37
- .join("\n")
55
+
56
+ # group the items in order to merge branches with the same parent
57
+ a3 = a2.group_by(&:first)
58
+ a4 = a3.map {|x| [x.first] + x.last.map(&:last)}
59
+
60
+ treeize = ->(obj, indent=-2) do
61
+
62
+ if obj.is_a? Array then
63
+
64
+ r = obj.map {|x| treeize.call(x, indent+1)}.join("\n")
65
+ puts 'r: ' + r.inspect if @debug
66
+ r
67
+
68
+ else
69
+
70
+ ' ' * indent + obj
71
+
72
+ end
73
+ end
74
+
75
+ s = treeize.call(a4)
76
+
38
77
  puts 'child s: ' + s.inspect if @debug
39
78
 
40
79
  dv3 = DepViz.new()
41
80
  dv3.read s
42
81
  dv3
43
-
82
+
44
83
  end
45
-
84
+
85
+ # returns a DepViz document
86
+ #
46
87
  def reverse_dependencies()
47
88
 
48
89
  a = LineTree.new(@s, root: @root).to_doc.root.xpath('//' + @name)
@@ -50,100 +91,133 @@ class DepViz
50
91
  s = a.select {|x| x.has_elements? }\
51
92
  .map{|x| XmlToSliml.new(x).to_s }.join("\n")
52
93
 
53
- return if s.empty?
54
-
94
+ return DepViz.new if s.empty?
95
+
55
96
  dv3 = DepViz.new(root: nil)
56
97
  dv3.read s
57
98
  dv3
58
-
59
- end
60
-
61
- end
62
99
 
63
- def initialize(s='', root: 'platform', style: default_stylesheet(), debug: false)
64
-
100
+ end
101
+
102
+ end
103
+
104
+ def initialize(s='', fields: %w(label shape), delimiter: ' # ',
105
+ root: 'platform', style: nil,
106
+ debug: false, fill: '#ccffcc', stroke: '#999999',
107
+ text_color: '#330055')
108
+
65
109
  @style, @root, @debug = style, root, debug
66
110
  @header = "
67
111
  <?polyrex schema='items[type]/item[label]' delimiter =' # '?>
68
112
  type: digraph
69
113
 
70
114
  "
71
-
72
- build(s)
73
-
115
+ if s.length > 0 then
116
+
117
+ if s =~ /<?depviz / then
118
+
119
+ raw_dv = s.clone
120
+ s2 = raw_dv.slice!(/<\?depviz [^>]+\?>/)
121
+
122
+ # attributes being sought => root fields delimiter id
123
+ attributes = Shellwords::shellwords(s).map {|x| key,
124
+ value = x.split(/=/, 2); [key.to_sym, value]}.to_h
125
+
126
+ h = {
127
+ fields: fields.join(', '),
128
+ delimiter: delimiter
129
+ }.merge attributes
130
+
131
+ s = if h[:root] then
132
+ "\n\n" + h[:root] + "\n" +
133
+ raw_dv.strip.lines.map {|line| ' ' + line}.join
134
+ else
135
+ raw_dv
136
+ end
137
+
138
+ delimiter = h[:delimiter]
139
+ fields = h[:fields].split(/ *, */)
140
+
141
+ end
142
+
143
+ @s = tree = DependencyBuilder.new(s).to_s
144
+ s3 = @root ? (@root + "\n" + tree.lines.map {|x| ' ' + x}.join) : tree
145
+ @pxg = super(@header + s3, style: @style)
146
+
147
+ end
148
+
74
149
 
75
150
  end
76
-
151
+
152
+ def count()
153
+ return 0 unless @s
154
+ child_nodes.length
155
+ end
156
+
77
157
  def item(name)
78
-
158
+
79
159
  puts 'inside DepViz::item for ' + name.inspect if @debug
80
160
  puts '_@s : ' + @s.inspect if @debug
81
161
  Item.new @s, root: @root, name: name, debug: @debug
82
-
162
+
163
+ end
164
+
165
+ def nodes()
166
+
167
+ child_nodes.map {|x| x.name}.uniq
168
+
83
169
  end
84
-
170
+
85
171
  def read(s)
86
-
172
+
87
173
  @s = s
88
174
  s2 = @root ? @root + "\n" + s.lines.map {|x| ' ' + x}.join : s
89
175
  @pxg = PxGraphViz.new(@header + s2, style: @style)
90
-
176
+
177
+ end
178
+
179
+ def to_doc()
180
+ Rexle.new(LineTree.new(@s, root: @root).to_xml).root.elements.first
91
181
  end
92
182
 
93
183
  def to_s()
94
184
  @s
95
185
  end
96
-
97
- def to_svg()
98
- @pxg.to_svg
99
- end
100
186
 
101
187
  def to_xml()
102
- LineTree.new(@s, root: @root).to_xml
103
- end
104
-
105
- def build(s)
106
-
107
-
108
- return if s.empty?
109
-
110
- tree = DependencyBuilder.new(s).to_s
111
-
112
- s3 = @root ? (@root + "\n" + tree.lines.map {|x| ' ' + x}.join) : tree
113
-
114
- @pxg = PxGraphViz.new(@header + s3, style: @style)
115
-
116
- tree
188
+ to_doc.xml
117
189
  end
118
-
119
- alias import build
120
190
 
121
191
  private
122
192
 
193
+ def child_nodes()
194
+ to_doc.root.xpath('//*')
195
+ end
196
+
123
197
  def default_stylesheet()
124
198
 
125
199
  <<STYLE
126
- node {
127
- color: #ddaa66;
200
+ node {
201
+ color: #ddaa66;
128
202
  fillcolor: #447722;
129
- fontcolor: #ffeecc;
203
+ fontcolor: #ffeecc;
130
204
  fontname: 'Trebuchet MS';
131
- fontsize: 10;
205
+ fontsize: 10;
132
206
  margin: 0.1;
133
- penwidth: 1.3;
207
+ penwidth: 1.3;
134
208
  style: filled;
135
209
  }
136
-
210
+
137
211
  a node {
138
- color: #0011ee;
212
+ color: #0011ee;
139
213
  }
140
214
 
141
215
  edge {
142
216
  arrowsize: 0.9;
143
- color: #666;
144
- fontcolor: #444444;
145
- fontname: Verdana;
146
- fontsize: 8;
217
+ color: #666;
218
+ fontcolor: #444444;
219
+ fontname: Verdana;
220
+ fontsize: 8;
147
221
  dir: forward;
148
222
  weight: 1;
149
223
  }
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: depviz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,27 +10,32 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwMTIxMTkyMzE2WhcN
15
- MTkwMTIxMTkyMzE2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQ3L67
17
- 8183BAMBswfY/06QuC63URRc8KHhoCfFC+3DE5h+bSycpUnu4lJ44QvFi1fycMmm
18
- 2HchCK0cLDX9ZxOqSO4YJWmh99TmA8nvqIDfe0hFx5Zcrn/b6SdKaUOxv6rWpvPw
19
- OfF3YjaHkeAvgar0xYvagUKESSKLr0Pbc/a7gJKaVZkHJFbnoyEguLYut6OpEEPP
20
- M78+Mtai/tFbVRwhDmid2BHZS57+4kTXFuA4UqePNVyXt8mrtic1vgNKbsQ0nSbJ
21
- t9QgEaqEAGSCkFye6b+dx8WVgq0MAchgQ2tvQhifzqRqtmEOhzf0785yKxNEHsDt
22
- F49kONjTsDQXtJd5AgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFGsQrpJ6RZLNIpwQeKMZLs8ZbFFaMCYGA1UdEQQfMB2BG2dlbW1h
24
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
- ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBAGT7n8qvDZb8tAeB600O
26
- a054HpBNHLJ/HxbMyv+gE2n7yDg3D4sR2X6ekQVW8Rg6emZAhDWa+dREHzL2j+dp
27
- hU13ewBbz3Oh2+M7+AsLWlp6lB1CwJ/HBaC7ePq2ijbDd8OpJaTRCDh/ICH6vkfm
28
- otS5scbDgYhQ2MmW2beylEznx9C+GhixFVcxWIDikknpEUvoOYoJalM0a8x5I7JG
29
- R/eJT/8JSL1Sz0ywBXzMSh8mBjYP5EkovU82TyiYbg0kJ7PSNIM2vb0x/VAO9LCY
30
- TCqBEF2WnZz6KeKywr1qQSkgenmZJAIRJf6Yc2GlE/o9rTHz+kWZGg9ZvB3AU6qZ
31
- 2QY=
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjExMjA5MjAzNDIzWhcN
15
+ MjIxMjA5MjAzNDIzWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDfmSNE
17
+ ueVR4Rw/+iOZCBFm8C2VKKRPEpuJotEYC64fLdssnfOx8ItCMadp0ou9+q/RAzMB
18
+ OjNsrE9l2IS0n9YkOfeMLqhjLRfa9OhTl62n595gETOfI5bXyTmqiYz+mJG4QZrf
19
+ PzARfL2zF589xNqRyHzPdRLZxLLXPyRI795mqVmB0bYWibrSBb0rmKmVvpWd8SvA
20
+ t99RS9eGZE2fw06ngNk7/wUbvpwql8/p6EEXHDOZswfkCJw46qhPrAn1d0VM1i9K
21
+ kNabJbiRzh9WzL/qtqYck2hAdTxqsMN/jJBGJ18n4MLlZCbb6/+doy1N/PDR0C3u
22
+ XMK8Xsp5dX2+b3SP4mp9uw0RaE74zZ+anJdZ8JUCf3TBcBfX7Q2QJHqclb9OqVoq
23
+ TqxCsbZOgUuQc0eozOXC8Z518OBqJ+a5S+uyQl2Ecnqd2I20IzXF7q6a2XP2IyMM
24
+ S8Vui76C+WgXkRi95haT7955vQRJf4EY6Q7Jgf1CTABAYrjhVF/it6tEjJECAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUKYwVgC2R
26
+ 3zCOc27gpnSm5WkG/ucwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAS2Rq49RGwtcxjN9jto0LK5Pi/9F/T8fOaA6mS+Jm
29
+ TpIOGZppcqy/c9S7+duS0boopB0wy6WKgcrBFl7sMzvhY8HsC+1IvfK/OrEnGf5E
30
+ RKb+gj1LHMLNDDDjmR49hxr4HC5q0xdQjNROKecJK/9pd26FEzh83h91/y4eTDHB
31
+ R+CoV+XxQQZsaM7ob0/XXo6CLNVfexXZjaVmLb/hte8h2TsjB8ACyBE5aOPHlTqk
32
+ Q2N93GgIEx7mTTkmp0GbDx3+C5CCYTAaDzl37blfWJor24FhhKVZwSeIb0BEJDmZ
33
+ 4FZeY1kID07JzDljwH+svLG4pYTOxSj0EVmiKKvVNKmHr4vDxovt/MJvRfEcTKic
34
+ zTKnpkkAKBz5bx1IPHZNy3lDcizHKyyM9NpqnhahDLay2bvPziCTFZ4TSUTY1+uT
35
+ OtP+/rSpQ79ezyeNwN9qKx23SWrNBvMkeNyMBMDdoNL+vA/sRwmiKuaWJuqIVaay
36
+ B7KTOXvQC2+5guaFLzsIiU9w
32
37
  -----END CERTIFICATE-----
33
- date: 2018-10-15 00:00:00.000000000 Z
38
+ date: 2021-12-09 00:00:00.000000000 Z
34
39
  dependencies:
35
40
  - !ruby/object:Gem::Dependency
36
41
  name: pxgraphviz
@@ -38,60 +43,60 @@ dependencies:
38
43
  requirements:
39
44
  - - "~>"
40
45
  - !ruby/object:Gem::Version
41
- version: '0.4'
46
+ version: '0.5'
42
47
  - - ">="
43
48
  - !ruby/object:Gem::Version
44
- version: 0.4.3
49
+ version: 0.5.3
45
50
  type: :runtime
46
51
  prerelease: false
47
52
  version_requirements: !ruby/object:Gem::Requirement
48
53
  requirements:
49
54
  - - "~>"
50
55
  - !ruby/object:Gem::Version
51
- version: '0.4'
56
+ version: '0.5'
52
57
  - - ">="
53
58
  - !ruby/object:Gem::Version
54
- version: 0.4.3
59
+ version: 0.5.3
55
60
  - !ruby/object:Gem::Dependency
56
61
  name: dependency_builder
57
62
  requirement: !ruby/object:Gem::Requirement
58
63
  requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.1'
62
64
  - - ">="
63
65
  - !ruby/object:Gem::Version
64
66
  version: 0.1.0
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.1'
65
70
  type: :runtime
66
71
  prerelease: false
67
72
  version_requirements: !ruby/object:Gem::Requirement
68
73
  requirements:
69
- - - "~>"
70
- - !ruby/object:Gem::Version
71
- version: '0.1'
72
74
  - - ">="
73
75
  - !ruby/object:Gem::Version
74
76
  version: 0.1.0
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.1'
75
80
  - !ruby/object:Gem::Dependency
76
81
  name: xml_to_sliml
77
82
  requirement: !ruby/object:Gem::Requirement
78
83
  requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.1'
82
84
  - - ">="
83
85
  - !ruby/object:Gem::Version
84
86
  version: 0.1.0
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
85
90
  type: :runtime
86
91
  prerelease: false
87
92
  version_requirements: !ruby/object:Gem::Requirement
88
93
  requirements:
89
- - - "~>"
90
- - !ruby/object:Gem::Version
91
- version: '0.1'
92
94
  - - ">="
93
95
  - !ruby/object:Gem::Version
94
96
  version: 0.1.0
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '0.1'
95
100
  description:
96
101
  email: james@jamesrobertson.eu
97
102
  executables: []
@@ -119,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
124
  version: '0'
120
125
  requirements: []
121
126
  rubyforge_project:
122
- rubygems_version: 2.7.6
127
+ rubygems_version: 2.7.10
123
128
  signing_key:
124
129
  specification_version: 4
125
130
  summary: Generates a complete dependency tree from disparate dependencies to an SVG
metadata.gz.sig CHANGED
Binary file