Class: LcpRuby::Search::QuickSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/search/quick_search.rb

Class Method Summary collapse

Class Method Details

.apply(scope, query, model_class, model_definition, searchable_field_names: nil) ⇒ Object

Applies type-aware quick text search across searchable fields. Returns a narrowed scope or the original scope if query is blank.

Parameters:

  • searchable_field_names (Array<String>, nil) (defaults to: nil)

    field names from search_config; if nil, all non-attachment, non-id model fields are used.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/lcp_ruby/search/quick_search.rb', line 9

def self.apply(scope, query, model_class, model_definition, searchable_field_names: nil)
  return scope if query.blank?

  # Escape hatch: model override
  if model_class.respond_to?(:default_query)
    return scope.merge(model_class.default_query(query))
  end

  searchable_fields = searchable_field_definitions(model_class, model_definition, searchable_field_names)
  conditions = build_conditions(query, model_class, searchable_fields)

  # Include searchable custom fields
  if model_definition.custom_fields_enabled?
    cf_conditions = build_custom_field_conditions(query, model_definition)
    conditions.concat(cf_conditions)
  end

  # Non-empty query but no conditions means no fields could match
  return scope.none if conditions.empty?

  scope.where(conditions.reduce(:or))
end