module Dynamoid::Indexes::ClassMethods
Public Instance Methods
create_indexes()
click to toggle source
# File lib/dynamoid/indexes.rb, line 24 def create_indexes self.indexes.each do |index| self.create_table(index_table_name(index), index_key_name(index)) unless self.table_exists?(index_table_name(index)) end end
index(name, options = {})
click to toggle source
# File lib/dynamoid/indexes.rb, line 17 def index(name, options = {}) name = Array(name).collect(&:to_s).sort.collect(&:to_sym) raise Dynamoid::Errors::InvalidField, 'A key specified for an index is not a field' unless name.all?{|n| self.fields.include?(n)} self.indexes << name create_indexes end
index_key_name(index)
click to toggle source
# File lib/dynamoid/indexes.rb, line 34 def index_key_name(index) "#{self.to_s.downcase}_#{index.collect(&:to_s).collect(&:pluralize).join('_and_')}" end
index_table_name(index)
click to toggle source
# File lib/dynamoid/indexes.rb, line 30 def index_table_name(index) "#{Dynamoid::Config.namespace}_index_#{index_key_name(index)}" end
key_for_index(index, values = [])
click to toggle source
# File lib/dynamoid/indexes.rb, line 38 def key_for_index(index, values = []) values = values.collect(&:to_s).sort Digest::SHA2.new.tap do |sha| index.each_with_index {|i, index| sha << values[index] if values[index]} end.to_s end