app/controllers/active_admin/resource_controller.rb
# frozen_string_literal: true require "active_admin/collection_decorator" module ActiveAdmin # All Resources Controller inherits from this controller. # It implements actions and helpers for resources. class ResourceController < BaseController respond_to :html, :xml, :json respond_to :csv, only: :index before_action :restrict_download_format_access!, only: [:index, :show] include ResourceController::ActionBuilder include ResourceController::Decorators include ResourceController::DataAccess include ResourceController::PolymorphicRoutes include ResourceController::Scoping include ResourceController::Streaming extend ResourceClassMethods def self.active_admin_config=(config) if @active_admin_config = config defaults resource_class: config.resource_class, route_prefix: config.route_prefix, instance_name: config.resource_name.singular end end # Inherited Resources uses the `self.inherited(base)` hook to add # in `self.resource_class`. To override it, we need to install # our resource_class method each time we're inherited from. def self.inherited(base) super(base) base.override_resource_class_methods! end private def page_presenter case params[:action].to_sym when :index active_admin_config.get_page_presenter(params[:action], params[:as]) when :new, :edit, :create, :update active_admin_config.get_page_presenter(:form) end || super end def default_page_presenter case params[:action].to_sym when :index PagePresenter.new(as: :table) when :new, :edit PagePresenter.new end || super end def page_title if page_presenter[:title] case params[:action].to_sym when :index case page_presenter[:title] when Symbol, Proc instance_exec(&page_presenter[:title]) else page_presenter[:title] end else helpers.render_or_call_method_or_proc_on(resource, page_presenter[:title]) end else default_page_title end end def default_page_title case params[:action].to_sym when :index active_admin_config.plural_resource_label when :show helpers.display_name(resource) when :new, :edit, :create, :update normalized_action = params[:action] normalized_action = 'new' if normalized_action == 'create' normalized_action = 'edit' if normalized_action == 'update' ActiveAdmin::Localizers.resource(active_admin_config).t("#{normalized_action}_model") else I18n.t("active_admin.#{params[:action]}", default: params[:action].to_s.titleize) end end def restrict_download_format_access! unless request.format.html? presenter = active_admin_config.get_page_presenter(:index) download_formats = (presenter || {}).fetch(:download_links, active_admin_config.namespace.download_links) unless build_download_formats(download_formats).include?(request.format.symbol) raise ActiveAdmin::AccessDenied.new(current_active_admin_user, :index) end end end end end