Sha256: 97e0fee3750d2cb4c9be507ee629ed85b03c514844b294f150efaaaa9a4328d6

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

module Elasticity
  class IndexConfig
    ATTRS = [
      :index_base_name, :document_type, :mapping, :strategy, :subclasses,
      :settings
    ].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: merge_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

    def merge_settings
      @elasticity_config.settings.merge(settings || {})
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
es-elasticity-0.9.0 lib/elasticity/index_config.rb