Sha256: 0af67ba0cd681ed5e6a6e0947b4f270c57a31e4f3d25e3484b2dbd25687a6341

Contents?: true

Size: 1.03 KB

Versions: 31

Compression:

Stored size: 1.03 KB

Contents

module ASIR
  class Message
    module Delay
      # 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.
      def relative_message_delay! message, now = nil
        case delay = message.delay
        when nil
        when Numeric
          now ||= Time.now
          delay = delay.to_f
          message.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

      def wait_for_delay! message
        while (delay = relative_message_delay!(message)) && delay > 0 
          sleep delay
        end
        self
      end

    end
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
asir-1.2.11 lib/asir/message/delay.rb
asir-1.2.10 lib/asir/message/delay.rb
asir-1.2.9 lib/asir/message/delay.rb
asir-1.2.8 lib/asir/message/delay.rb
asir-1.2.7 lib/asir/message/delay.rb
asir-1.2.6 lib/asir/message/delay.rb
asir-1.2.5 lib/asir/message/delay.rb
asir-1.2.3 lib/asir/message/delay.rb
asir-1.2.2 lib/asir/message/delay.rb
asir-1.2.1 lib/asir/message/delay.rb
asir-1.2.0 lib/asir/message/delay.rb
asir-1.1.12 lib/asir/message/delay.rb
asir-1.1.11 lib/asir/message/delay.rb
asir-1.1.10 lib/asir/message/delay.rb
asir-1.1.9 lib/asir/message/delay.rb
asir-1.1.8 lib/asir/message/delay.rb
asir-1.1.7 lib/asir/message/delay.rb
asir-1.1.6 lib/asir/message/delay.rb
asir-1.1.5 lib/asir/message/delay.rb
asir-1.1.4 lib/asir/message/delay.rb