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)


45
46
47
48
49
# File 'lib/vedeu/menus/menu.rb', line 45

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

Instance Attribute Details

#collectionArray

Returns:

  • (Array)


14
15
16
# File 'lib/vedeu/menus/menu.rb', line 14

def collection
  @collection
end

#currentFixnum

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

Returns:

  • (Fixnum)


21
22
23
# File 'lib/vedeu/menus/menu.rb', line 21

def current
  @current
end

#nameString

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

Returns:

  • (String)


28
29
30
# File 'lib/vedeu/menus/menu.rb', line 28

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)


35
36
37
# File 'lib/vedeu/menus/menu.rb', line 35

def selected
  @selected
end

Instance Method Details

#absent?(variable) ⇒ Boolean Originally defined in module Common

Returns a boolean indicating whether a variable is nil or empty.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#bottom_itemArray

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

Returns:

  • (Array)


122
123
124
125
126
# File 'lib/vedeu/menus/menu.rb', line 122

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.



55
56
57
# File 'lib/vedeu/menus/menu.rb', line 55

def current_item
  @collection[@current]
end

#defaultsHash (private)

The default values for a new instance of this class.

Returns:

  • (Hash)


187
188
189
190
191
192
193
194
195
196
# File 'lib/vedeu/menus/menu.rb', line 187

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

#demodulize(klass) ⇒ String Originally defined in module Common

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) ⇒ void Originally defined in module Repositories::Model

This method returns an undefined value.

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.

#deselect_itemArray

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

Returns:

  • (Array)


162
163
164
165
166
# File 'lib/vedeu/menus/menu.rb', line 162

def deselect_item
  @selected = nil

  items
end

#dsl_classString (private) Originally defined in module Repositories::Model

Returns the DSL class name responsible for this model.

Returns:

  • (String)

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


81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/vedeu/menus/menu.rb', line 81

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

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

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

    else
      items << [false, false, item]

    end
  end
  items
end

#lastFixnum

Returns the last index of the collection.

Returns:

  • (Fixnum)


171
172
173
# File 'lib/vedeu/menus/menu.rb', line 171

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)


132
133
134
135
136
# File 'lib/vedeu/menus/menu.rb', line 132

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

  items
end

#present?(variable) ⇒ Boolean Originally defined in module Common

Returns a boolean indicating whether a variable has a useful value.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#prev_itemArray

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

Returns:

  • (Array)


142
143
144
145
146
# File 'lib/vedeu/menus/menu.rb', line 142

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)


152
153
154
155
156
# File 'lib/vedeu/menus/menu.rb', line 152

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)


63
64
65
66
67
# File 'lib/vedeu/menus/menu.rb', line 63

def selected_item
  return nil unless @selected

  @collection[@selected]
end

#sizeFixnum

Returns the size of the collection.

Returns:

  • (Fixnum)


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

def size
  @collection.size
end

#snake_case(name) ⇒ String Originally defined in module Common

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.

#top_itemArray

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

Returns:

  • (Array)


112
113
114
115
116
# File 'lib/vedeu/menus/menu.rb', line 112

def top_item
  @current = 0

  items
end

#viewArray

Returns a subset of all the items.

Returns:

  • (Array)


104
105
106
# File 'lib/vedeu/menus/menu.rb', line 104

def view
  items[@current, @collection.size]
end