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