lib/railroad/models_diagram.rb in railroad-0.3.4 vs lib/railroad/models_diagram.rb in railroad-0.4.0
- old
+ new
@@ -8,20 +8,21 @@
# RailRoad models diagram
class ModelsDiagram < AppDiagram
def initialize(options)
+ options.exclude.map! {|e| e = "app/models/" + e}
super options
@graph.diagram_type = 'Models'
# Processed habtm associations
@habtm = []
end
# Process model files
def generate
STDERR.print "Generating models diagram\n" if @options.verbose
- files = Dir.glob("app/models/**/*.rb")
+ files = Dir.glob("app/models/**/*.rb") - @options.exclude
files.each do |f|
process_class extract_class_name(f).constantize
end
end
@@ -29,11 +30,12 @@
# Load model classes
def load_classes
begin
disable_stdout
- Dir.glob("app/models/**/*.rb") {|m| require m }
+ files = Dir.glob("app/models/**/*.rb") - @options.exclude
+ files.each {|m| require m }
enable_stdout
rescue LoadError
enable_stdout
print_error "model classes"
raise
@@ -62,11 +64,19 @@
end
end
@graph.add_node [node_type, current_class.name, node_attribs]
generated = true
# Process class associations
- current_class.reflect_on_all_associations.each do |a|
+ associations = current_class.reflect_on_all_associations
+ if @options.inheritance && ! @options.transitive
+ superclass_associations = current_class.superclass.reflect_on_all_associations
+
+ associations = associations.select{|a| ! superclass_associations.include? a}
+ # This doesn't works!
+ # associations -= current_class.superclass.reflect_on_all_associations
+ end
+ associations.each do |a|
process_association current_class.name, a
end
elsif @options.all && (current_class.is_a? Class)
# Not ActiveRecord::Base model
node_type = @options.brief ? 'class-brief' : 'class'
@@ -78,10 +88,11 @@
# Only consider meaningful inheritance relations for generated classes
if @options.inheritance && generated &&
(current_class.superclass != ActiveRecord::Base) &&
(current_class.superclass != Object)
- @graph.add_edge ['is-a', current_class.name, current_class.superclass.name]
+ # REVERSE INHERITANCE (CHECK)
+ @graph.add_edge ['is-a', current_class.superclass.name, current_class.name]
end
end # process_class
# Process a model association