Class: RouteGuard::Rules::UnusedRoutes

Inherits:
Base
  • Object
show all
Defined in:
lib/route_guard/rules/unused_routes.rb

Instance Attribute Summary

Attributes inherited from Base

#options

Instance Method Summary collapse

Methods inherited from Base

#expand_path, #initialize, #path_shadows?, #split_segments, #verb_matches?

Constructor Details

This class inherits a constructor from RouteGuard::Rules::Base

Instance Method Details

#analyze(routes, report) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/route_guard/rules/unused_routes.rb', line 9

def analyze(routes, report)
  issues = []
  return issues unless defined?(Rails)

  routes.each do |route|
    next if route.controller.nil? || route.action.nil?
    next if route.internal?

    controller_class_name = camelize_controller(route.controller)

    begin
      klass = if controller_class_name.respond_to?(:safe_constantize)
                controller_class_name.safe_constantize
              else
                Object.const_get(controller_class_name) rescue nil
              end

      if klass
        if klass.respond_to?(:action_methods)
          unless klass.action_methods.include?(route.action.to_s)
            issues << Models::Issue.new(
              rule_name: :unused_routes,
              severity: :warning,
              message: "Unused Route: Action '#{route.action}' is missing in #{controller_class_name}.",
              route: route
            )
          end
        end
      else
        issues << Models::Issue.new(
          rule_name: :unused_routes,
          severity: :warning,
          message: "Unused Route: Controller #{controller_class_name} does not exist.",
          route: route
        )
      end
    rescue NameError, LoadError
      issues << Models::Issue.new(
        rule_name: :unused_routes,
        severity: :warning,
        message: "Unused Route: Controller #{controller_class_name} could not be loaded.",
        route: route
      )
    end
  end

  issues
end