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

Attributes included from Repositories::Model

#repository

Instance Method Summary collapse

Methods included from Repositories::Model

included, #store

Methods included from Common

#absent?, #array?, #boolean, #boolean?, #empty_value?, #escape?, #falsy?, #hash?, #line_model?, #numeric?, #positionable?, #present?, #snake_case, #stream_model?, #string?, #symbol?, #truthy?, #view_model?

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

#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

#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<Symbol => void> (private)

The default options/attributes for a new instance of this class.

Returns:

  • (Hash<Symbol => void>)


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

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

#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

#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

#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

#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

#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