class MeiliSearch::IndexSettings

Constants

DEFAULT_BATCH_SIZE
DEFAULT_PRIMARY_KEY
OPTIONS

MeiliSearch settings

Public Class Methods

new(options, &block) click to toggle source
# File lib/meilisearch-rails.rb, line 76
def initialize(options, &block)
  @options = options
  instance_exec(&block) if block_given?
end

Public Instance Methods

add_attribute(*names, &block) click to toggle source
# File lib/meilisearch-rails.rb, line 95
def add_attribute(*names, &block)
  raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
  @additional_attributes ||= {}
  names.each do |name|
    @additional_attributes[name.to_s] = block_given? ? Proc.new { |d| d.instance_eval(&block) } : Proc.new { |d| d.send(name) }
  end
end
Also aliased as: add_attributes
add_attributes(*names, &block)
Alias for: add_attribute
add_index(index_uid, options = {}, &block) click to toggle source
# File lib/meilisearch-rails.rb, line 220
def add_index(index_uid, options = {}, &block)
  raise ArgumentError.new('No block given') if !block_given?
  raise ArgumentError.new('Options auto_index and auto_remove cannot be set on nested indexes') if options[:auto_index] || options[:auto_remove]
  @additional_indexes ||= {}
  options[:index_uid] = index_uid
  @additional_indexes[options] = IndexSettings.new(options, &block)
end
additional_indexes() click to toggle source
# File lib/meilisearch-rails.rb, line 228
def additional_indexes
  @additional_indexes || {}
end
attribute(*names, &block) click to toggle source
# File lib/meilisearch-rails.rb, line 86
def attribute(*names, &block)
  raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
  @attributes ||= {}
  names.flatten.each do |name|
    @attributes[name.to_s] = block_given? ? Proc.new { |d| d.instance_eval(&block) } : Proc.new { |d| d.send(name) }
  end
end
Also aliased as: attributes
attributes(*names, &block)
Alias for: attribute
attributes_to_hash(attributes, document) click to toggle source
# File lib/meilisearch-rails.rb, line 133
def attributes_to_hash(attributes, document)
  if attributes
    Hash[attributes.map { |name, value| [name.to_s, value.call(document) ] }]
  else
    {}
  end
end
encode_attributes(v) click to toggle source
# File lib/meilisearch-rails.rb, line 194
def encode_attributes(v)
  case v
  when String
    v.force_encoding('utf-8')
  when Hash
    v.each { |key, value| v[key] = encode_attributes(value) }
  when Array
    v.map { |x| encode_attributes(x) }
  else
    v
  end
end
get_attribute_names(document) click to toggle source
# File lib/meilisearch-rails.rb, line 129
def get_attribute_names(document)
  get_attributes(document).keys
end
get_attributes(document) click to toggle source
# File lib/meilisearch-rails.rb, line 141
def get_attributes(document)
  # If a serializer is set, we ignore attributes
  # everything should be done via the serializer
  if not @serializer.nil?
    attributes = @serializer.new(document).attributes
  else
    if @attributes.nil? || @attributes.length == 0
      # no `attribute ...` have been configured, use the default attributes of the model
      attributes = get_default_attributes(document)
    else
      # at least 1 `attribute ...` has been configured, therefore use ONLY the one configured
      if is_active_record?(document)
        document.class.unscoped do
          attributes = attributes_to_hash(@attributes, document)
        end
      else
        attributes = attributes_to_hash(@attributes, document)
      end
    end
  end

  attributes.merge!(attributes_to_hash(@additional_attributes, document)) if @additional_attributes

  if @options[:sanitize]
    sanitizer = begin
      ::HTML::FullSanitizer.new
    rescue NameError
      # from rails 4.2
      ::Rails::Html::FullSanitizer.new
    end
    attributes = sanitize_attributes(attributes, sanitizer)
  end

  if @options[:force_utf8_encoding]
    attributes = encode_attributes(attributes)
  end

  attributes
end
get_default_attributes(document) click to toggle source
# File lib/meilisearch-rails.rb, line 116
def get_default_attributes(document)
  if is_mongoid?(document)
    # work-around mongoid 2.4's unscoped method, not accepting a block
    document.attributes
  elsif is_sequel?(document)
    document.to_hash
  else
    document.class.unscoped do
      document.attributes
    end
  end
end
get_setting(name) click to toggle source
# File lib/meilisearch-rails.rb, line 207
def get_setting(name)
  instance_variable_get("@#{name}")
end
is_active_record?(document) click to toggle source
# File lib/meilisearch-rails.rb, line 112
def is_active_record?(document)
  !is_mongoid?(document) && !is_sequel?(document)
end
is_mongoid?(document) click to toggle source
# File lib/meilisearch-rails.rb, line 104
def is_mongoid?(document)
  defined?(::Mongoid::Document) && document.class.include?(::Mongoid::Document)
end
is_sequel?(document) click to toggle source
# File lib/meilisearch-rails.rb, line 108
def is_sequel?(document)
  defined?(::Sequel) && document.class < ::Sequel::Model
end
sanitize_attributes(v, sanitizer) click to toggle source
# File lib/meilisearch-rails.rb, line 181
def sanitize_attributes(v, sanitizer)
  case v
  when String
    sanitizer.sanitize(v)
  when Hash
    v.each { |key, value| v[key] = sanitize_attributes(value, sanitizer) }
  when Array
    v.map { |x| sanitize_attributes(x, sanitizer) }
  else
    v
  end
end
to_settings() click to toggle source
# File lib/meilisearch-rails.rb, line 211
def to_settings
  settings = {}
  OPTIONS.each do |k|
    v = get_setting(k)
    settings[k] = v if !v.nil?
  end
  settings
end
use_serializer(serializer) click to toggle source
# File lib/meilisearch-rails.rb, line 81
def use_serializer(serializer)
  @serializer = serializer
  # instance_variable_set("@serializer", serializer)
end