module Nanahoshi::Info
Public Class Methods
nodes_and_edges()
click to toggle source
# File lib/nanahoshi/info.rb, line 4 def nodes_and_edges graph = load_graph gem_names = graph.keys nodes = gem_names.map{|gn|{name: gn, type: [:start_leaf, :end_leaf]}} edges = [] graph.each do |gem_name, deps| source_index = gem_names.index(gem_name) unless deps.empty? nodes[source_index][:type].delete(:end_leaf) end dependence_edges = deps.map do |dep| target_index = gem_names.index(dep) nodes[target_index][:type].delete(:start_leaf) {source: source_index, target: target_index} end edges.concat(dependence_edges) end [nodes, edges] end
Private Class Methods
load_graph()
click to toggle source
# File lib/nanahoshi/info.rb, line 27 def load_graph lookup = Bundler.load.specs.to_hash lookup.each_with_object({}) do |(gemname, specs), hash| hash[gemname] = specs.map do |spec| spec.dependencies.select{|dependency|dependency.type == :runtime}.map(&:name) end.flatten.uniq end end