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



188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/parade_db/index.rb', line 188

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