require "rails_erd/domain" require "rails_erd/domain" require "rails_erd" require "rails_erd/domain/attribute" require "rails_erd/domain/entity" require "rails_erd/domain/relationship" require "rails_erd/domain/specialization" # monkeypatch to fix strange people with edges which causes segfault in graphviz # https://github.com/voormedia/rails-erd/issues/70 module RailsERD class Domain class Relationship class << self private def association_identity(association) Set[association_owner(association), association_target(association)] end end end end end module RailsERD class Custom attr_accessor :classes, :reflection_keys #@class_name - Pass in the class name #@name of the file #@level - the depth you want to browse def initialize( class_name, file_name, level=nil ) @file_name = file_name @class_name = class_name @classes = [] @classes << class_name @level = level process generate end def generate puts "************************ classes length: #{@classes.length}" options = { :filename=>@file_name, :filetype=>"pdf", :attributes=>["foreign_keys", "primary_keys", "content"], :only=>@classes } begin byebug file = RailsERD::Diagram::Graphviz.create(options) rescue puts "---------------------------------Graph viz creation error" end end def process children_walk( @class_name.constantize.reflections, 0 ) end def children_walk( reflections, cur_level ) if @level == cur_level return end keys = reflections.keys for k in keys p "***processing: #{k}" ref = reflections[ k ] class_name = ref.klass.name.to_s p class_name if !@classes.include? class_name p "Adding #{class_name}" @classes << class_name begin model = class_name.constantize children_walk( model.reflections, cur_level + 1 ) rescue => e warn "Cannot retrieve model: #{class_name}" end end end end def check_model_validity(model) model.abstract_class? or model.table_exists? or raise "table #{model.table_name} does not exist" rescue => e warn "Ignoring invalid model #{model.name} (#{e.message})" end end end