Class: LcpRuby::Metadata::MenuDefinition
- Inherits:
-
Object
- Object
- LcpRuby::Metadata::MenuDefinition
- 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
-
.auto_inject_logged ⇒ Object
Returns the value of attribute auto_inject_logged.
Instance Attribute Summary collapse
-
#raw_hash ⇒ Object
readonly
Returns the value of attribute raw_hash.
-
#responsive ⇒ Object
readonly
Returns the value of attribute responsive.
-
#sidebar_menu ⇒ Object
readonly
Returns the value of attribute sidebar_menu.
-
#top_menu ⇒ Object
readonly
Returns the value of attribute top_menu.
Class Method Summary collapse
Instance Method Summary collapse
- #both? ⇒ Boolean
-
#each_entry(&block) ⇒ Object
i18n_check Phase 3a façade — yields each linted literal on every menu entry as ‘{ kind:, value:, source: }`.
- #has_sidebar_menu? ⇒ Boolean
- #has_top_menu? ⇒ Boolean
-
#initialize(top_menu: nil, sidebar_menu: nil, raw_hash: nil, responsive: nil) ⇒ MenuDefinition
constructor
A new instance of MenuDefinition.
-
#layout_mode ⇒ Object
Returns the layout mode string for template selection.
- #sidebar_only? ⇒ Boolean
- #top_only? ⇒ Boolean
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 = @sidebar_menu = @raw_hash = raw_hash # ResponsivePolicy.new(nil) synthesizes framework defaults so # consumers never branch on presence. @responsive = ResponsivePolicy.new(responsive) validate! end |
Class Attribute Details
.auto_inject_logged ⇒ Object
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_hash ⇒ Object (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 |
#responsive ⇒ Object (readonly)
Returns the value of attribute responsive.
12 13 14 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12 def responsive @responsive end |
#sidebar_menu ⇒ Object (readonly)
Returns the value of attribute sidebar_menu.
12 13 14 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12 def @sidebar_menu end |
#top_menu ⇒ Object (readonly)
Returns the value of attribute top_menu.
12 13 14 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 12 def @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) } = data["sidebar_menu"]&.map { |item| MenuItem.from_hash(item) } new(top_menu: top, sidebar_menu: , raw_hash: data, responsive: data["responsive"]) end |
Instance Method Details
#both? ⇒ Boolean
61 62 63 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 61 def both? && 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
49 50 51 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 49 def !.nil? end |
#has_top_menu? ⇒ Boolean
45 46 47 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 45 def !.nil? end |
#layout_mode ⇒ Object
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" else "top" end end |
#sidebar_only? ⇒ Boolean
57 58 59 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 57 def ! && end |
#top_only? ⇒ Boolean
53 54 55 |
# File 'lib/lcp_ruby/metadata/menu_definition.rb', line 53 def top_only? && ! end |