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

#destroyRecord

Remove this record from the database

Returns:

Since:

  • 0.1.0



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

def destroy
  assert_keys_present!
  metal_scope.delete
  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



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

Since:

  • 0.1.0



236
237
238
239
240
# File 'lib/cequel/record/persistence.rb', line 236

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



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

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



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

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



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

Returns:

Raises:

See Also:

Since:

  • 1.0.0



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

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



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.

Returns:

  • (Boolean)

    true if this is a new, unsaved record

Since:

  • 1.0.0



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.

Returns:

  • (Boolean)

    true if this record is persisted in the database

See Also:

Since:

  • 0.1.0



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.

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



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

def save(options = {})
  options.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.

Returns:

  • (Boolean)

    true if this record is not persisted in the database

See Also:

Since:

  • 0.1.0



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

Parameters:

  • attributes (Hash)

    hash of attributes to update

Returns:

  • (Boolean)

    true if saved successfully

See Also:

Since:

  • 0.1.0



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

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