module Cbradeps
Public Class Methods
output_dot(root_path = nil, filename)
click to toggle source
# File lib/cobradeps.rb, line 38 def self.output_dot(root_path = nil, filename) path = File.expand_path(root_path) || File.expand_path(current_path) graph(path).output(:dot => "#{filename}.dot") end
output_graph(root_path = nil, filename)
click to toggle source
# File lib/cobradeps.rb, line 33 def self.output_graph(root_path = nil, filename) path = File.expand_path(root_path) || File.expand_path(current_path) graph(path).output(:png => "#{filename}.png") end
output_text(root_path = nil)
click to toggle source
# File lib/cobradeps.rb, line 8 def self.output_text(root_path = nil) path = File.expand_path(root_path) || File.expand_path(current_path) app = GemfileScraper.new(path) outputs "APP" outputs app.to_s outputs "\n\nDEPENDENCIES" cobra_deps = app.cobra_dependencies.to_a i = 0 while (i < cobra_deps.size) do dep = cobra_deps[i] outputs "\n#{dep[:options][:path]}" gem = GemfileScraper.new(dep[:options][:path]) outputs gem.to_s cobra_deps += gem.cobra_dependencies i+=1 end outputs "\n\n ALL PARTS" outputs cobra_deps.to_a end
Private Class Methods
current_path()
click to toggle source
# File lib/cobradeps.rb, line 43 def self.current_path `pwd`.chomp end
graph(path)
click to toggle source
# File lib/cobradeps.rb, line 49 def self.graph(path) g = GraphViz.new(:G, :type => :digraph, concentrate: true) gem_nodes = {} app = GemfileScraper.new(path) cobra_deps = app.cobra_dependencies.to_a around_g = g.add_graph("cluster0", label: app.name) start_g = around_g.add_graph("cluster1", { label: "", style: "invis", margin: "0,0" }) i = 0 cobra_deps.each do |dep| gem = GemfileScraper.new(dep[:options][:path]) gem_nodes[gem.name] = g.add_nodes(gem.name) outputs "Added #{gem.name} node" if dep[:options][:direct] app_node = start_g.add_nodes(app.name + i.to_s) i += 1 gem_nodes[app.name] = app_node app_node.set do |node| node.shape = "box" node.fixedsize = true; node.height = 0 node.margin = "0,0" node.label = "" node.style = "invis" end outputs "Added #{app.name} app" # if !has_edge?(g, app_node, gem_nodes[gem.name]) around_g.add_edges(app_node, gem_nodes[gem.name]) outputs "Added edge from #{app.name} to #{gem.name}" # end end end i = 0 while (i < cobra_deps.size) do dep = cobra_deps[i] gem = GemfileScraper.new(dep[:options][:path]) if !gem_nodes.has_key? gem.name gem_nodes[gem.name] = around_g.add_nodes(gem.name) outputs "Added #{gem.name} node" end gem_cobra_deps = gem.cobra_dependencies gem_cobra_deps.each do |nest_dep| nest_gem = GemfileScraper.new(nest_dep[:options][:path]) if !gem_nodes.has_key? nest_gem.name gem_nodes[nest_gem.name] = around_g.add_nodes(nest_gem.name) outputs "Added to #{nest_gem.name} node" end if !has_edge?(g, gem_nodes[gem.name], gem_nodes[nest_gem.name]) around_g.add_edges(gem_nodes[gem.name], gem_nodes[nest_gem.name]) outputs "Added edge from #{gem.name} to #{nest_gem.name}" end end cobra_deps += gem.cobra_dependencies i+=1 end g end
has_edge?(g, node1, node2)
click to toggle source
# File lib/cobradeps.rb, line 121 def self.has_edge?(g, node1, node2) g.each_edge do |edge| if edge.node_one == node1.id && edge.node_two == node2.id return true end end return false end
outputs(arg)
click to toggle source
# File lib/cobradeps.rb, line 115 def self.outputs(arg) puts arg end