Sha256: 13f2cb2e0f0e186d2975d341307c10ee13d8d5ceefae1fe4eda4c4f3b12ac24b

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

class Cistern::Model
  extend Cistern::Attributes::ClassMethods
  include Cistern::Attributes::InstanceMethods

  attr_accessor :collection, :connection

  def inspect
    if Cistern.formatter
      Cistern.formatter.call(self)
    else
      "#<#{self.class} #{self.identity}"
    end
  end

  def initialize(attributes={})
    merge_attributes(attributes)
  end

  def save
    raise NotImplementedError
  end

  def reload
    requires :identity

    if data = collection.get(identity)
      new_attributes = data.attributes
      merge_attributes(new_attributes)
      self
    end
  end

  def ==(comparison_object)
    super ||
      (comparison_object.is_a?(self.class) &&
       comparison_object.identity == self.identity &&
       !comparison_object.new_record?)
  end

  alias :eql? :==

  def hash
    if self.identity
      [self.class, self.identity].join(":").hash
    else
      super
    end
  end

  def service
    self.connection ? self.connection.class : Cistern
  end

  def wait_for(timeout = self.service.timeout, interval = self.service.poll_interval, &block)
    service.wait_for(timeout, interval) { reload && block.call(self) }
  end

  def wait_for!(timeout = self.service.timeout, interval = self.service.poll_interval, &block)
    service.wait_for!(timeout, interval) { reload && block.call(self) }
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cistern-0.9.2 lib/cistern/model.rb
cistern-0.9.1 lib/cistern/model.rb