Module: SoulmateRails::ModelAdditions

Extended by:
ActiveSupport::Concern
Defined in:
lib/soulmate_rails/model_additions.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#remove_index_for(attribute) ⇒ Object



41
42
43
44
# File 'lib/soulmate_rails/model_additions.rb', line 41

def remove_index_for(attribute)
  loader = instance_variable_get("@#{self.class.name_for(attribute)}") || instance_variable_set("@#{self.class.name_for(attribute)}", Soulmate::Loader.new(self.class.name_for(attribute)))
  loader.remove('id' => "#{attribute}_#{self.id}")
end

#update_index_for(attribute, options = {}) ⇒ Object



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
# File 'lib/soulmate_rails/model_additions.rb', line 11

def update_index_for(attribute, options={})
  loader = instance_variable_get("@#{self.class.name_for(attribute)}_loader") || instance_variable_set("@#{self.class.name_for(attribute)}_loader", Soulmate::Loader.new(self.class.name_for(attribute)))
  item = {
    'id' => "#{attribute}_#{self.id}",
    'term' => send(attribute).encode('UTF-8'),
    'score' => ( respond_to?(options[:score]) ? send(options[:score]) : options[:score] )
  }

  if options[:aliases]
    if options[:aliases].is_a?(Array)
      item.merge!({'aliases' => options[:aliases]})
    elsif respond_to?(options[:aliases])
      aliases = send(options[:aliases])
      item.merge!({'aliases' => aliases}) if aliases && aliases.is_a?(Array)
    end
  end

  if options[:data]
    if options[:data].is_a?(Hash)
      item.merge!({'data' => options[:data]})
    elsif respond_to?(options[:data])
      item.merge!({'data' => send(options[:data])})
    elsif options[:data].is_a?(String)
      item.merge!({'data' => options[:data]})
    end
  end

  loader.add(item)
end