module Dynamoid::Document::ClassMethods
Attributes
Public Instance Methods
# File lib/dynamoid/document.rb, line 165 def abstract_class? defined?(@abstract_class) && @abstract_class == true end
# 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
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
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
@private
# File lib/dynamoid/document.rb, line 185 def choose_right_class(attrs) attrs[inheritance_field] ? sti_class_for(attrs[inheritance_field]) : self end
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
@private
# File lib/dynamoid/document.rb, line 180 def deep_subclasses subclasses + subclasses.map(&:deep_subclasses).flatten end
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
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
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
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
# 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
# File lib/dynamoid/document.rb, line 169 def sti_name name end
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