Module: Dynamoid::Indexes::ClassMethods
- Defined in:
- lib/dynamoid/indexes.rb
Instance Method Summary collapse
- #create_indexes ⇒ Object
- #index(name, options = {}) ⇒ Object
- #index_key_name(index) ⇒ Object
- #index_table_name(index) ⇒ Object
- #key_for_index(index, values = []) ⇒ Object
Instance Method Details
#create_indexes ⇒ Object
24 25 26 27 28 |
# 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 = {}) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/dynamoid/indexes.rb', line 17 def index(name, = {}) 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) ⇒ Object
34 35 36 |
# 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) ⇒ Object
30 31 32 |
# 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 = []) ⇒ Object
38 39 40 41 42 43 |
# 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 |