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