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