Module: MeiliSearch::Utils

Defined in:
lib/meilisearch/utils.rb

Constant Summary collapse

SNAKE_CASE =
/[^a-zA-Z0-9]+(.)/.freeze

Class Method Summary collapse

Class Method Details

.filter(original_options, allowed_params = []) ⇒ Object



27
28
29
# File 'lib/meilisearch/utils.rb', line 27

def self.filter(original_options, allowed_params = [])
  original_options.transform_keys(&:to_sym).slice(*allowed_params)
end

.parse_query(original_options, allowed_params = []) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/meilisearch/utils.rb', line 31

def self.parse_query(original_options, allowed_params = [])
  only_allowed_params = filter(original_options, allowed_params)

  Utils.transform_attributes(only_allowed_params).then do |body|
    body.transform_values do |v|
      v.respond_to?(:join) ? v.join(',') : v.to_s
    end
  end
end

.transform_attributes(body) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/meilisearch/utils.rb', line 7

def self.transform_attributes(body)
  case body
  when Array
    body.map { |item| transform_attributes(item) }
  when Hash
    warn_on_non_conforming_attribute_names(body)
    parse(body)
  else
    body
  end
end

.version_error_handler(method_name) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/meilisearch/utils.rb', line 46

def self.version_error_handler(method_name)
  yield if block_given?
rescue MeiliSearch::ApiError => e
  message = message_builder(e.http_message, method_name)

  raise MeiliSearch::ApiError.new(e.http_code, message, e.http_body)
rescue StandardError => e
  raise e.class, message_builder(e.message, method_name)
end

.warn_on_non_conforming_attribute_names(body) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/meilisearch/utils.rb', line 56

def self.warn_on_non_conforming_attribute_names(body)
  return if body.nil?

  non_snake_case = body.keys.grep_v(/^[a-z0-9_]+$/)
  return if non_snake_case.empty?

  message = <<~MSG
    Attributes will be expected to be snake_case in future versions of Meilisearch Ruby.

    Non-conforming attributes: #{non_snake_case.join(', ')}
  MSG

  warn(message)
end