lib/dicer/delegator.rb in dicer-0.2.0 vs lib/dicer/delegator.rb in dicer-0.3.0
- old
+ new
@@ -2,13 +2,17 @@
class Delegator
def self.make(target_class, behaviors)
delegator = Class.new(Dicer::Delegator)
delegator.delegate_to(target_class)
delegator.class_eval do
+ include Dicer::Contextable
+
behaviors.each do |behavior|
include behavior
end
+
+ @@behaviors = behaviors
end
return delegator
end
@@ -16,24 +20,32 @@
@except_methods ||= [
:__send__,
:__id__,
:object_id,
:respond_to?,
+ :pure,
+ :in_context,
+ :as,
+ :behaves_like,
:methods,
:public_methods,
:private_methods,
:protected_methods,
:method_missing,
+ :behaviors,
# for RSpec
:should,
:should_not
]
end
def self.include(behavior)
super(behavior)
- self.except_methods.concat(behavior.behavior_methods)
+
+ if behavior <= Dicer::Behavior
+ self.except_methods.concat(behavior.behavior_methods)
+ end
end
def self.delegate_to(klass)
delegate_methods = klass.public_methods.map(&:to_sym) - self.except_methods
def_delegators(klass, *delegate_methods)
@@ -51,10 +63,14 @@
def initialize(object)
@delegate_object = object
end
+ def pure
+ @delegate_object
+ end
+
def respond_to?(name, private = false)
super || @delegate_object.respond_to?(name)
end
def methods(*args)
@@ -74,7 +90,17 @@
end
def method_missing(name, *args, &block)
@delegate_object.send(name, *args, &block)
end
+
+ def behaviors
+ if pure.respond_to?(:behaviors)
+ pure.behaviors | @@behaviors
+ else
+ @@behaviors
+ end
+ end
+
+ alias_method :__class__, :class
end
end