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|