lib/active_admin/resource/routes.rb in activeadmin-1.0.0.pre4 vs lib/active_admin/resource/routes.rb in activeadmin-1.0.0.pre5

- old
+ new

@@ -2,30 +2,38 @@ class Resource module Routes # @param params [Hash] of params: { study_id: 3 } # @return [String] the path to this resource collection page # @example "/admin/posts" - def route_collection_path(params = {}) - RouteBuilder.new(self).collection_path(params) + def route_collection_path(params = {}, additional_params = {}) + route_builder.collection_path(params, additional_params) end + def route_batch_action_path(params = {}, additional_params = {}) + route_builder.batch_action_path(params, additional_params) + end + # @param resource [ActiveRecord::Base] the instance we want the path of # @return [String] the path to this resource collection page # @example "/admin/posts/1" - def route_instance_path(resource) - RouteBuilder.new(self).instance_path(resource) + def route_instance_path(resource, additional_params = {}) + route_builder.instance_path(resource, additional_params) end - def route_edit_instance_path(resource) - RouteBuilder.new(self).edit_instance_path(resource) + def route_edit_instance_path(resource, additional_params = {}) + route_builder.edit_instance_path(resource, additional_params) end # Returns the routes prefix for this config def route_prefix namespace.module_name.try(:underscore) end + def route_builder + @route_builder ||= RouteBuilder.new(self) + end + def route_uncountable? config = resources_configuration[:self] config[:route_collection_name] == config[:route_instance_name] end @@ -35,46 +43,59 @@ class RouteBuilder def initialize(resource) @resource = resource end - def collection_path(params) + def collection_path(params, additional_params = {}) route_name = route_name( resource.resources_configuration[:self][:route_collection_name], suffix: (resource.route_uncountable? ? "index_path" : "path") ) - routes.public_send route_name, *route_collection_params(params) + routes.public_send route_name, *route_collection_params(params), additional_params end + def batch_action_path(params, additional_params = {}) + route_name = route_name( + resource.resources_configuration[:self][:route_collection_name], + action: :batch_action, + suffix: (resource.route_uncountable? ? "index_path" : "path") + ) + + query = params.slice(:q, :scope) + query = query.permit! if query.respond_to? :permit! + query = query.to_h if Rails::VERSION::MAJOR >= 5 + routes.public_send route_name, *route_collection_params(params), additional_params.merge(query) + end + # @return [String] the path to this resource collection page # @param instance [ActiveRecord::Base] the instance we want the path of # @example "/admin/posts/1" - def instance_path(instance) + def instance_path(instance, additional_params = {}) route_name = route_name(resource.resources_configuration[:self][:route_instance_name]) - routes.public_send route_name, *route_instance_params(instance) + routes.public_send route_name, *route_instance_params(instance), additional_params end # @return [String] the path to the edit page of this resource # @param instance [ActiveRecord::Base] the instance we want the path of # @example "/admin/posts/1/edit" - def edit_instance_path(instance) + def edit_instance_path(instance, additional_params = {}) path = resource.resources_configuration[:self][:route_instance_name] route_name = route_name(path, action: :edit) - routes.public_send route_name, *route_instance_params(instance) + routes.public_send route_name, *route_instance_params(instance), additional_params end private attr_reader :resource def route_name(resource_path_name, options = {}) suffix = options[:suffix] || "path" route = [] - route << options[:action] # "edit" or "new" + route << options[:action] # "batch_action", "edit" or "new" route << resource.route_prefix # "admin" route << belongs_to_name if nested? # "category" route << resource_path_name # "posts" or "post" route << suffix # "path" or "index path"