Class: LcpRuby::Metadata::MenuDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/metadata/menu_definition.rb

Constant Summary collapse

KNOWN_TOP_LEVEL_KEYS =

Every recognized top-level key in menu.yml. Mirrors ‘lib/lcp_ruby/schemas/menu.json` (`additionalProperties: false`). `validate!` rejects anything else so a typo (`top_men:`, `side_menu:`) fails fast at boot instead of silently dropping the whole menu — the same footgun MenuItem.reject_unknown_keys! guards against at the item level.

%w[top_menu sidebar_menu responsive].freeze

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(top_menu: nil, sidebar_menu: nil, raw_hash: nil, responsive: nil) ⇒ MenuDefinition

Returns a new instance of MenuDefinition.



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 23

def initialize(top_menu: nil, sidebar_menu: nil, raw_hash: nil, responsive: nil)
  @top_menu = top_menu
  @sidebar_menu = sidebar_menu
  @raw_hash = raw_hash
  # ResponsivePolicy.new(nil) synthesizes framework defaults so
  # consumers never branch on presence.
  @responsive = ResponsivePolicy.new(responsive)

  validate!
  log_auto_inject_sidebar_toggle
end

Class Attribute Details

.auto_inject_loggedObject

Returns the value of attribute auto_inject_logged.



20
21
22
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 20

def auto_inject_logged
  @auto_inject_logged
end

Instance Attribute Details

#raw_hashObject (readonly)

Returns the value of attribute raw_hash.



12
13
14
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12

def raw_hash
  @raw_hash
end

#responsiveObject (readonly)

Returns the value of attribute responsive.



12
13
14
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12

def responsive
  @responsive
end

Returns the value of attribute sidebar_menu.



12
13
14
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12

def sidebar_menu
  @sidebar_menu
end

#top_menuObject (readonly)

Returns the value of attribute top_menu.



12
13
14
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12

def top_menu
  @top_menu
end

Class Method Details

.from_hash(hash) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 35

def self.from_hash(hash)
  data = hash["menu"] || hash

  top = data["top_menu"]&.map { |item| MenuItem.from_hash(item) }
  sidebar = data["sidebar_menu"]&.map { |item| MenuItem.from_hash(item) }

  new(top_menu: top, sidebar_menu: sidebar, raw_hash: data,
      responsive: data["responsive"])
end

Instance Method Details

#both?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 61

def both?
  has_top_menu? && has_sidebar_menu?
end

#each_entry(&block) ⇒ Object

i18n_check Phase 3a façade — yields each linted literal on every menu entry as ‘{ kind:, value:, source: }`. Recurses into `children:`. Source is nil for YAML-loaded menus, which is every menu today (no DSL builder exists); the walker fills in the file-level source via `fallback_source`.



81
82
83
84
85
86
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 81

def each_entry(&block)
  return enum_for(:each_entry) unless block_given?
  ((@top_menu || []) + (@sidebar_menu || [])).each do |item|
    walk_item(item, &block)
  end
end

#has_sidebar_menu?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 49

def has_sidebar_menu?
  !sidebar_menu.nil?
end

#has_top_menu?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 45

def has_top_menu?
  !top_menu.nil?
end

#layout_modeObject

Returns the layout mode string for template selection



66
67
68
69
70
71
72
73
74
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 66

def layout_mode
  if both?
    "both"
  elsif sidebar_only?
    "sidebar"
  else
    "top"
  end
end

Returns:

  • (Boolean)


57
58
59
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 57

def sidebar_only?
  !has_top_menu? && has_sidebar_menu?
end

#top_only?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 53

def top_only?
  has_top_menu? && !has_sidebar_menu?
end