Class: Yast::SequencerClass
- Inherits:
-
Module
- Object
- Module
- Yast::SequencerClass
- Defined in:
- ../../src/modules/Sequencer.rb
Instance Method Summary (collapse)
- - (Object) main
-
- (Object) Run(aliases, sequence)
The Wizard Sequencer.
-
- (Yast::Term) WS_alias(aliases, _alias)
Find an aliases in the aliases map.
-
- (Object) WS_check(aliases, sequence)
Check correct types in maps and alias presence for sequence.
-
- (Object) WS_error(error)
Report error and return nil.
-
- (Object) WS_next(sequence, current, ret)
Find a next item in the sequence.
-
- (new stack, poped value) WS_pop(stack)
Pop one item from the stack (remove an item and return the stack top item).
-
- (Object) WS_push(stack, item)
Push one item to the stack.
-
- (Object) WS_run(aliases, id)
Run a function from the aliases map.
-
- (Object) WS_special(aliases, _alias)
Decide if an alias is special.
-
- (Object) WS_testall(aliases)
Test (run) all dialogs in the aliases map.
Instance Method Details
- (Object) main
41 42 43 44 45 |
# File '../../src/modules/Sequencer.rb', line 41 def main textdomain "base" @docheck = true end |
- (Object) Run(aliases, sequence)
The Wizard Sequencer
317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 |
# File '../../src/modules/Sequencer.rb', line 317 def Run(aliases, sequence) aliases = deep_copy(aliases) sequence = deep_copy(sequence) # Check aliases and sequence correctness if @docheck && WS_check(aliases, sequence) != true return Convert.to_symbol(WS_error("CHECK FAILED")) end stack = [] # string|symbol current current = Ops.get(sequence, "ws_start") if current == nil return Convert.to_symbol(WS_error("Starting dialog not found")) end while true if Ops.is_symbol?(current) Builtins.y2debug("Finished") return Convert.to_symbol(current) end stack = WS_push(stack, current) Builtins.y2debug("stack=%1", stack) ret = WS_run(aliases, Convert.to_string(current)) if ret == nil || !Ops.is_symbol?(ret) return Convert.to_symbol( WS_error(Builtins.sformat("Invalid ret: %1", ret)) ) elsif ret == :back Builtins.y2debug("Back") poped = [] special = true begin return :back if Ops.less_than(Builtins.size(stack), 2) poped = WS_pop(stack) Builtins.y2debug("poped=%1", poped) current = Ops.get(poped, 1) stack = Ops.get_list(poped, 0) special = WS_special(aliases, Convert.to_string(current)) Builtins.y2debug("special=%1", special) end while special else Builtins.y2debug("ret=%1", ret) current = WS_next( sequence, Convert.to_string(current), Convert.to_symbol(ret) ) Builtins.y2debug("current=%1", current) if current == nil return Convert.to_symbol( WS_error(Builtins.sformat("Next not found: %1", current)) ) end end end # Not reached nil end |
- (Yast::Term) WS_alias(aliases, _alias)
Find an aliases in the aliases map
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File '../../src/modules/Sequencer.rb', line 193 def WS_alias(aliases, _alias) aliases = deep_copy(aliases) found = Ops.get(aliases, _alias) if found == nil return WS_error(Builtins.sformat("Alias not found: %1", _alias)) end if Ops.is_list?(found) if Ops.less_or_equal(Builtins.size(Convert.to_list(found)), 0) return WS_error(Builtins.sformat("Invalid alias: %1", found)) end found = Ops.get(Convert.to_list(found), 0) end if found == nil return WS_error(Builtins.sformat("Invalid alias: %1", found)) end # FIXME: use function pointers # if (is(found, term)) return deep_copy(found) WS_error(Builtins.sformat("Invalid alias: %1", found)) end |
- (Object) WS_check(aliases, sequence)
Check correct types in maps and alias presence for sequence.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 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 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File '../../src/modules/Sequencer.rb', line 60 def WS_check(aliases, sequence) aliases = deep_copy(aliases) sequence = deep_copy(sequence) ret = [] # check if aliases is not a nil if aliases == nil Builtins.y2error(2, "sequencer check: aliases is nil") return false end # check if sequence is not a nil if sequence == nil Builtins.y2error(2, "sequencer check: sequence is nil") return false end # check if ws_start is in aliases if Ops.get(aliases, "ws_start") != nil Builtins.y2error(2, "sequencer check: ws_start cannot be an alias name") ret = Builtins.add(ret, false) else ret = Builtins.add(ret, true) end # check aliases map types ret0 = Builtins.maplist(aliases) do |key, val| if !Ops.is_string?(key) Builtins.y2error(2, "sequencer check: not a string: %1", key) next false elsif Ops.is_list?(val) if Ops.less_than(Builtins.size(Convert.to_list(val)), 2) Builtins.y2error( 2, "sequencer check: list size too small: %1 (key: %2)", Builtins.size(Convert.to_list(val)), key ) next false # FIXME: use function pointers # else if (!is(select((list) val, 0, nil), term)) { # y2error(2, "sequencer check: not a term: %1", select((list) val, 0, nil)); # return false; # } elsif !Ops.is_boolean?(Ops.get(Convert.to_list(val), 1)) Builtins.y2error( 2, "sequencer check: not a boolean: %1", Ops.get(Convert.to_list(val), 1) ) next false else next true end else # FIXME: use function pointers # else if (!is(val, term)) { # y2error(2, "sequencer check: not a term: %1", val); # return false; # } next true end end ret = Builtins.flatten([ret, ret0]) # check if ws_start is in sequence if Ops.get(sequence, "ws_start") == nil Builtins.y2error(2, "sequencer check: ws_start needs to be defined") ret = Builtins.add(ret, false) else ret = Builtins.add(ret, true) end # check all aliases in sequence ret0 = Builtins.maplist(sequence) do |key, val| if key == "ws_start" if !Ops.is_symbol?(val) && Ops.get(aliases, val) == nil Builtins.y2error(2, "sequencer check: alias not found: %1", val) next false else next true end elsif Ops.get(aliases, key) == nil Builtins.y2error(2, "sequencer check: alias not found: %1", key) next false elsif !Ops.is_map?(val) Builtins.y2error(2, "sequencer check: not a map: %1 %2", key, val) next false else ret1 = Builtins.maplist(Convert.to_map(val)) do |k, v| if !Ops.is_symbol?(k) Builtins.y2error(2, "sequencer check: not a symbol: %1", k) next false elsif !Ops.is_symbol?(v) && Ops.get(aliases, v) == nil Builtins.y2error(2, "sequencer check: alias not found: %1", v) next false else next true end end next false if Builtins.find(ret1) { |n| n == false } != nil next true end end ret = Builtins.flatten([ret, ret0]) # check that all aliases are used ret0 = Builtins.maplist(aliases) do |key, val| if !Builtins.haskey(sequence, key) Builtins.y2warning(2, "sequencer check: alias not used: %1", key) # return false; end true end ret = Builtins.flatten([ret, ret0]) return false if Builtins.find(ret) { |n| n == false } != nil true end |
- (Object) WS_error(error)
Report error and return nil
184 185 186 187 |
# File '../../src/modules/Sequencer.rb', line 184 def WS_error(error) Builtins.y2error(1, "sequencer: %1", error) nil end |
- (Object) WS_next(sequence, current, ret)
Find a next item in the sequence
240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File '../../src/modules/Sequencer.rb', line 240 def WS_next(sequence, current, ret) sequence = deep_copy(sequence) found = Ops.get_map(sequence, current) if found == nil return WS_error(Builtins.sformat("Current not found: %1", current)) end # string|symbol next _next = Ops.get(found, ret) if _next == nil return WS_error(Builtins.sformat("Symbol not found: %1", ret)) end deep_copy(_next) end |
- (new stack, poped value) WS_pop(stack)
Pop one item from the stack (remove an item and return the stack top item)
303 304 305 306 307 308 309 310 311 |
# File '../../src/modules/Sequencer.rb', line 303 def WS_pop(stack) stack = deep_copy(stack) return nil if stack == nil num = Builtins.size(stack) return nil if Ops.less_than(num, 2) newstack = Builtins.remove(stack, Ops.subtract(num, 1)) poped = Ops.get(stack, Ops.subtract(num, 2)) [newstack, poped] end |
- (Object) WS_push(stack, item)
Push one item to the stack
283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
# File '../../src/modules/Sequencer.rb', line 283 def WS_push(stack, item) stack = deep_copy(stack) item = deep_copy(item) return nil if stack == nil return Builtins.add(stack, item) if !Builtins.contains(stack, item) found = false newstack = Builtins.filter(stack) do |v| next false if found found = true if v == item true end deep_copy(newstack) end |
- (Object) WS_run(aliases, id)
Run a function from the aliases map
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
# File '../../src/modules/Sequencer.rb', line 258 def WS_run(aliases, id) aliases = deep_copy(aliases) Builtins.y2debug("Running: %1", id) function = nil function = WS_alias(aliases, id) if function == nil return Convert.to_symbol(WS_error(Builtins.sformat("Bad id: %1", id))) end ret = Builtins.eval(function) if !Ops.is_symbol?(ret) return Convert.to_symbol( WS_error(Builtins.sformat("Returned value not symbol: %1", ret)) ) end Convert.to_symbol(ret) end |
- (Object) WS_special(aliases, _alias)
Decide if an alias is special
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
# File '../../src/modules/Sequencer.rb', line 218 def WS_special(aliases, _alias) aliases = deep_copy(aliases) found = Ops.get(aliases, _alias) if found == nil return Convert.to_boolean( WS_error(Builtins.sformat("Alias not found: %1", _alias)) ) end ret = false if Ops.is_list?(found) if Ops.greater_than(Builtins.size(Convert.to_list(found)), 1) ret = Ops.get_boolean(Convert.to_list(found), 1) end end ret end |
- (Object) WS_testall(aliases)
Test (run) all dialogs in the aliases map
51 52 53 54 |
# File '../../src/modules/Sequencer.rb', line 51 def WS_testall(aliases) aliases = deep_copy(aliases) Builtins.maplist(aliases) { |id, func| Builtins.eval(func) } end |