Class: SWS::Repetition

Inherits:
Component show all
Defined in:
lib/sws/Core/components/Repetition/Repetition.rb

Overview

  • index (settable) - an index of current item in list iterator

Instance Attribute Summary

Attributes inherited from Component

#action_components, #definition_component, #encoding, #html_attrs, #method_to_call, #name, #parameters, #parent, #request, #request_number, #slots, #subcomponents, #tokens

Instance Method Summary collapse

Methods inherited from Component

#api_filename, #app, #container?, #content?, create, #definition_filename, #page, #process_parameters, #process_request, #remove_subcomponents, #session, #set_request_subcomponents, #slot_bound?, #subcomponent_for_name, synchronize_slot, #synchronize_slot?, #synchronize_slots, #template_filename, #update_binding, #url_string

Constructor Details

#initialize(name, request, parent, slots) ⇒ Repetition

Returns a new instance of Repetition.



17
18
19
20
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 17

def initialize ( name, request, parent, slots )
  super
  @subcomponent_array = Array.new
end

Instance Method Details

#append_to_response(response) ⇒ Object

Calls super for each element of @subcomponent_array. Number of iteration is added to the name of the receiver.



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 116

def append_to_response ( response )

  #store original name of the repetition
  old_name = @name.dup()
  @list.each_index do |i|
    @slots["item"].value = @list[i]
      if ( slot_bound?("index") )
        @slots["index"].value = i
      end
    @subcomponents = @subcomponent_array[i]
    # Add iteration number to the end of name - will be necessary in other phases
    @name << ".#{i}"
    super
    # Revert name 
    @name = old_name.dup()
  end

end

#awakeObject

Calls awake repeatedly for each element in @subcomponent_array



38
39
40
41
42
43
44
45
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 38

def awake ()
  
  @list.each_index do |i|
    @subcomponents = @subcomponent_array [i]
    super
  end
  
end

#create_component_treeObject

Overriden method of the Component class - initializes elements of



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 61

def create_component_tree ()

  @list = @slots["list"].value()
  @list.each_index do |i|
    @slots["item"].value = @list[i]
      if ( slot_bound?("index") )
        @slots["index"].value = i
      end
    @subcomponent_array [i] = Array.new()
    @subcomponents = @subcomponent_array [i]
    super
  end

end

#perform_actionObject

Performs action - again, calls super for each element of



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 79

def perform_action ()

  @list.each_index do |i|
    
    @slots["item"].value = @list[i]
      if ( slot_bound?("index") )
        @slots["index"].value = i
      end
    @subcomponents = @subcomponent_array[i]
    #dirty hack to set bindings to proper values :)
    @subcomponents.each { |com| com.process_bindings() }
    next_page = super
    return next_page if ( next_page )
    
  end
  return nil

end

#process_bindingsObject

Processes bindings - calls super for.. guest what? :)



100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 100

def process_bindings ()

  @list.each_index do |i|
    @slots["item"].value = @list[i]
      if ( slot_bound?("index") )
        @slots["index"].value = i
      end
    @subcomponents = @subcomponent_array[i]
    super
  end

end

#sleepObject

Calls sleep repeatedly for each element in @subcomponent_array



49
50
51
52
53
54
55
56
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 49

def sleep ()

  @list.each_index do |i|
    @subcomponents = @subcomponent_array [i]
    super
  end

end

#tokenize_binding(key, value) ⇒ Object

Tokenizes binding - retrieves iteration number from binding name and calls super with @subcomponents set to proper @subcomponent_array object



25
26
27
28
29
30
31
32
33
34
# File 'lib/sws/Core/components/Repetition/Repetition.rb', line 25

def tokenize_binding ( key,value )

  if ( md = /^(\d+)\.(.*)$/.match( key ) ) #extract iteration number (must be present) and rest of binding
    @subcomponents = @subcomponent_array [md[1].to_i]
    super( md[2],value )
  else #without dot - should never happen here (repetition has no settable bindings)
    raise( "Cannot set parameter #{key} to value #{value} in Repetition" )
  end

end