class FlexibleAccessibility::RouteProvider

Public Class Methods

new(controller=nil) click to toggle source
# File lib/flexible_accessibility/route_provider.rb, line 5
def initialize(controller=nil)
  @path = "#{::Rails.root}/app/controllers/"
  @controllers = {}
  @current_controller = controller
end

Public Instance Methods

app_controllers() click to toggle source
# File lib/flexible_accessibility/route_provider.rb, line 11
def app_controllers
  app_controllers_recursive(@path)
end
app_routes() click to toggle source
# File lib/flexible_accessibility/route_provider.rb, line 15
def app_routes
  app_routes_as_hash if @@routes.empty?
  @@routes
end
non_verifiable_routes_list() click to toggle source
# File lib/flexible_accessibility/route_provider.rb, line 32
def non_verifiable_routes_list
  routes_table, list = @current_controller.instance_variable_get(:@_routes_table), []

  unless routes_table.nil?
    unless routes_table[:skip].nil?
      list = routes_table[:skip].first == 'all' ? available_routes_list : routes_table[:skip]
    end
  end

  list
end
verifiable_routes_list() click to toggle source
# File lib/flexible_accessibility/route_provider.rb, line 20
def verifiable_routes_list
  routes_table, list = @current_controller.instance_variable_get(:@_routes_table), []
    
  unless routes_table.nil?
    list = available_routes_list if routes_table[:all]
    list = routes_table[:only] unless routes_table[:only].nil?
    list = available_routes_list - routes_table[:except] unless routes_table[:except].nil?
  end

  list
end

Private Instance Methods

app_controllers_recursive(path) click to toggle source

All controller classes placed in :default scope

# File lib/flexible_accessibility/route_provider.rb, line 54
def app_controllers_recursive(path)
  invalid_entries = ['..', '.', 'concerns']
  (Dir.entries(path) - invalid_entries).each do |entry|
    if File.directory?(path + entry)
      app_controllers_recursive(path + entry + '/')
    else
      if File.extname(entry) == '.rb'
        parent_directory = File.dirname(path + entry).split(/\//).last
        container = parent_directory == 'controllers' ? 'default' : parent_directory
        @controllers[container.to_sym] ||= []
        @controllers[container.to_sym] << File.basename(path + entry, '.*') unless File.basename(path + entry, '.*') == 'application_controller'
      end
    end
  end
  @controllers
end
app_routes_as_hash() click to toggle source

Routes from routes.rb

# File lib/flexible_accessibility/route_provider.rb, line 72
def app_routes_as_hash
  Rails.application.routes.routes.each do |route|
    controller = route.defaults[:controller]
    unless controller.nil?
      key = controller.split('/').map { |p| p.camelize }.join('::')
      @@routes[key] ||= []
      @@routes[key] << route.defaults[:action]
    end
  end
end
available_routes_list() click to toggle source
# File lib/flexible_accessibility/route_provider.rb, line 46
def available_routes_list
  available_routes = self.app_routes[@current_controller.to_s.gsub(/Controller/, '')]
  # available_routes = self.action_methods if available_routes.nil?
  raise NoWayToDetectAvailableRoutesException if available_routes.nil?
  available_routes.to_set
end