Sha256: 7fa438c27728c27803ab24a946576073bc0ba8b5401b7af37764ac11ce4eeed3

Contents?: true

Size: 1.64 KB

Versions: 5

Compression:

Stored size: 1.64 KB

Contents

module Elasticity
  class IndexConfig
    ATTRS = [:index_base_name, :document_type, :mapping, :strategy, :subclasses].freeze
    VALIDATABLE_ATTRS = [:index_base_name, :document_type, :strategy].freeze

    attr_accessor *ATTRS

    def initialize(elasticity_config, defaults = {})
      defaults.each do |k,v|
        instance_variable_set("@#{k}",v)
      end
      @elasticity_config = elasticity_config
      yield(self)
      validate!
    end

    def segment(name)
      new_config = self.dup
      new_config.index_base_name = "#{index_base_name}_#{name.underscore}"
      new_config
    end

    def client
      @elasticity_config.client
    end

    def definition
      return @definition if defined?(@definition)
      @definition = { settings: @elasticity_config.settings, mappings: { @document_type => @mapping || {} } }
      subclasses.each do |doc_type, subclass|
        @definition[:mappings][doc_type] = subclass.constantize.mapping
      end if subclasses.present?
      @definition
    end

    def document_types
      @document_types ||= definition[:mappings].collect { |doc_type, mapping| doc_type }
    end

    def fq_index_base_name
      return @fq_index_base_name if defined?(@fq_index_base_name)

      if namespace = @elasticity_config.namespace
        @fq_index_base_name = "#{namespace}_#{@index_base_name}"
      else
        @fq_index_base_name = @index_base_name
      end

      @fq_index_base_name
    end

    def strategy
      @strategy ||= Strategies::AliasIndex
    end

    private

    def validate!
      VALIDATABLE_ATTRS.each do |attr|
        raise "#{attr} is not set" if public_send(attr).nil?
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
es-elasticity-0.8.4 lib/elasticity/index_config.rb
es-elasticity-0.8.3 lib/elasticity/index_config.rb
es-elasticity-0.8.2 lib/elasticity/index_config.rb
es-elasticity-0.8.1 lib/elasticity/index_config.rb
es-elasticity-0.8.0 lib/elasticity/index_config.rb