module Couchbase::Model::Dirty

Public Instance Methods

create_with_dirty(options = {}) click to toggle source
# File lib/couchbase/model/dirty.rb, line 66
def create_with_dirty(options = {})
  create_without_dirty(options).tap do |value|
    capture_previous_changes if value
  end
end
reload() click to toggle source

This is until my change review.couchbase.org/#/c/29745/ is in and released.

# File lib/couchbase/model/dirty.rb, line 41
def reload
  raise Couchbase::Error::MissingId, 'missing id attribute' unless @id
  pristine = model.find(@id)
  update_attributes(pristine.attributes)
  @meta[:cas] = pristine.meta[:cas]
  clean!
  self
end
save_if_changed(options = {}) click to toggle source

FIXME Return value for “Fail” and “didn’t try” is the same

# File lib/couchbase/model/dirty.rb, line 73
def save_if_changed(options = {})
  save if changed?
end
save_with_dirty(options = {}) click to toggle source
# File lib/couchbase/model/dirty.rb, line 60
def save_with_dirty(options = {})
  save_without_dirty(options).tap do |value|
    capture_previous_changes if value
  end
end
update_attributes_with_dirty(attrs) click to toggle source
# File lib/couchbase/model/dirty.rb, line 50
def update_attributes_with_dirty(attrs)
  begin
    @_ignore_dirty = attrs.delete(:_ignore_dirty)

    update_attributes_without_dirty(attrs)
  ensure
    @_ignore_dirty = false
  end
end
write_attribute(name, value) click to toggle source
# File lib/couchbase/model/dirty.rb, line 33
def write_attribute(name, value)
  send "#{name}_will_change!" unless @_ignore_dirty || send(name) == value

  @_attributes[name] = value
end

Private Instance Methods

attribute_will_change!(attr) click to toggle source
# File lib/couchbase/model/dirty.rb, line 94
def attribute_will_change!(attr)
  begin
    value = __send__(attr)
    value = DeepCopier.new(value).copy
  rescue TypeError, NoMethodError
  end

  changed_attributes[attr] = value
end
capture_previous_changes() click to toggle source
# File lib/couchbase/model/dirty.rb, line 78
def capture_previous_changes
  @previously_changed = changes
  @changed_attributes.clear
end
clean!() click to toggle source
# File lib/couchbase/model/dirty.rb, line 83
def clean!
  @changed_attributes.try(:clear)
  @previously_changed.try(:clear)
end
previous_attribute(attr) click to toggle source
# File lib/couchbase/model/dirty.rb, line 88
def previous_attribute(attr)
  return unless previous_changes

  previous_changes[attr.to_s].try :first
end