Sha256: 8d54939878f7dce082ed0c4e85e70bb3b56313da67ab8f3a7f8d2a7be8d86500

Contents?: true

Size: 963 Bytes

Versions: 25

Compression:

Stored size: 963 Bytes

Contents

module Perennial
  # Objective-C / Cocoa style 'delegates'.
  # Essentially proxies which dispatch only
  # when an object responds to the method.
  class DelegateProxy < Proxy
    
    def initialize(t)
      @__proxy_target__ = t
    end
    
    def respond_to?(method, inc_super = false)
      true
    end
    
    protected
    
    def method_missing(method, *args, &blk)
      @__proxy_target__.send(method, *args, &blk) if @__proxy_target__.respond_to?(method)
    end
    
  end
  
  module Delegateable
    
    def self.included(parent)
      parent.send(:include, InstanceMethods)
    end
    
    module InstanceMethods
      
      def delegate=(value)
        @delegate = DelegateProxy.new(value)
      end
      
      alias delegate_to delegate=
      
      def delegate
        @delegate ||= DelegateProxy.new(nil)
      end
      
      def real_delegate
        @delegate && @delegate.__proxy_target__
      end
      
    end
    
  end
end

Version data entries

25 entries across 25 versions & 2 rubygems

Version Path
Sutto-perennial-0.2.3.2 lib/perennial/delegateable.rb
Sutto-perennial-0.2.3.3 lib/perennial/delegateable.rb
Sutto-perennial-0.2.3.4 lib/perennial/delegateable.rb
Sutto-perennial-0.2.3.5 lib/perennial/delegateable.rb
Sutto-perennial-0.2.3.6 lib/perennial/delegateable.rb
Sutto-perennial-0.2.3.7 lib/perennial/delegateable.rb
Sutto-perennial-0.2.4.0 lib/perennial/delegateable.rb
Sutto-perennial-0.2.4.1 lib/perennial/delegateable.rb
Sutto-perennial-0.2.4.5 lib/perennial/delegateable.rb
Sutto-perennial-0.2.4.6 lib/perennial/delegateable.rb
Sutto-perennial-1.0.0.0 lib/perennial/delegateable.rb
Sutto-perennial-1.0.0.1 lib/perennial/delegateable.rb
Sutto-perennial-1.0.0.2 lib/perennial/delegateable.rb
perennial-1.2.5 lib/perennial/delegateable.rb
perennial-1.2.4 lib/perennial/delegateable.rb
perennial-1.2.3 lib/perennial/delegateable.rb
perennial-1.2.2 lib/perennial/delegateable.rb
perennial-1.2.1 lib/perennial/delegateable.rb
perennial-1.2.0 lib/perennial/delegateable.rb
perennial-1.1.0 lib/perennial/delegateable.rb