module Nazrin::Searchable::ClassMethods

Public Class Methods

extended(base) click to toggle source
# 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

Public Instance Methods

nazrin_add_document(obj) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/nazrin/searchable.rb, line 113
def nazrin_delete_document(obj)
  nazrin_doc_client.delete_document(obj.send(:id))
end
nazrin_doc_client() click to toggle source
# File lib/nazrin/searchable.rb, line 89
def nazrin_doc_client
  class_variable_get(:@@nazrin_doc_client)
end
nazrin_eval_field_data(obj) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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_searchable(&block) click to toggle source
# 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_config() click to toggle source
# 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| ... } click to toggle source
# File lib/nazrin/searchable.rb, line 121
def nazrin_searchable_configure
  yield nazrin_searchable_config
end
nazrin_update_document(obj) click to toggle source
# File lib/nazrin/searchable.rb, line 109
def nazrin_update_document(obj)
  nazrin_add_document(obj)
end