Module: Dynamoid::Persistence

Extended by:
ActiveSupport::Concern
Included in:
Components
Defined in:
lib/dynamoid/persistence.rb

Overview

Persistence is responsible for dumping objects to and marshalling objects from the datastore. It tries to reserialize values to be of the same type as when they were passed in, based on the fields in the class.

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#new_recordObject Also known as: new_record?

Returns the value of attribute new_record.



11
12
13
# File 'lib/dynamoid/persistence.rb', line 11

def new_record
  @new_record
end

Instance Method Details

#deleteObject

Delete this object from the datastore and all indexes.

Since:

  • 0.2.0



199
200
201
202
203
# File 'lib/dynamoid/persistence.rb', line 199

def delete
  delete_indexes
  options = range_key ? {:range_key => dump_field(self.read_attribute(range_key), self.class.attributes[range_key])} : {}
  Dynamoid::Adapter.delete(self.class.table_name, self.hash_key, options)
end

#destroyObject

Delete this object, but only after running callbacks for it.

Since:

  • 0.2.0



189
190
191
192
193
194
# File 'lib/dynamoid/persistence.rb', line 189

def destroy
  run_callbacks(:destroy) do
    self.delete
  end
  self
end

#dumpObject

Dump this object’s attributes into hash form, fit to be persisted into the datastore.

Since:

  • 0.2.0



208
209
210
211
212
213
214
# File 'lib/dynamoid/persistence.rb', line 208

def dump
  Hash.new.tap do |hash|
    self.class.attributes.each do |attribute, options|
      hash[attribute] = dump_field(self.read_attribute(attribute), options)
    end
  end
end

#persisted?Boolean

Is this object persisted in the datastore? Required for some ActiveModel integration stuff.

Returns:

  • (Boolean)

Since:

  • 0.2.0



151
152
153
# File 'lib/dynamoid/persistence.rb', line 151

def persisted?
  !new_record?
end

#save(options = {}) ⇒ Object

Run the callbacks and then persist this object in the datastore.

Since:

  • 0.2.0



158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/dynamoid/persistence.rb', line 158

def save(options = {})
  self.class.create_table
  
  if new_record?
    conditions = { :unless_exists => [self.class.hash_key]}
    conditions[:unless_exists] << range_key if(range_key)

    run_callbacks(:create) { persist(conditions) }
  else
    persist
  end

  self
end

#touch(name = nil) ⇒ Object

Set updated_at and any passed in field to current DateTime. Useful for things like last_login_at, etc.



141
142
143
144
145
146
# File 'lib/dynamoid/persistence.rb', line 141

def touch(name = nil)
  now = DateTime.now
  self.updated_at = now
  attributes[name] = now if name
  save
end

#update(conditions = {}, &block) ⇒ Object



179
180
181
182
183
184
# File 'lib/dynamoid/persistence.rb', line 179

def update(conditions = {}, &block)
  update!(conditions, &block)
  true
rescue Dynamoid::Errors::ConditionalCheckFailedException
  false
end

#update!(conditions = {}, &block) ⇒ Object



173
174
175
176
177
# File 'lib/dynamoid/persistence.rb', line 173

def update!(conditions = {}, &block)
  options = range_key ? {:range_key => dump_field(self.read_attribute(range_key), self.class.attributes[range_key])} : {}
  new_attrs = Dynamoid::Adapter.update_item(self.class.table_name, self.hash_key, options.merge(:conditions => conditions), &block)
  load(new_attrs)
end