Class: Cequel::Record::List

Inherits:
Array
  • Object
show all
Includes:
Collection
Defined in:
lib/cequel/record/collection.rb

Overview

The value of a list column in a Cequel::Record instance. List collections encapsulate and behave like the built-in ‘Array` type.

See Also:

Since:

  • 1.0.0

Constant Summary collapse

NON_ATOMIC_MUTATORS =

These methods are not available on lists because they require reading collection data before writing it.

Since:

  • 1.0.0

[
  :collect!,
  :delete_if,
  :fill,
  :flatten!,
  :insert,
  :keep_if,
  :map!,
  :pop,
  :reject!,
  :reverse!,
  :rotate!,
  :select!,
  :shift,
  :shuffle!,
  :slice!,
  :sort!,
  :sort_by!,
  :uniq!
]

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Collection

#column_name, #initialize, #inspect, #loaded!, #loaded?, #persisted!

Class Method Details

.emptyArray

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns an empty array.

Since:

  • 1.0.0



193
# File 'lib/cequel/record/collection.rb', line 193

def self.empty; []; end

Instance Method Details

#[]=(position, element) ⇒ void #[]=(range, elements) ⇒ void #[]=(start_position, count, elements) ⇒ void

Note:

Negative positions are not supported, as they are not allowed in CQL list operations.

This method returns an undefined value.

Set the value at a position or range of positions. This modification will be staged and persisted as an atomic list update when the record is saved. If the collection data is loaded in memory, it will also be modified accordingly.

See Also:

  • DataSet#list_replace

Since:

  • 1.0.0



224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
# File 'lib/cequel/record/collection.rb', line 224

def []=(position, *args)
  if position.is_a?(Range)
    first, count = position.first, position.count
  else
    first, count = position, args[-2]
  end

  element = args[-1] =
    if args[-1].is_a?(Array) then cast_collection(args[-1])
    else cast_element(args[-1])
    end

  if first < 0
    fail ArgumentError,
         "Bad index #{position}: CQL lists do not support negative " \
         "indices"
  end

  if count.nil?
    updater.list_replace(column_name, first, element)
  else
    element = Array.wrap(element)
    count.times do |i|
      if i < element.length
        updater.list_replace(column_name, first+i, element[i])
      else
        deleter.list_remove_at(column_name, first+i)
      end
    end
  end
  to_modify { super }
end

#clearList

Remove all elements from the list. This will propagate to the database as a DELETE of the list column.

Since:

  • 1.0.0



263
264
265
266
# File 'lib/cequel/record/collection.rb', line 263

def clear
  deleter.delete_columns(column_name)
  to_modify { super }
end

#concat(array) ⇒ List

Concatenate another collection onto this list.

Since:

  • 1.0.0



274
275
276
277
278
# File 'lib/cequel/record/collection.rb', line 274

def concat(array)
  array = cast_collection(array)
  updater.list_append(column_name, array)
  to_modify { super }
end

#delete(object) ⇒ List

Remove all instances of a given value from the list.

Since:

  • 1.0.0



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

def delete(object)
  object = cast_element(object)
  updater.list_remove(column_name, object)
  to_modify { super }
end

#delete_at(index) ⇒ List

Remove the element at a given position from the list.

Since:

  • 1.0.0



298
299
300
301
# File 'lib/cequel/record/collection.rb', line 298

def delete_at(index)
  deleter.list_remove_at(column_name, index)
  to_modify { super }
end

#push(*objects) ⇒ List Also known as: <<, append

Push (append) one or more elements to the end of the list.

Since:

  • 1.0.0



309
310
311
312
313
# File 'lib/cequel/record/collection.rb', line 309

def push(*objects)
  objects.map! { |object| cast_element(object) }
  updater.list_append(column_name, objects)
  to_modify { super }
end

#replace(array) ⇒ List

Replace the entire contents of this list with a new collection

Since:

  • 1.0.0



323
324
325
326
327
# File 'lib/cequel/record/collection.rb', line 323

def replace(array)
  array = cast_collection(array)
  updater.set(column_name => array)
  to_modify { super }
end

#unshift(*objects) ⇒ List Also known as: prepend

Prepend one or more values to the beginning of this list

Since:

  • 1.0.0



335
336
337
338
339
# File 'lib/cequel/record/collection.rb', line 335

def unshift(*objects)
  objects.map!(&method(:cast_element))
  updater.list_prepend(column_name, objects.reverse)
  to_modify { super }
end