Sha256: 40ed9003f6a95fc39e58f5836e9ef5356a351f65c4f34af8869a1367dc7a0de9

Contents?: true

Size: 1.41 KB

Versions: 9

Compression:

Stored size: 1.41 KB

Contents

class BasicObject #:nodoc:
  instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|instance_eval|proxy_|^object_id$)/ }
end unless defined?(BasicObject)

module PivotalTracker
  class Proxy < BasicObject

    def initialize(owner, target)
      @owner = owner
      @target = target
      @opts = nil
    end

    def all(options={})
      proxy_found(options)
    end

    def find(param, options={})
      return all(options) if param == :all
      return @target.find(param, @owner.id) if @target.respond_to?("find")
      return proxy_found(options).detect { |document| document.id == param }
    end

    def <<(*objects)
      objects.flatten.each do |object|
        if obj = object.create
          return obj
        else
          return object
        end
      end
    end

    def create(args)
      object = @target.new(args.merge({:owner => @owner}))
      if obj = object.create
        return obj
      else
        return object
      end
    end

    protected

      def proxy_found(options)
        # Check to see if options have changed
        if @opts == options
          @found ||= load_found(options)
        else
          load_found(options)
        end
      end

    private

      def method_missing(method, *args, &block)
        @target.send(method, *args, &block)
      end

      def load_found(options)
        @opts = options
        @target.all(@owner, @opts)
      end

  end
end

Version data entries

9 entries across 9 versions & 3 rubygems

Version Path
pivotal-tracker-0.5.0 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.4.1 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.4.0 lib/pivotal-tracker/proxy.rb
tsenart-pivotal-tracker-0.5.0 lib/pivotal-tracker/proxy.rb
tsenart-pivotal-tracker-0.4.0 lib/pivotal-tracker/proxy.rb
topprospect-pivotal-tracker-0.1.1 lib/pivotal-tracker/proxy.rb
topprospect-pivotal-tracker-0.0.1 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.3.1 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.3.0 lib/pivotal-tracker/proxy.rb