#
# Modified by EmmanuelOga.blogspot.com, converted to a task
# Original in http://www.hackdiary.com/archives/000093.html
#
# Requirements: dot (http://www.graphviz.org/)
#
# Usage: Drop in lib/tasks of your rails app. rake doc:reflex
# See reflections.png in doc
#
namespace :doc do
desc "Graph model reflections"
task(:reflex => :environment) do
filename= "#{RAILS_ROOT}/doc/reflections.dot"
File.open(filename, "w+") do |file|
file << "digraph x {\n"
Dir.glob("#{RAILS_ROOT}/app/models/*rb") do |f|
f.match(/\/([a-z_]+).rb/)
classname = $1.camelize
klass = Kernel.const_get classname
if klass.superclass == ActiveRecord::Base
file << classname << "\n"
klass.reflect_on_all_associations.each do |a|
file << classname << " -> " << a.name.to_s.camelize.singularize
file << " [label=#{a.macro.to_s}]\n"
end
end
end
file << "}"
end
system("dot -Tpng -O #{filename}")
end
end