vmc-ng/spec/patches.rb in vmc-0.4.0.beta.30 vs vmc-ng/spec/patches.rb in vmc-0.4.0.beta.31
- old
+ new
@@ -1,9 +1,39 @@
# [EventLog]
$vmc_event = nil
class VMC::CLI
+ class ProgressEventReporter
+ def initialize(message, skipper)
+ @message = message
+ @skipper = skipper
+ @skipped = false
+ end
+
+ def skip(&blk)
+ @skipped = true
+ $vmc_event.skipped(@message)
+ @skipper.skip(&blk)
+ end
+
+ def fail(&blk)
+ @skipped = true
+ $vmc_event.failed_to(@message)
+ @skipper.fail(&blk)
+ end
+
+ def give_up(&blk)
+ @skipped = true
+ $vmc_event.gave_up(@message)
+ @skipper.give_up(&blk)
+ end
+
+ def skipped?
+ @skipped
+ end
+ end
+
def ask(*args)
$vmc_event.asking(*args) if $vmc_event
super
end
@@ -12,9 +42,24 @@
super
end
def force?
false
+ end
+
+ def with_progress(msg, &blk)
+ super(msg) do |s|
+ reporter = ProgressEventReporter.new(msg, s)
+
+ res = blk.call(reporter)
+
+ $vmc_event.did(msg) unless reporter.skipped?
+
+ res
+ end
+ rescue
+ $vmc_event.failed_to(msg)
+ raise
end
end
class Mothership::Inputs
alias_method :vmc_spec_get, :[]