class ActiveAdmin::Resource::Routes::RouteBuilder

Attributes

resource[R]

Public Class Methods

new(resource) click to toggle source
# File lib/active_admin/resource/routes.rb, line 47
def initialize(resource)
  @resource = resource
end

Public Instance Methods

batch_action_path(params, additional_params = {}) click to toggle source
# File lib/active_admin/resource/routes.rb, line 60
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!.to_h
  routes.public_send route_name, *route_collection_params(params), additional_params.merge(query)
end
collection_path(params, additional_params = {}) click to toggle source
# File lib/active_admin/resource/routes.rb, line 51
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), additional_params
end
instance_path(instance, additional_params = {}) click to toggle source

@return [String] the path to this resource collection page @param instance [ActiveRecord::Base] the instance we want the path of @example “/admin/posts/1”

# File lib/active_admin/resource/routes.rb, line 75
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), additional_params
end
member_action_path(action, instance, additional_params = {}) click to toggle source

@return [String] the path to the member action of this resource @param action [Symbol] @param instance [ActiveRecord::Base] the instance we want the path of @example “/admin/posts/1/edit”

# File lib/active_admin/resource/routes.rb, line 85
def member_action_path(action, instance, additional_params = {})
  path = resource.resources_configuration[:self][:route_instance_name]
  route_name = route_name(path, action: action)

  routes.public_send route_name, *route_instance_params(instance), additional_params
end

Private Instance Methods

belongs_to_config() click to toggle source
# File lib/active_admin/resource/routes.rb, line 136
def belongs_to_config
  resource.belongs_to_config
end
belongs_to_name() click to toggle source
# File lib/active_admin/resource/routes.rb, line 132
def belongs_to_name
  belongs_to_config.target.resource_name.singular
end
belongs_to_target_name() click to toggle source
# File lib/active_admin/resource/routes.rb, line 128
def belongs_to_target_name
  belongs_to_config.target_name
end
nested?() click to toggle source
# File lib/active_admin/resource/routes.rb, line 124
def nested?
  resource.belongs_to? && belongs_to_config.required?
end
route_collection_params(params) click to toggle source
# File lib/active_admin/resource/routes.rb, line 118
def route_collection_params(params)
  if nested?
    params[:"#{belongs_to_name}_id"]
  end
end
route_instance_params(instance) click to toggle source

@return params to pass to instance path

# File lib/active_admin/resource/routes.rb, line 110
def route_instance_params(instance)
  if nested?
    [instance.public_send(belongs_to_target_name).to_param, instance.to_param]
  else
    instance.to_param
  end
end
route_name(resource_path_name, options = {}) click to toggle source
# File lib/active_admin/resource/routes.rb, line 96
def route_name(resource_path_name, options = {})
  suffix = options[:suffix] || "path"
  route = []

  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"

  route.compact.join("_").to_sym # :admin_category_posts_path
end
routes() click to toggle source
# File lib/active_admin/resource/routes.rb, line 140
def routes
  Helpers::Routes
end