Class: LcpRuby::Metadata::ResponsivePolicy

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

Overview

Resolved responsive-menu policy, exposed via ‘MenuDefinition#responsive`. Merges configurator-supplied `responsive:` YAML over framework defaults so consumers always see a fully-populated hash — no per-key nil-guard sprinkling at call sites.

Constant Summary collapse

TOP_MENU_DEFAULTS =
{
  "mode"       => "overflow_more",
  "breakpoint" => 768,
  "more"       => {
    "label_key" => "lcp_ruby.nav.more",
    "icon"      => "more-horizontal"
  }
}.freeze
{
  "above_breakpoint"   => "rail",
  "below_breakpoint"   => "off_canvas",
  "breakpoint"         => 1024,
  "user_toggle"        => true,
  "persist"            => "cookie",
  "initial"            => "expanded",
  "auto_inject_toggle" => true
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw = nil) ⇒ ResponsivePolicy

Returns a new instance of ResponsivePolicy.



30
31
32
33
34
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 30

def initialize(raw = nil)
  @raw = normalize(raw)
  @top_menu = TOP_MENU_DEFAULTS.deep_merge(@raw["top_menu"] || {}).freeze
  @sidebar_menu = SIDEBAR_MENU_DEFAULTS.merge(@raw["sidebar_menu"] || {}).freeze
end

Instance Attribute Details

#rawObject (readonly)

Returns the value of attribute raw.



28
29
30
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 28

def raw
  @raw
end

Returns the value of attribute sidebar_menu.



28
29
30
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 28

def sidebar_menu
  @sidebar_menu
end

#top_menuObject (readonly)

Returns the value of attribute top_menu.



28
29
30
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 28

def top_menu
  @top_menu
end

Instance Method Details

#configured?Boolean

True when the configurator authored at least some responsive: block; false when defaults are entirely synthesized. Used by the validator to gate “configured key but mode doesn’t use it” warnings.

Returns:

  • (Boolean)


83
84
85
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 83

def configured?
  !@raw.empty?
end


52
53
54
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 52

def sidebar_above_breakpoint
  @sidebar_menu["above_breakpoint"]
end

Returns:

  • (Boolean)


76
77
78
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 76

def sidebar_auto_inject_toggle?
  @sidebar_menu["auto_inject_toggle"]
end


56
57
58
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 56

def sidebar_below_breakpoint
  @sidebar_menu["below_breakpoint"]
end


60
61
62
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 60

def sidebar_breakpoint
  @sidebar_menu["breakpoint"]
end


72
73
74
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 72

def sidebar_initial
  @sidebar_menu["initial"]
end


68
69
70
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 68

def sidebar_persist
  @sidebar_menu["persist"]
end

Returns:

  • (Boolean)


64
65
66
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 64

def sidebar_user_toggle?
  @sidebar_menu["user_toggle"]
end

#top_menu_breakpointObject



40
41
42
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 40

def top_menu_breakpoint
  @top_menu["breakpoint"]
end

#top_menu_modeObject



36
37
38
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 36

def top_menu_mode
  @top_menu["mode"]
end

#top_menu_more_iconObject



48
49
50
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 48

def top_menu_more_icon
  @top_menu.dig("more", "icon")
end

#top_menu_more_label_keyObject



44
45
46
# File 'lib/lcp_ruby/metadata/responsive_policy.rb', line 44

def top_menu_more_label_key
  @top_menu.dig("more", "label_key")
end