depviz 0.4.0 → 0.5.3

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.
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