Sha256: f93813ecf370cd54b0f44fc07de28c3e4cb6507f51c56026c333908694c1d317

Contents?: true

Size: 1.34 KB

Versions: 15

Compression:

Stored size: 1.34 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 = {}
    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)
        if @found.nil? or @opts != options
          @opts = options
          @found = load_found()
        end
        @found
      end

    private

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

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

  end
end

Version data entries

15 entries across 15 versions & 3 rubygems

Version Path
lrd-pivotal-tracker-0.5.14 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.13 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.12 lib/pivotal-tracker/proxy.rb
pivotal-tracker-fox-0.5.13 lib/pivotal-tracker/proxy.rb
pivotal-tracker-fox-0.5.12 lib/pivotal-tracker/proxy.rb
pivotal-tracker-fox-0.5.11 lib/pivotal-tracker/proxy.rb
pivotal-tracker-fox-0.5.10 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.10 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.9 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.8 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.7 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.6 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.5 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.4 lib/pivotal-tracker/proxy.rb
pivotal-tracker-0.5.3 lib/pivotal-tracker/proxy.rb