# File lib/pg_search/multisearch/rebuilder.rb, line 44 def primary_key model.primary_key end
class PgSearch::Multisearch::Rebuilder
Attributes
model[R]
Public Class Methods
new(model, time_source = Time.method(:now))
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 6 def initialize(model, time_source = Time.method(:now)) raise ModelNotMultisearchable, model unless model.respond_to?(:pg_search_multisearchable_options) @model = model @time_source = time_source end
Public Instance Methods
rebuild()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 13 def rebuild if model.respond_to?(:rebuild_pg_search_documents) model.rebuild_pg_search_documents elsif conditional? || dynamic? || additional_attributes? model.find_each(&:update_pg_search_document) else model.connection.execute(rebuild_sql) end end
Private Instance Methods
additional_attributes?()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 36 def additional_attributes? model.pg_search_multisearchable_options.key?(:additional_attributes) end
base_model_name()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 96 def base_model_name connection.quote(model.base_class.name) end
columns()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 88 def columns Array(model.pg_search_multisearchable_options[:against]) end
conditional?()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 27 def conditional? model.pg_search_multisearchable_options.key?(:if) || model.pg_search_multisearchable_options.key?(:unless) end
connection()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 40 def connection model.connection end
content_expressions()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 82 def content_expressions columns.map do |column| %{coalesce(:model_table.#{connection.quote_column_name(column)}::text, '')} end.join(" || ' ' || ") end
current_time()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 108 def current_time connection.quote(connection.quoted_date(@time_source.call)) end
documents_table()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 104 def documents_table PgSearch::Document.quoted_table_name end
dynamic?()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 31 def dynamic? column_names = model.columns.map(&:name) columns.any? { |column| column_names.exclude?(column.to_s) } end
model_name()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 92 def model_name connection.quote(model.name) end
model_table()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 100 def model_table model.quoted_table_name end
primary_key()
click to toggle source
rebuild_sql()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 62 def rebuild_sql replacements.inject(rebuild_sql_template) do |sql, key| sql.gsub ":#{key}", send(key) end end
rebuild_sql_template()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 48 def rebuild_sql_template <<~SQL.squish INSERT INTO :documents_table (searchable_type, searchable_id, content, created_at, updated_at) SELECT :base_model_name AS searchable_type, :model_table.#{primary_key} AS searchable_id, ( :content_expressions ) AS content, :current_time AS created_at, :current_time AS updated_at FROM :model_table :sti_clause SQL end
replacements()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 78 def replacements %w[content_expressions base_model_name model_name model_table documents_table current_time sti_clause] end
sti_clause()
click to toggle source
# File lib/pg_search/multisearch/rebuilder.rb, line 68 def sti_clause clause = "" if model.column_names.include? model.inheritance_column clause = "WHERE" clause = "#{clause} #{model.inheritance_column} IS NULL OR" if model.base_class == model clause = "#{clause} #{model.inheritance_column} = #{model_name}" end clause end