1#--
2#
3# Author:: Nathaniel Talbott.
4# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5# License:: Ruby license.
6
7module Test
8  module Unit
9    module Util
10
11      # Allows the storage of a Proc passed through '&' in a
12      # hash.
13      #
14      # Note: this may be inefficient, since the hash being
15      # used is not necessarily very good. In Observable,
16      # efficiency is not too important, since the hash is
17      # only accessed when adding and removing listeners,
18      # not when notifying.
19
20      class ProcWrapper
21
22        # Creates a new wrapper for a_proc.
23        def initialize(a_proc)
24          @a_proc = a_proc
25          @hash = a_proc.inspect.sub(/^(#<#{a_proc.class}:)/){''}.sub(/(>)$/){''}.hex
26        end
27
28        def hash
29          return @hash
30        end
31
32        def ==(other)
33          case(other)
34            when ProcWrapper
35              return @a_proc == other.to_proc
36            else
37              return super
38          end
39        end
40        alias :eql? :==
41
42        def to_proc
43          return @a_proc
44        end
45      end
46    end
47  end
48end
49