Class: Gema6::Lista

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/gema6/lista.rb

Overview

Clase que representa a una Lista doblemente enlazada para poder enlazar los menús.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Lista

Returns a new instance of Lista.



7
8
9
10
11
12
13
14
# File 'lib/gema6/lista.rb', line 7

def initialize(&block)
    @top
    @tail
    
    if (block_given?)
        instance_eval &block
    end
end

Instance Attribute Details

#tailObject (readonly)

Returns the value of attribute tail.



6
7
8
# File 'lib/gema6/lista.rb', line 6

def tail
  @tail
end

#topObject (readonly)

Returns the value of attribute top.



6
7
8
# File 'lib/gema6/lista.rb', line 6

def top
  @top
end

Instance Method Details

#domingo(menus) ⇒ Object



123
124
125
# File 'lib/gema6/lista.rb', line 123

def domingo(menus)
    menu(menus)
end

#eachObject

Define la forma en la que se itera por la lista a través del método each.



83
84
85
86
87
88
89
# File 'lib/gema6/lista.rb', line 83

def each
    @actual = @top
    while (@actual != nil) do
        yield @actual.value
        @actual = @actual.next
    end
end

#insert_head(node) ⇒ Object

Inserta un nodo (o conjunto de nodos) por el inicio.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/gema6/lista.rb', line 17

def insert_head(node)
    # Si el nodo es de tipo array, hay que insertar sus elementos
    # sino, insertamos el nodo individualmente
    
    if node.instance_of? Array
        node.each { |element| insert_head(element) }
    elsif node.instance_of? Node
        node.next = @top
        
        # Si habia un nodo top, sustituir su atributo "previous" y apuntar al de ahora
        if (@top != nil)
            @top.previous = node
        end
        
        # Asignar ahora a @top el nodo
        @top = node
        
        # Si solo hay un nodo, debe ser tanto tail como head
        if (@tail == nil)
            @tail = @top
        end
    end
end

#insert_tail(node) ⇒ Object

Inserta un nodo (o conjunto de nodos) por el final.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/gema6/lista.rb', line 42

def insert_tail(node)
    # Si el nodo es de tipo array, hay que insertar sus elementos
    # sino, insertamos el nodo individualmente
    
    if node.instance_of? Array
        node.each { |element| insert_tail(element) }
    elsif node.instance_of? Node
        node.previous = @tail
        
        # Si habia un nodo tail, sustituir su atributo "next" y apuntar al de ahora
        if (@tail != nil)
            @tail.next = node
        end
        @tail = node
        
        # Si solo hay un nodo, debe ser tanto tail como head
        if (@top == nil)
            @top = @tail
        end
    end
end

#jueves(menus) ⇒ Object



111
112
113
# File 'lib/gema6/lista.rb', line 111

def jueves(menus)
    menu(menus)
end

#lunes(menus) ⇒ Object



99
100
101
# File 'lib/gema6/lista.rb', line 99

def lunes(menus)
    menu(menus)
end

#martes(menus) ⇒ Object



103
104
105
# File 'lib/gema6/lista.rb', line 103

def martes(menus)
    menu(menus)
end


91
92
93
94
95
96
97
# File 'lib/gema6/lista.rb', line 91

def menu(options = {})
    insert_head(Node.new(options[:desayuno], nil, nil))
    insert_head(Node.new(options[:mediama], nil, nil))
    insert_head(Node.new(options[:almuerzo], nil, nil))
    insert_head(Node.new(options[:merienda], nil, nil))
    insert_head(Node.new(options[:cena], nil, nil))
end

#miercoles(menus) ⇒ Object



107
108
109
# File 'lib/gema6/lista.rb', line 107

def miercoles(menus)
    menu(menus)
end

#sabado(menus) ⇒ Object



119
120
121
# File 'lib/gema6/lista.rb', line 119

def sabado(menus)
    menu(menus)
end

#to_sObject

Devuelve una cadena que representa la lista y su contenido.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/gema6/lista.rb', line 65

def to_s
    @resultado = ""
    @numeroMenu = 1
    @nodoActual = @top
    
    #Iterar en la lista hasta llegar al final (nil) y hacerles to_s
    while @nodoActual != nil do
        @resultado << @numeroMenu.to_s << ") "
        @resultado << @nodoActual.value.to_s
        @resultado << "\n\n"
        @nodoActual = @nodoActual.next
        @numeroMenu += 1
    end
    
    @resultado
end

#viernes(menus) ⇒ Object



115
116
117
# File 'lib/gema6/lista.rb', line 115

def viernes(menus)
    menu(menus)
end