Module: Cequel::Record::Persistence
- Extended by:
- ActiveSupport::Concern, Forwardable
- Defined in:
- lib/cequel/record/persistence.rb
Overview
This module provides functionality for loading and saving records to the Cassandra database.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#destroy ⇒ Record
Remove this record from the database.
-
#exists? ⇒ Boolean
(also: #exist?)
Check if an unloaded record exists in the database.
- #hydrate(row) ⇒ Object
-
#key_attributes ⇒ Hash
The attributes of this record that make up the primary key.
-
#key_values ⇒ Array
(also: #to_key)
The values of the primary key columns for this record.
-
#load ⇒ Record
Load an unloaded record’s row from the database and hydrate the record’s attributes.
-
#load! ⇒ Record
Attempt to load an unloaded record and raise an error if the record does not correspond to a row in the database.
- #loaded?(column = nil) ⇒ Boolean
-
#new_record? ⇒ Boolean
True if this is a new, unsaved record.
-
#persisted? ⇒ Boolean
True if this record is persisted in the database.
-
#save(options = {}) ⇒ Boolean
Persist the record to the database.
-
#transient? ⇒ Boolean
True if this record is not persisted in the database.
-
#update_attributes(attributes) ⇒ Boolean
Set attributes and save the record.
Instance Method Details
#destroy ⇒ Record
Remove this record from the database
201 202 203 204 205 206 |
# File 'lib/cequel/record/persistence.rb', line 201 def destroy assert_keys_present! .delete transient! self end |
#exists? ⇒ Boolean Also known as: exist?
Check if an unloaded record exists in the database
99 100 101 102 103 104 |
# File 'lib/cequel/record/persistence.rb', line 99 def exists? load! true rescue RecordNotFound false end |
#hydrate(row) ⇒ Object
236 237 238 239 240 |
# File 'lib/cequel/record/persistence.rb', line 236 def hydrate(row) @attributes = row hydrated! self end |
#key_attributes ⇒ Hash
Returns the attributes of this record that make up the primary key.
76 77 78 |
# File 'lib/cequel/record/persistence.rb', line 76 def key_attributes @attributes.slice(*self.class.key_column_names) end |
#key_values ⇒ Array Also known as: to_key
Returns the values of the primary key columns for this record.
86 87 88 |
# File 'lib/cequel/record/persistence.rb', line 86 def key_values key_attributes.values end |
#load ⇒ Record
Load an unloaded record’s row from the database and hydrate the record’s attributes
115 116 117 118 119 |
# File 'lib/cequel/record/persistence.rb', line 115 def load assert_keys_present! record_collection.load! unless loaded? self end |
#load! ⇒ Record
Attempt to load an unloaded record and raise an error if the record does not correspond to a row in the database
131 132 133 134 135 136 137 138 139 |
# File 'lib/cequel/record/persistence.rb', line 131 def load! load.tap do if transient? fail RecordNotFound, "Couldn't find #{self.class.name} with " \ "#{key_attributes.inspect}" end end end |
#loaded? ⇒ Boolean #loaded?(column) ⇒ Boolean
154 155 156 |
# File 'lib/cequel/record/persistence.rb', line 154 def loaded?(column = nil) !!@loaded && (column.nil? || @attributes.key?(column.to_sym)) end |
#new_record? ⇒ Boolean
Returns true if this is a new, unsaved record.
213 214 215 |
# File 'lib/cequel/record/persistence.rb', line 213 def new_record? !!@new_record end |
#persisted? ⇒ Boolean
Returns true if this record is persisted in the database.
222 223 224 |
# File 'lib/cequel/record/persistence.rb', line 222 def persisted? !!@persisted end |
#save(options = {}) ⇒ Boolean
Persist the record to the database. If this is a new record, it will be saved using an INSERT statement. If it is an existing record, it will be persisted using a series of ‘UPDATE` and `DELETE` statements which will persist all changes to the database, including atomic collection modifications.
172 173 174 175 176 177 178 179 |
# File 'lib/cequel/record/persistence.rb', line 172 def save( = {}) .assert_valid_keys if new_record? then create else update end @new_record = false true end |
#transient? ⇒ Boolean
Returns true if this record is not persisted in the database.
231 232 233 |
# File 'lib/cequel/record/persistence.rb', line 231 def transient? !persisted? end |
#update_attributes(attributes) ⇒ Boolean
Set attributes and save the record
191 192 193 194 |
# File 'lib/cequel/record/persistence.rb', line 191 def update_attributes(attributes) self.attributes = attributes save end |