class Elastic::Core::Definition

Attributes

middleware_options[R]

Public Class Methods

new() click to toggle source
# File lib/elastic/core/definition.rb, line 19
def initialize
  @target = nil
  @field_map = {}
  @field_cache = {}
  @middleware_options = HashWithIndifferentAccess.new
end

Public Instance Methods

as_es_mapping() click to toggle source
# File lib/elastic/core/definition.rb, line 58
def as_es_mapping
  ensure_frozen!

  properties = {}
  @field_map.each_value do |field|
    properties[field.name] = field.mapping_options
  end

  { 'properties' => properties.as_json }
end
fields() click to toggle source
# File lib/elastic/core/definition.rb, line 30
def fields
  @field_map.each_value
end
freeze() click to toggle source
Calls superclass method
# File lib/elastic/core/definition.rb, line 34
def freeze
  return if frozen?

  cache_target
  complete_and_validate_fields
  freeze_fields
  @middleware_options.freeze
  super
end
get_field(_name) click to toggle source
# File lib/elastic/core/definition.rb, line 44
def get_field(_name)
  ensure_frozen!

  _name = _name.to_s
  @field_cache[_name] = resolve_field(_name) unless @field_cache.key? _name
  @field_cache[_name]
end
has_field?(_name) click to toggle source
# File lib/elastic/core/definition.rb, line 52
def has_field?(_name)
  ensure_frozen!

  !get_field(_name).nil?
end
mode() click to toggle source
# File lib/elastic/core/definition.rb, line 15
def mode
  target.mode
end
register_field(_field) click to toggle source
# File lib/elastic/core/definition.rb, line 26
def register_field(_field)
  @field_map[_field.name] = _field
end
target() click to toggle source
# File lib/elastic/core/definition.rb, line 5
def target
  raise 'attempting to access target before definition has been frozen' if @target_cache.nil?

  @target_cache
end
target=(_value) click to toggle source
# File lib/elastic/core/definition.rb, line 11
def target=(_value)
  @target = _value
end

Private Instance Methods

cache_target() click to toggle source
# File lib/elastic/core/definition.rb, line 83
def cache_target
  target = @target
  target = target.to_s.camelize.constantize if @target.is_a?(Symbol) || @target.is_a?(String)
  target = load_target_middleware(target) unless target.class < BaseMiddleware

  raise 'index target is not indexable' if target.nil?

  @target_cache = target
end
complete_and_validate_fields() click to toggle source
# File lib/elastic/core/definition.rb, line 93
def complete_and_validate_fields
  @field_map.each_value do |field|
    field.merge! infer_mapping_options(field.name) if field.needs_inference?

    error = field.validate
    raise error unless error.nil?
  end

  @field_map.freeze
end
ensure_frozen!() click to toggle source
# File lib/elastic/core/definition.rb, line 104
def ensure_frozen!
  raise 'definition needs to be frozen' unless frozen?
end
freeze_fields() click to toggle source
# File lib/elastic/core/definition.rb, line 108
def freeze_fields
  @field_map.each_value(&:freeze)
end
infer_mapping_options(_name) click to toggle source
# File lib/elastic/core/definition.rb, line 116
def infer_mapping_options(_name)
  target.field_options_for(_name, middleware_options)
end
load_target_middleware(_target) click to toggle source
# File lib/elastic/core/definition.rb, line 112
def load_target_middleware(_target)
  Middleware.wrap(_target)
end
resolve_field(_name) click to toggle source
# File lib/elastic/core/definition.rb, line 71
def resolve_field(_name)
  separator = _name.index '.'
  if separator.nil?
    @field_map[_name]
  else
    parent = @field_map[_name[0...separator]]
    return nil if parent.nil?

    parent.get_field(_name[separator + 1..-1])
  end
end