Sha256: a6c093cd379e5a14cad916ca3e4f11560b136a4f92589d4438bf91b00f0c3a72

Contents?: true

Size: 1.69 KB

Versions: 4

Compression:

Stored size: 1.69 KB

Contents

# Copyright: Copyright (c) 2004  Nicolas Despres. All rights reserved.
# Author: Nicolas Despres  <polrop@lrde.epita.fr>.
# License: Gnu General Public License.

# $LastChangedBy: polrop $
# $Id: drb_observable.rb 100 2005-01-15 07:45:14Z polrop $


require 'drb/observer'

require 'observable'


module DRb

  module DRbObservable
    include Observable

    undef notify_observers
    def notify_observers(*args, &block)
      if defined? @observer_state and @observer_state
	if defined? @observer_peers
	  for i in @observer_peers.dup
	    begin
	      i.update(*args, &block)
	    rescue
	      delete_observer(i)
	    end
	  end
	end
	@observer_state = false
      end
    end

    def notify_observer(observer, *arg, &block)
      if defined? @observer_state and @observer_state
        if defined? @observer_peers
          if @observer_peers.include?(observer)
            begin
              observer.update(*arg, &block)
            rescue
              delete_observer(observer)
            end
          end
        end
        @observer_state = false
      end
    end

  end # module DRbObservable

end # module DRb


if defined? TEST_MODE or __FILE__ == $0


require 'test/unit/ui/yaml/testrunner'


module DRb

  class ObservablePoolTest < ::Test::Unit::TestCase

    class Obsv
      include DRbObservable

    end

    class Foo

      def update(*args, &block)
        raise 'toto'
      end

    end

    def test_simple
      o = Obsv.new
      assert_respond_to(o, :list_observers)
      o.add_observer(Foo.new)
      assert_equal(1, o.count_observers)
      o.changed
      o.notify_observers('msg')
      assert_equal(0, o.count_observers)
    end


  end # class ObservablePoolTest

end # module DRb


end



Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
ttk-0.1.576 ruby_ex/drb/drb_observable.rb
ttk-0.1.580 ruby_ex/drb/drb_observable.rb
ttk-0.1.579 ruby_ex/drb/drb_observable.rb
vcs-0.2.148 ruby_ex/drb/drb_observable.rb