Class: DRbQS::TaskGenerator
- Inherits:
-
Object
- Object
- DRbQS::TaskGenerator
- Defined in:
- lib/drbqs/task_generator.rb
Constant Summary collapse
- DEBUG_TASK_PROGRESS =
1000
Instance Method Summary collapse
-
#debug_all_tasks(opts = {}) ⇒ Object
Create all tasks for test and return [group_number, task_number] if all tasks created properly.
- #have_next? ⇒ Boolean
- #init ⇒ Object
-
#initialize(data = {}) ⇒ TaskGenerator
constructor
A new instance of TaskGenerator.
-
#new_tasks ⇒ Object
Return an array of new tasks.
-
#set(opts = {}, &block) ⇒ Object
The options :generate and :collect are available.
- #waiting? ⇒ Boolean
Constructor Details
#initialize(data = {}) ⇒ TaskGenerator
Returns a new instance of TaskGenerator.
33 34 35 36 37 38 39 40 |
# File 'lib/drbqs/task_generator.rb', line 33 def initialize(data = {}) @source = DRbQS::TaskSource.new(data) @fiber = nil @iterate = nil @task_set = nil @fiber_init = nil @wait = false end |
Instance Method Details
#debug_all_tasks(opts = {}) ⇒ Object
Create all tasks for test and return [group_number, task_number] if all tasks created properly.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/drbqs/task_generator.rb', line 115 def debug_all_tasks(opts = {}) limit = opts[:limit] progress = opts[:progress] group_number = 0 task_number = 0 while ary = new_tasks ary.each do |t| unless DRbQS::Task === t raise "Invalid #{i}th task: #{t.inspect}" end task_number += 1 if progress && (task_number % DEBUG_TASK_PROGRESS == 0) puts "#{task_number} tasks have been created." end if limit && task_number > limit break end end group_number += 1 end [group_number, task_number] end |
#have_next? ⇒ Boolean
42 43 44 |
# File 'lib/drbqs/task_generator.rb', line 42 def have_next? !!@fiber end |
#init ⇒ Object
71 72 73 |
# File 'lib/drbqs/task_generator.rb', line 71 def init @fiber_init.call if @fiber_init end |
#new_tasks ⇒ Object
Return an array of new tasks.
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 |
# File 'lib/drbqs/task_generator.rb', line 76 def new_tasks if @fiber @wait = false task_ary = [] iteration = @iterate iteration *= @task_set if @task_set iteration.times do |i| if task_new = @fiber.resume case task_new when DRbQS::Task task_ary << task_new when Array task_ary.concat(task_new) when :wait @wait = true break else raise "Invalid type of new task." end else @fiber = nil break end end if task_ary.size > 0 if @task_set task_ary = task_ary.each_slice(@task_set).map do |ary| DRbQS::TaskSet.new(ary) end end return task_ary end end nil end |
#set(opts = {}, &block) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/drbqs/task_generator.rb', line 53 def set(opts = {}, &block) @iterate = opts[:generate] || 1 @task_set = opts[:collect] if @iterate < 1 || (@task_set && @task_set < 1) raise ArgumentError, "Invalid option." end @fiber_init = lambda do @fiber = Fiber.new do begin @source.instance_eval(&block) rescue => err raise DRbQS::TaskCreatingError, "\n #{err.to_s}\n#{err.backtrace.join("\n")}" end nil end end end |
#waiting? ⇒ Boolean
46 47 48 |
# File 'lib/drbqs/task_generator.rb', line 46 def waiting? @wait end |