Module: Cequel::Record::Properties

Extended by:
ActiveSupport::Concern
Defined in:
lib/cequel/record/properties.rb

Overview

Properties on a Cequel record acts as attributes on record instances, and are persisted as column values to Cassandra. Properties are declared explicitly on a record instance in the body.

Properties can be **key columns**, **data columns**, or **collection columns**. Key columns combine to form the primary key for the record; they cannot be changed once a record has been saved. Data columns contain scalar data values like strings, integers, and timestamps. Collection columns are lists, sets, or maps that can be atomically updated.

All varieties of column have a type; see Type for the full list of possibilities. A collection column’s type is the type of its elements (in the case of a map collection, there is both a key type and a value type).

Examples:

class Post
  key :blog_subdomain, :text
  key :id, :timeuuid, auto: true

  column :title, :text
  column :body, :text
  column :updated_at, :timestamp

  list :categories, :text
  set :tags, :text
  map :referers, :text, :integer
end

See Also:

Defined Under Namespace

Modules: ClassMethods, ConstructorMethods

Instance Method Summary collapse

Instance Method Details

#==(other) ⇒ Boolean

Returns true if this record has the same type and key attributes as the other record.

Returns:

  • (Boolean)

    true if this record has the same type and key attributes as the other record



298
299
300
301
302
303
304
# File 'lib/cequel/record/properties.rb', line 298

def ==(other)
  if key_values.any? { |value| value.nil? }
    super
  else
    self.class == other.class && key_values == other.key_values
  end
end

#[](column_name) ⇒ Object

Read an attribute

Parameters:

  • column_name (Symbol)

    the name of the column

Returns:

  • the value of that column

Raises:



279
280
281
# File 'lib/cequel/record/properties.rb', line 279

def [](column_name)
  read_attribute(column_name)
end

#[]=(column_name, value) ⇒ void

This method returns an undefined value.

Write an attribute

Parameters:

  • column_name (Symbol)

    name of the column to write

  • value

    the value to write to the column

Raises:



291
292
293
# File 'lib/cequel/record/properties.rb', line 291

def []=(column_name, value)
  write_attribute(column_name, value)
end

#attribute_namesArray<Symbol>

Returns list of names of attributes on this record.

Returns:

  • (Array<Symbol>)

    list of names of attributes on this record



244
245
246
# File 'lib/cequel/record/properties.rb', line 244

def attribute_names
  @attributes.keys
end

#attributesHash<Symbol,Object>

Returns map of column names to values currently set on this record.

Returns:

  • (Hash<Symbol,Object>)

    map of column names to values currently set on this record



252
253
254
255
256
# File 'lib/cequel/record/properties.rb', line 252

def attributes
  attribute_names.each_with_object({}) do |name, attributes|
    attributes[name] = read_attribute(name)
  end
end

#attributes=(attributes) ⇒ void

This method returns an undefined value.

Set attributes on the record. Each attribute is set via the setter method; virtual (non-column) attributes are allowed.

Parameters:

  • attributes (Hash)

    map of attribute names to values



265
266
267
268
269
# File 'lib/cequel/record/properties.rb', line 265

def attributes=(attributes)
  attributes.each_pair do |attribute, value|
    __send__(:"#{attribute}=", value)
  end
end

#initialize(attributes = {}, record_collection = nil) ⇒ Object



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

def initialize(attributes = {}, record_collection = nil)
  @attributes, @record_collection = attributes, record_collection
  @collection_proxies = {}
end

#inspectString

Returns string representation of the record.

Returns:

  • (String)

    string representation of the record



309
310
311
312
313
314
315
316
317
# File 'lib/cequel/record/properties.rb', line 309

def inspect
  inspected_attributes = attributes.each_pair.map do |attr, value|
    inspected_value = Cequel.uuid?(value) ?
      value.to_s :
      value.inspect
    "#{attr}: #{inspected_value}"
  end
  "#<#{self.class} #{inspected_attributes.join(", ")}>"
end