Sha256: a005b30c7f40c01685a3e2981e6fc59160474251c4d30fb8df37d6b9c90df194

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

module PolyBelongsTo
  class FakedCollection
    def initialize(obj = nil, child = nil)
      @obj = obj
      @child = child
      if obj.nil? || child.nil?
        @instance = nil
      else
        raise "Not a has_one rleationship for FakedCollection" unless PolyBelongsTo::Pbt::IsSingular[obj,child]
        @instance = @obj.send(PolyBelongsTo::Pbt::CollectionProxy[@obj,@child])
      end
      self
    end

    def id
      @instance.try(:id)
    end

    def all
      Array[@instance].compact
    end

    def empty?
      all.empty?
    end

    def present?
      !empty?
    end

    def presence
      all.first ? self : nil
    end

    def valid?
      !!@instance.try(&:valid?)
    end

    def first
      @instance
    end

    def last
      @instance
    end

    def size
      all.size
    end

    def ancestors
      klass.ancestors.unshift(PolyBelongsTo::FakedCollection)
    end

    def kind_of?(thing)
      ancestors.include? thing
    end

    def is_a?(thing)
      kind_of?(thing)
    end

    def count
      size
    end

    def klass
      @instance.class
    end

    def build(*args)
      @instance = @obj.send(PolyBelongsTo::Pbt::BuildCmd[@obj, @child], *args)
      self
    end

    def each(*args, &block)
      all.each(*args, &block)
    end

    def respond_to?(method_name)
      @instance.respond_to?(method_name) || super
    end

    def method_missing(method_name, *args, &block)
      if @instance.respond_to?(method_name)
        @instance.send method_name, *args, &block
      else
        super
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
poly_belongs_to-0.2.0 lib/poly_belongs_to/faked_collection.rb