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.

See Also:

Since:

  • 0.1.0

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#destroy(options = {}) ⇒ Record

Remove this record from the database

Returns:

Since:

  • 0.1.0



202
203
204
205
206
207
208
# File 'lib/cequel/record/persistence.rb', line 202

def destroy(options = {})
  options.assert_valid_keys(:consistency)
  assert_keys_present!
  metal_scope.delete(options)
  transient!
  self
end

#exists?Boolean Also known as: exist?

Check if an unloaded record exists in the database

Returns:

  • (Boolean)

    ‘true` if the record has a corresponding row in the database

Since:

  • 1.0.0



100
101
102
103
104
105
# File 'lib/cequel/record/persistence.rb', line 100

def exists?
  load!
  true
rescue RecordNotFound
  false
end

#hydrate(row) ⇒ Object

Since:

  • 0.1.0



238
239
240
241
242
# File 'lib/cequel/record/persistence.rb', line 238

def hydrate(row)
  @attributes = row
  hydrated!
  self
end

#key_attributesHash

Returns the attributes of this record that make up the primary key.

Examples:

post = Post.new
post.blog_subdomain = 'cassandra'
post.permalink = 'cequel'
post.title = 'Cequel: The Next Generation'
post.key_attributes
  #=> {:blog_subdomain=>'cassandra', :permalink=>'cequel'}

Returns:

  • (Hash)

    the attributes of this record that make up the primary key

Since:

  • 1.0.0



77
78
79
# File 'lib/cequel/record/persistence.rb', line 77

def key_attributes
  @attributes.slice(*self.class.key_column_names)
end

#key_valuesArray Also known as: to_key

Returns the values of the primary key columns for this record.

Returns:

  • (Array)

    the values of the primary key columns for this record

See Also:

Since:

  • 1.0.0



87
88
89
# File 'lib/cequel/record/persistence.rb', line 87

def key_values
  key_attributes.values
end

#loadRecord

Load an unloaded record’s row from the database and hydrate the record’s attributes

Returns:

Since:

  • 1.0.0



116
117
118
119
120
# File 'lib/cequel/record/persistence.rb', line 116

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

Returns:

Raises:

See Also:

Since:

  • 1.0.0



132
133
134
135
136
137
138
139
140
# File 'lib/cequel/record/persistence.rb', line 132

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

Overloads:

  • #loaded?Boolean

    Returns true if this record’s attributes have been loaded from the database.

    Returns:

    • (Boolean)

      true if this record’s attributes have been loaded from the database

  • #loaded?(column) ⇒ Boolean

    Returns true if the named column is loaded in memory.

    Parameters:

    • column (Symbol)

      name of column to check if loaded

    Returns:

    • (Boolean)

      true if the named column is loaded in memory

Returns:

  • (Boolean)

Since:

  • 1.0.0



155
156
157
# File 'lib/cequel/record/persistence.rb', line 155

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.

Returns:

  • (Boolean)

    true if this is a new, unsaved record

Since:

  • 1.0.0



215
216
217
# File 'lib/cequel/record/persistence.rb', line 215

def new_record?
  !!@new_record
end

#persisted?Boolean

Returns true if this record is persisted in the database.

Returns:

  • (Boolean)

    true if this record is persisted in the database

See Also:

Since:

  • 0.1.0



224
225
226
# File 'lib/cequel/record/persistence.rb', line 224

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.

Parameters:

  • options (Options) (defaults to: {})

    options for save

Options Hash (options):

  • :validate (Boolean) — default: true

    whether to run validations before saving

Returns:

  • (Boolean)

    true if record saved successfully, false if invalid

See Also:

Since:

  • 0.1.0



173
174
175
176
177
178
179
180
# File 'lib/cequel/record/persistence.rb', line 173

def save(options = {})
  options.assert_valid_keys(:consistency)
  if new_record? then create(options)
  else update(options)
  end
  @new_record = false
  true
end

#transient?Boolean

Returns true if this record is not persisted in the database.

Returns:

  • (Boolean)

    true if this record is not persisted in the database

See Also:

Since:

  • 0.1.0



233
234
235
# File 'lib/cequel/record/persistence.rb', line 233

def transient?
  !persisted?
end

#update_attributes(attributes) ⇒ Boolean

Set attributes and save the record

Parameters:

  • attributes (Hash)

    hash of attributes to update

Returns:

  • (Boolean)

    true if saved successfully

See Also:

Since:

  • 0.1.0



192
193
194
195
# File 'lib/cequel/record/persistence.rb', line 192

def update_attributes(attributes)
  self.attributes = attributes
  save
end