lib/pg_search.rb
# frozen_string_literal: true
require "active_record"
require "active_support/concern"
require "active_support/core_ext/module/attribute_accessors"
require "active_support/core_ext/string/strip"
require "pg_search/configuration"
require "pg_search/features"
require "pg_search/model"
require "pg_search/multisearch"
require "pg_search/multisearchable"
require "pg_search/normalizer"
require "pg_search/scope_options"
require "pg_search/version"
module PgSearch
autoload :Document, "pg_search/document"
def self.included(base)
warn(<<~MESSAGE, category: :deprecated, uplevel: 1)
Directly including `PgSearch` into an Active Record model is deprecated and will be removed in pg_search 3.0.
Please replace `include PgSearch` with `include PgSearch::Model`.
MESSAGE
base.include PgSearch::Model
end
mattr_accessor :multisearch_options
self.multisearch_options = {}
mattr_accessor :unaccent_function
self.unaccent_function = "unaccent"
class << self
def multisearch(...)
PgSearch::Document.search(...)
end
def disable_multisearch
Thread.current["PgSearch.enable_multisearch"] = false
yield
ensure
Thread.current["PgSearch.enable_multisearch"] = true
end
def multisearch_enabled?
if Thread.current.key?("PgSearch.enable_multisearch")
Thread.current["PgSearch.enable_multisearch"]
else
true
end
end
end
class PgSearchRankNotSelected < StandardError
def message
"You must chain .with_pg_search_rank after the pg_search_scope " \
"to access the pg_search_rank attribute on returned records"
end
end
class PgSearchHighlightNotSelected < StandardError
def message
"You must chain .with_pg_search_highlight after the pg_search_scope " \
"to access the pg_search_highlight attribute on returned records"
end
end
end
require "pg_search/railtie" if defined?(Rails::Railtie)