Class: LcpRuby::Presenter::BreadcrumbBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/presenter/breadcrumb_builder.rb

Defined Under Namespace

Classes: Crumb

Constant Summary collapse

MAX_DEPTH =
5

Instance Method Summary collapse

Constructor Details

#initialize(view_group:, record:, action:, path_helper:, page: nil) ⇒ BreadcrumbBuilder

Returns a new instance of BreadcrumbBuilder.



14
15
16
17
18
19
20
# File 'lib/lcp_ruby/presenter/breadcrumb_builder.rb', line 14

def initialize(view_group:, record:, action:, path_helper:, page: nil)
  @view_group = view_group
  @record = record
  @action = action
  @path_helper = path_helper
  @page = page
end

Instance Method Details

#buildObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/lcp_ruby/presenter/breadcrumb_builder.rb', line 22

def build
  return [] if @view_group && !@view_group.breadcrumb_enabled?

  crumbs = []
  crumbs << home_crumb

  if @record && @view_group&.breadcrumb_relation
    root_model_def = LcpRuby.loader.model_definition(@view_group.model)
    parent_chain = parent_crumbs(@view_group, @record, 0, model_def: root_model_def)
    if self_referential_breadcrumb?(root_model_def)
      crumbs << current_list_crumb
      crumbs.concat(parent_chain)
    else
      crumbs.concat(parent_chain)
      crumbs << current_list_crumb
    end
  else
    crumbs << current_list_crumb
  end

  if @record&.persisted?
    crumbs << record_crumb
  end

  if %w[edit new].include?(@action)
    crumbs << action_crumb
  end

  crumbs.last.current = true if crumbs.any?
  crumbs
end