Module: ASIR::Message::Delay
- Included in:
- Transport
- Defined in:
- lib/asir/transport/delay.rb,
lib/asir/message/delay.rb
Overview
!SLIDE Message Delay Support
Instance Method Summary collapse
-
#relative_message_delay!(message, now = nil) ⇒ Object
Returns the number of seconds from now, that the message should be delayed.
- #wait_for_delay!(message) ⇒ Object
Instance Method Details
#relative_message_delay!(message, now = nil) ⇒ Object
Returns the number of seconds from now, that the message should be delayed. If message.delay is Numeric, sets message.delay to the Time to delay til. If message.delay is Time, returns (now - message.delay).to_f Returns Float if message.delay was set, or nil. Returns 0 if delay has already expired.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/asir/message/delay.rb', line 9 def , now = nil case delay = .delay when nil when Numeric now ||= Time.now delay = delay.to_f .delay = (now + delay).utc when Time now ||= Time.now delay = (delay - now).to_f delay = 0 if delay < 0 else raise TypeError, "Expected message.delay to be Numeric or Time, given #{delay.class}" end delay end |
#wait_for_delay!(message) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/asir/message/delay.rb', line 26 def wait_for_delay! while (delay = ()) && delay > 0 sleep delay end self end |