Exit loop after checking for some time

hi all, i’m really new to ruby and i need to do a script that will check
my email every 5minutes and after 20minutes of no new mail it will
produce “test fail” (im a tester by the way). i have found a cool code
for checking email every 5min but i could not find a way to stop it
after 20minutes? any help is greatly appreciated :slight_smile:

here’s the code: (i took credit to the originator of the code here and
my sincere thanks…:))

def time_block
start_time = Time.now
Thread.new { yield }
Time.now - start_time
end

def repeat_every(seconds)
begin
time_spent = time_block { yield }
sleep(seconds - time_spent)
end while time_spent < seconds
end

repeat_every(300) { # checking of email ever 5 minutes
puts “Start checking: #{Time.now}”

email checking here

puts “End checking: #{Time.now}”
}

On Apr 9, 4:59 am, Claire H. [email protected] wrote:

start_time = Time.now

repeat_every(300) { # checking of email ever 5 minutes
puts “Start checking: #{Time.now}”

email checking here

puts “End checking: #{Time.now}”}


Posted viahttp://www.ruby-forum.com/.

Easiest way is to add one more argument to the repeat_every function:

def repeat_every(seconds, checks_count)
check_no = 0
begin
time_spent = time_block { yield }
check_no += 1
break if check_no >= checks_count
sleep(seconds - time_spent)
end while time_spent < seconds
end

And call it with:

repeat_every(300, 4) {…}

Bosko I. wrote:

Easiest way is to add one more argument to the repeat_every function:

def repeat_every(seconds, checks_count)
check_no = 0
begin
time_spent = time_block { yield }
check_no += 1
break if check_no >= checks_count
sleep(seconds - time_spent)
end while time_spent < seconds
end

And call it with:

repeat_every(300, 4) {…}

hey there, thank you so much…you save me!!! my heartfelt thanks :slight_smile:

On Thu, Apr 9, 2009 at 8:29 AM, Claire H. [email protected] wrote:

[…]

def repeat_every(seconds)
begin
time_spent = time_block { yield }
sleep(seconds - time_spent)
end while time_spent < seconds
end

FYI, if time_spent > seconds in the above method, the call to sleep
will raise ‘ArgumentError: time interval must be positive’.

cheers,
lasitha

lasitha wrote:

On Thu, Apr 9, 2009 at 8:29 AM, Claire H. [email protected] wrote:

[…]

def repeat_every(seconds)
�begin
� �time_spent = time_block { yield }
� �sleep(seconds - time_spent)
�end while time_spent < seconds
end

FYI, if time_spent > seconds in the above method, the call to sleep
will raise ‘ArgumentError: time interval must be positive’.

cheers,
lasitha

hi lasitha…:slight_smile: thanks for the info…sure it helps a lot…:slight_smile: