Module: Dynamoid::Document::ClassMethods
- Defined in:
 - lib/dynamoid/document.rb
 
Instance Attribute Summary collapse
- 
  
    
      #abstract_class  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
Returns the value of attribute abstract_class.
 
Instance Method Summary collapse
- #abstract_class? ⇒ Boolean
 - #attr_readonly(*read_only_attributes) ⇒ Object
 - 
  
    
      #build(attrs = {}, &block)  ⇒ Dynamoid::Document 
    
    
  
  
  
  
  
  
  
  
  
    
Initialize a new object.
 - 
  
    
      #capacity_mode  ⇒ Symbol 
    
    
  
  
  
  
  
  
  
  
  
    
Returns the billing (capacity) mode for this table.
 - #choose_right_class(attrs) ⇒ Object
 - 
  
    
      #count  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    
Return the count of items for this class.
 - #deep_subclasses ⇒ Object
 - 
  
    
      #exists?(id_or_conditions = {})  ⇒ true|false 
    
    
  
  
  
  
  
  
  
  
  
    
Does this model exist in a table?.
 - 
  
    
      #hash_key  ⇒ Symbol 
    
    
  
  
  
  
  
  
  
  
  
    
Returns the hash key field name for this class.
 - 
  
    
      #inheritance_field  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Returns the field name used to support STI for this table.
 - 
  
    
      #read_capacity  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    
Returns the read capacity for this table.
 - #sti_class_for(type_name) ⇒ Object
 - #sti_name ⇒ Object
 - 
  
    
      #write_capacity  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    
Returns the write_capacity for this table.
 
Instance Attribute Details
#abstract_class ⇒ Object
Returns the value of attribute abstract_class.
      163 164 165  | 
    
      # File 'lib/dynamoid/document.rb', line 163 def abstract_class @abstract_class end  | 
  
Instance Method Details
#abstract_class? ⇒ Boolean
      165 166 167  | 
    
      # File 'lib/dynamoid/document.rb', line 165 def abstract_class? defined?(@abstract_class) && @abstract_class == true end  | 
  
#attr_readonly(*read_only_attributes) ⇒ Object
      20 21 22  | 
    
      # File 'lib/dynamoid/document.rb', line 20 def attr_readonly(*read_only_attributes) self.read_only_attributes.concat read_only_attributes.map(&:to_s) end  | 
  
#build(attrs = {}, &block) ⇒ Dynamoid::Document
Initialize a new object.
User.build(name: 'A')
Initialize an object and pass it into a block to set other attributes.
User.build(name: 'A') do |u|
  u.age = 21
end
The only difference between build and new methods is that build supports STI (Single table inheritance) and looks at the inheritance field. So it can build a model of actual class. For instance:
class Employee
  include Dynamoid::Document
  field :type
  field :name
end
class Manager < Employee
end
Employee.build(name: 'Alice', type: 'Manager') # => #<Manager:0x00007f945756e3f0 ...>
  
      116 117 118  | 
    
      # File 'lib/dynamoid/document.rb', line 116 def build(attrs = {}, &block) choose_right_class(attrs).new(attrs, &block) end  | 
  
#capacity_mode ⇒ Symbol
Returns the billing (capacity) mode for this table.
Could be either provisioned or on_demand.
      45 46 47  | 
    
      # File 'lib/dynamoid/document.rb', line 45 def capacity_mode [:capacity_mode] || Dynamoid::Config.capacity_mode end  | 
  
#choose_right_class(attrs) ⇒ Object
      185 186 187  | 
    
      # File 'lib/dynamoid/document.rb', line 185 def choose_right_class(attrs) attrs[inheritance_field] ? sti_class_for(attrs[inheritance_field]) : self end  | 
  
#count ⇒ Integer
Return the count of items for this class.
It returns approximate value based on DynamoDB statistic. DynamoDB updates it periodically so the value can be no accurate.
It’s a reletively cheap operation and doesn’t read all the items in a table. It makes just one HTTP request to DynamoDB.
      82 83 84  | 
    
      # File 'lib/dynamoid/document.rb', line 82 def count Dynamoid.adapter.count(table_name) end  | 
  
#deep_subclasses ⇒ Object
      180 181 182  | 
    
      # File 'lib/dynamoid/document.rb', line 180 def deep_subclasses subclasses + subclasses.map(&:deep_subclasses).flatten end  | 
  
#exists?(id_or_conditions = {}) ⇒ true|false
Does this model exist in a table?
User.exists?('713') # => true
If a range key is declared it should be specified in the following way:
User.exists?([['713', 'range-key-value']]) # => true
It’s possible to check existence of several models at once:
User.exists?(['713', '714', '715'])
Or in case when a range key is declared:
User.exists?(
  [
    ['713', 'range-key-value-1'],
    ['714', 'range-key-value-2'],
    ['715', 'range-key-value-3']
  ]
)
It’s also possible to specify models not with primary key but with conditions on the attributes (in the where method style):
User.exists?(age: 20, 'created_at.gt': Time.now - 1.day)
  
      150 151 152 153 154 155 156 157 158 159 160 161  | 
    
      # File 'lib/dynamoid/document.rb', line 150 def exists?(id_or_conditions = {}) case id_or_conditions when Hash then where(id_or_conditions).count >= 1 else begin find(id_or_conditions) true rescue Dynamoid::Errors::RecordNotFound false end end end  | 
  
#hash_key ⇒ Symbol
Returns the hash key field name for this class.
By default id field is used. But it can be overriden in the table method call.
User.hash_key # => :id
  
      68 69 70  | 
    
      # File 'lib/dynamoid/document.rb', line 68 def hash_key [:key] || :id end  | 
  
#inheritance_field ⇒ Object
Returns the field name used to support STI for this table.
Default field name is type but it can be overrided in the table method call.
User.inheritance_field # => :type
  
      55 56 57  | 
    
      # File 'lib/dynamoid/document.rb', line 55 def inheritance_field [:inheritance_field] || :type end  | 
  
#read_capacity ⇒ Integer
Returns the read capacity for this table.
      28 29 30  | 
    
      # File 'lib/dynamoid/document.rb', line 28 def read_capacity [:read_capacity] || Dynamoid::Config.read_capacity end  | 
  
#sti_class_for(type_name) ⇒ Object
      173 174 175 176 177  | 
    
      # File 'lib/dynamoid/document.rb', line 173 def sti_class_for(type_name) type_name.constantize rescue NameError raise Errors::SubclassNotFound, "STI subclass does not found. Subclass: '#{type_name}'" end  | 
  
#sti_name ⇒ Object
      169 170 171  | 
    
      # File 'lib/dynamoid/document.rb', line 169 def sti_name name end  |