Class: Gloo::Objs::Repeat

Inherits:
Core::Obj show all
Defined in:
lib/gloo/objs/ctrl/repeat.rb

Constant Summary collapse

KEYWORD =
'repeat'.freeze
KEYWORD_SHORT =
'repeat'.freeze
TIMES =
'times'.freeze
INDEX =
'index'.freeze
DO =
'do'.freeze

Constants inherited from Core::Baseo

Core::Baseo::NOT_IMPLEMENTED_ERR

Instance Attribute Summary

Attributes inherited from Core::Obj

#children, #parent, #value

Attributes inherited from Core::Baseo

#name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Core::Obj

#add_child, can_create?, #can_receive_message?, #child_count, #child_index, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, #find_child_resolve_alias, #find_child_value, help, inherited, #initialize, #is_alias?, #is_container?, #is_function?, #msg_blank?, #msg_contains?, #msg_reload, #msg_responds_to?, #msg_unload, #multiline_value?, #pn, #remove_child, #render, #root?, #send_message, #set_parent, #set_value, #sql_value, #type_display, #value_display, #value_is_array?, #value_is_blank?, #value_string?

Methods inherited from Core::Baseo

#initialize, #type_display

Constructor Details

This class inherits a constructor from Gloo::Core::Obj

Class Method Details

.doc_dataObject

Get the object's documentation data.



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/gloo/objs/ctrl/repeat.rb', line 112

def self.doc_data
  {
    :name => KEYWORD,
    :shortcut => KEYWORD_SHORT,
    :description => 'Run a script a given number of times.',
    :children => [
      'times (integer) — Default: 0. The number of times to run the script.',
      'index (integer) — Default: 0. The current iteration when the repeat loop is running.',
      'do (script) — The action to perform for each iteration of the loop.'
    ],
    :messages => [
      'run — Run the script for the given number of times.'
    ],
    :examples => <<~EXAMPLES.strip
      repeat [can] :
        s [string] :
        on_load [script] :
          put $.screen_cols / 2 into repeat.x.times
          tell repeat.x to run
          show repeat.s
          tell repeat.y to run
          show repeat.s
        x [repeat] :
          times [integer] : 30
          index [integer] : 0
          do [script] : put repeat.s + '-' into repeat.s
        y [repeat] :
          times [integer] : 10
          index [integer] : 0
          do [script] : show repeat.y.index
    EXAMPLES
  }
end

.messagesObject

Get a list of message names that this object receives.



91
92
93
# File 'lib/gloo/objs/ctrl/repeat.rb', line 91

def self.messages
  return super + [ 'run' ]
end

.short_typenameObject

The short name of the object type.



27
28
29
# File 'lib/gloo/objs/ctrl/repeat.rb', line 27

def self.short_typename
  return KEYWORD_SHORT
end

.typenameObject

The name of the object type.



20
21
22
# File 'lib/gloo/objs/ctrl/repeat.rb', line 20

def self.typename
  return KEYWORD
end

Instance Method Details

#add_children_on_create?Boolean

Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.

Returns:



68
69
70
# File 'lib/gloo/objs/ctrl/repeat.rb', line 68

def add_children_on_create?
  return true
end

#add_default_childrenObject

Add children to this object. This is used by containers to add children needed for default configurations.



77
78
79
80
81
82
# File 'lib/gloo/objs/ctrl/repeat.rb', line 77

def add_default_children
  fac = @engine.factory
  fac.create_int TIMES, 0, self
  fac.create_int INDEX, 0, self
  fac.create_script DO, '', self
end

#msg_runObject

Run the repeat loop.



98
99
100
101
102
103
# File 'lib/gloo/objs/ctrl/repeat.rb', line 98

def msg_run
  times.times do |index|
    set_index index
    run_do
  end
end

#run_doObject

Run the do script once.



42
43
44
45
46
47
# File 'lib/gloo/objs/ctrl/repeat.rb', line 42

def run_do
  o = find_child DO
  return unless o

  Gloo::Exec::Dispatch.message( @engine, 'run', o )
end

#set_index(index) ⇒ Object

Set the index of the current iteration.



52
53
54
55
56
57
# File 'lib/gloo/objs/ctrl/repeat.rb', line 52

def set_index( index )
  o = find_child INDEX
  return unless o

  o.set_value index
end

#timesObject

Get the URI from the child object. Returns nil if there is none.



35
36
37
# File 'lib/gloo/objs/ctrl/repeat.rb', line 35

def times
  return find_child_value( TIMES ) || 0
end