summaryrefslogtreecommitdiff
path: root/qa/qa/scenario/bootable.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/scenario/bootable.rb')
-rw-r--r--qa/qa/scenario/bootable.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/qa/qa/scenario/bootable.rb b/qa/qa/scenario/bootable.rb
new file mode 100644
index 00000000000..22496bcc2fc
--- /dev/null
+++ b/qa/qa/scenario/bootable.rb
@@ -0,0 +1,47 @@
+require 'optparse'
+
+module QA
+ module Scenario
+ module Bootable
+ Option = Struct.new(:name, :arg, :desc)
+
+ def self.included(base)
+ base.extend(ClassMethods)
+ end
+
+ module ClassMethods
+ def launch!(argv)
+ arguments = OptionParser.new do |parser|
+ options.to_a.each do |opt|
+ parser.on(opt.arg, opt.desc) do |value|
+ Runtime::Scenario.define(opt.name, value)
+ end
+ end
+ end
+
+ arguments.parse!(argv)
+
+ if has_attributes?
+ self.perform(**Runtime::Scenario.attributes)
+ else
+ self.perform(*argv)
+ end
+ end
+
+ private
+
+ def attribute(name, arg, desc)
+ options.push(Option.new(name, arg, desc))
+ end
+
+ def options
+ @options ||= []
+ end
+
+ def has_attributes?
+ options.any?
+ end
+ end
+ end
+ end
+end