Class: Vedeu::Menus::Menu

Inherits:
Object
  • Object
show all
Includes:
Repositories::Model
Defined in:
lib/vedeu/menus/menu.rb

Overview

Converts the collection passed into a list of menu items which can be navigated using the instance methods or events provided.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ Vedeu::Menus::Menu

Returns a new instance of Vedeu::Menus::Menu.

Parameters:

  • attributes (Hash) (defaults to: {})

Options Hash (attributes):

  • collection (Array)
  • name (String|Symbol)
  • current (Fixnum)
  • selected (Fixnum|NilClass)


47
48
49
50
51
# File 'lib/vedeu/menus/menu.rb', line 47

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

Instance Attribute Details

#collectionArray

Returns:

  • (Array)


16
17
18
# File 'lib/vedeu/menus/menu.rb', line 16

def collection
  @collection
end

#currentFixnum

Returns the index of the value in the collection which is current.

Returns:

  • (Fixnum)


23
24
25
# File 'lib/vedeu/menus/menu.rb', line 23

def current
  @current
end

#nameString

The name of the menu. Used to reference the menu throughout the application’s execution lifetime.

Returns:

  • (String)


30
31
32
# File 'lib/vedeu/menus/menu.rb', line 30

def name
  @name
end

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

#selectedFixnum

Returns the index of the value in the collection which is selected.

Returns:

  • (Fixnum)


37
38
39
# File 'lib/vedeu/menus/menu.rb', line 37

def selected
  @selected
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:

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

Parameters:

  • klass (Class)

    The class to become an instance of.

  • attributes (Hash)

    The attributes of klass.

Returns:

  • (Class)

    Returns a new instance of klass.

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

Parameters:

  • value (void)

Returns:

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

Parameters:

Returns:

#bottom_itemArray

Sets the value of current to be the last item of the collection.

Returns:

  • (Array)


136
137
138
139
140
# File 'lib/vedeu/menus/menu.rb', line 136

def bottom_item
  @current = last

  items
end

#current_itemvoid

This method returns an undefined value.

Returns the item from the collection which shares the same index as the value of #current.



57
58
59
# File 'lib/vedeu/menus/menu.rb', line 57

def current_item
  @collection[@current]
end

#defaultsHash (private)

The default values for a new instance of this class.

Returns:

  • (Hash)


201
202
203
204
205
206
207
208
209
210
# File 'lib/vedeu/menus/menu.rb', line 201

def defaults
  {
    client:     nil,
    collection: [],
    current:    0,
    name:       '',
    repository: Vedeu.menus,
    selected:   nil,
  }
end

#deputy(client = nil) ⇒ Vedeu::Menus::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:



69
70
71
# File 'lib/vedeu/menus/menu.rb', line 69

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

#deselect_itemArray

Removes the value of ‘selected`, meaning no items are selected.

Returns:

  • (Array)


176
177
178
179
180
# File 'lib/vedeu/menus/menu.rb', line 176

def deselect_item
  @selected = nil

  items
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.)

Returns:

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

Parameters:

  • value (void)

Returns:

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

Parameters:

  • value (Hash|void)

Returns:

#itemsArray

Returns a new collection of items. Each element of the collection is of the format:

[selected, current, item]

‘selected` is a boolean indicating whether the item is selected. `current` is a boolean indicating whether the item is current. `item` is the item itself.

Returns:

  • (Array)


95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/vedeu/menus/menu.rb', line 95

def items
  items = []
  @collection.each_with_index do |item, index|
    items << if index == @current && index == @selected
               [true, true, item]

             elsif index == @current
               [false, true, item]

             elsif index == @selected
               [true, false, item]

             else
               [false, false, item]

             end
  end
  items
end

#lastFixnum

Returns the last index of the collection.

Returns:

  • (Fixnum)


185
186
187
# File 'lib/vedeu/menus/menu.rb', line 185

def last
  @collection.size - 1
end

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

Returns:

#next_itemArray

Sets the value of current to be the next item in the collection until we reach the last.

Returns:

  • (Array)


146
147
148
149
150
# File 'lib/vedeu/menus/menu.rb', line 146

def next_item
  @current += 1 if @current < last

  items
end

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

Parameters:

  • value (Fixnum|void)

Returns:

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

#prev_itemArray

Sets the value of current to be the previous item in the collection until we reach the first.

Returns:

  • (Array)


156
157
158
159
160
# File 'lib/vedeu/menus/menu.rb', line 156

def prev_item
  @current -= 1 if @current > 0

  items
end

#select_itemArray

Sets the selected item to be the same value as the current item.

Returns:

  • (Array)


166
167
168
169
170
# File 'lib/vedeu/menus/menu.rb', line 166

def select_item
  @selected = @current

  items
end

#selected_item|NilClass

Returns the item from the collection which shares the same index as the value of #selected.

Returns:

  • (|NilClass)


77
78
79
80
81
# File 'lib/vedeu/menus/menu.rb', line 77

def selected_item
  return nil unless @selected

  @collection[@selected]
end

#sizeFixnum

Returns the size of the collection.

Returns:

  • (Fixnum)


192
193
194
# File 'lib/vedeu/menus/menu.rb', line 192

def size
  @collection.size
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.

Examples:

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

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

Parameters:

  • klass (Module|Class|String)

Returns:

  • (String)

#store(&block) ⇒ void 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.

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

Returns:

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

Parameters:

  • value (String|void)

Returns:

#top_itemArray

Sets the value of current to be the first item of the collection.

Returns:

  • (Array)


126
127
128
129
130
# File 'lib/vedeu/menus/menu.rb', line 126

def top_item
  @current = 0

  items
end

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

Parameters:

  • value (void)

Returns:

#viewArray

Returns a subset of all the items.

Returns:

  • (Array)


118
119
120
# File 'lib/vedeu/menus/menu.rb', line 118

def view
  items[@current, @collection.size]
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.

Returns: