Sha256: 1039b5b355f52094aba2db663dd071529576ae357d4c26bc93a82cbae9a29937

Contents?: true

Size: 1.13 KB

Versions: 8

Compression:

Stored size: 1.13 KB

Contents

module MongoMapper
  module Associations
    class Proxy
      attr_reader :owner, :association

      instance_methods.each do |m|
        undef_method m unless m =~ /(^__|^nil\?$|^send$|proxy_|^object_id$)/
      end

      def initialize(owner, association)
        @owner= owner
        @association = association

        reset
      end

      def respond_to?(*methods)
        (load_target && @target.respond_to?(*methods))
      end

      def reset
        @target = nil
      end

      def reload_target
        reset
        load_target
        self
      end

      def send(method, *args)
        load_target
        @target.send(method, *args)
      end

      def replace(v)
        raise NotImplementedError
      end

      protected
      def method_missing(method, *args)
        if load_target
          if block_given?
            @target.send(method, *args)  { |*block_args| yield(*block_args) }
          else
            @target.send(method, *args)
          end
        end
      end

      def load_target
        @target ||= find_target
      end

      def find_target
        raise NotImplementedError
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 4 rubygems

Version Path
crnixon-mongomapper-0.2.0 lib/mongomapper/associations/proxy.rb
fcoury-mongomapper-0.3.0 lib/mongomapper/associations/proxy.rb
fcoury-mongomapper-0.3.1 lib/mongomapper/associations/proxy.rb
fcoury-mongomapper-0.3.3 lib/mongomapper/associations/proxy.rb
fcoury-mongomapper-0.3.4 lib/mongomapper/associations/proxy.rb
fcoury-mongomapper-0.3.5 lib/mongomapper/associations/proxy.rb
jnunemaker-mongomapper-0.2.0 lib/mongomapper/associations/proxy.rb
ramsingla-mongomapper-0.2.1 lib/mongomapper/associations/proxy.rb