Class: Vedeu::Geometry::Geometry

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Repositories::Model
Defined in:
lib/vedeu/geometry/geometry.rb

Overview

TODO:

Consider storing the Terminal size at the time of first

creation, this allows us to return the interface to its original dimensions if the terminal resizes back to normal size.

Calculates and provides interface geometry determined by both the client’s requirements and the terminal’s current viewing area.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ Vedeu::Geometry::Geometry

Returns a new instance of Vedeu::Geometry::Geometry.

Parameters:

  • attributes (Hash<Symbol => Boolean|Fixnum|String| Symbol|Vedeu::Geometry::Repository]) (defaults to: {})

    ttributes [Hash<Symbol => Boolean|Fixnum|String| Symbol|Vedeu::Geometry::Repository]

Options Hash (attributes):

  • horizontal_alignment (Symbol)
  • vertical_alignment (Symbol)
  • maximised (Boolean)
  • height (Fixnum)
  • name (String|Symbol)
  • repository (Vedeu::Geometry::Repository)
  • width (Fixnum)
  • x (Fixnum)
  • xn (Fixnum)
  • y (Fixnum)
  • yn (Fixnum)


107
108
109
110
111
# File 'lib/vedeu/geometry/geometry.rb', line 107

def initialize(attributes = {})
  defaults.merge!(attributes).each do |key, value|
    instance_variable_set("@#{key}", value)
  end
end

Instance Attribute Details

#clientObject

Returns:

  • (Object)


83
84
85
# File 'lib/vedeu/geometry/geometry.rb', line 83

def client
  @client
end

#height=(value) ⇒ Fixnum (writeonly)

Returns:

  • (Fixnum)


54
55
56
# File 'lib/vedeu/geometry/geometry.rb', line 54

def height=(value)
  @height = value
end

#horizontal_alignmentSymbol

Returns:

  • (Symbol)


42
43
44
# File 'lib/vedeu/geometry/geometry.rb', line 42

def horizontal_alignment
  @horizontal_alignment
end

#maximisedBoolean Also known as: maximised?

Returns:

  • (Boolean)


58
59
60
# File 'lib/vedeu/geometry/geometry.rb', line 58

def maximised
  @maximised
end

#nameString|Symbol

Returns:

  • (String|Symbol)


50
51
52
# File 'lib/vedeu/geometry/geometry.rb', line 50

def name
  @name
end

#repositoryVedeu::Repositories::Repository Originally defined in module Repositories::Model

#vertical_alignmentSymbol

Returns:

  • (Symbol)


46
47
48
# File 'lib/vedeu/geometry/geometry.rb', line 46

def vertical_alignment
  @vertical_alignment
end

#width=(value) ⇒ Fixnum (writeonly)

Returns:

  • (Fixnum)


63
64
65
# File 'lib/vedeu/geometry/geometry.rb', line 63

def width=(value)
  @width = value
end

#x=(value) ⇒ Fixnum (writeonly)

Returns:

  • (Fixnum)


67
68
69
# File 'lib/vedeu/geometry/geometry.rb', line 67

def x=(value)
  @x = value
end

#xn=(value) ⇒ Fixnum (writeonly)

Returns:

  • (Fixnum)


71
72
73
# File 'lib/vedeu/geometry/geometry.rb', line 71

def xn=(value)
  @xn = value
end

#y=(value) ⇒ Fixnum (writeonly)

Returns:

  • (Fixnum)


75
76
77
# File 'lib/vedeu/geometry/geometry.rb', line 75

def y=(value)
  @y = value
end

#yn=(value) ⇒ Fixnum (writeonly)

Returns:

  • (Fixnum)


79
80
81
# File 'lib/vedeu/geometry/geometry.rb', line 79

def yn=(value)
  @yn = value
end

Class Method Details

.store(attributes, &block) ⇒ Vedeu::Geometry::Geometry

Parameters:

  • attributes (Hash<Symbol => Boolean|Fixnum|String| Symbol|Vedeu::Geometry::Repository])

    ttributes [Hash<Symbol => Boolean|Fixnum|String| Symbol|Vedeu::Geometry::Repository]

Returns:



87
88
89
# File 'lib/vedeu/geometry/geometry.rb', line 87

def self.store(attributes, &block)
  new(attributes).store(&block)
end

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.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#areaVedeu::Geometry::Area (private)



197
198
199
# File 'lib/vedeu/geometry/geometry.rb', line 197

def area
  @area = Vedeu::Geometry::Area.from_attributes(area_attributes)
end

#area_attributesHash<Symbol => Boolean|Fixnum> (private)

Returns:

  • (Hash<Symbol => Boolean|Fixnum>)


202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/vedeu/geometry/geometry.rb', line 202

def area_attributes
  {
    horizontal_alignment: @horizontal_alignment,
    maximised:            @maximised,
    name:                 name,
    vertical_alignment:   @vertical_alignment,
    x:                    @x.is_a?(Proc)      ? @x.call      : @x,
    xn:                   @xn.is_a?(Proc)     ? @xn.call     : @xn,
    x_xn:                 @width.is_a?(Proc)  ? @width.call  : @width,
    y:                    @y.is_a?(Proc)      ? @y.call      : @y,
    yn:                   @yn.is_a?(Proc)     ? @yn.call     : @yn,
    y_yn:                 @height.is_a?(Proc) ? @height.call : @height,
  }
end

#attributesHash<Symbol => Boolean|Fixnum|String|Symbol| Vedeu::Geometry::Repository]

Returns Hash<Symbol => Boolean|Fixnum|String|Symbol| Vedeu::Geometry::Repository].

Returns:

  • (Hash<Symbol => Boolean|Fixnum|String|Symbol| Vedeu::Geometry::Repository])

    Hash<Symbol => Boolean|Fixnum|String|Symbol| Vedeu::Geometry::Repository]



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/vedeu/geometry/geometry.rb', line 115

def attributes
  {
    client:               @client,
    height:               height,
    horizontal_alignment: @horizontal_alignment,
    maximised:            @maximised,
    name:                 @name,
    repository:           @repository,
    vertical_alignment:   @vertical_alignment,
    width:                width,
    x:                    x,
    xn:                   xn,
    y:                    y,
    yn:                   yn,
  }
end

#defaultsHash<Symbol => Boolean|Fixnum|NilClass|String|Symbol| Vedeu::Geometry::Repository] (private)

Returns the default options/attributes for this class.

Returns:

  • (Hash<Symbol => Boolean|Fixnum|NilClass|String|Symbol| Vedeu::Geometry::Repository])

    Hash<Symbol => Boolean|Fixnum|NilClass|String|Symbol| Vedeu::Geometry::Repository]



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/vedeu/geometry/geometry.rb', line 221

def defaults
  {
    client:               nil,
    height:               nil,
    horizontal_alignment: :none,
    maximised:            false,
    name:                 nil,
    repository:           Vedeu.geometries,
    vertical_alignment:   :none,
    width:                nil,
    x:                    nil,
    xn:                   nil,
    y:                    nil,
    yn:                   nil,
  }
end

#demodulize(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.

Removes the module part from the expression in the string.

Examples:

demodulize('Vedeu::SomeModule::SomeClass') # => "SomeClass"

Parameters:

  • klass (Class|String)

Returns:

  • (String)

#deputy(client = nil) ⇒ Vedeu::Geometry::DSL

Returns a DSL instance responsible for defining the DSL methods of this model.

Parameters:

  • client (Object|NilClass) (defaults to: nil)

    The client binding represents the client application object that is currently invoking a DSL method. It is required so that we can send messages to the client application object should we need to.

Returns:



141
142
143
# File 'lib/vedeu/geometry/geometry.rb', line 141

def deputy(client = nil)
  Vedeu::Geometry::DSL.new(self, client)
end

#eql?(other) ⇒ Boolean Also known as: ==

An object is equal when its values are the same.

Parameters:

Returns:

  • (Boolean)


149
150
151
# File 'lib/vedeu/geometry/geometry.rb', line 149

def eql?(other)
  self.class == other.class && name == other.name
end

#maximiseVedeu::Geometry::Geometry|NilClass

Will maximise the named interface geometry. This means it will occupy all of the available space on the terminal window.

Examples:

Vedeu.trigger(:_maximise_, name)

Returns:



161
162
163
164
165
166
167
168
169
170
# File 'lib/vedeu/geometry/geometry.rb', line 161

def maximise
  return self if maximised?

  @maximised = true

  store do
    Vedeu.trigger(:_clear_)
    Vedeu.trigger(:_refresh_view_, name)
  end
end

#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.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#snake_case(name) ⇒ 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.

Examples:

snake_case(MyClassName) # => "my_class_name"
snake_case(NameSpaced::ClassName)
# => "name_spaced/class_name"

Parameters:

  • name (String)

Returns:

  • (String)

#storevoid Originally defined in module Repositories::Model

TODO:

Perhaps some validation could be added here?

Note:

If a block is given, store the model, return the model after yielding.

This method returns an undefined value.

Returns The model instance stored in the repository.

#unmaximiseVedeu::Geometry::Geometry|NilClass

Will unmaximise the named interface geometry. Previously, when a geometry was maximised, then triggering the unmaximise event will return it to its usual defined size (terminal size permitting: when the terminal has been resized, then the new geometry size should adapt).

Examples:

Vedeu.trigger(:_unmaximise_, name)

Returns:



182
183
184
185
186
187
188
189
190
191
192
# File 'lib/vedeu/geometry/geometry.rb', line 182

def unmaximise
  return self unless maximised?

  @maximised = false

  store do
    Vedeu.trigger(:_clear_)
    Vedeu.trigger(:_refresh_)
    Vedeu.trigger(:_refresh_view_, name)
  end
end