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



286
287
288
289
290
291
292
# File 'lib/cequel/record/properties.rb', line 286

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:



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

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:



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

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



232
233
234
# File 'lib/cequel/record/properties.rb', line 232

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



240
241
242
243
244
# File 'lib/cequel/record/properties.rb', line 240

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



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

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

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



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

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



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

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