gems_deplevel 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d4b7f4086dad12b6185922496da34ef75aec713e6cc2c0faaf9ec74bb3457929
4
+ data.tar.gz: cb0155935157cec20a44011c952b07b318c9bbb619bcc9dbd238516c47ef2495
5
+ SHA512:
6
+ metadata.gz: 4db2f35732d03288d12a7b524b9a8ba319dd685292dfae65f512eeb8b095b7dc8c067dd887e3625381e94087bdebfceba0693c6f2ad391e6e9d5fa33fceea383
7
+ data.tar.gz: 8d023123a7ebcfe1ed58a809f1fd786adfcf3212fc01f44a21e22d2e9bc306f68e1d8d1680fef3d400708207c7abd5e656fb1646e88c52ef5c06b2e038b0b796
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ Ëm��t�P�cQ!۟=�@�}[{XJR����J�����db���>ř!H�UB�������G9,��R��!|��4$'.R���j>�w���x�r��&�;N#�]p�Υ|�����G7�9�S�����3�)&:.o>�,xȜ����.�˳e8S��W
2
+ "Ij�ô0Z����5X��'�E,%o@���D��
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: gems_deplevel.rb
4
+
5
+ require 'gems'
6
+ require 'dir-to-xml'
7
+
8
+
9
+ class GemDepLevelErr < Exception
10
+ end
11
+
12
+ class GemsDepLevel
13
+
14
+ def initialize(dir=nil, debug: false)
15
+ @dir, @debug = dir, debug
16
+ end
17
+
18
+ # Returns the dependency depth level for a gem's transitive dependencies
19
+ #
20
+ # * gemlist contains the a list gem names, each containing the
21
+ # gem dependencies
22
+ #
23
+ # - use gem_deps() to make the gemlist or scan_gems() if using a
24
+ # local gem_src directory
25
+ #
26
+ #
27
+ def dep_level(name, gemlist=gem_deps(name))
28
+
29
+ raise GemDepLevelErr, 'supply the name of a gem' unless name
30
+
31
+ gemtally = Hash.new(0)
32
+ scan(name, gemlist, gemtally)
33
+
34
+ gemtally.sort_by(&:last).group_by(&:last).map do |key, value|
35
+ [key, value.map(&:first)]
36
+ end.to_h
37
+
38
+ end
39
+
40
+ # returns a Hash object of transitive gem dependencies for a specific gem
41
+ # [{gem name => [gem1, gem2, ...]}, {gem1 => [gem1.1, gem1.2]}]
42
+ #
43
+ def gem_deps(name)
44
+
45
+ return unless name
46
+
47
+ puts 'name: ' + name.inspect if @debug
48
+ gem = Gems.info name
49
+
50
+ a = gem['dependencies']['runtime'].map {|x| x['name']}
51
+ h = {name => a}
52
+
53
+ a.inject(h) do |r,x|
54
+ puts 'r.keys: ' + r.keys.inspect if @debug
55
+ r.keys.include?(x) ? r : r.merge!(gem_deps(x))
56
+ end
57
+
58
+ end
59
+
60
+
61
+ # Returns the dependencies for each gem as a Hash object
62
+ #
63
+ def scan_gems(dir=@dir)
64
+
65
+ raise GemDepLevelErr, 'please provde a directory path' unless dir
66
+
67
+ dtx = DirToXML.new dir
68
+ names = dtx.directories
69
+
70
+ gems = names.map do |name|
71
+
72
+ filename = "#{name}/#{name}.gemspec"
73
+ gemspec = File.join(dir, filename)
74
+
75
+ if File.exists? gemspec then
76
+
77
+ s = File.read gemspec
78
+ dependencies = s.scan(/add_runtime_dependency\(['"]([^'"]+)/)
79
+ .map(&:first)
80
+
81
+ [name, dependencies]
82
+
83
+ else
84
+ nil
85
+ end
86
+
87
+ end
88
+
89
+ return Hash[gems.compact]
90
+
91
+ end
92
+
93
+ private
94
+
95
+ def scan(gem, h, gemtally=Hash.new(0), level=0)
96
+
97
+ if @debug then
98
+ puts 'inside scan'
99
+ puts 'gem; ' + gem.inspect
100
+ puts 'h: ' + h.inspect
101
+ end
102
+
103
+ return unless h.include? gem
104
+
105
+ gemtally[gem] = level if gemtally[gem] <= level
106
+
107
+ h[gem].each do |x|
108
+ scan(x, h, gemtally, level+1)
109
+ end
110
+
111
+ end
112
+
113
+
114
+ end
115
+
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gems_deplevel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMzA2MTYyMzUxWhcN
15
+ MjMwMzA2MTYyMzUxWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC2sg7p
17
+ nkOs+rixKmf5Re9IflscLimiyDWKD8yrj3S8Mc2KlcBTYCSR0+9+V4UXnIUsine1
18
+ AYhvdWLVvz5lE1KqaM1aDotGnov4cOf3lFLGRc21ViCjBxkPoN+iXW7HH1rBOZ6m
19
+ +Qk5pZ6jyxjTVVt6TV+cIF+Jxo17y7x0LzujftrvkgkdFBUIRP4Whsx82NYqWH5s
20
+ 3qBcPCobILJdwatVHIWo7sU4JRPBNVO3CX46ma1n7pV54Pcv52qwWSc5jVuTwgjV
21
+ 4sQ5bg7Nr22n40e19jGLj7Xw0KOoD8nALx+/CkQPZH5U/7VqVUB8L/lw7JJYVQWj
22
+ okGJ0um4VBfDoSuPapA6EDlq1a8S23VTwTY5ZqzMTnKsjn8aHY/xXu+t2jvJiaQ9
23
+ dy0SKDwogFEAi+nwkh9ECsMWdp2J3s+Jk1OglLbg8tEj3gqhzssMusDBU5U/0W5E
24
+ LpYoHk+KqBy58E0Qrry2cbg/ku7bniHTm9dzFVC/IUA13t6+HJ8rChw54OUCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUtROr4WLE
26
+ xMJ/0jFa5kKOkn/DEH8wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEArS/55C7knU/2bIyc93Mvd7pcrvL1DoRDy0wADFTC
29
+ j2fgXrJnUlJmaheRU+4oOkKHaaJ+WMyViV/09ligEnRw8r9sEy5YepF+L/fzFQHH
30
+ 6h28ehv/Rmb/2VL5nir3udzvWjTJ6zHkFDtX1L4wSgRva7LYB+lUYGwoiQmFnfa9
31
+ VKHTCxjsAn3tu6DBVGsmRMqWLhi+h26gZgbRfUMjc1hJbpNwoqJ94E2+Aj7PsaG5
32
+ 5De7inMm6e0IeNrSsVDzfKtRaXW39PZ4ALPh57jLdbyK+capSKrM5kUOkFLEI4Sy
33
+ UT5Poaslfg2cbKTVjIEYMPB/un0zDnBik3kkPdduWidsB3uYjetMg+ENVBhlRdK3
34
+ gpXaVgfSrhCsziv9lfVcb48W/fL6FgVD4kks0LKk4XUZqNR40XZRv/TvqaquiFhy
35
+ nKgF6Ie+ZheTbRhj8524w8BLfATiXyCpfv1kx/P0D+2ObCPBSUe8BEK6P2oyAAYm
36
+ ztLaT0+fn8qN1xLaamkdpzfU
37
+ -----END CERTIFICATE-----
38
+ date: 2022-03-06 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: gems
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.2'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.2.0
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.2'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.2.0
60
+ - !ruby/object:Gem::Dependency
61
+ name: dir-to-xml
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.2'
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 1.2.2
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.2'
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 1.2.2
80
+ description:
81
+ email: digital.robertson@gmail.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/gems_deplevel.rb
87
+ homepage: https://github.com/jrobertson/gems_deplevel
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubygems_version: 3.2.22
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Returns the dependency depth level for a gem's transitive dependencies
110
+ test_files: []
metadata.gz.sig ADDED
Binary file