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