class Locomotive::Search::Backend::Algolia

Attributes

site[RW]

Public Class Methods

enabled_for?(site) click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 69
def self.enabled_for?(site)
  site.metafields.present? &&
  site.metafields['algolia'].present? &&
  site.metafields['algolia']['application_id'].present? &&
  site.metafields['algolia']['api_key'].present?
end
new(site, locale) click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 11
def initialize(site, locale)
  @site, @locale = site, locale

  if site.metafields['algolia']
    credentials  = site.metafields['algolia'].slice('application_id', 'api_key').symbolize_keys
    @client      = ::Algolia::Client.new(credentials)
  end
end
reset_done!(site) click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 81
def self.reset_done!(site)
  site.metafields['algolia']['reset'] = false
end
reset_for?(site) click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 76
def self.reset_for?(site)
  enabled_for?(site) &&
  [1, '1', true].include?(site.metafields['algolia']['reset'])
end

Public Instance Methods

base_index_name() click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 65
def base_index_name
  ['locomotive', Rails.env, self.site.handle].join('-')
end
clear_all_indices() click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 41
def clear_all_indices
  client.list_indexes['items'].each do |index_attributes|
    name = index_attributes['name']

    next unless name =~ /^#{self.base_index_name}-/

    ::Algolia::Index.new(name, self.client).clear_index
  end
end
delete_object(type, object_id) click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 36
def delete_object(type, object_id)
  object_type_index(type).delete_object(object_id)
  global_index.delete_object(object_id)
end
global_index() click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 55
def global_index
  name = [base_index_name, self.locale].join('-')
  ::Algolia::Index.new(name, self.client)
end
object_index(type) click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 60
def object_index(type)
  name = [base_index_name, self.locale, type].join('-')
  ::Algolia::Index.new(name, self.client)
end
save_object(type: nil, object_id: nil, title: nil, content: nil, visible: true, data: {}) click to toggle source

Add the object to 2 indices:

  • global: in order to perform a global search among all the entities: page, content entries

  • object: in order to perform a local search among the pages or a content type

Names of the indices:

  • global: locomotive-<Rails env>-<site handle>-<locale>

  • object: locomotive-<Rails env>-<site handle>-<locale>-<type: page or a content type>

# File lib/locomotive/search/backend/algolia.rb, line 28
def save_object(type: nil, object_id: nil, title: nil, content: nil, visible: true, data: {})
  base_object = { objectID: object_id, visible: visible, type: type }
  object      = { title: title, content: content, data: data }.merge(base_object)

  object_index(type).save_objects([data.merge(base_object)])
  global_index.save_objects([object])
end
valid?() click to toggle source
# File lib/locomotive/search/backend/algolia.rb, line 51
def valid?
  @client.present?
end