Module: DatastaxRails::Persistence::ClassMethods
- Defined in:
- lib/datastax_rails/persistence.rb
Overview
rubocop:disable Style/Documentation
Instance Method Summary collapse
- #create(attributes = {}, options = {}, &block) ⇒ Object
-
#encode_attributes(record, cql) ⇒ Hash
Encodes the attributes in preparation for storing in cassandra.
-
#instantiate(_key, attributes, _selected_attributes = []) ⇒ DatastaxRails::Base
Instantiates a new object without calling
initialize
. -
#remove(*keys) ⇒ Object
Removes one or more records with corresponding keys.
-
#truncate ⇒ Object
(also: #delete_all)
Truncates the column_family associated with this class.
-
#write(record, options = {}) ⇒ Object
Write a record to cassandra.
Instance Method Details
#create(attributes = {}, options = {}, &block) ⇒ Object
57 58 59 60 61 |
# File 'lib/datastax_rails/persistence.rb', line 57 def create(attributes = {}, = {}, &block) new(attributes, &block).tap do |object| object.save() end end |
#encode_attributes(record, cql) ⇒ Hash
Encodes the attributes in preparation for storing in cassandra. Calls the coders on the various type classes to do the heavy lifting.
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/datastax_rails/persistence.rb', line 105 def encode_attributes(record, cql) encoded = {} Types::DirtyCollection.ignore_modifications do record.changed.each do |column_name| value = record.read_attribute(column_name) encoded[column_name.to_s] = cql ? attribute_definitions[column_name].type_cast_for_cql3(value) : attribute_definitions[column_name].type_cast_for_solr(value) end end encoded end |
#instantiate(_key, attributes, _selected_attributes = []) ⇒ DatastaxRails::Base
Instantiates a new object without calling initialize
.
95 96 97 |
# File 'lib/datastax_rails/persistence.rb', line 95 def instantiate(_key, attributes, _selected_attributes = []) allocate.init_with('attributes' => attributes) end |
#remove(*keys, options) ⇒ Object #remove(*keys) ⇒ Object
Removes one or more records with corresponding keys. Last parameter can be a hash specifying the consistency level. The keys should be in the form returned by #id_for_update
Model.remove({id: '12345'},{id: '67890'}, :consistency => 'LOCAL_QUORUM)
TODO: Submit multiple deletes as a batch
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/datastax_rails/persistence.rb', line 27 def remove(*keys) = keys.last.is_a?(Hash) ? keys.pop : {} # keys = keys.flat_map { |k| attribute_definitions[primary_key].type_cast(k) } keys.each do |key| typecast_key = {} key.each { |k, v| typecast_key[k] = attribute_definitions[k].type_cast(v) } ActiveSupport::Notifications.instrument('remove.datastax_rails', column_family: column_family, key: key) do c = cql.delete(typecast_key) if [:consistency] level = [:consistency].to_s.upcase if valid_consistency?(level) c.using(level) else fail ArgumentError, "'#{level}' is not a valid Cassandra consistency level" end end c.execute end end end |
#truncate ⇒ Object Also known as: delete_all
Truncates the column_family associated with this class
50 51 52 53 54 |
# File 'lib/datastax_rails/persistence.rb', line 50 def truncate ActiveSupport::Notifications.instrument('truncate.datastax_rails', column_family: column_family) do cql.truncate.execute end end |
#write(record, options = {}) ⇒ Object
Write a record to cassandra. Can be either an insert or an update (they are exactly the same to cassandra)
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/datastax_rails/persistence.rb', line 68 def write(record, = {}) level = ([:consistency] || default_consistency).to_s.upcase if valid_consistency?(level) [:consistency] = level else fail ArgumentError, "'#{level}' is not a valid Cassandra consistency level" end record.id.tap do |key| ActiveSupport::Notifications.instrument('insert.datastax_rails', column_family: column_family, key: key.to_s, attributes: record.attributes) do if (storage_method == :solr) write_with_solr(record, ) else write_with_cql(record, ) end end end end |