48 lines
929 B
Ruby
48 lines
929 B
Ruby
module RakeControl
|
|
class Wrapper
|
|
attr_reader :name, :description, :block, :success, :exception, :execution_time
|
|
|
|
def initialize(name, description, block)
|
|
@name = name
|
|
@description = description
|
|
@block = block
|
|
@success = true
|
|
end
|
|
|
|
def execute
|
|
result = measure_time do
|
|
intercept_exceptions do
|
|
block.call
|
|
end
|
|
end
|
|
save_statistics
|
|
|
|
success ? result : raise(exception)
|
|
end
|
|
|
|
private
|
|
|
|
def measure_time
|
|
t = Time.now
|
|
result = yield
|
|
@execution_time = Time.now.to_f - t.to_f
|
|
result
|
|
end
|
|
|
|
def intercept_exceptions
|
|
begin
|
|
yield
|
|
rescue => e
|
|
@success = false
|
|
@exception = e
|
|
nil
|
|
end
|
|
end
|
|
|
|
def save_statistics
|
|
puts "Task #{name} #{success ? 'finished successfully' : 'failed'}"
|
|
puts "Execution time: #{execution_time.round(4)}"
|
|
end
|
|
end
|
|
end
|