Class: Vedeu::Geometries::DSL
- Inherits:
-
Object
- Object
- Vedeu::Geometries::DSL
- Includes:
- Common, DSL, DSL::Geometry, DSL::Use
- Defined in:
- lib/vedeu/geometries/dsl/dsl.rb
Overview
Geometry allows the configuration of the position and size of an interface. Within Vedeu, as the same for ANSI terminals, has the origin at top-left, y = 1, x = 1. The ‘y’ coordinate is deliberately first.
The Geometry DSL can be used within the Interface DSL or standalone. Here are example of declarations for a ‘geometry` block:
A standalone geometry definition:
Vedeu.geometry :some_interface do
height 5 # Sets the height of the view to 5
width 20 # Sets the width of the view to 20
x 3 # Start drawing 3 spaces from left
y 10 # Start drawing 10 spaces from top
xn 30 # Stop drawing 30 spaces from the left
yn 20 # Stop drawing 20 spaces from top
end
An interface including a geometry definition:
Vedeu.interface :some_interface do
geometry do
height 5
width 20
x 3
y 10
xn 30
yn 20
end
# ... some code here
end
If a declaration is omitted for ‘height` or `width` the full remaining space available in the terminal will be used. `x` and `y` both default to 1.
You can also make a geometry declaration dependent on another view:
Vedeu.interface :other_panel do
# ... some code here
end
Vedeu.interface :main do
geometry do
height 10
y { use(:other_panel).south }
end
# ... some code here
end
This view will begin just below “other_panel”.
This crude ASCII diagram represents a Geometry within Vedeu, each of the labels is a value you can access or define.
x north xn # north: y - 1
y +--------------+ # top: y
| top | # west: x - 1
| | # left: x
west | left right | east # right: xn
| | # east: xn + 1
| bottom | # bottom: yn
yn +--------------+ # south: yn + 1
south
Instance Attribute Summary collapse
-
#client ⇒ Object
included
from DSL
readonly
protected
The object instance where the DSL is being used.
-
#model ⇒ void
included
from DSL
readonly
protected
The new model object which the DSL is constructing.
Instance Method Summary collapse
-
#absent?(variable) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether a variable is nil or empty.
-
#align(vertical: :none, horizontal: :none, width: nil, height: nil) ⇒ Vedeu::Geometries::Geometry
Align the interface/view horizontally or vertically within the terminal.
-
#align_bottom(height = nil) ⇒ Vedeu::Geometries::Geometry
Vertically align the interface/view to the bottom of the terminal.
-
#align_centre(width = nil) ⇒ Vedeu::Geometries::Geometry
(also: #align_center)
Horizontally align the interface/view centrally.
-
#align_left(width = nil) ⇒ Vedeu::Geometries::Geometry
Horizontally align the interface/view to the left.
-
#align_middle(height = nil) ⇒ Vedeu::Geometries::Geometry
Vertically align the interface/view to the middle of the terminal.
-
#align_right(width = nil) ⇒ Vedeu::Geometries::Geometry
Align the interface/view to the right.
-
#align_top(height = nil) ⇒ Vedeu::Geometries::Geometry
Vertically align the interface/view to the top of the terminal.
-
#attributes ⇒ Hash<Symbol => void>
included
from DSL
private
Returns the default attributes for the new model.
-
#become(klass, attributes) ⇒ Class
included
from Common
private
Converts one class into another.
-
#boolean(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating the value was a boolean.
-
#boolean?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value is a Boolean.
-
#columns(value) ⇒ Fixnum|Vedeu::Error::OutOfRange
Returns the width in characters for the number of columns specified.
-
#escape?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value is an escape sequence object (e.g. Cells::Escape.).
-
#falsy?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value should be considered false.
-
#hash?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value is a Hash.
-
#height(value) ⇒ Fixnum
(also: #height=)
Specify the number of characters/rows/lines tall the interface will be.
- #horizontal_alignment(value = :none, width = nil) ⇒ Vedeu::Geometries::Geometry
-
#initialize(model, client = nil) ⇒ void
included
from DSL
Returns a new instance of the DSL class including DSL.
-
#line_model? ⇒ Boolean
included
from Common
private
Returns a boolean indicating the model is a Views::Line.
-
#method_missing(method, *args, &block) ⇒ void
included
from DSL
private
Attempts to find the missing method on the client object.
-
#name ⇒ NilClass|String|Symbol
included
from DSL
Returns the model name if available.
-
#numeric?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value is a Fixnum.
-
#present?(variable) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether a variable has a useful value.
-
#rows(value) ⇒ Fixnum
Returns the height in characters for the number of rows specified.
-
#snake_case(klass) ⇒ String
included
from Common
private
Converts a class name to a lowercase snake case string.
-
#stream_model? ⇒ Boolean
included
from Common
private
Returns a boolean indicating the model is a Views::Stream.
-
#string?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value is a Fixnum.
-
#truthy?(value) ⇒ Boolean
included
from Common
private
Returns a boolean indicating whether the value should be considered true.
-
#use(name) ⇒ void
included
from DSL::Use
Use the attribute of stored model.
- #vertical_alignment(value = :none, height = nil) ⇒ Vedeu::Geometries::Geometry
-
#view_model? ⇒ Boolean
included
from Common
private
Returns a boolean indicating the model is a Views::View.
-
#width(value) ⇒ Fixnum
(also: #width=)
Specify the number of characters/columns wide the interface will be.
-
#x(value = 1, &block) ⇒ Fixnum
(also: #x=)
Specify the starting x position (column) of the interface.
-
#xn(value = 1, &block) ⇒ Fixnum
(also: #xn=)
Specify the ending x position (column) of the interface.
-
#y(value = 1, &block) ⇒ Fixnum
(also: #y=)
Specify the starting y position (row/line) of the interface.
-
#yn(value = 1, &block) ⇒ Fixnum
(also: #yn=)
Specify the ending y position (row/line) of the interface.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Vedeu::DSL
Instance Attribute Details
#client ⇒ Object (readonly, protected) Originally defined in module DSL
Returns The object instance where the DSL is being used.
#model ⇒ void (readonly, protected) Originally defined in module DSL
This method returns an undefined value.
Returns The new model object which the DSL is constructing.
Instance Method Details
#absent?(variable) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether a variable is nil or empty.
#align(vertical: :none, horizontal: :none, width: nil, height: nil) ⇒ Vedeu::Geometries::Geometry
Align the interface/view horizontally or vertically within the terminal.
98 99 100 101 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 98 def align(vertical: :none, horizontal: :none, width: nil, height: nil) horizontal_alignment(horizontal, width) vertical_alignment(vertical, height) end |
#align_bottom(height = nil) ⇒ Vedeu::Geometries::Geometry
Vedeu.width in the example above will set the width to the default width of the terminal, this can be substituted for your own positive integer.
Vertically align the interface/view to the bottom of the terminal.
Vedeu.geometry :some_interface do
# `height` is a positive integer, e.g. 30
align_bottom 30
# this is the same as:
# vertical_alignment(:bottom, 30)
# or you can use: (see notes)
# align(vertical: :bottom, height: 30)
# ... some code
end
148 149 150 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 148 def align_bottom(height = nil) vertical_alignment(:bottom, height) end |
#align_centre(width = nil) ⇒ Vedeu::Geometries::Geometry Also known as: align_center
Vedeu.height in the example above will set the height to the default height of the terminal, this can be substituted for your own positive integer.
Horizontally align the interface/view centrally.
Vedeu.geometry :some_interface do
# `width` is a positive integer, e.g. 30
align_centre 30
# this is the same as:
# horizontal_alignment(:centre, 30)
# or you can use: (see notes)
# align(horizontal: :centre, width: 30)
# ... some code
end
# Also allows `align_center` if preferred.
175 176 177 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 175 def align_centre(width = nil) horizontal_alignment(:centre, width) end |
#align_left(width = nil) ⇒ Vedeu::Geometries::Geometry
Vedeu.height in the example above will set the height to the default height of the terminal, this can be substituted for your own positive integer.
Horizontally align the interface/view to the left.
Vedeu.geometry :some_interface do
# `width` is a positive integer, e.g. 30
align_left 30
# this is the same as:
# horizontal_alignment(:left, 30)
# or you can use: (see notes)
# align(horizontal: :left, width: 30)
# ... some code
end
201 202 203 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 201 def align_left(width = nil) horizontal_alignment(:left, width) end |
#align_middle(height = nil) ⇒ Vedeu::Geometries::Geometry
Vedeu.width in the example above will set the width to the default width of the terminal, this can be substituted for your own positive integer.
Vertically align the interface/view to the middle of the terminal.
Vedeu.geometry :some_interface do
# `height` is a positive integer, e.g. 30
align_middle 30
# this is the same as:
# vertical_alignment(:middle, 30)
# or you can use: (see notes)
# align(vertical: :middle, height: 30)
# ... some code
end
227 228 229 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 227 def align_middle(height = nil) vertical_alignment(:middle, height) end |
#align_right(width = nil) ⇒ Vedeu::Geometries::Geometry
Vedeu.height in the example above will set the height to the default height of the terminal, this can be substituted for your own positive integer.
Align the interface/view to the right.
Vedeu.geometry :some_interface do
# `width` is a positive integer, e.g. 30
align_right 30
# this is the same as:
# horizontal_alignment(:right, 30)
# or you can use: (see notes)
# align(horizontal: :right, width: 30)
# ... some code
end
252 253 254 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 252 def align_right(width = nil) horizontal_alignment(:right, width) end |
#align_top(height = nil) ⇒ Vedeu::Geometries::Geometry
Vedeu.width in the example above will set the width to the default width of the terminal, this can be substituted for your own positive integer.
Vertically align the interface/view to the top of the terminal.
Vedeu.geometry :some_interface do
# `height` is a positive integer, e.g. 30
align_top 30
# this is the same as:
# vertical_alignment(:top, 30)
# or you can use: (see notes)
# align(vertical: :top, height: 30)
# ... some code
end
278 279 280 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 278 def align_top(height = nil) vertical_alignment(:top, height) end |
#attributes ⇒ Hash<Symbol => void> (private) Originally defined in module DSL
Specific DSL classes may be overriding this method.
Returns the default attributes for the new model.
#become(klass, attributes) ⇒ Class Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Converts one class into another.
#boolean(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating the value was a boolean.
#boolean?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value is a Boolean.
#columns(value) ⇒ Fixnum|Vedeu::Error::OutOfRange
297 298 299 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 297 def columns(value) Vedeu::Geometries::Grid.columns(value) end |
#escape?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value is an escape sequence object (e.g. Vedeu::Cells::Escape.)
#falsy?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value should be considered false.
#hash?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value is a Hash.
#height(value) ⇒ Fixnum Also known as: height=
311 312 313 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 311 def height(value) model.height = proc { value } end |
#horizontal_alignment(value = :none, width = nil) ⇒ Vedeu::Geometries::Geometry
107 108 109 110 111 112 113 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 107 def horizontal_alignment(value = :none, width = nil) alignment = Vedeu::Coercers::HorizontalAlignment.validate(value) model.width = width if width model.horizontal_alignment = alignment model end |
#initialize(model, client = nil) ⇒ void Originally defined in module DSL
Returns a new instance of the DSL class including Vedeu::DSL.
#line_model? ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating the model is a Views::Line.
#name ⇒ NilClass|String|Symbol Originally defined in module DSL
Returns the model name if available.
#numeric?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value is a Fixnum.
#present?(variable) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether a variable has a useful value.
#rows(value) ⇒ Fixnum
331 332 333 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 331 def rows(value) Vedeu::Geometries::Grid.rows(value) end |
#snake_case(klass) ⇒ String Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Converts a class name to a lowercase snake case string.
#stream_model? ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating the model is a Views::Stream.
#string?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value is a Fixnum.
#truthy?(value) ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating whether the value should be considered true.
#use(name) ⇒ void Originally defined in module DSL::Use
-
Only models of the same repository can be used in this way.
-
If the stored model cannot be found, a ModelNotFound exception may be raised, or the request for an attribute may raise a NoMethodError exception.
This method returns an undefined value.
Use the attribute of stored model.
This DSL method provides access to a stored model by name. You can then request an attribute of that model for use within the current model. The models which current support this are Border, Geometry and Interface.
#vertical_alignment(value = :none, height = nil) ⇒ Vedeu::Geometries::Geometry
118 119 120 121 122 123 124 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 118 def vertical_alignment(value = :none, height = nil) alignment = Vedeu::Coercers::VerticalAlignment.validate(value) model.height = height if height model.vertical_alignment = alignment model end |
#view_model? ⇒ Boolean Originally defined in module Common
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a boolean indicating the model is a Views::View.
#width(value) ⇒ Fixnum Also known as: width=
345 346 347 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 345 def width(value) model.width = proc { value } end |
#x(value = 1, &block) ⇒ Fixnum Also known as: x=
364 365 366 367 368 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 364 def x(value = 1, &block) return model.x = block if block_given? model.x = value end |
#xn(value = 1, &block) ⇒ Fixnum Also known as: xn=
386 387 388 389 390 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 386 def xn(value = 1, &block) return model.xn = block if block_given? model.xn = value end |
#y(value = 1, &block) ⇒ Fixnum Also known as: y=
407 408 409 410 411 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 407 def y(value = 1, &block) return model.y = block if block_given? model.y = value end |
#yn(value = 1, &block) ⇒ Fixnum Also known as: yn=
429 430 431 432 433 |
# File 'lib/vedeu/geometries/dsl/dsl.rb', line 429 def yn(value = 1, &block) return model.yn = block if block_given? model.yn = value end |