Sha256: 4cc914e1d08692e8ea87c4af6fc3a071d69065adfa2c2d1d8be0256c51faa25e

Contents?: true

Size: 708 Bytes

Versions: 2

Compression:

Stored size: 708 Bytes

Contents

require 'delegate'

module Alki
  module Reload
    class ReloadableDelegator < Delegator
      def initialize(instance,ref)
        @instance = instance
        @ref = ref
      end

      def __getobj__
        if !@obj || @instance_version != @instance.__version__
          @ref.executor = @instance.assembly_executor
          @obj = @ref.call
          @instance_version = @instance.__version__
        end
        @obj
      end

      def method_missing(method,*args,&blk)
        ref_meth = :"__reference_#{method}__"
        if respond_to?(ref_meth,true)
          ReloadableDelegator.new @instance, super(ref_meth, *args, &blk)
        else
          super
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alki-reload-0.3.1 lib/alki/reload/reloadable_delegator.rb
alki-reload-0.2.0 lib/alki/reload/reloadable_delegator.rb