lib/pg_search/multisearch.rb in pg_search-0.5.1 vs lib/pg_search/multisearch.rb in pg_search-0.5.2

- old
+ new

@@ -1,56 +1,14 @@ module PgSearch module Multisearch - REBUILD_SQL_TEMPLATE = <<-SQL -INSERT INTO :documents_table (searchable_type, searchable_id, content, created_at, updated_at) - SELECT :model_name AS searchable_type, - :model_table.id AS searchable_id, - ( - :content_expressions - ) AS content, - :current_time AS created_at, - :current_time AS updated_at - FROM :model_table -SQL + autoload :Rebuilder, "pg_search/multisearch/rebuilder" class << self def rebuild(model, clean_up=true) model.transaction do PgSearch::Document.where(:searchable_type => model.name).delete_all if clean_up - if model.respond_to?(:rebuild_pg_search_documents) - model.rebuild_pg_search_documents - else - model.connection.execute(rebuild_sql(model)) - end + Rebuilder.new(model).rebuild end - end - - def rebuild_sql(model) - connection = model.connection - - unless model.respond_to?(:pg_search_multisearchable_options) - raise ModelNotMultisearchable.new(model) - end - - columns = Array.wrap( - model.pg_search_multisearchable_options[:against] - ) - - content_expressions = columns.map { |column| - %Q{coalesce(:model_table.#{column}::text, '')} - }.join(" || ' ' || ") - - REBUILD_SQL_TEMPLATE.gsub( - ":content_expressions", content_expressions - ).gsub( - ":model_name", connection.quote(model.name) - ).gsub( - ":model_table", model.quoted_table_name - ).gsub( - ":documents_table", PgSearch::Document.quoted_table_name - ).gsub( - ":current_time", connection.quote(connection.quoted_date(Time.now)) - ) end end class ModelNotMultisearchable < StandardError def initialize(model_class)