Class: GemsDepLevel
- Inherits:
-
Object
- Object
- GemsDepLevel
- Defined in:
- lib/gems_deplevel.rb
Instance Method Summary collapse
-
#dep_level(name, gemlist = gem_deps(name)) ⇒ Object
Returns the dependency depth level for a gem’s transitive dependencies.
-
#gem_deps(name) ⇒ Object
returns a Hash object of transitive gem dependencies for a specific gem [name => [gem1, gem2, …], => [gem1.1, gem1.2]].
-
#initialize(dir = nil, debug: false) ⇒ GemsDepLevel
constructor
A new instance of GemsDepLevel.
-
#scan_gems(dir = @dir) ⇒ Object
Returns the dependencies for each gem as a Hash object.
Constructor Details
#initialize(dir = nil, debug: false) ⇒ GemsDepLevel
Returns a new instance of GemsDepLevel.
14 15 16 |
# File 'lib/gems_deplevel.rb', line 14 def initialize(dir=nil, debug: false) @dir, @debug = dir, debug end |
Instance Method Details
#dep_level(name, gemlist = gem_deps(name)) ⇒ Object
Returns the dependency depth level for a gem’s transitive dependencies
-
gemlist contains the a list gem names, each containing the gem dependencies
- use gem_deps() to make the gemlist or scan_gems() if using a local gem_src directory
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/gems_deplevel.rb', line 27 def dep_level(name, gemlist=gem_deps(name)) raise GemDepLevelErr, 'supply the name of a gem' unless name gemtally = Hash.new(0) scan(name, gemlist, gemtally) gemtally.sort_by(&:last).group_by(&:last).map do |key, value| [key, value.map(&:first)] end.to_h end |
#gem_deps(name) ⇒ Object
returns a Hash object of transitive gem dependencies for a specific gem
- name => [gem1, gem2, …], => [gem1.1, gem1.2]
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/gems_deplevel.rb', line 43 def gem_deps(name) return unless name puts 'name: ' + name.inspect if @debug gem = Gems.info name a = gem['dependencies']['runtime'].map {|x| x['name']} h = {name => a} a.inject(h) do |r,x| puts 'r.keys: ' + r.keys.inspect if @debug r.keys.include?(x) ? r : r.merge!(gem_deps(x)) end end |
#scan_gems(dir = @dir) ⇒ Object
Returns the dependencies for each gem as a Hash object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/gems_deplevel.rb', line 63 def scan_gems(dir=@dir) raise GemDepLevelErr, 'please provde a directory path' unless dir dtx = DirToXML.new dir names = dtx.directories gems = names.map do |name| gemspec = File.join(dir, "#{name}/#{name}.gemspec") if File.exist? gemspec then s = File.read gemspec dependencies = s.scan(/add_runtime_dependency\(['"]([^'"]+)/) .map(&:first) [name, dependencies] else nil end end return Hash[gems.compact] end |