/usr/lib/ruby/1.9.1/ramaze/contrib/app_graph.rb is in libramaze-ruby1.9.1 2010.06.18-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | require 'set'
# require 'ramaze/contrib/app_graph'
#
# graph = AppGraph.new
# graph.generate
# graph.show
class AppGraph
def initialize
@out = Set.new
end
def generate
Ramaze::AppMap.to_hash.each do |location, app|
connect(location => app.name)
app.url_map.to_hash.each do |c_location, c_node|
connect(app.name => c_node)
connect(c_node.mapping => c_node)
c_node.update_template_mappings
c_node.view_templates.each do |wish, mapping|
mapping.each do |action_name, template|
action_path = File.join(c_node.mapping, action_name)
connect(c_node => action_path, action_path => template)
end
end
c_node.update_method_arities
c_node.method_arities.each do |method, arity|
action_path = File.join(c_node.mapping, method.to_s)
connect(action_path => "#{c_node}##{method}[#{arity}]", c_node => action_path)
end
end
end
end
def connect(hash)
hash.each do |from, to|
@out << (" %p -> %p;" % [from.to_s, to.to_s])
end
end
def write_dot
File.open('graph.dot', 'w+') do |dot|
dot.puts 'digraph appmap {'
dot.puts(*@out)
dot.puts '}'
end
end
def show
write_dot
options = {
'rankdir' => 'LR',
'splines' => 'true',
'overlap' => 'false',
}
args = options.map{|k,v| "-G#{k}=#{v}" }
system("dot -O -Tpng #{args.join(' ')} graph.dot")
system('feh graph.dot.png')
end
end
|