lib/commands/support.rb in testlab-1.21.1 vs lib/commands/support.rb in testlab-1.22.0

- old
+ new

@@ -55,34 +55,46 @@ c.long_desc(ZTK::Template.string(action_desc.last, {:component => "#{component}s"})) c.command lab_action do |la| la.action do |global_options, options, args| - iterate_objects_by_name(options[:name], klass) do |object| - if %w( build recycle ).map(&:to_sym).include?(lab_action) - object.send(lab_action, options[:force]) - else - object.send(lab_action) - end + objects = iterate_objects_by_name(options[:name], klass) + + @testlab.do_parallel_actions(klass, objects, lab_action) do |object, action, klass| + send_lab_action(object, options, action) end end end end !block.nil? and block.call(c) end end +def send_lab_action(object, options, lab_action) + if %w( build recycle ).map(&:to_sym).include?(lab_action) + object.send(lab_action, options[:force]) + else + object.send(lab_action) + end +end + def iterate_objects_by_name(name, klass, &block) objects = Array.new klass_name = klass.to_s.split('::').last.downcase - if name.nil? - objects = klass.all.select{ |object| (!object.template rescue true) } - else + objects = klass.all.select{ |o| (!o.template rescue true) } + if !name.nil? names = name.split(',') - objects = klass.find(names).select{ |object| (!object.template rescue true) } + + not_names = names.collect { |n| ((n[0] == '!') and n[1..-1]) }.delete_if {|n| n == false }.compact + names.delete_if { |n| n[0] == '!' } + + if names.size > 0 + objects = klass.find(names).select{ |o| (!o.template rescue true) } + end + objects.delete_if{ |o| not_names.include?(o.id.to_s.downcase) } end (objects.nil? || (objects.count == 0)) and raise TestLab::TestLabError, "We could not find any of the #{klass_name}s you supplied!" objects.each do |object|