class PgSearch::Configuration

Constants

VALID_KEYS
VALID_VALUES

Attributes

model[R]
options[R]

Public Class Methods

alias(*strings) click to toggle source
# File lib/pg_search/configuration.rb, line 19
def alias(*strings)
  name = Array(strings).compact.join("_")
  # By default, PostgreSQL limits names to 32 characters, so we hash and limit to 32 characters.
  "pg_search_#{Digest::SHA2.hexdigest(name)}".first(32)
end
new(options, model) click to toggle source
# File lib/pg_search/configuration.rb, line 11
def initialize(options, model)
  @options = default_options.merge(options)
  @model = model

  assert_valid_options(@options)
end

Public Instance Methods

associated_columns() click to toggle source
# File lib/pg_search/configuration.rb, line 46
def associated_columns
  associations.map(&:columns).flatten
end
associations() click to toggle source
# File lib/pg_search/configuration.rb, line 38
def associations
  return [] unless options[:associated_against]

  options[:associated_against].map do |association, column_names|
    Association.new(model, association, column_names)
  end.flatten
end
columns() click to toggle source
# File lib/pg_search/configuration.rb, line 26
def columns
  regular_columns + associated_columns
end
feature_options() click to toggle source
# File lib/pg_search/configuration.rb, line 66
def feature_options
  @feature_options ||= {}.tap do |hash|
    features.map do |feature_name, feature_options|
      hash[feature_name] = feature_options
    end
  end
end
features() click to toggle source
# File lib/pg_search/configuration.rb, line 62
def features
  Array(options[:using])
end
ignore() click to toggle source
# File lib/pg_search/configuration.rb, line 54
def ignore
  Array(options[:ignoring])
end
order_within_rank() click to toggle source
# File lib/pg_search/configuration.rb, line 74
def order_within_rank
  options[:order_within_rank]
end
query() click to toggle source
# File lib/pg_search/configuration.rb, line 50
def query
  options[:query].to_s
end
ranking_sql() click to toggle source
# File lib/pg_search/configuration.rb, line 58
def ranking_sql
  options[:ranked_by]
end
regular_columns() click to toggle source
# File lib/pg_search/configuration.rb, line 30
def regular_columns
  return [] unless options[:against]

  Array(options[:against]).map do |column_name, weight|
    Column.new(column_name, weight, model)
  end
end

Private Instance Methods

assert_valid_options(options) click to toggle source
# File lib/pg_search/configuration.rb, line 94
def assert_valid_options(options)
  unless options[:against] || options[:associated_against] || using_tsvector_column?(options[:using])
    raise(
      ArgumentError,
      "the search scope #{@name} must have :against, :associated_against, or :tsvector_column in its options"
    )
  end

  options.assert_valid_keys(VALID_KEYS)

  VALID_VALUES.each do |key, values_for_key|
    Array(options[key]).each do |value|
      raise ArgumentError, ":#{key} cannot accept #{value}" unless values_for_key.include?(value)
    end
  end
end
default_options() click to toggle source
# File lib/pg_search/configuration.rb, line 82
def default_options
  {using: :tsearch}
end
using_tsvector_column?(options) click to toggle source
# File lib/pg_search/configuration.rb, line 111
def using_tsvector_column?(options)
  return unless options.is_a?(Hash)

  options.dig(:dmetaphone, :tsvector_column).present? ||
    options.dig(:tsearch, :tsvector_column).present?
end