Module: Nazrin::Searchable::ClassMethods

Defined in:
lib/nazrin/searchable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/nazrin/searchable.rb', line 28

def self.extended(base)
  class << base
    alias_method :search, :nazrin_search unless method_defined? :search
    alias_method :searchable, :nazrin_searchable unless method_defined? :searchable
    alias_method :batch_operation, :nazrin_batch_operation unless method_defined? :batch_operation
    alias_method :fields, :nazrin_fields unless method_defined? :fields
    alias_method :field, :nazrin_field unless method_defined? :field
    alias_method :searchable_configure, :nazrin_searchable_configure unless method_defined? :searchable_configure
  end
end

Instance Method Details

#nazrin_add_document(obj) ⇒ Object



104
105
106
107
# File 'lib/nazrin/searchable.rb', line 104

def nazrin_add_document(obj)
  nazrin_doc_client.add_document(
    obj.send(:id), nazrin_eval_field_data(obj))
end

#nazrin_batch_operation(type_objects_mapping) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/nazrin/searchable.rb', line 53

def nazrin_batch_operation(type_objects_mapping)
  operations = type_objects_mapping.each_with_object({}) do |(type, objects), hash|
    case type.to_sym
    when :add
      hash[:add] = objects.map do |obj|
        [obj.send(:id), nazrin_eval_field_data(obj)]
      end
    when :delete
      hash[:delete] = objects.map do |obj|
        obj.send(:id)
      end
    else
      raise(
        InvalidBatchOperationError,
        "`#{type}` is not a valid batch operation"
      )
    end
  end

  nazrin_doc_client.batch(operations)
end

#nazrin_delete_document(obj) ⇒ Object



113
114
115
# File 'lib/nazrin/searchable.rb', line 113

def nazrin_delete_document(obj)
  nazrin_doc_client.delete_document(obj.send(:id))
end

#nazrin_doc_clientObject



89
90
91
# File 'lib/nazrin/searchable.rb', line 89

def nazrin_doc_client
  class_variable_get(:@@nazrin_doc_client)
end

#nazrin_eval_field_data(obj) ⇒ Object



93
94
95
96
97
98
99
100
101
102
# File 'lib/nazrin/searchable.rb', line 93

def nazrin_eval_field_data(obj)
  data = {}
  class_variable_get(
    :@@nazrin_search_field_data).each do |field, block|
      data[field] = obj.instance_eval(&block)
      data[field] = data[field].remove(
        /[[:cntrl:]]/) if data[field].is_a?(String)
    end
  data
end

#nazrin_field(field, &block) ⇒ Object



83
84
85
86
87
# File 'lib/nazrin/searchable.rb', line 83

def nazrin_field(field, &block)
  field_data = class_variable_get(:@@nazrin_search_field_data)
  field_data[field] = block
  class_variable_set(:@@nazrin_search_field_data, field_data)
end

#nazrin_fields(fields) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/nazrin/searchable.rb', line 75

def nazrin_fields(fields)
  field_data = class_variable_get(:@@nazrin_search_field_data)
  fields.each do |field|
    field_data[field] = proc { public_send(field) }
  end
  class_variable_set(:@@nazrin_search_field_data, field_data)
end

#nazrin_search(options = {}) ⇒ Object



39
40
41
42
43
# File 'lib/nazrin/searchable.rb', line 39

def nazrin_search(options = {})
  client = Nazrin::SearchClient.new(nazrin_searchable_config)
  client.data_accessor = Nazrin::DataAccessor.for(self).new(self, options)
  client
end

#nazrin_searchable(&block) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/nazrin/searchable.rb', line 45

def nazrin_searchable(&block)
  class_variable_set(
    :@@nazrin_doc_client,
    Nazrin::DocumentClient.new(nazrin_searchable_config))
  class_variable_set(:@@nazrin_search_field_data, {})
  block.call
end

#nazrin_searchable_configObject



117
118
119
# File 'lib/nazrin/searchable.rb', line 117

def nazrin_searchable_config
  @nazrin_searchable_config ||= Nazrin::Searchable::Configuration.new
end

#nazrin_searchable_configure {|nazrin_searchable_config| ... } ⇒ Object



121
122
123
# File 'lib/nazrin/searchable.rb', line 121

def nazrin_searchable_configure
  yield nazrin_searchable_config
end

#nazrin_update_document(obj) ⇒ Object



109
110
111
# File 'lib/nazrin/searchable.rb', line 109

def nazrin_update_document(obj)
  nazrin_add_document(obj)
end