app/controllers/admin/manager_controller.rb in ab_admin-0.9.0 vs app/controllers/admin/manager_controller.rb in ab_admin-0.10.0

- old
+ new

@@ -1,37 +1,30 @@ class ::Admin::ManagerController < ::Admin::BaseController - include AbAdmin::Utils::EvalHelpers include AbAdmin::Controllers::Tree - prepend_before_action :manager - load_and_authorize_resource helper_method :manager, :admin_partial_name, :history_resource_path, :fetch_admin_template def custom_action custom_action = manager.custom_action_for(params[:custom_action], self) if custom_action.options[:method] && custom_action.options[:method] != request.method_symbol - raise ActionController::RoutingError.new("AbAdmin custom action for #{params[:custom_action]} not found") + raise ActionController::RoutingError.new("AbAdmin custom action #{custom_action.options[:method].to_s.upcase} #{params[:custom_action]} not allowed for #{request.method_symbol} method") end instance_exec(&custom_action.data) end - protected + private def button_scopes - manager.scopes.map{|scope| [scope.name, scope.options] } + manager.scopes end - def with_scopes(relation) - scopes_to_apply.inject(relation) { |result, scope| scope.apply(result, params) } + def batch_actions + manager.batch_actions end - def scopes_to_apply - manager.scopes.find_all{|scope| params[scope.name].present? } - end - def begin_of_association_chain parent end def parent @@ -78,25 +71,10 @@ def action_items for_resource = params[:id].present? && resource.persisted? manager.default_action_items_for(action_name.to_sym, for_resource) + manager.action_items_for(action_name.to_sym) end - def apply_batch_action(item, batch_action, *batch_params) - data = manager.batch_action_list.detect{|a| a.name == batch_action }.data - success = call_method_or_proc_on item, data, exec: false, attrs: batch_params - track_action!("batch_#{batch_action}", item) if settings[:history] - success - end - - def allow_batch_action?(batch_action) - manager.batch_action_list.detect { |a| a.name == batch_action } - end - - def batch_action_list - manager.batch_action_list - end - def custom_settings manager.custom_settings || {} end def export_options @@ -105,28 +83,31 @@ def manager @manager ||= begin manager_class_name = "AbAdmin#{resource_class.name}" manager_instance = manager_class_name.constantize.instance - unless manager_instance.allow_action?(action_name) - raise ActionController::RoutingError.new("AbAdmin action #{action_name} for #{resource_class.name} not found") - end + raise ActionController::RoutingError.new("AbAdmin action #{action_name} not found") unless manager_instance.allow_action?(action_name) manager_instance rescue NameError => e - if e.message.include?(manager_class_name) - raise ActionController::RoutingError.new("AbAdmin manager_model for #{resource_class.name} not found (#{e.message})") + if e.message.include?("uninitialized constant #{manager_class_name}") + raise ActionController::RoutingError.new("AbAdmin manager for #{resource_class.name} not found (#{e.message})") else raise end end end def resource_class @model ||= begin - params[:model_name].classify.constantize - rescue NameError => e - raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found (#{e.message})") + model_name = params[:model_name].classify + model_name.constantize + rescue NameError => e + if e.message.include?("uninitialized constant #{model_name}") + raise ActionController::RoutingError.new("AbAdmin model #{model_name} not found (#{e.message})") + else + raise + end end end def permitted_params attrs = Array(manager.permitted_params.is_a?(Proc) ? instance_exec(&manager.permitted_params) : manager.permitted_params) @@ -138,22 +119,11 @@ attrs = attrs + AbAdmin.default_permitted_params resource_params.permit(*attrs) end end - def preview_resource_path(item) - return unless manager.preview_path - return if manager.preview_path[:options][:if] && !call_method_or_proc_on(item, manager.preview_path[:options][:if]) - I18n.with_locale I18n.default_locale do - manager.preview_path[:value].is_a?(Proc) ? instance_exec(item, &manager.preview_path[:value]) : send(manager.preview_path[:value], item) - end - end - def admin_partial_name(builder) - builder.partial ||= begin - #if template_exists?(builder.partial_name, "admin/#{resource_collection_name}", true) - fetch_admin_template(builder.partial_name, true) - end + builder.partial ||= fetch_admin_template(builder.partial_name, true) end def fetch_admin_template(template_name, partial=false) if Dir[Rails.root.join("app/views/admin/#{resource_collection_name}/#{'_' if partial}#{template_name}.html.*")].present? "admin/#{resource_collection_name}/#{template_name}"