Module: ActiveAdmin::ViewHelpers::BreadcrumbHelper

Included in:
ActiveAdmin::ViewHelpers
Defined in:
lib/active_admin/view_helpers/breadcrumb_helper.rb

Constant Summary collapse

GUID_REGEX =
'(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12})'
ID_REGEX =
'\d+|[a-f0-9]{24}|' + GUID_REGEX

Instance Method Summary collapse

Instance Method Details

Returns an array of links to use in a breadcrumb



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/active_admin/view_helpers/breadcrumb_helper.rb', line 6

def breadcrumb_links(path = request.path)
  setting = active_admin_config.breadcrumb

  if setting.blank?
    nil
  elsif setting.is_a?(Proc)
    instance_exec(controller, &setting)
  else
    default_breadcrumb_links(path)
  end
end


44
45
46
47
48
# File 'lib/active_admin/view_helpers/breadcrumb_helper.rb', line 44

def breadcrumb_part_config(parent_part)
  config = active_admin_config
  parent = config.belongs_to_config.try :target
  parent && parent.resource_name.route_key == parent_part ? parent :  config
end


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/active_admin/view_helpers/breadcrumb_helper.rb', line 21

def default_breadcrumb_links(path)
  # remove leading "/" and split up the URL
  # and remove last since it's used as the page title
  parts = path.split('/').select(&:present?)[0..-2]

  parts.each_with_index.map do |part, index|
    config = breadcrumb_part_config(parts[index-1]) if part.match?(/\A(#{ID_REGEX})\z/)

    # 1. try using `display_name` if we can locate a DB object
    # 2. try using the model name translation
    # 3. default to calling `titlecase` on the URL fragment
    name = config && display_name(config.find_resource part)
    name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase

    # Don't create a link if the resource's show action is disabled
    if !config || config.defined_actions.include?(:show)
      link_to name, '/' + parts[0..index].join('/')
    else
      name
    end
  end
end