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