lib/railroad/controllers_diagram.rb in ddollar-railroad-0.7.3 vs lib/railroad/controllers_diagram.rb in ddollar-railroad-0.7.6

- old
+ new

@@ -28,20 +28,34 @@ # Load controller classes def load_classes begin disable_stdout - # ApplicationController must be loaded first - require "app/controllers/application_controller.rb" files = Dir.glob("app/controllers/**/*_controller.rb") - @options.exclude - files.each {|c| require c } + files.each {|file| get_controller_class(file) } enable_stdout rescue LoadError enable_stdout print_error "controller classes" raise end end # load_classes + + # This method is taken from the annotate models gem + # http://github.com/ctran/annotate_models/tree/master + # + # Retrieve the classes belonging to the controller names we're asked to process + # Check for namespaced controllers in subdirectories as well as controllers + # in subdirectories without namespacing. + def get_controller_class(file) + model = file.sub(/^.*app\/controllers\//, '').sub(/\.rb$/, '').camelize + parts = model.split('::') + begin + parts.inject(Object) {|klass, part| klass.const_get(part) } + rescue LoadError + Object.const_get(parts.last) + end + end # Proccess a controller class def process_class(current_class) STDERR.print "\tProcessing #{current_class}\n" if @options.verbose