module Flex::ActiveModel::Storage::InstanceMethods
Public Instance Methods
delete()
click to toggle source
# File lib/flex/active_model/storage.rb, line 66 def delete @skip_destroy_callbacks = true destroy end
destroy()
click to toggle source
# File lib/flex/active_model/storage.rb, line 60 def destroy @destroyed = true flex.sync self.freeze end
destroyed?()
click to toggle source
# File lib/flex/active_model/storage.rb, line 80 def destroyed? !!@destroyed end
merge_attributes(attributes)
click to toggle source
# File lib/flex/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/flex/active_model/storage.rb, line 88 def new_record? !@_id || !@_version end
persisted?()
click to toggle source
# File lib/flex/active_model/storage.rb, line 84 def persisted? !(new_record? || destroyed?) end
reload()
click to toggle source
# File lib/flex/active_model/storage.rb, line 21 def reload document = flex.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/flex/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/flex/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/flex/active_model/storage.rb, line 28 def save(options={}) perform_validations(options) ? do_save : false end
save!(options={})
click to toggle source
# File lib/flex/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/flex/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/flex/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/flex/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/flex/active_model/storage.rb, line 94 def do_save flex.sync self end
lock_update() { |self| ... }
click to toggle source
# File lib/flex/active_model/storage.rb, line 99 def lock_update begin yield self flex.sync rescue Flex::HttpError => e if e.status == 409 reload retry else raise end end self end