Module: RatatuiRuby::TUI::LayoutFactories
- Included in:
- RatatuiRuby::TUI
- Defined in:
- lib/ratatui_ruby/tui/layout_factories.rb
Overview
Layout factory methods for Session.
Provides convenient access to Layout::Rect, Layout::Constraint, and Layout::Layout without fully qualifying the class names.
Instance Method Summary collapse
-
#constraint(type_or_arg = nil, arg1 = nil, arg2 = nil) ⇒ Layout::Constraint
Creates a Layout::Constraint, with optional type-based dispatch.
-
#constraint_fill(n = 1) ⇒ Layout::Constraint
Creates a Layout::Constraint.fill.
-
#constraint_length(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.length.
-
#constraint_max(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.max.
-
#constraint_min(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.min.
-
#constraint_percentage(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.percentage.
-
#constraint_ratio(numerator, denominator) ⇒ Layout::Constraint
Creates a Layout::Constraint.ratio.
-
#fixed(n) ⇒ Layout::Constraint
Alias for #constraint_length — CSS-inspired “fixed” sizing.
-
#flex(n = 1) ⇒ Layout::Constraint
Alias for #constraint_fill — CSS Flexbox-inspired flexible sizing.
-
#fr(n = 1) ⇒ Layout::Constraint
Alias for #constraint_fill — CSS Grid-inspired “fr” (fraction) unit.
-
#layout ⇒ Layout::Layout
Creates a Layout::Layout.
-
#layout_split(area, direction: :vertical, constraints:, flex: :legacy) ⇒ Array<Layout::Rect>
Splits an area using Layout::Layout.split.
-
#percent(n) ⇒ Layout::Constraint
Alias for #constraint_percentage — CSS-inspired percent sizing.
-
#rect ⇒ Layout::Rect
Creates a Layout::Rect.
-
#split(area, direction: :vertical, constraints:, flex: :legacy) ⇒ Array<Layout::Rect>
Alias for #layout_split — shorter, more ergonomic.
Instance Method Details
#constraint(type_or_arg = nil, arg1 = nil, arg2 = nil) ⇒ Layout::Constraint
Creates a Layout::Constraint, with optional type-based dispatch.
When called with a type symbol as the first argument, dispatches to the appropriate constraint factory (TIMTOWTDI pattern).
Also available as: tui.percent(50), tui.flex(1)
Examples
– SPDX-SnippetBegin SPDX-FileCopyrightText: 2026 Kerrick Long SPDX-License-Identifier: MIT-0 ++
tui.constraint(:length, 10) # => Constraint.length(10)
tui.constraint(:percentage, 50) # => Constraint.percentage(50)
tui.constraint(:min, 5) # => Constraint.min(5)
tui.constraint(:fill, 2) # => Constraint.fill(2)
tui.constraint(:ratio, 1, 3) # => Constraint.ratio(1, 3)
– SPDX-SnippetEnd ++
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 44 def constraint(type_or_arg = nil, arg1 = nil, arg2 = nil, **) # Type-based dispatch when first arg is a symbol if type_or_arg.is_a?(Symbol) case type_or_arg when :length, :fixed constraint_length(arg1 || raise(ArgumentError, "#{type_or_arg} requires a value")) when :percentage, :percent constraint_percentage(arg1 || raise(ArgumentError, "#{type_or_arg} requires a value")) when :min constraint_min(arg1 || raise(ArgumentError, "min requires a value")) when :max constraint_max(arg1 || raise(ArgumentError, "max requires a value")) when :fill, :flex, :fr constraint_fill(arg1 || 1) when :ratio, :aspect n = arg1 || raise(ArgumentError, "ratio requires numerator") d = arg2 || raise(ArgumentError, "ratio requires denominator") constraint_ratio(n, d) else # Use to_s since type_or_arg must be a Symbol here raise ArgumentError, "Unknown constraint type: :#{type_or_arg}. " \ "Valid types: :length, :percentage, :min, :max, :fill, :ratio" end elsif type_or_arg.nil? && arg1.nil? Layout::Constraint.new(**) else Layout::Constraint.new(type_or_arg, arg1, arg2, **) end end |
#constraint_fill(n = 1) ⇒ Layout::Constraint
Creates a Layout::Constraint.fill.
100 101 102 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 100 def constraint_fill(n = 1) Layout::Constraint.fill(n) end |
#constraint_length(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.length.
76 77 78 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 76 def constraint_length(n) Layout::Constraint.length(n) end |
#constraint_max(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.max.
94 95 96 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 94 def constraint_max(n) Layout::Constraint.max(n) end |
#constraint_min(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.min.
88 89 90 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 88 def constraint_min(n) Layout::Constraint.min(n) end |
#constraint_percentage(n) ⇒ Layout::Constraint
Creates a Layout::Constraint.percentage.
82 83 84 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 82 def constraint_percentage(n) Layout::Constraint.percentage(n) end |
#constraint_ratio(numerator, denominator) ⇒ Layout::Constraint
Creates a Layout::Constraint.ratio.
106 107 108 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 106 def constraint_ratio(numerator, denominator) Layout::Constraint.ratio(numerator, denominator) end |
#fixed(n) ⇒ Layout::Constraint
Alias for #constraint_length — CSS-inspired “fixed” sizing.
130 131 132 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 130 def fixed(n) constraint_length(n) end |
#flex(n = 1) ⇒ Layout::Constraint
Alias for #constraint_fill — CSS Flexbox-inspired flexible sizing.
142 143 144 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 142 def flex(n = 1) constraint_fill(n) end |
#fr(n = 1) ⇒ Layout::Constraint
Alias for #constraint_fill — CSS Grid-inspired “fr” (fraction) unit.
148 149 150 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 148 def fr(n = 1) constraint_fill(n) end |
#layout ⇒ Layout::Layout
Creates a Layout::Layout.
112 113 114 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 112 def layout(...) Layout::Layout.new(...) end |
#layout_split(area, direction: :vertical, constraints:, flex: :legacy) ⇒ Array<Layout::Rect>
Splits an area using Layout::Layout.split.
118 119 120 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 118 def layout_split(area, direction: :vertical, constraints:, flex: :legacy) Layout::Layout.split(area, direction:, constraints:, flex:) end |
#percent(n) ⇒ Layout::Constraint
Alias for #constraint_percentage — CSS-inspired percent sizing.
136 137 138 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 136 def percent(n) constraint_percentage(n) end |
#rect ⇒ Layout::Rect
Creates a Layout::Rect.
17 18 19 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 17 def rect(...) Layout::Rect.new(...) end |
#split(area, direction: :vertical, constraints:, flex: :legacy) ⇒ Array<Layout::Rect>
Alias for #layout_split — shorter, more ergonomic.
124 125 126 |
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 124 def split(area, direction: :vertical, constraints:, flex: :legacy) layout_split(area, direction:, constraints:, flex:) end |