1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
require 'delegate'
module DelegateSpecs
class Simple
def pub
:foo
end
def respond_to_missing?(method, priv=false)
method == :pub_too ||
(priv && method == :priv_too)
end
def method_missing(method, *args)
super unless respond_to_missing?(method, true)
method
end
def priv(arg=nil)
yield arg if block_given?
[:priv, arg]
end
private :priv
def prot
:protected
end
protected :prot
end
module Extra
def extra
:cheese
end
def extra_private
:bar
end
private :extra_private
def extra_protected
:baz
end
protected :extra_protected
end
class Delegator < ::Delegator
attr_accessor :data
attr_reader :__getobj__
def __setobj__(o)
@__getobj__ = o
end
# Needed for 1.8.x compatibility
def initialize(obj)
super
__setobj__(obj)
end
include Extra
end
class DelegateClass < DelegateClass(Simple)
include Extra
end
end
|