module Dynamoid::Document::ClassMethods

Attributes

abstract_class[RW]

Public Instance Methods

abstract_class?() click to toggle source
# File lib/dynamoid/document.rb, line 165
def abstract_class?
  defined?(@abstract_class) && @abstract_class == true
end
attr_readonly(*read_only_attributes) click to toggle source
# 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) click to toggle source

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 ...>

@param attrs [Hash] Attributes with which to create the document @param block [Proc] Block to process a document after initialization @return [Dynamoid::Document] the new document @since 0.2.0

# File lib/dynamoid/document.rb, line 116
def build(attrs = {}, &block)
  choose_right_class(attrs).new(attrs, &block)
end
capacity_mode() click to toggle source

Returns the billing (capacity) mode for this table.

Could be either provisioned or on_demand.

@return [Symbol]

# File lib/dynamoid/document.rb, line 45
def capacity_mode
  options[:capacity_mode] || Dynamoid::Config.capacity_mode
end
choose_right_class(attrs) click to toggle source

@private

# File lib/dynamoid/document.rb, line 185
def choose_right_class(attrs)
  attrs[inheritance_field] ? sti_class_for(attrs[inheritance_field]) : self
end
count() click to toggle source

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.

@return [Integer] items count in a table @since 0.6.1

# File lib/dynamoid/document.rb, line 82
def count
  Dynamoid.adapter.count(table_name)
end
deep_subclasses() click to toggle source

@private

# File lib/dynamoid/document.rb, line 180
def deep_subclasses
  subclasses + subclasses.map(&:deep_subclasses).flatten
end
exists?(id_or_conditions = {}) click to toggle source

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)

@param id_or_conditions [String|Array|Array|Hash] the primary id of the model, a list of primary ids or a hash with the options to filter from. @return [true|false] @since 0.2.0

# 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() click to toggle source

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

@return [Symbol] a hash key name @since 0.4.0

# File lib/dynamoid/document.rb, line 68
def hash_key
  options[:key] || :id
end
inheritance_field() click to toggle source

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
# File lib/dynamoid/document.rb, line 55
def inheritance_field
  options[:inheritance_field] || :type
end
read_capacity() click to toggle source

Returns the read capacity for this table.

@return [Integer] read capacity units @since 0.4.0

# File lib/dynamoid/document.rb, line 28
def read_capacity
  options[:read_capacity] || Dynamoid::Config.read_capacity
end
sti_class_for(type_name) click to toggle source
# 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() click to toggle source
# File lib/dynamoid/document.rb, line 169
def sti_name
  name
end
write_capacity() click to toggle source

Returns the write_capacity for this table.

@return [Integer] write capacity units @since 0.4.0

# File lib/dynamoid/document.rb, line 36
def write_capacity
  options[:write_capacity] || Dynamoid::Config.write_capacity
end