app/controllers/active_admin/base_controller.rb
# frozen_string_literal: true
module ActiveAdmin
# BaseController for ActiveAdmin.
# It implements ActiveAdmin controllers core features.
class BaseController < ::InheritedResources::Base
helper MethodOrProcHelper
helper LayoutHelper
helper FormHelper
helper BreadcrumbHelper
helper AutoLinkHelper
helper DisplayHelper
helper IndexHelper
layout "active_admin"
before_action :only_render_implemented_actions
before_action :authenticate_active_admin_user
class << self
# Ensure that this method is available for the DSL
public :actions
# Reference to the Resource object which initialized
# this controller
attr_accessor :active_admin_config
end
include BaseController::Authorization
include BaseController::Menu
private
# By default Rails will render un-implemented actions when the view exists. Because Active
# Admin allows you to not render any of the actions by using the #actions method, we need
# to check if they are implemented.
def only_render_implemented_actions
raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
end
# Calls the authentication method as defined in ActiveAdmin.authentication_method
def authenticate_active_admin_user
send(active_admin_namespace.authentication_method) if active_admin_namespace.authentication_method
end
def current_active_admin_user
send(active_admin_namespace.current_user_method) if active_admin_namespace.current_user_method
end
helper_method :current_active_admin_user
def current_active_admin_user?
!!current_active_admin_user
end
helper_method :current_active_admin_user?
def active_admin_config
self.class.active_admin_config
end
helper_method :active_admin_config
def active_admin_namespace
active_admin_config.namespace
end
helper_method :active_admin_namespace
ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
def active_admin_root
controller, action = active_admin_namespace.root_to.split "#"
{ controller: controller, action: action }
end
def page_presenter
active_admin_config.get_page_presenter(params[:action].to_sym) || default_page_presenter
end
helper_method :page_presenter
def default_page_presenter
PagePresenter.new
end
def page_title
if page_presenter[:title]
helpers.render_or_call_method_or_proc_on(self, page_presenter[:title])
else
default_page_title
end
end
helper_method :page_title
def default_page_title
active_admin_config.name
end
DEFAULT_DOWNLOAD_FORMATS = [:csv, :xml, :json]
def build_download_formats(download_links)
download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
if download_links.is_a?(Array) && !download_links.empty?
download_links
elsif download_links == false
[]
else
DEFAULT_DOWNLOAD_FORMATS
end
end
helper_method :build_download_formats
ActiveSupport.run_load_hooks(:active_admin_controller, self)
end
end