Class: ParadeDB::Index::DefinitionCompiler

Inherits:
Object
  • Object
show all
Defined in:
lib/parade_db/index.rb

Overview

Consumed by migration helpers; validates and normalizes the DSL class

Defined Under Namespace

Classes: Compiled, Entry

Constant Summary collapse

FIELD_OPTION_KEYS =
%i[fast record normalizer expand_dots].freeze

Class Method Summary collapse

Class Method Details

.compile!(klass) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/parade_db/index.rb', line 102

def compile!(klass)
  table_name = require_symbol!(klass.table_name, "table_name")
  key_field = require_symbol!(klass.key_field, "key_field")
  index_name = klass.index_name.to_s
  raise InvalidIndexDefinition, "index_name must be present" if index_name.strip.empty?

  raw_fields = klass.fields
  entries, field_options = build_entries(raw_fields)
  if entries.empty?
    raise InvalidIndexDefinition, "fields must include at least one indexed field"
  end

  index_options = normalize_index_options(klass.index_options)

  validate_key_field_shape!(key_field.to_s, entries)
  validate_query_key_collisions!(entries)

  Compiled.new(
    table_name: table_name,
    key_field: key_field,
    index_name: index_name,
    entries: entries,
    index_options: index_options,
    field_options: field_options,
    where: klass.where
  )
end