Skip to content

Latest commit

 

History

History
492 lines (255 loc) · 8.38 KB

Persistence.rst

File metadata and controls

492 lines (255 loc) · 8.38 KB

Persistence

Persistence/RelInvalidError

Persistence/ModelClassInvalidError

Persistence/RelCreateFailedError

Persistence/ClassMethods

Constants

  • N1_N2_STRING
  • ACTIVEREL_NODE_MATCH_STRING
  • USES_CLASSNAME

Files

Methods

#_active_record_destroyed_behavior?

ruby

def _active_record_destroyed_behavior?

fail 'Remove this workaround in 6.0.0' if Neo4j::VERSION >= '6.0.0'

!!Neo4j::Config[:_active_record_destroyed_behavior]

end

#_destroyed_double_check?

These two methods should be removed in 6.0.0

ruby

def _destroyed_double_check?
if _active_record_destroyed_behavior?

true

else

(!new_record? && !exist?)

end

end

#apply_default_values

ruby

def apply_default_values

return if self.class.declared_property_defaults.empty? self.class.declared_property_defaults.each_pair do self.send("#{key}=", value) if self.send(key).nil? end

end

#association_proxy_cache

Should probably find a way to not need this

ruby

def association_proxy_cache

{}

end

#cache_key

ruby

def cache_key
if self.new_record?

"#{model_cache_key}/new"

elsif self.respond_to?(:updated_at) && !self.updated_at.blank?

"#{model_cache_key}/#{neo_id}-#{self.updated_at.utc.to_s(:number)}"

else

"#{model_cache_key}/#{neo_id}"

end

end

#create_model

ruby

def create_model(*)

validate_node_classes! create_magic_properties set_timestamps properties = self.class.declared_property_manager.convert_properties_to(self, :db, props) rel = _create_rel(from_node, to_node, properties) return self unless rel.respond_to?(:_persisted_obj) init_on_load(rel._persisted_obj, from_node, to_node, @rel_type) true

end

#create_or_update

ruby

def create_or_update

# since the same model can be created or updated twice from a relationship we have to have this guard @_create_or_updating = true apply_default_values result = _persisted_obj ? update_model : create_model if result == false Neo4j::Transaction.current.failure if Neo4j::Transaction.current false else true end

rescue => e

Neo4j::Transaction.current.failure if Neo4j::Transaction.current raise e

ensure

@_create_or_updating = nil

end

#destroy

ruby

def destroy

freeze _persisted_obj && _persisted_obj.del @_deleted = true

end

#destroyed?

Returns +true+ if the object was destroyed.

ruby

def destroyed?

@_deleted || _destroyed_double_check?

end

#exist?

ruby

def exist?

_persisted_obj && _persisted_obj.exist?

end

#freeze

ruby

def freeze

@attributes.freeze self

end

#frozen?

ruby

def frozen?

@attributes.frozen?

end

#new?

Returns +true+ if the record hasn't been saved to Neo4j yet.

ruby

def new_record?

!_persisted_obj

end

#new_record?

Returns +true+ if the record hasn't been saved to Neo4j yet.

ruby

def new_record?

!_persisted_obj

end

#persisted?

Returns +true+ if the record is persisted, i.e. it's not a new record and it was not destroyed

ruby

def persisted?

!new_record? && !destroyed?

end

#props

ruby

def props

attributes.reject { v.nil? }.symbolize_keys

end

#reload

ruby

def reload

return self if new_record? association_proxy_cache.clear changed_attributes && changed_attributes.clear unless reload_from_database @_deleted = true freeze end self

end

#reload_from_database

ruby

def reload_from_database

# TODO: - Neo4j::IdentityMap.remove_node_by_id(neo_id) if reloaded = self.class.load_entity(neo_id) send(:attributes=, reloaded.attributes) end reloaded

end

#save

ruby

def save(*)

update_magic_properties create_or_update

end

#save!

ruby

def save!(args) fail RelInvalidError, self unless save(args) end

#update

Updates this resource with all the attributes from the passed-in Hash and requests that the record be saved. If saving fails because the resource is invalid then false will be returned.

ruby

def update(attributes)

self.attributes = process_attributes(attributes) save

end

#update!

Same as {#update_attributes}, but raises an exception if saving fails.

ruby

def update!(attributes)

self.attributes = process_attributes(attributes) save!

end

#update_attribute

Convenience method to set attribute and #save at the same time

ruby

def update_attribute(attribute, value)

send("#{attribute}=", value) self.save

end

#update_attribute!

Convenience method to set attribute and #save! at the same time

ruby

def update_attribute!(attribute, value)

send("#{attribute}=", value) self.save!

end

#update_attributes

Updates this resource with all the attributes from the passed-in Hash and requests that the record be saved. If saving fails because the resource is invalid then false will be returned.

ruby

def update(attributes)

self.attributes = process_attributes(attributes) save

end

#update_attributes!

Same as {#update_attributes}, but raises an exception if saving fails.

ruby

def update!(attributes)

self.attributes = process_attributes(attributes) save!

end

#update_model

ruby

def update_model

return if !changed_attributes || changed_attributes.empty?

changed_props = attributes.select { changed_attributes.include?(k) } changed_props = self.class.declared_property_manager.convert_properties_to(self, :db, changed_props) _persisted_obj.update_props(changed_props) changed_attributes.clear

end