Module: Dynamoid::Document
Overview
This is the base module for all domain objects that need to be persisted to the database as documents.
Defined Under Namespace
Modules: ClassMethods
Constant Summary
Constants included from Finders
Constants included from Persistence
Constants included from Fields
Instance Attribute Summary
Attributes included from Persistence
Attributes included from Fields
Instance Method Summary collapse
-
#==(other) ⇒ Object
An object is equal to another object if their ids are equal.
- #eql?(other) ⇒ Boolean
- #hash ⇒ Object
-
#hash_key ⇒ Object
Return an object’s hash key, regardless of what it might be called to the object.
-
#hash_key=(value) ⇒ Object
Assign an object’s hash key, regardless of what it might be called to the object.
-
#initialize(attrs = {}) ⇒ Dynamoid::Document
Initialize a new object.
- #load(attrs) ⇒ Object
- #range_value ⇒ Object
- #range_value=(value) ⇒ Object
-
#reload ⇒ Dynamoid::Document
Reload an object from the database – if you suspect the object has changed in the datastore and you need those changes to be reflected immediately, you would call this method.
Methods included from Dirty
#clear_changes, #save, #update!, #write_attribute
Methods included from IdentityMap
clear, #delete, #identity_map, #identity_map_key, #save
Methods included from Validations
Methods included from Persistence
#delete, #destroy, #destroy!, #persisted?, #save, #touch, #update, #update!
Methods included from Fields
#read_attribute, #update_attribute, #update_attributes, #write_attribute
Instance Method Details
#==(other) ⇒ Object
An object is equal to another object if their ids are equal.
315 316 317 318 319 320 321 322 |
# File 'lib/dynamoid/document.rb', line 315 def ==(other) if self.class.identity_map_on? super else return false if other.nil? other.is_a?(Dynamoid::Document) && hash_key == other.hash_key && range_value == other.range_value end end |
#eql?(other) ⇒ Boolean
324 325 326 |
# File 'lib/dynamoid/document.rb', line 324 def eql?(other) self == other end |
#hash ⇒ Object
328 329 330 |
# File 'lib/dynamoid/document.rb', line 328 def hash hash_key.hash ^ range_value.hash end |
#hash_key ⇒ Object
Return an object’s hash key, regardless of what it might be called to the object.
353 354 355 |
# File 'lib/dynamoid/document.rb', line 353 def hash_key send(self.class.hash_key) end |
#hash_key=(value) ⇒ Object
Assign an object’s hash key, regardless of what it might be called to the object.
360 361 362 |
# File 'lib/dynamoid/document.rb', line 360 def hash_key=(value) send("#{self.class.hash_key}=", value) end |
#initialize(attrs = {}) ⇒ Dynamoid::Document
Initialize a new object.
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
# File 'lib/dynamoid/document.rb', line 275 def initialize(attrs = {}) # we need this hack for Rails 4.0 only # because `run_callbacks` calls `attributes` getter while it is still nil @attributes = {} run_callbacks :initialize do @new_record = true @attributes ||= {} @associations ||= {} self.class.attributes.each do |_, | if [:type].is_a?(Class) && [:default] raise 'Dynamoid class-type fields do not support default values' end end attrs_with_defaults = {} self.class.attributes.each do |attribute, | attrs_with_defaults[attribute] = if attrs.key?(attribute) attrs[attribute] elsif .key?(:default) evaluate_default_value([:default]) end end attrs_virtual = attrs.slice(*(attrs.keys - self.class.attributes.keys)) load(attrs_with_defaults.merge(attrs_virtual)) end end |
#load(attrs) ⇒ Object
306 307 308 309 310 |
# File 'lib/dynamoid/document.rb', line 306 def load(attrs) attrs.each do |key, value| send("#{key}=", value) if respond_to?("#{key}=") end end |
#range_value ⇒ Object
364 365 366 367 368 |
# File 'lib/dynamoid/document.rb', line 364 def range_value if range_key = self.class.range_key send(range_key) end end |
#range_value=(value) ⇒ Object
370 371 372 |
# File 'lib/dynamoid/document.rb', line 370 def range_value=(value) send("#{self.class.range_key}=", value) end |
#reload ⇒ Dynamoid::Document
Reload an object from the database – if you suspect the object has changed in the datastore and you need those changes to be reflected immediately, you would call this method. This is a consistent read.
338 339 340 341 342 343 344 345 346 347 348 |
# File 'lib/dynamoid/document.rb', line 338 def reload = { consistent_read: true } if self.class.range_key [:range_key] = range_value end self.attributes = self.class.find(hash_key, ).attributes @associations.values.each(&:reset) self end |