meilisearch-rails 0.2.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dff716ea4a13c0f64718942f4988550a36076ae5dc52ac8ec7282000d116a99d
4
- data.tar.gz: 1346eb18ddb24bf718693b7b3efa89d4b0084ecffe9f7ccae1d71956b3b8bf56
3
+ metadata.gz: 9ad6c51de59755b283d9371028f127537f8eae862603d65469f3867e7e62b6ec
4
+ data.tar.gz: a2ef9d38103f8e2750e687f1fae309818b210576b63c6951b913b7856c713598
5
5
  SHA512:
6
- metadata.gz: 38e1657c75e4eec945502ead72001ba56dc194d3ce5217e65f40abc49de34312087aa30d401d342a15c4c0701f0d41d49faf8c94aef5cc40d79ed9bdc345f414
7
- data.tar.gz: 2cd31c3b6b70fb4d2c38977870ab28256de22422c410280e7615e11dfe64dd8eaa98295c7bdf553655b427837b8864ee60930a0aafa39e8f1272af34210c0479
6
+ metadata.gz: 5720f087c6c85aa34b553ba01614968fe4862a416c6e72c1829b4107470862a30db4e4107455d2a45ab94497ff69b084460196f6173c4f584aa1364769a0564a
7
+ data.tar.gz: 5cebff7daa2d2caf3ed62e9a49fe4f3f17d4ccf2b6dcfed90f92645fdac4c7d8adddea521aff563aca9f454942529b1444c9fea092fd329e2cfda187ef885eba
data/Gemfile CHANGED
@@ -1,31 +1,39 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json', '~> 2.5', '>= 2.5.1'
4
- gem 'meilisearch', '~> 0.16.0'
4
+ gem 'meilisearch', '~> 0.18.0'
5
5
 
6
- if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
7
- gem 'rubysl', '~> 2.0', :platform => :rbx
6
+ gem 'rubysl', '~> 2.0', platform: :rbx if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
7
+
8
+ group :development do
9
+ gem 'rubocop', '~> 1.22'
10
+ gem 'rubocop-rails'
11
+ gem 'rubocop-rspec'
8
12
  end
9
13
 
10
14
  group :test do
11
- rails_version = ENV["RAILS_VERSION"] || '5.2'
12
- gem 'rails', "~> #{rails_version}"
15
+ rails_version = ENV['RAILS_VERSION'] || '5.2'
16
+ sequel_version = ENV['SEQUEL_VERSION'] ? "~> #{ENV['SEQUEL_VERSION']}" : '>= 4.0'
17
+
13
18
  gem 'active_model_serializers'
19
+ gem 'rails', "~> #{rails_version}"
20
+ gem 'sequel', sequel_version
21
+
14
22
  if Gem::Version.new(rails_version) >= Gem::Version.new('6.0')
15
- gem 'sqlite3', '~> 1.4.0', :platform => [:rbx, :ruby]
23
+ gem 'sqlite3', '~> 1.4.0', platform: %i[rbx ruby]
16
24
  else
17
- gem 'sqlite3', '< 1.4.0', :platform => [:rbx, :ruby]
25
+ gem 'sqlite3', '< 1.4.0', platform: %i[rbx ruby]
18
26
  end
19
- gem 'rspec', '>= 2.5.0', '< 3.0'
20
- gem 'jdbc-sqlite3', :platform => :jruby
21
- gem 'activerecord-jdbc-adapter', :platform => :jruby
22
- gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
23
27
 
24
- sequel_version = ENV['SEQUEL_VERSION'] ? "~> #{ENV['SEQUEL_VERSION']}" : '>= 4.0'
25
- gem 'sequel', sequel_version
28
+ gem 'activerecord-jdbc-adapter', platform: :jruby
29
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
30
+ gem 'jdbc-sqlite3', platform: :jruby
31
+ gem 'rspec', '~> 3.0'
32
+ gem 'simplecov', require: 'false'
33
+
34
+ gem 'byebug'
35
+ gem 'dotenv', '~> 2.7', '>= 2.7.6'
26
36
  gem 'faker', '~> 2.17'
27
- gem 'will_paginate', '>= 2.3.15'
28
37
  gem 'kaminari'
29
- gem 'dotenv', '~> 2.7', '>= 2.7.6'
30
- gem 'byebug'
38
+ gem 'will_paginate', '>= 2.3.15'
31
39
  end
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 MeiliSearch
3
+ Copyright (c) 2021 Meilisearch
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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_rails.svg" alt="MeiliSearch-Rails" width="200" height="200" />
2
+ <img src="https://raw.githubusercontent.com/meilisearch/integration-guides/main/assets/logos/meilisearch_rails.svg" alt="Meilisearch-Rails" width="200" height="200" />
3
3
  </p>
4
4
 
5
- <h1 align="center">MeiliSearch Rails</h1>
5
+ <h1 align="center">Meilisearch Rails</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> |
@@ -19,55 +19,48 @@
19
19
  <a href="https://app.bors.tech/repositories/33032"><img src="https://bors.tech/images/badge_small.svg" alt="Bors enabled"></a>
20
20
  </p>
21
21
 
22
- <p align="center">⚡ The MeiliSearch integration for Ruby on Rails 💎</p>
22
+ <p align="center">⚡ The Meilisearch integration for Ruby on Rails 💎</p>
23
23
 
24
- **MeiliSearch Rails** is the MeiliSearch integration for Ruby on Rails developers.
24
+ **Meilisearch Rails** is the Meilisearch integration for Ruby on Rails developers.
25
25
 
26
- **MeiliSearch** is an open-source search engine. [Discover what MeiliSearch is!](https://github.com/meilisearch/MeiliSearch)
26
+ **Meilisearch** is an open-source search engine. [Discover what Meilisearch is!](https://github.com/meilisearch/meilisearch)
27
27
 
28
28
  ## Table of Contents <!-- omit in toc -->
29
29
 
30
30
  - [📖 Documentation](#-documentation)
31
- - [🤖 Compatibility with MeiliSearch](#-compatibility-with-meilisearch)
32
- - [🔧 Installation](#-installation)
33
- - [🔩 Settings](#-settings)
31
+ - [🤖 Compatibility with Meilisearch](#-compatibility-with-meilisearch)
32
+ - [🚀 Getting Started](#-getting-started)
33
+ - [⚙️ Settings](#️-settings)
34
34
  - [🔍 Custom search](#-custom-search)
35
35
  - [🪛 Options](#-options)
36
- - [MeiliSearch configuration & environment](#meilisearch-configuration-&-environment)
37
- - [Custom index_uid](#custom-index_uid)
38
- - [Per-environment index_uid](#per-environment-index_uid)
36
+ - [Meilisearch configuration & environment](#meilisearch-configuration--environment)
39
37
  - [Index configuration](#index-configuration)
40
38
  - [Custom attribute definition](#custom-attribute-definition)
41
39
  - [Custom primary key](#custom-primary-key)
42
40
  - [Conditional indexing](#conditional-indexing)
43
- - [Target multiple indexes](#target-multiple-indexes)
44
41
  - [Share a single index](#share-a-single-index)
45
- - [Queues & background jobs](#queues-&-background-jobs)
42
+ - [Queues & background jobs](#queues--background-jobs)
46
43
  - [Relations](#relations)
47
44
  - [Sanitize attributes](#sanitize-attributes)
48
45
  - [UTF-8 encoding](#utf-8-encoding)
49
46
  - [Manual operations](#manual-operations)
50
- - [Indexing & deletion](#indexing-&-deletion)
47
+ - [Indexing & deletion](#indexing--deletion)
51
48
  - [Access the underlying index object](#access-the-underlying-index-object)
52
- - [Development & testing](#development-&-testing)
53
- - [Exceptions](#exceptions)
54
- - [Testing](#testing)
55
- - [Synchronous testing](#synchronous-testing)
56
- - [Disable auto-indexing & auto-removal](#disable-auto-indexing-&-auto-removal)
57
- - [⚙️ Development Workflow and Contributing](#️-development-workflow-and-contributing)
58
- - [👏 Credits](#-credits)
49
+ - [Development & testing](#development--testing)
50
+ - [⚙️ Development workflow & contributing](#️-development-workflow--contributing)
51
+ - [👏 Credits](#--credits)
59
52
 
60
53
  ## 📖 Documentation
61
54
 
62
55
  The whole usage of this gem is detailed in this README.
63
56
 
64
- To learn more about MeiliSearch, check out our [Documentation](https://docs.meilisearch.com/learn/tutorials/getting_started.html) or our [API References](https://docs.meilisearch.com/reference/api/).
57
+ To learn more about Meilisearch, check out our [Documentation](https://docs.meilisearch.com/learn/tutorials/getting_started.html) or our [API References](https://docs.meilisearch.com/reference/api/).
65
58
 
66
- ## 🤖 Compatibility with MeiliSearch
59
+ ## 🤖 Compatibility with Meilisearch
67
60
 
68
- This package only guarantees the compatibility with the [version v0.21.0 of MeiliSearch](https://github.com/meilisearch/MeiliSearch/releases/tag/v0.21.0).
61
+ This package only guarantees the compatibility with the [version v0.25.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.25.0).
69
62
 
70
- ## 🔧 Installation
63
+ ## 🔧 Installation <!-- omit in toc -->
71
64
 
72
65
  This package requires Ruby version 2.6.0 or later and Rails 5.2 or later.
73
66
 
@@ -83,18 +76,18 @@ source 'https://rubygems.org'
83
76
  gem 'meilisearch-rails'
84
77
  ```
85
78
 
86
- ### Run MeiliSearch <!-- omit in toc -->
79
+ ### Run Meilisearch <!-- omit in toc -->
87
80
 
88
- There are many easy ways to [download and run a MeiliSearch instance](https://docs.meilisearch.com/reference/features/installation.html#download-and-launch).
81
+ There are many easy ways to [download and run a Meilisearch instance](https://docs.meilisearch.com/reference/features/installation.html#download-and-launch).
89
82
 
90
83
  For example, if you use Docker:
91
84
 
92
85
  ```bash
93
- docker pull getmeili/meilisearch:latest # Fetch the latest version of MeiliSearch image from Docker Hub
86
+ docker pull getmeili/meilisearch:latest # Fetch the latest version of Meilisearch image from Docker Hub
94
87
  docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey
95
88
  ```
96
89
 
97
- NB: you can also download MeiliSearch from **Homebrew** or **APT**.
90
+ NB: you can also download Meilisearch from **Homebrew** or **APT**.
98
91
 
99
92
  ## 🚀 Getting Started
100
93
 
@@ -103,9 +96,9 @@ NB: you can also download MeiliSearch from **Homebrew** or **APT**.
103
96
  Create a new file `config/initializers/meilisearch.rb` to setup your `MEILISEARCH_HOST` and `MEILISEARCH_API_KEY`
104
97
 
105
98
  ```ruby
106
- MeiliSearch.configuration = {
107
- meilisearch_host: 'YourMeiliSearchHost',
108
- meilisearch_api_key: 'YourMeiliSearchAPIKey',
99
+ MeiliSearch::Rails.configuration = {
100
+ meilisearch_host: 'YourMeilisearchHost', # example: http://localhost:7700
101
+ meilisearch_api_key: 'YourMeilisearchAPIKey',
109
102
  }
110
103
  ```
111
104
 
@@ -117,11 +110,11 @@ The following code will create a `Book` index and add search capabilities to you
117
110
 
118
111
  ```ruby
119
112
  class Book < ActiveRecord::Base
120
- include MeiliSearch
113
+ include MeiliSearch::Rails
121
114
 
122
115
  meilisearch do
123
- attribute :title, :author # only the attributes 'title', and 'author' will be sent to MeiliSearch
124
- # all attributes will be sent to MeiliSearch if block is left empty
116
+ attribute :title, :author # only the attributes 'title', and 'author' will be sent to Meilisearch
117
+ # all attributes will be sent to Meilisearch if block is left empty
125
118
  end
126
119
  end
127
120
  ```
@@ -135,7 +128,7 @@ We **strongly recommend the use of front-end search** through our [JavaScript AP
135
128
  Search returns ORM-compliant objects reloaded from your database.
136
129
 
137
130
  ```ruby
138
- # MeiliSearch is typo-tolerant:
131
+ # Meilisearch is typo-tolerant:
139
132
  hits = Book.search('harry pottre')
140
133
  hits.each do |hit|
141
134
  puts hit.title
@@ -153,9 +146,9 @@ This gem supports:
153
146
  Specify the `:pagination_backend` in the configuration file:
154
147
 
155
148
  ```ruby
156
- MeiliSearch.configuration = {
157
- meilisearch_host: 'YourMeiliSearchHost',
158
- meilisearch_api_key: 'YourMeiliSearchAPIKey',
149
+ MeiliSearch::Rails.configuration = {
150
+ meilisearch_host: 'YourMeilisearchHost',
151
+ meilisearch_api_key: 'YourMeilisearchAPIKey',
159
152
  pagination_backend: :kaminari #:will_paginate
160
153
  }
161
154
  ```
@@ -185,13 +178,13 @@ Book.search('harry potter', hitsPerPage: 10)
185
178
 
186
179
  #### Extra Configuration <!-- omit in toc -->
187
180
 
188
- Requests made to MeiliSearch may timeout and retry. To adapt the behavior to
181
+ Requests made to Meilisearch may timeout and retry. To adapt the behavior to
189
182
  your needs, you can change the parameters during configuration:
190
183
 
191
184
  ```ruby
192
- MeiliSearch.configuration = {
193
- meilisearch_host: 'YourMeiliSearchHost',
194
- meilisearch_api_key: 'YourMeiliSearchAPIKey',
185
+ MeiliSearch::Rails.configuration = {
186
+ meilisearch_host: 'YourMeilisearchHost',
187
+ meilisearch_api_key: 'YourMeilisearchAPIKey',
195
188
  timeout: 2,
196
189
  max_retries: 1,
197
190
  }
@@ -203,18 +196,20 @@ You can configure the index settings by adding them inside the `meilisearch` blo
203
196
 
204
197
  ```ruby
205
198
  class Book < ApplicationRecord
206
- include MeiliSearch
199
+ include MeiliSearch::Rails
207
200
 
208
201
  meilisearch do
209
202
  searchable_attributes [:title, :author, :publisher, :description]
210
203
  filterable_attributes [:genre]
204
+ sortable_attributes [:title]
211
205
  ranking_rules [
212
206
  'proximity',
213
207
  'typo',
214
208
  'words',
215
209
  'attribute',
210
+ 'sort',
216
211
  'exactness',
217
- 'desc(publication_year)'
212
+ 'publication_year:desc'
218
213
  ]
219
214
  synonyms nyc: ['new york']
220
215
 
@@ -238,30 +233,41 @@ Book.search('Harry', attributesToHighlight: ['*'])
238
233
  👉 Don't forget that `attributes_to_highlight`, `attributes_to_crop`, and
239
234
  `crop_length` can be set up in the `meilisearch` block of your model.
240
235
 
236
+ ## 🔍 Sorted search
237
+
238
+ As an example of how to use the sort option, here is how you could achieve
239
+ returning all books sorted by title in ascending order:
240
+
241
+ ```ruby
242
+ Book.search('*', sort: ['title:asc'])
243
+ ```
244
+
245
+ 👉 Don't forget to set up the `sortable_attributes` option in the `meilisearch` block of your model.
246
+
241
247
  ## 🪛 Options
242
248
 
243
- ### MeiliSearch configuration & environment
249
+ ### Meilisearch configuration & environment
244
250
 
245
- #### Custom index_uid
251
+ #### Custom index_uid <!-- omit in toc -->
246
252
 
247
253
  By default, the **index_uid** will be the class name, e.g. `Book`. You can customize the index_uid by using the `index_uid:` option.
248
254
 
249
255
  ```ruby
250
256
  class Book < ActiveRecord::Base
251
- include MeiliSearch
257
+ include MeiliSearch::Rails
252
258
 
253
259
  meilisearch index_uid: 'MyCustomUID' do
254
260
  end
255
261
  end
256
262
  ```
257
263
 
258
- #### Index UID according to the environment
264
+ #### Index UID according to the environment <!-- omit in toc -->
259
265
 
260
266
  You can suffix the index UID with the current Rails environment using the following option:
261
267
 
262
268
  ```ruby
263
269
  class Book < ActiveRecord::Base
264
- include MeiliSearch
270
+ include MeiliSearch::Rails
265
271
 
266
272
  meilisearch per_environment: true do # The index UID will be "Book_#{Rails.env}"
267
273
  end
@@ -278,7 +284,7 @@ You can add a custom attribute by using the `add_attribute` option or by using a
278
284
 
279
285
  ```ruby
280
286
  class Author < ApplicationRecord
281
- include MeiliSearch
287
+ include MeiliSearch::Rails
282
288
 
283
289
  meilisearch do
284
290
  attribute :first_name, :last_name
@@ -310,7 +316,7 @@ Note that the primary key must have a **unique value**.
310
316
 
311
317
  ```ruby
312
318
  class Book < ActiveRecord::Base
313
- include MeiliSearch
319
+ include MeiliSearch::Rails
314
320
 
315
321
  meilisearch primary_key: 'ISBN' do
316
322
  end
@@ -323,7 +329,7 @@ As soon as you use those constraints, `add_documents` and `delete_documents` cal
323
329
 
324
330
  ```ruby
325
331
  class Book < ActiveRecord::Base
326
- include MeiliSearch
332
+ include MeiliSearch::Rails
327
333
 
328
334
  meilisearch if: :published?, unless: :premium? do
329
335
  end
@@ -341,13 +347,13 @@ class Book < ActiveRecord::Base
341
347
  end
342
348
  end
343
349
  ```
344
- ##### Target multiple indexes
350
+ ##### Target multiple indexes <!-- omit in toc -->
345
351
 
346
352
  You can index a record in several indexes using the `add_index` option:
347
353
 
348
354
  ```ruby
349
355
  class Book < ActiveRecord::Base
350
- include MeiliSearch
356
+ include MeiliSearch::Rails
351
357
 
352
358
  PUBLIC_INDEX_UID = 'Books'
353
359
  SECURED_INDEX_UID = 'PrivateBooks'
@@ -375,7 +381,7 @@ You may want to share an index between several models. You'll need to ensure you
375
381
 
376
382
  ```ruby
377
383
  class Cat < ActiveRecord::Base
378
- include MeiliSearch
384
+ include MeiliSearch::Rails
379
385
 
380
386
  meilisearch index_uid: 'Animals', primary_key: :ms_id do
381
387
  end
@@ -387,7 +393,7 @@ class Cat < ActiveRecord::Base
387
393
  end
388
394
 
389
395
  class Dog < ActiveRecord::Base
390
- include MeiliSearch
396
+ include MeiliSearch::Rails
391
397
 
392
398
  meilisearch index_uid: 'Animals', primary_key: :ms_id do
393
399
  end
@@ -405,7 +411,7 @@ You can configure the auto-indexing & auto-removal process to use a queue to per
405
411
 
406
412
  ```ruby
407
413
  class Book < ActiveRecord::Base
408
- include MeiliSearch
414
+ include MeiliSearch::Rails
409
415
 
410
416
  meilisearch enqueue: true do # ActiveJob will be triggered using a `meilisearch` queue
411
417
  end
@@ -420,7 +426,7 @@ With **ActiveJob**:
420
426
 
421
427
  ```ruby
422
428
  class Book < ActiveRecord::Base
423
- include MeiliSearch
429
+ include MeiliSearch::Rails
424
430
 
425
431
  meilisearch enqueue: :trigger_job do
426
432
  attribute :title, :author, :description
@@ -436,7 +442,7 @@ class MyActiveJob < ApplicationJob
436
442
  if remove
437
443
  # The record has likely already been removed from your database so we cannot
438
444
  # use ActiveRecord#find to load it.
439
- # We access the underlying MeiliSearch index object.
445
+ # We access the underlying Meilisearch index object.
440
446
  Book.index.delete_document(id)
441
447
  else
442
448
  # The record should be present.
@@ -450,7 +456,7 @@ With [**Sidekiq**](https://github.com/mperham/sidekiq):
450
456
 
451
457
  ```ruby
452
458
  class Book < ActiveRecord::Base
453
- include MeiliSearch
459
+ include MeiliSearch::Rails
454
460
 
455
461
  meilisearch enqueue: :trigger_sidekiq_worker do
456
462
  attribute :title, :author, :description
@@ -466,7 +472,7 @@ class MySidekiqWorker
466
472
  if remove
467
473
  # The record has likely already been removed from your database so we cannot
468
474
  # use ActiveRecord#find to load it.
469
- # We access the underlying MeiliSearch index object.
475
+ # We access the underlying Meilisearch index object.
470
476
  Book.index.delete_document(id)
471
477
  else
472
478
  # The record should be present.
@@ -480,7 +486,7 @@ With [**DelayedJob**](https://github.com/collectiveidea/delayed_job):
480
486
 
481
487
  ```ruby
482
488
  class Book < ActiveRecord::Base
483
- include MeiliSearch
489
+ include MeiliSearch::Rails
484
490
 
485
491
  meilisearch enqueue: :trigger_delayed_job do
486
492
  attribute :title, :author, :description
@@ -504,7 +510,7 @@ Extend a change to a related record.
504
510
 
505
511
  ```ruby
506
512
  class Author < ActiveRecord::Base
507
- include MeiliSearch
513
+ include MeiliSearch::Rails
508
514
 
509
515
  has_many :books
510
516
  # If your association uses belongs_to
@@ -514,7 +520,7 @@ class Author < ActiveRecord::Base
514
520
  end
515
521
 
516
522
  class Book < ActiveRecord::Base
517
- include MeiliSearch
523
+ include MeiliSearch::Rails
518
524
 
519
525
  belongs_to :author
520
526
  after_touch :index!
@@ -533,7 +539,7 @@ With **Sequel**, you can use the `touch` plugin to propagate changes.
533
539
  ```ruby
534
540
  # app/models/author.rb
535
541
  class Author < Sequel::Model
536
- include MeiliSearch
542
+ include MeiliSearch::Rails
537
543
 
538
544
  one_to_many :books
539
545
 
@@ -555,7 +561,7 @@ end
555
561
 
556
562
  # app/models/book.rb
557
563
  class Book < Sequel::Model
558
- include MeiliSearch
564
+ include MeiliSearch::Rails
559
565
 
560
566
  many_to_one :author
561
567
  after_touch :index!
@@ -578,7 +584,7 @@ You can strip all HTML tags from your attributes with the `sanitize` option.
578
584
 
579
585
  ```ruby
580
586
  class Book < ActiveRecord::Base
581
- include MeiliSearch
587
+ include MeiliSearch::Rails
582
588
 
583
589
  meilisearch sanitize: true do
584
590
  end
@@ -591,7 +597,7 @@ You can force the UTF-8 encoding of all your attributes using the `force_utf8_en
591
597
 
592
598
  ```ruby
593
599
  class Book < ActiveRecord::Base
594
- include MeiliSearch
600
+ include MeiliSearch::Rails
595
601
 
596
602
  meilisearch force_utf8_encoding: true do
597
603
  end
@@ -637,13 +643,13 @@ index = Book.index
637
643
 
638
644
  ### Development & testing
639
645
 
640
- #### Exceptions
646
+ #### Exceptions <!-- omit in toc -->
641
647
 
642
- You can disable exceptions that could be raised while trying to reach MeiliSearch's API by using the `raise_on_failure` option:
648
+ You can disable exceptions that could be raised while trying to reach Meilisearch's API by using the `raise_on_failure` option:
643
649
 
644
650
  ```ruby
645
651
  class Book < ActiveRecord::Base
646
- include MeiliSearch
652
+ include MeiliSearch::Rails
647
653
 
648
654
  # Only raise exceptions in development environment.
649
655
  meilisearch raise_on_failure: Rails.env.development? do
@@ -651,29 +657,29 @@ class Book < ActiveRecord::Base
651
657
  end
652
658
  ```
653
659
 
654
- #### Testing
660
+ #### Testing <!-- omit in toc -->
655
661
 
656
- ##### Synchronous testing
662
+ ##### Synchronous testing <!-- omit in toc -->
657
663
 
658
664
  You can force indexing and removing to be synchronous by setting the following option:
659
665
 
660
666
  ```ruby
661
667
  class Book < ActiveRecord::Base
662
- include MeiliSearch
668
+ include MeiliSearch::Rails
663
669
 
664
670
  meilisearch synchronous: true do
665
671
  end
666
672
  end
667
673
  ```
668
- 🚨 This is only recommended for testing purposes, the gem will call the `wait_for_pending_update` method that will stop your code execution until the asynchronous task has been processed by MeilSearch.
674
+ 🚨 This is only recommended for testing purposes, the gem will call the `wait_for_task` method that will stop your code execution until the asynchronous task has been processed by MeilSearch.
669
675
 
670
- ##### Disable auto-indexing & auto-removal
676
+ ##### Disable auto-indexing & auto-removal <!-- omit in toc -->
671
677
 
672
678
  You can disable auto-indexing and auto-removing setting the following options:
673
679
 
674
680
  ```ruby
675
681
  class Book < ActiveRecord::Base
676
- include MeiliSearch
682
+ include MeiliSearch::Rails
677
683
 
678
684
  meilisearch auto_index: false, auto_remove: false do
679
685
  end
@@ -701,4 +707,4 @@ The provided features and the code base is inspired by [algoliasearch-rails](htt
701
707
 
702
708
  <hr>
703
709
 
704
- **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.
710
+ **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.
data/Rakefile CHANGED
@@ -2,16 +2,17 @@ require 'rubygems'
2
2
  require 'rake'
3
3
 
4
4
  require 'rdoc/task'
5
+
5
6
  Rake::RDocTask.new do |rdoc|
6
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
7
+ version = File.exist?('VERSION') ? File.read('VERSION') : ''
7
8
 
8
9
  rdoc.rdoc_dir = 'rdoc'
9
- rdoc.title = "MeiliSearch Rails #{version}"
10
+ rdoc.title = "Meilisearch Rails #{version}"
10
11
  rdoc.rdoc_files.include('README*')
11
12
  rdoc.rdoc_files.include('lib/**/*.rb')
12
13
  end
13
14
 
14
- require "rspec/core/rake_task"
15
+ require 'rspec/core/rake_task'
15
16
  RSpec::Core::RakeTask.new(:spec)
16
17
 
17
- task :default => :spec
18
+ task default: :spec
@@ -0,0 +1,23 @@
1
+ module MeiliSearch
2
+ module Rails
3
+ module Configuration
4
+ def configuration
5
+ raise NotConfigured if @_config.blank?
6
+
7
+ @_config
8
+ end
9
+
10
+ def configuration=(configuration)
11
+ @_config = configuration
12
+ end
13
+
14
+ def client
15
+ ::MeiliSearch::Client.new(
16
+ configuration[:meilisearch_host] || 'http://localhost:7700',
17
+ configuration[:meilisearch_api_key],
18
+ configuration.slice(:timeout, :max_retries)
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ module MeiliSearch
2
+ module Rails
3
+ class NoBlockGiven < StandardError; end
4
+
5
+ class BadConfiguration < StandardError; end
6
+
7
+ class NotConfigured < StandardError
8
+ def message
9
+ 'Please configure Meilisearch. Set MeiliSearch::Rails.configuration = ' \
10
+ "{meilisearch_host: 'YOUR_MEILISEARCH_HOST', meilisearch_api_key: 'YOUR_API_KEY'}"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module MeiliSearch
2
+ module Rails
3
+ class MSJob < ::ActiveJob::Base
4
+ queue_as :meilisearch
5
+
6
+ def perform(record, method)
7
+ record.send(method)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,48 @@
1
+ unless defined? Kaminari
2
+ raise(MeiliSearch::BadConfiguration,
3
+ "Meilisearch: Please add 'kaminari' to your Gemfile to use kaminari pagination backend")
4
+ end
5
+
6
+ require 'kaminari/models/array_extension'
7
+
8
+ module MeiliSearch
9
+ module Rails
10
+ module Pagination
11
+ class Kaminari < ::Kaminari::PaginatableArray
12
+ def initialize(array, options)
13
+ if RUBY_VERSION >= '3'
14
+ super(array, **options)
15
+ else
16
+ super(array, options)
17
+ end
18
+ end
19
+
20
+ def limit(_num)
21
+ # noop
22
+ self
23
+ end
24
+
25
+ def offset(_num)
26
+ # noop
27
+ self
28
+ end
29
+
30
+ class << self
31
+ def create(results, total_hits, options = {})
32
+ offset = ((options[:page] - 1) * options[:per_page])
33
+ array = new results, limit: options[:per_page], offset: offset, total_count: total_hits
34
+
35
+ if array.empty? && !results.empty?
36
+ # since Kaminari 0.16.0, you need to pad the results with nil values so it matches the offset param
37
+ # otherwise you'll get an empty array: https://github.com/amatsuda/kaminari/commit/29fdcfa8865f2021f710adaedb41b7a7b081e34d
38
+ results = ([nil] * offset) + results
39
+ array = new results, offset: offset, limit: options[:per_page], total_count: total_hits
40
+ end
41
+
42
+ array
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end