lib/pagetience/meditate.rb in pagetience-0.2.1 vs lib/pagetience/meditate.rb in pagetience-0.3.0

- old
+ new

@@ -1,25 +1,36 @@ module Pagetience class Meditate + DEFAULT_TIMEOUT_MESSAGE = 'Timed out waiting for the expected result.' + attr_accessor :timeout, :polling, :block + class << self + def for(opts, &block) + opts[:timeout] ||= 30 + opts[:polling] ||= 1 + opts[:msg] ||= DEFAULT_TIMEOUT_MESSAGE + Meditate.new(opts[:timeout], opts[:polling]) { block.call }.until_enlightened opts[:expecting], opts[:msg] + end + end + def initialize(timeout=30, polling=1, &block) @timeout = timeout @polling = polling @block = block end - def until_enlightened(expected=nil, msg='Timed out waiting for the expected result.') + def until_enlightened(expected=nil, msg=DEFAULT_TIMEOUT_MESSAGE) raise ArgumentError, 'Timeout cannot be lower than the polling value.' unless @timeout > @polling while @timeout > 0 && @timeout > @polling @latest_result = @block.call - break unless expected && @latest_result != expected + break if @latest_result == expected sleep @polling @timeout = @timeout - @polling end - raise Pagetience::Exceptions::Timeout, msg unless @latest_result + raise Pagetience::Exceptions::Timeout, msg unless @latest_result == expected @latest_result end end end \ No newline at end of file