module Elastics::ActiveModel::Storage::InstanceMethods

Public Instance Methods

delete() click to toggle source
# File lib/elastics/active_model/storage.rb, line 66
def delete
  @skip_destroy_callbacks = true
  destroy
end
destroy() click to toggle source
# File lib/elastics/active_model/storage.rb, line 60
def destroy
  @destroyed = true
  elastics.sync
  self.freeze
end
destroyed?() click to toggle source
# File lib/elastics/active_model/storage.rb, line 80
def destroyed?
  !!@destroyed
end
merge_attributes(attributes) click to toggle source
# File lib/elastics/active_model/storage.rb, line 71
def merge_attributes(attributes)
  attributes.each {|name, value| send "#{name}=", value }
end
new_record?() click to toggle source
# File lib/elastics/active_model/storage.rb, line 88
def new_record?
  !@_id || !@_version
end
persisted?() click to toggle source
# File lib/elastics/active_model/storage.rb, line 84
def persisted?
  !(new_record? || destroyed?)
end
reload() click to toggle source
# File lib/elastics/active_model/storage.rb, line 21
def reload
  document        = elastics.get
  self.attributes = document['_source']
  @_id            = document['_id']
  @_version       = document['_version']
end
safe_update(options={}, &block) click to toggle source

Optimistic Lock Update

doc.safe_update do |d|
  d.amount += 100
end

if you are trying to update a stale object, the block is yielded again with a fresh reloaded document and the document is saved only when it is not stale anymore (i.e. the _version has not changed since it has been loaded) read: www.elasticsearch.org/blog/2011/02/08/versioning.html

# File lib/elastics/active_model/storage.rb, line 46
def safe_update(options={}, &block)
  perform_validations(options) ? lock_update(&block) : false
end
safe_update!(options={}, &block) click to toggle source
# File lib/elastics/active_model/storage.rb, line 50
def safe_update!(options={}, &block)
  perform_validations(options) ? lock_update(&block) : raise(DocumentInvalidError, errors.full_messages.join(", "))
end
save(options={}) click to toggle source
# File lib/elastics/active_model/storage.rb, line 28
def save(options={})
  perform_validations(options) ? do_save : false
end
save!(options={}) click to toggle source
# File lib/elastics/active_model/storage.rb, line 32
def save!(options={})
  perform_validations(options) ? do_save : raise(DocumentInvalidError, errors.full_messages.join(", "))
end
update_attributes(attributes) click to toggle source
# File lib/elastics/active_model/storage.rb, line 75
def update_attributes(attributes)
  merge_attributes(attributes)
  save
end
valid?(context = nil) click to toggle source
Calls superclass method
# File lib/elastics/active_model/storage.rb, line 54
def valid?(context = nil)
  context ||= (new_record? ? :create : :update)
  output = super(context)
  errors.empty? && output
end

Protected Instance Methods

perform_validations(options={}) click to toggle source
# File lib/elastics/active_model/storage.rb, line 116
def perform_validations(options={})
  perform_validation = options[:validate] != false
  perform_validation ? valid?(options[:context]) : true
end

Private Instance Methods

do_save() click to toggle source
# File lib/elastics/active_model/storage.rb, line 94
def do_save
  elastics.sync
  self
end
lock_update() { |self| ... } click to toggle source
# File lib/elastics/active_model/storage.rb, line 99
def lock_update
  begin
    yield self
    elastics.sync
  rescue Elastics::HttpError => e
    if e.status == 409
      reload
      retry
    else
      raise
    end
  end
  self
end