Class: Timers::Timer

### Home Classes Methods

### In Files

- lib/timers/timer.rb

### Parent

Object

### Methods

- ::new
- #call
- #cancel
- #continue
- #delay
- #fire
- #fires_in
- #inspect
- #pause
- #paused?
- #reset
- #resume

### Included Modules

- Comparable

### Class/Module Index

Quicksearch

- Timers
- Timers::Events
- Timers::Events::Handle
- Timers::Group
- Timers::Timer
- Timers::Wait

No matching classes.

# Timers::Timer

An individual timer set to fire a given proc at a given time. A timer is always connected to a Timer::Group but it would ONLY be in @group.timers if it also has a @handle specified. Otherwise it is either PAUSED or has been FIRED and is not recurring. You can manually enter this state by calling cancel and resume normal operation by calling reset.

### Attributes

interval[R]
offset[R]
recurring[R]

### Public Class Methods

new(group, interval, recurring = false, offset = nil, &block) click to toggle source

    # File lib/timers/timer.rb, line 12
    def initialize(group, interval, recurring = false, offset = nil, &block)
      @group = group

      @interval = interval
      @recurring = recurring
      @block = block
      @offset = offset

      @handle = nil

      # If a start offset was supplied, use that, otherwise use the current timers offset.
      reset(@offset || @group.current_offset)
    end

### Public Instance Methods

call(offset = @group.current_offset) click to toggle source
Alias for: fire
cancel() click to toggle source

Cancel this timer. Do not call while paused.

    # File lib/timers/timer.rb, line 61
    def cancel
      return unless @handle

      @handle.cancel! if @handle
      @handle = nil

      # This timer is no longer valid:
      @group.timers.delete self if @group
    end

continue() click to toggle source
Alias for: resume
delay(seconds) click to toggle source

Extend this timer

    # File lib/timers/timer.rb, line 52
    def delay(seconds)
      @handle.cancel! if @handle

      @offset += seconds

      @handle = @group.events.schedule(@offset, self)
    end

fire(offset = @group.current_offset) click to toggle source

Fire the block.

    # File lib/timers/timer.rb, line 87
    def fire(offset = @group.current_offset)
      if recurring == :strict
        # ... make the next interval strictly the last offset + the interval:
        reset(@offset)
      elsif recurring
        reset(offset)
      else
        @offset = offset
      end

      @block.call(offset)

      cancel unless recurring
    end

Also aliased as: call
fires_in() click to toggle source

Number of seconds until next fire / since last fire

    # File lib/timers/timer.rb, line 105
    def fires_in
      @offset - @group.current_offset if @offset
    end

inspect() click to toggle source

Inspect a timer

    # File lib/timers/timer.rb, line 110
    def inspect
      str = "#<Timers::Timer:#{object_id.to_s(16)} "

      if @offset
        if fires_in >= 0
          str << "fires in #{fires_in} seconds"
        else
          str << "fired #{fires_in.abs} seconds ago"
        end

        str << ", recurs every #{interval}" if recurring
      else
        str << "dead"
      end

      str << ">"
    end

pause() click to toggle source

    # File lib/timers/timer.rb, line 30
    def pause
      return if paused?

      @group.timers.delete self
      @group.paused_timers.add self

      @handle.cancel! if @handle
      @handle = nil
    end

paused?() click to toggle source

    # File lib/timers/timer.rb, line 26
    def paused?
      @group.paused_timers.include? self
    end

reset(offset = @group.current_offset) click to toggle source

Reset this timer. Do not call while paused.

    # File lib/timers/timer.rb, line 72
    def reset(offset = @group.current_offset)
      # This logic allows us to minimise the interaction with @group.timers.
      # A timer with a handle is always registered with the group.
      if @handle
        @handle.cancel!
      else
        @group.timers << self
      end

      @offset = Float(offset) + @interval

      @handle = @group.events.schedule(@offset, self)
    end

resume() click to toggle source

    # File lib/timers/timer.rb, line 40
    def resume
      return unless paused?

      @group.paused_timers.delete self

      # This will add us back to the group:
      reset
    end

Also aliased as: continue

[Validate]

Generated with the Darkfish Rdoc Generator 2.