Class: ControllersDiagram

Inherits:
AppDiagram show all
Defined in:
lib/railroady/controllers_diagram.rb

Overview

RailRoady controllers diagram

Constant Summary collapse

APP_CONTROLLER =

as of Rails 2.3 the file is no longer application.rb but instead application_controller.rb

File.exist?('app/controllers/application.rb') ? 'app/controllers/application.rb' : 'app/controllers/application_controller.rb'

Instance Method Summary collapse

Methods inherited from AppDiagram

#engines, #print, #process

Constructor Details

#initialize(options = OptionsStruct.new) ⇒ ControllersDiagram

Returns a new instance of ControllersDiagram.



9
10
11
12
13
# File 'lib/railroady/controllers_diagram.rb', line 9

def initialize(options = OptionsStruct.new)
  # options.exclude.map! {|e| "app/controllers/" + e}
  super options
  @graph.diagram_type = 'Controllers'
end

Instance Method Details

#engine_filesObject



40
41
42
# File 'lib/railroady/controllers_diagram.rb', line 40

def engine_files
  engines.collect { |engine| Dir.glob("#{engine.root}/app/controllers/**/*_controller.rb") }.flatten
end

#extract_class_name(filename) ⇒ Object



44
45
46
# File 'lib/railroady/controllers_diagram.rb', line 44

def extract_class_name(filename)
  filename.match(%r{.*/controllers/(.*).rb$})[1].camelize
end

#generateObject

Process controller files



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/railroady/controllers_diagram.rb', line 16

def generate
  $stderr.print "Generating controllers diagram\n" if @options.verbose
  files = get_files
  # only add APP_CONTROLLER if it isn't already included from the glob above
  files << APP_CONTROLLER unless files.include? APP_CONTROLLER
  files.each do |f|
    class_name = extract_class_name(f)
    # ApplicationController's file is 'application.rb' in Rails < 2.3
    class_name += 'Controller' if class_name == 'Application'
    begin
      process_class class_name.constantize
    rescue Exception
      $stderr.print "Warning: exception #{$ERROR_INFO} raised while trying to load controller class #{f}"
    end
  end
end

#get_files(prefix = '') ⇒ Object



33
34
35
36
37
38
# File 'lib/railroady/controllers_diagram.rb', line 33

def get_files(prefix = '')
  files = !@options.specify.empty? ? Dir.glob(@options.specify) : Dir.glob(prefix << 'app/controllers/**/*_controller.rb')
  files += engine_files if @options.engine_controllers
  files -= Dir.glob(@options.exclude)
  files
end