meilisearch 0.18.0 → 0.18.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df541b398ac4b031ec615d5e20c6a19cd7c370cdeaf83dcf63d789374827f012
4
- data.tar.gz: 9277554fe2d6f388491d506cbfda456e71a1cc90b1945d933cfa72a2147ee52c
3
+ metadata.gz: 6309d55fa663d9fd8126c1bbf290313ddab29e0e8e72ee690b0abe49887d6097
4
+ data.tar.gz: 2386993d60f7fa52c38e10d58e191a0f0797a3672de31a36b5c1013440285584
5
5
  SHA512:
6
- metadata.gz: bc0446c08444d6bf48d796c62c9b92e5f008835463b08c916e52f0ac9ce81156bcb835cd645fd78c31b98907a06230cf60fe2dbcfdcf0102b9c3fe8f9dfc2732
7
- data.tar.gz: ac4f2136062699556c365e296db97fe54c6085a228c2b6831b963a72557918c100b83f7e5241183b5d9d173927e127b1e2ad402045dc64ec71056c7b57663fb2
6
+ metadata.gz: d50aa62ffebcd4d707fc55471e8738d9dd53433c77af3f1bb08e3681395ee19eb35513bc14a1e769bf223a9e16622805dc1010d06b4b84c2252237d1eb5a8b97
7
+ data.tar.gz: fff2a910e52b6c137037c3b011ddba3b0d11d28fd2427c1b4d45e925e2b28711c4e0fca269309de9b97dd99df980e4ed067b322c7148c0fde68a14ce4fe7d388
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  <p align="center">
2
- <img src="https://res.cloudinary.com/meilisearch/image/upload/v1587402338/SDKs/meilisearch_ruby.svg" alt="MeiliSearch-Ruby" width="200" height="200" />
2
+ <img src="https://raw.githubusercontent.com/meilisearch/integration-guides/main/assets/logos/meilisearch_ruby.svg" alt="Meilisearch-Ruby" width="200" height="200" />
3
3
  </p>
4
4
 
5
- <h1 align="center">MeiliSearch Ruby</h1>
5
+ <h1 align="center">Meilisearch Ruby</h1>
6
6
 
7
7
  <h4 align="center">
8
- <a href="https://github.com/meilisearch/MeiliSearch">MeiliSearch</a> |
8
+ <a href="https://github.com/meilisearch/meilisearch">Meilisearch</a> |
9
9
  <a href="https://docs.meilisearch.com">Documentation</a> |
10
10
  <a href="https://slack.meilisearch.com">Slack</a> |
11
11
  <a href="https://roadmap.meilisearch.com/tabs/1-under-consideration">Roadmap</a> |
@@ -20,18 +20,18 @@
20
20
  <a href="https://ms-bors.herokuapp.com/repositories/6"><img src="https://bors.tech/images/badge_small.svg" alt="Bors enabled"></a>
21
21
  </p>
22
22
 
23
- <p align="center">⚡ The MeiliSearch API client written for Ruby 💎</p>
23
+ <p align="center">⚡ The Meilisearch API client written for Ruby 💎</p>
24
24
 
25
- **MeiliSearch Ruby** is the MeiliSearch API client for Ruby developers.
25
+ **Meilisearch Ruby** is the Meilisearch API client for Ruby developers.
26
26
 
27
- **MeiliSearch** is an open-source search engine. [Discover what MeiliSearch is!](https://github.com/meilisearch/MeiliSearch)
27
+ **Meilisearch** is an open-source search engine. [Discover what Meilisearch is!](https://github.com/meilisearch/meilisearch)
28
28
 
29
29
  ## Table of Contents <!-- omit in toc -->
30
30
 
31
31
  - [📖 Documentation](#-documentation)
32
32
  - [🔧 Installation](#-installation)
33
33
  - [🚀 Getting Started](#-getting-started)
34
- - [🤖 Compatibility with MeiliSearch](#-compatibility-with-meilisearch)
34
+ - [🤖 Compatibility with Meilisearch](#-compatibility-with-meilisearch)
35
35
  - [💡 Learn More](#-learn-more)
36
36
  - [⚙️ Development Workflow and Contributing](#️-development-workflow-and-contributing)
37
37
 
@@ -55,21 +55,21 @@ source 'https://rubygems.org'
55
55
  gem 'meilisearch'
56
56
  ```
57
57
 
58
- ### Run MeiliSearch <!-- omit in toc -->
58
+ ### Run Meilisearch <!-- omit in toc -->
59
59
 
60
- There are many easy ways to [download and run a MeiliSearch instance](https://docs.meilisearch.com/reference/features/installation.html#download-and-launch).
60
+ There are many easy ways to [download and run a Meilisearch instance](https://docs.meilisearch.com/reference/features/installation.html#download-and-launch).
61
61
 
62
62
  For example, using the `curl` command in your [Terminal](https://itconnect.uw.edu/learn/workshops/online-tutorials/web-publishing/what-is-a-terminal/):
63
63
 
64
64
  ```sh
65
- #Install MeiliSearch
65
+ #Install Meilisearch
66
66
  curl -L https://install.meilisearch.com | sh
67
67
 
68
- # Launch MeiliSearch
68
+ # Launch Meilisearch
69
69
  ./meilisearch --master-key=masterKey
70
70
  ```
71
71
 
72
- NB: you can also download MeiliSearch from **Homebrew** or **APT** or even run it using **Docker**.
72
+ NB: you can also download Meilisearch from **Homebrew** or **APT** or even run it using **Docker**.
73
73
 
74
74
  ## 🚀 Getting Started
75
75
 
@@ -91,7 +91,7 @@ documents = [
91
91
  { id: 5, title: 'Moana', genres: ['Fantasy', 'Action']},
92
92
  { id: 6, title: 'Philadelphia', genres: ['Drama'] },
93
93
  ]
94
- # If the index 'movies' does not exist, MeiliSearch creates it when you first add the documents.
94
+ # If the index 'movies' does not exist, Meilisearch creates it when you first add the documents.
95
95
  index.add_documents(documents) # => { "uid": 0 }
96
96
  ```
97
97
 
@@ -102,7 +102,7 @@ With the `uid`, you can check the status (`enqueued`, `processing`, `succeeded`
102
102
  #### Basic Search <!-- omit in toc -->
103
103
 
104
104
  ``` ruby
105
- # MeiliSearch is typo-tolerant:
105
+ # Meilisearch is typo-tolerant:
106
106
  puts index.search('carlo')
107
107
  ```
108
108
  Output:
@@ -165,7 +165,7 @@ index.update_filterable_attributes([
165
165
 
166
166
  You only need to perform this operation once.
167
167
 
168
- Note that MeiliSearch will rebuild your index whenever you update `filterableAttributes`. Depending on the size of your dataset, this might take time. You can track the process using the [tasks](https://docs.meilisearch.com/reference/api/tasks.html#get-task)).
168
+ Note that Meilisearch will rebuild your index whenever you update `filterableAttributes`. Depending on the size of your dataset, this might take time. You can track the process using the [tasks](https://docs.meilisearch.com/reference/api/tasks.html#get-task)).
169
169
 
170
170
  Then, you can perform the search:
171
171
 
@@ -196,9 +196,9 @@ JSON output:
196
196
  }
197
197
  ```
198
198
 
199
- ## 🤖 Compatibility with MeiliSearch
199
+ ## 🤖 Compatibility with Meilisearch
200
200
 
201
- This package only guarantees the compatibility with the [version v0.25.0 of MeiliSearch](https://github.com/meilisearch/MeiliSearch/releases/tag/v0.25.0).
201
+ This package only guarantees the compatibility with the [version v0.25.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.25.0).
202
202
 
203
203
  ## 💡 Learn More
204
204
 
@@ -219,4 +219,4 @@ If you want to know more about the development workflow or want to contribute, p
219
219
 
220
220
  <hr>
221
221
 
222
- **MeiliSearch** provides and maintains many **SDKs and Integration tools** like this one. We want to provide everyone with an **amazing search experience for any kind of project**. If you want to contribute, make suggestions, or just know what's going on right now, visit us in the [integration-guides](https://github.com/meilisearch/integration-guides) repository.
222
+ **Meilisearch** provides and maintains many **SDKs and Integration tools** like this one. We want to provide everyone with an **amazing search experience for any kind of project**. If you want to contribute, make suggestions, or just know what's going on right now, visit us in the [integration-guides](https://github.com/meilisearch/integration-guides) repository.
@@ -7,25 +7,30 @@ module MeiliSearch
7
7
  class HTTPRequest
8
8
  include HTTParty
9
9
 
10
- attr_reader :options
10
+ attr_reader :options, :headers
11
+
12
+ DEFAULT_OPTIONS = {
13
+ timeout: 1,
14
+ max_retries: 0,
15
+ convert_body?: true
16
+ }.freeze
11
17
 
12
18
  def initialize(url, api_key = nil, options = {})
13
19
  @base_url = url
14
20
  @api_key = api_key
15
- @options = merge_options({
16
- timeout: 1,
17
- max_retries: 0,
18
- headers: build_default_options_headers(api_key),
19
- convert_body?: true
20
- }, options)
21
+ @options = DEFAULT_OPTIONS.merge(options)
22
+ @headers = build_default_options_headers
21
23
  end
22
24
 
23
25
  def http_get(relative_path = '', query_params = {})
24
26
  send_request(
25
27
  proc { |path, config| self.class.get(path, config) },
26
28
  relative_path,
27
- query_params: query_params,
28
- options: remove_options_header(@options, 'Content-Type')
29
+ config: {
30
+ query_params: query_params,
31
+ headers: remove_headers(@headers.dup, 'Content-Type'),
32
+ options: @options
33
+ }
29
34
  )
30
35
  end
31
36
 
@@ -33,9 +38,12 @@ module MeiliSearch
33
38
  send_request(
34
39
  proc { |path, config| self.class.post(path, config) },
35
40
  relative_path,
36
- query_params: query_params,
37
- body: body,
38
- options: merge_options(@options, options)
41
+ config: {
42
+ query_params: query_params,
43
+ body: body,
44
+ headers: @headers.dup.merge(options[:headers] || {}),
45
+ options: @options.merge(options)
46
+ }
39
47
  )
40
48
  end
41
49
 
@@ -43,9 +51,12 @@ module MeiliSearch
43
51
  send_request(
44
52
  proc { |path, config| self.class.put(path, config) },
45
53
  relative_path,
46
- query_params: query_params,
47
- body: body,
48
- options: @options
54
+ config: {
55
+ query_params: query_params,
56
+ body: body,
57
+ headers: @headers,
58
+ options: @options
59
+ }
49
60
  )
50
61
  end
51
62
 
@@ -53,9 +64,12 @@ module MeiliSearch
53
64
  send_request(
54
65
  proc { |path, config| self.class.patch(path, config) },
55
66
  relative_path,
56
- query_params: query_params,
57
- body: body,
58
- options: @options
67
+ config: {
68
+ query_params: query_params,
69
+ body: body,
70
+ headers: @headers,
71
+ options: @options
72
+ }
59
73
  )
60
74
  end
61
75
 
@@ -63,53 +77,43 @@ module MeiliSearch
63
77
  send_request(
64
78
  proc { |path, config| self.class.delete(path, config) },
65
79
  relative_path,
66
- options: remove_options_header(@options, 'Content-Type')
80
+ config: {
81
+ headers: remove_headers(@headers.dup, 'Content-Type'),
82
+ options: @options
83
+ }
67
84
  )
68
85
  end
69
86
 
70
87
  private
71
88
 
72
- def build_default_options_headers(api_key = nil)
73
- header = {
74
- 'Content-Type' => 'application/json'
75
- }
76
- header = header.merge('Authorization' => "Bearer #{api_key}") unless api_key.nil?
77
- header
78
- end
79
-
80
- def merge_options(default_options, added_options = {})
81
- default_cloned_headers = default_options[:headers].clone
82
- merged_options = default_options.merge(added_options)
83
- merged_options[:headers] = default_cloned_headers.merge(added_options[:headers]) if added_options.key?(:headers)
84
- merged_options
89
+ def build_default_options_headers
90
+ {
91
+ 'Content-Type' => 'application/json',
92
+ 'Authorization' => ("Bearer #{@api_key}" unless @api_key.nil?),
93
+ 'User-Agent' => MeiliSearch.qualified_version
94
+ }.compact
85
95
  end
86
96
 
87
- def remove_options_header(options, key)
88
- cloned_options = clone_options(options)
89
- cloned_options[:headers].tap { |headers| headers.delete(key) }
90
- cloned_options
97
+ def remove_headers(data, *keys)
98
+ data.delete_if { |k| keys.include?(k) }
91
99
  end
92
100
 
93
- def clone_options(options)
94
- cloned_options = options.clone
95
- cloned_options[:headers] = options[:headers].clone
96
- cloned_options
97
- end
101
+ def send_request(http_method, relative_path, config: {})
102
+ config = http_config(config[:query_params], config[:body], config[:options], config[:headers])
98
103
 
99
- def send_request(http_method, relative_path, query_params: nil, body: nil, options: {})
100
- config = http_config(query_params, body, options)
101
104
  begin
102
105
  response = http_method.call(@base_url + relative_path, config)
103
106
  rescue Errno::ECONNREFUSED => e
104
107
  raise CommunicationError, e.message
105
108
  end
109
+
106
110
  validate(response)
107
111
  end
108
112
 
109
- def http_config(query_params, body, options)
113
+ def http_config(query_params, body, options, headers)
110
114
  body = body.to_json if options[:convert_body?] == true
111
115
  {
112
- headers: options[:headers],
116
+ headers: headers,
113
117
  query: query_params,
114
118
  body: body,
115
119
  timeout: options[:timeout],
@@ -81,7 +81,7 @@ module MeiliSearch
81
81
  alias add_or_replace_documents! add_documents!
82
82
 
83
83
  def add_documents_json(documents, primary_key = nil)
84
- options = { headers: { 'Content-Type' => 'application/json' }, convert_body?: false }
84
+ options = { convert_body?: false }
85
85
  http_post "/indexes/#{@uid}/documents", documents, { primaryKey: primary_key }.compact, options
86
86
  end
87
87
  alias replace_documents_json add_documents_json
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MeiliSearch
4
- VERSION = '0.18.0'
4
+ VERSION = '0.18.1'
5
+
6
+ def self.qualified_version
7
+ "Meilisearch Ruby (v#{VERSION})"
8
+ end
5
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meilisearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.18.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Meili
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-12 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -30,7 +30,7 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.21.0
33
- description: An easy-to-use ruby client for Meilisearch API. See https://github.com/meilisearch/MeiliSearch
33
+ description: An easy-to-use ruby client for Meilisearch API. See https://github.com/meilisearch/meilisearch
34
34
  email: bonjour@meilisearch.com
35
35
  executables: []
36
36
  extensions: []