class PhatPgsearch::IndexBuilder
Attributes
base[R]
build[R]
connection[R]
definition[R]
Public Class Methods
new(base, definition)
click to toggle source
# File lib/phat_pgsearch/index_builder.rb, line 5 def initialize(base, definition) @base = base @definition = definition @connection = base.class.connection build_index end
Protected Instance Methods
build_index()
click to toggle source
# File lib/phat_pgsearch/index_builder.rb, line 14 def build_index partials = [] definition.fields.each do |field_definition| field = field_definition.first field_options = field_definition.extract_options! field_content = base.respond_to?(field) ? base.send(field.to_s) : '' if not field_options[:weight].nil? and [:a, :b, :c, :d].include? field_options[:weight].to_sym partial = "setweight(to_tsvector(#{base.class.sanitize(definition.catalog)}, #{base.class.sanitize(field_content.to_s)}), '#{field_options[:weight].to_s.upcase}')" else partial = "to_tsvector(#{base.class.sanitize(definition.catalog)}, #{base.class.sanitize(field_content.to_s)})" end partials << partial end base.send("#{definition.index_field}=", base.class.connection.select_value("SELECT #{partials.join(' || ')}")) end