Module: Searchkick::Model

Defined in:
lib/searchkick/model.rb

Instance Method Summary collapse

Instance Method Details

#searchkick(options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/searchkick/model.rb', line 4

def searchkick(options = {})
  @searchkick_options = options.dup

  class_eval do
    extend Searchkick::Search
    extend Searchkick::Reindex
    include Tire::Model::Search
    include Tire::Model::Callbacks
    tire do
      index_name options[:index_name] || [klass.model_name.plural, ENV["RACK_ENV"] || "development"].join("_")
    end

    def reindex
      update_index
    end

    def search_data
      as_json
    end

    def to_indexed_json
      source = search_data

      # stringify fields
      source = source.inject({}){|memo,(k,v)| memo[k.to_s] = v; memo}

      options = self.class.instance_variable_get("@searchkick_options")

      # conversions
      conversions_field = options[:conversions]
      if conversions_field and source[conversions_field]
        source[conversions_field] = source[conversions_field].map{|k, v| {query: k, count: v} }
      end

      # hack to prevent generator field doesn't exist error
      (options[:suggest] || []).map(&:to_s).each do |field|
        source[field] = "a" if !source[field]
      end

      source.to_json
    end
  end
end