# class Rinda::NotifyTemplateEntry

A `NotifyTemplateEntry` is returned by `TupleSpace#notify` and is notified of `TupleSpace` changes. You may receive either your subscribed event or the ‘close’ event when iterating over notifications.

See `TupleSpace#notify_event` for valid notification types.

## Example¶ ↑

    ts = Rinda::TupleSpace.new
    observer = ts.notify 'write', [nil]

    Thread.start do
      observer.each { |t| p t }
    end

    3.times { |i| ts.write [i] }

Outputs:

    ['write', [0]]
    ['write', [1]]
    ['write', [2]]

### Public Class Methods

new(place, event, tuple, expires=nil) click to toggle source

Creates a new `NotifyTemplateEntry` that watches `place` for +event+s that match `tuple`.

Calls superclass method `Rinda::TupleEntry::new`

    # File lib/rinda/tuplespace.rb, line 245
    def initialize(place, event, tuple, expires=nil)
      ary = [event, Rinda::Template.new(tuple)]
      super(ary, expires)
      @queue = Thread::Queue.new
      @done = false
    end

### Public Instance Methods

each() { |event, tuple| ... } click to toggle source

Yields event/tuple pairs until this `NotifyTemplateEntry` expires.

    # File lib/rinda/tuplespace.rb, line 273
    def each # :yields: event, tuple
      while !@done
        it = pop
        yield(it)
      end
    rescue
    ensure
      cancel
    end

notify(ev) click to toggle source

Called by `TupleSpace` to notify this `NotifyTemplateEntry` of a new event.

    # File lib/rinda/tuplespace.rb, line 255
    def notify(ev)
      @queue.push(ev)
    end

pop() click to toggle source

Retrieves a notification. Raises `RequestExpiredError` when this `NotifyTemplateEntry` expires.

    # File lib/rinda/tuplespace.rb, line 263
    def pop
      raise RequestExpiredError if @done
      it = @queue.pop
      @done = true if it[0] == 'close'
      return it
    end