meilisearch-rails 0.1.0 → 0.2.3
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 +4 -4
- data/Gemfile +2 -1
- data/README.md +94 -58
- data/lib/meilisearch/configuration.rb +5 -1
- data/lib/meilisearch/pagination/kaminari.rb +7 -3
- data/lib/meilisearch/utilities.rb +3 -2
- data/lib/meilisearch/version.rb +1 -1
- data/lib/meilisearch-rails.rb +18 -19
- data/meilisearch-rails.gemspec +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/utilities_spec.rb +8 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dff716ea4a13c0f64718942f4988550a36076ae5dc52ac8ec7282000d116a99d
|
4
|
+
data.tar.gz: 1346eb18ddb24bf718693b7b3efa89d4b0084ecffe9f7ccae1d71956b3b8bf56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38e1657c75e4eec945502ead72001ba56dc194d3ce5217e65f40abc49de34312087aa30d401d342a15c4c0701f0d41d49faf8c94aef5cc40d79ed9bdc345f414
|
7
|
+
data.tar.gz: 2cd31c3b6b70fb4d2c38977870ab28256de22422c410280e7615e11dfe64dd8eaa98295c7bdf553655b427837b8864ee60930a0aafa39e8f1272af34210c0479
|
data/Gemfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
3
|
gem 'json', '~> 2.5', '>= 2.5.1'
|
4
|
-
gem 'meilisearch', '~> 0.
|
4
|
+
gem 'meilisearch', '~> 0.16.0'
|
5
5
|
|
6
6
|
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
7
7
|
gem 'rubysl', '~> 2.0', :platform => :rbx
|
@@ -27,4 +27,5 @@ group :test do
|
|
27
27
|
gem 'will_paginate', '>= 2.3.15'
|
28
28
|
gem 'kaminari'
|
29
29
|
gem 'dotenv', '~> 2.7', '>= 2.7.6'
|
30
|
+
gem 'byebug'
|
30
31
|
end
|
data/README.md
CHANGED
@@ -65,7 +65,7 @@ To learn more about MeiliSearch, check out our [Documentation](https://docs.meil
|
|
65
65
|
|
66
66
|
## 🤖 Compatibility with MeiliSearch
|
67
67
|
|
68
|
-
This package only guarantees the compatibility with the [version v0.
|
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).
|
69
69
|
|
70
70
|
## 🔧 Installation
|
71
71
|
|
@@ -104,8 +104,8 @@ Create a new file `config/initializers/meilisearch.rb` to setup your `MEILISEARC
|
|
104
104
|
|
105
105
|
```ruby
|
106
106
|
MeiliSearch.configuration = {
|
107
|
-
|
108
|
-
|
107
|
+
meilisearch_host: 'YourMeiliSearchHost',
|
108
|
+
meilisearch_api_key: 'YourMeiliSearchAPIKey',
|
109
109
|
}
|
110
110
|
```
|
111
111
|
|
@@ -126,6 +126,8 @@ class Book < ActiveRecord::Base
|
|
126
126
|
end
|
127
127
|
```
|
128
128
|
|
129
|
+
⚠️ Note that even if you want to use all the default options, you must declare an empty `meilisearch` block in your model.
|
130
|
+
|
129
131
|
#### Basic Backend Search <!-- omit in toc -->
|
130
132
|
|
131
133
|
We **strongly recommend the use of front-end search** through our [JavaScript API Client](https://github.com/meilisearch/meilisearch-js/) or [Instant Meilisearch plugin](https://github.com/meilisearch/instant-meilisearch)
|
@@ -143,15 +145,18 @@ end
|
|
143
145
|
|
144
146
|
#### Backend Pagination <!-- omit in toc -->
|
145
147
|
|
146
|
-
|
148
|
+
This gem supports:
|
149
|
+
- [kaminari](https://github.com/amatsuda/kaminari)
|
150
|
+
- [pagy](https://github.com/ddnexus/pagy)
|
151
|
+
- [will_paginate](https://github.com/mislav/will_paginate).
|
147
152
|
|
148
153
|
Specify the `:pagination_backend` in the configuration file:
|
149
154
|
|
150
155
|
```ruby
|
151
156
|
MeiliSearch.configuration = {
|
152
|
-
|
153
|
-
|
154
|
-
|
157
|
+
meilisearch_host: 'YourMeiliSearchHost',
|
158
|
+
meilisearch_api_key: 'YourMeiliSearchAPIKey',
|
159
|
+
pagination_backend: :kaminari #:will_paginate
|
155
160
|
}
|
156
161
|
```
|
157
162
|
|
@@ -178,7 +183,21 @@ The **number of hits per page defaults to 20**, you can customize it by adding t
|
|
178
183
|
Book.search('harry potter', hitsPerPage: 10)
|
179
184
|
```
|
180
185
|
|
181
|
-
|
186
|
+
#### Extra Configuration <!-- omit in toc -->
|
187
|
+
|
188
|
+
Requests made to MeiliSearch may timeout and retry. To adapt the behavior to
|
189
|
+
your needs, you can change the parameters during configuration:
|
190
|
+
|
191
|
+
```ruby
|
192
|
+
MeiliSearch.configuration = {
|
193
|
+
meilisearch_host: 'YourMeiliSearchHost',
|
194
|
+
meilisearch_api_key: 'YourMeiliSearchAPIKey',
|
195
|
+
timeout: 2,
|
196
|
+
max_retries: 1,
|
197
|
+
}
|
198
|
+
```
|
199
|
+
|
200
|
+
## ⚙️ Settings
|
182
201
|
|
183
202
|
You can configure the index settings by adding them inside the `meilisearch` block as shown below:
|
184
203
|
|
@@ -187,22 +206,22 @@ class Book < ApplicationRecord
|
|
187
206
|
include MeiliSearch
|
188
207
|
|
189
208
|
meilisearch do
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
"desc(publication_year)"
|
209
|
+
searchable_attributes [:title, :author, :publisher, :description]
|
210
|
+
filterable_attributes [:genre]
|
211
|
+
ranking_rules [
|
212
|
+
'proximity',
|
213
|
+
'typo',
|
214
|
+
'words',
|
215
|
+
'attribute',
|
216
|
+
'exactness',
|
217
|
+
'desc(publication_year)'
|
200
218
|
]
|
201
219
|
synonyms nyc: ['new york']
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
220
|
+
|
221
|
+
# The following parameters are applied when calling the search() method:
|
222
|
+
attributes_to_highlight ['*']
|
223
|
+
attributes_to_crop [:description]
|
224
|
+
crop_length 10
|
206
225
|
end
|
207
226
|
end
|
208
227
|
```
|
@@ -214,9 +233,10 @@ Check the dedicated section of the documentation, for more information on the [s
|
|
214
233
|
All the supported options are described in the [search parameters](https://docs.meilisearch.com/reference/features/search_parameters.html) section of the documentation.
|
215
234
|
|
216
235
|
```ruby
|
217
|
-
Book.search('Harry',
|
236
|
+
Book.search('Harry', attributesToHighlight: ['*'])
|
218
237
|
```
|
219
|
-
👉 Don't forget that `
|
238
|
+
👉 Don't forget that `attributes_to_highlight`, `attributes_to_crop`, and
|
239
|
+
`crop_length` can be set up in the `meilisearch` block of your model.
|
220
240
|
|
221
241
|
## 🪛 Options
|
222
242
|
|
@@ -224,12 +244,13 @@ Book.search('Harry', { filters: 'author = J. K. Rowling' })
|
|
224
244
|
|
225
245
|
#### Custom index_uid
|
226
246
|
|
227
|
-
By default, the **index_uid** will be the class name, e.g. `Book`. You can customize the index_uid by using the `index_uid
|
247
|
+
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.
|
228
248
|
|
229
249
|
```ruby
|
230
250
|
class Book < ActiveRecord::Base
|
231
251
|
include MeiliSearch
|
232
|
-
|
252
|
+
|
253
|
+
meilisearch index_uid: 'MyCustomUID' do
|
233
254
|
end
|
234
255
|
end
|
235
256
|
```
|
@@ -241,6 +262,7 @@ You can suffix the index UID with the current Rails environment using the follow
|
|
241
262
|
```ruby
|
242
263
|
class Book < ActiveRecord::Base
|
243
264
|
include MeiliSearch
|
265
|
+
|
244
266
|
meilisearch per_environment: true do # The index UID will be "Book_#{Rails.env}"
|
245
267
|
end
|
246
268
|
end
|
@@ -261,13 +283,13 @@ class Author < ApplicationRecord
|
|
261
283
|
meilisearch do
|
262
284
|
attribute :first_name, :last_name
|
263
285
|
attribute :full_name do
|
264
|
-
|
286
|
+
"#{first_name} #{last_name}"
|
265
287
|
end
|
266
288
|
add_attribute :full_name_reversed
|
267
289
|
end
|
268
290
|
|
269
291
|
def full_name_reversed
|
270
|
-
|
292
|
+
"#{last_name} #{first_name}"
|
271
293
|
end
|
272
294
|
|
273
295
|
def will_save_change_to_full_name?
|
@@ -282,27 +304,28 @@ end
|
|
282
304
|
|
283
305
|
#### Custom primary key
|
284
306
|
|
285
|
-
By default, the
|
307
|
+
By default, the primary key is based on your record's id. You can change this behavior by specifying the `primary_key:` option.
|
286
308
|
|
287
309
|
Note that the primary key must have a **unique value**.
|
288
310
|
|
289
311
|
```ruby
|
290
312
|
class Book < ActiveRecord::Base
|
291
313
|
include MeiliSearch
|
292
|
-
|
314
|
+
|
315
|
+
meilisearch primary_key: 'ISBN' do
|
293
316
|
end
|
294
317
|
end
|
295
318
|
```
|
296
319
|
#### Conditional indexing
|
297
320
|
|
298
|
-
You can control if a record must be indexed by using the
|
321
|
+
You can control if a record must be indexed by using the `if:` or `unless:` options.<br>
|
299
322
|
As soon as you use those constraints, `add_documents` and `delete_documents` calls will be performed in order to keep the index synced with the DB. To prevent this behavior, you can create a `will_save_change_to_#{attr_name}?` method.
|
300
323
|
|
301
324
|
```ruby
|
302
325
|
class Book < ActiveRecord::Base
|
303
326
|
include MeiliSearch
|
304
327
|
|
305
|
-
meilisearch :
|
328
|
+
meilisearch if: :published?, unless: :premium? do
|
306
329
|
end
|
307
330
|
|
308
331
|
def published?
|
@@ -314,7 +337,7 @@ class Book < ActiveRecord::Base
|
|
314
337
|
end
|
315
338
|
|
316
339
|
def will_save_change_to_published?
|
317
|
-
|
340
|
+
# return true only if you know that the 'published' state changed
|
318
341
|
end
|
319
342
|
end
|
320
343
|
```
|
@@ -324,7 +347,6 @@ You can index a record in several indexes using the `add_index` option:
|
|
324
347
|
|
325
348
|
```ruby
|
326
349
|
class Book < ActiveRecord::Base
|
327
|
-
|
328
350
|
include MeiliSearch
|
329
351
|
|
330
352
|
PUBLIC_INDEX_UID = 'Books'
|
@@ -332,17 +354,17 @@ class Book < ActiveRecord::Base
|
|
332
354
|
|
333
355
|
# store all books in index 'SECURED_INDEX_UID'
|
334
356
|
meilisearch index_uid: SECURED_INDEX_UID do
|
335
|
-
|
357
|
+
searchable_attributes [:title, :author]
|
336
358
|
|
337
359
|
# store all 'public' (released and not premium) books in index 'PUBLIC_INDEX_UID'
|
338
360
|
add_index PUBLIC_INDEX_UID, if: :public? do
|
339
|
-
|
361
|
+
searchable_attributes [:title, :author]
|
340
362
|
end
|
341
363
|
end
|
342
364
|
|
343
365
|
private
|
344
366
|
def public?
|
345
|
-
released && !premium
|
367
|
+
released? && !premium?
|
346
368
|
end
|
347
369
|
end
|
348
370
|
```
|
@@ -394,18 +416,31 @@ end
|
|
394
416
|
|
395
417
|
In this case you can bypass loading the record from **ActiveRecord** and just communicate with the index directly.
|
396
418
|
|
419
|
+
With **ActiveJob**:
|
420
|
+
|
397
421
|
```ruby
|
422
|
+
class Book < ActiveRecord::Base
|
423
|
+
include MeiliSearch
|
424
|
+
|
425
|
+
meilisearch enqueue: :trigger_job do
|
426
|
+
attribute :title, :author, :description
|
427
|
+
end
|
428
|
+
|
429
|
+
def self.trigger_job(record, remove)
|
430
|
+
MyActiveJob.perform_later(record.id, remove)
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
398
434
|
class MyActiveJob < ApplicationJob
|
399
435
|
def perform(id, remove)
|
400
436
|
if remove
|
401
|
-
#
|
402
|
-
# use ActiveRecord#find to load it
|
403
|
-
# We access the underlying MeiliSearch index object
|
437
|
+
# The record has likely already been removed from your database so we cannot
|
438
|
+
# use ActiveRecord#find to load it.
|
439
|
+
# We access the underlying MeiliSearch index object.
|
404
440
|
Book.index.delete_document(id)
|
405
441
|
else
|
406
|
-
#
|
407
|
-
|
408
|
-
c.index!
|
442
|
+
# The record should be present.
|
443
|
+
Book.find(id).index!
|
409
444
|
end
|
410
445
|
end
|
411
446
|
end
|
@@ -429,14 +464,13 @@ end
|
|
429
464
|
class MySidekiqWorker
|
430
465
|
def perform(id, remove)
|
431
466
|
if remove
|
432
|
-
#
|
433
|
-
# use ActiveRecord#find to load it
|
434
|
-
# We access the underlying MeiliSearch index object
|
435
|
-
|
467
|
+
# The record has likely already been removed from your database so we cannot
|
468
|
+
# use ActiveRecord#find to load it.
|
469
|
+
# We access the underlying MeiliSearch index object.
|
470
|
+
Book.index.delete_document(id)
|
436
471
|
else
|
437
|
-
#
|
438
|
-
|
439
|
-
c.index!
|
472
|
+
# The record should be present.
|
473
|
+
Book.find(id).index!
|
440
474
|
end
|
441
475
|
end
|
442
476
|
end
|
@@ -466,7 +500,7 @@ end
|
|
466
500
|
|
467
501
|
Extend a change to a related record.
|
468
502
|
|
469
|
-
**With
|
503
|
+
**With ActiveRecord**, you'll need to use `touch` and `after_touch`.
|
470
504
|
|
471
505
|
```ruby
|
472
506
|
class Author < ActiveRecord::Base
|
@@ -546,7 +580,7 @@ You can strip all HTML tags from your attributes with the `sanitize` option.
|
|
546
580
|
class Book < ActiveRecord::Base
|
547
581
|
include MeiliSearch
|
548
582
|
|
549
|
-
meilisearch :
|
583
|
+
meilisearch sanitize: true do
|
550
584
|
end
|
551
585
|
end
|
552
586
|
```
|
@@ -559,7 +593,7 @@ You can force the UTF-8 encoding of all your attributes using the `force_utf8_en
|
|
559
593
|
class Book < ActiveRecord::Base
|
560
594
|
include MeiliSearch
|
561
595
|
|
562
|
-
meilisearch :
|
596
|
+
meilisearch force_utf8_encoding: true do
|
563
597
|
end
|
564
598
|
end
|
565
599
|
```
|
@@ -568,7 +602,7 @@ end
|
|
568
602
|
|
569
603
|
#### Indexing & deletion
|
570
604
|
|
571
|
-
You can manually index a record by using the `index!` instance method and remove it by using the `remove_from_index!` instance method
|
605
|
+
You can manually index a record by using the `index!` instance method and remove it by using the `remove_from_index!` instance method.
|
572
606
|
|
573
607
|
```ruby
|
574
608
|
book = Book.create!(title: 'The Little Prince', author: 'Antoine de Saint-Exupéry')
|
@@ -603,7 +637,6 @@ index = Book.index
|
|
603
637
|
|
604
638
|
### Development & testing
|
605
639
|
|
606
|
-
|
607
640
|
#### Exceptions
|
608
641
|
|
609
642
|
You can disable exceptions that could be raised while trying to reach MeiliSearch's API by using the `raise_on_failure` option:
|
@@ -612,14 +645,16 @@ You can disable exceptions that could be raised while trying to reach MeiliSearc
|
|
612
645
|
class Book < ActiveRecord::Base
|
613
646
|
include MeiliSearch
|
614
647
|
|
615
|
-
#
|
616
|
-
meilisearch :
|
648
|
+
# Only raise exceptions in development environment.
|
649
|
+
meilisearch raise_on_failure: Rails.env.development? do
|
617
650
|
end
|
618
651
|
end
|
619
652
|
```
|
620
653
|
|
621
654
|
#### Testing
|
655
|
+
|
622
656
|
##### Synchronous testing
|
657
|
+
|
623
658
|
You can force indexing and removing to be synchronous by setting the following option:
|
624
659
|
|
625
660
|
```ruby
|
@@ -649,7 +684,8 @@ You can temporarily disable auto-indexing using the without_auto_index scope:
|
|
649
684
|
|
650
685
|
```ruby
|
651
686
|
Book.without_auto_index do
|
652
|
-
|
687
|
+
# Inside this block, auto indexing task will not run.
|
688
|
+
1.upto(10000) { Book.create! attributes }
|
653
689
|
end
|
654
690
|
```
|
655
691
|
|
@@ -9,7 +9,11 @@ module MeiliSearch
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def client
|
12
|
-
::MeiliSearch::Client.new(
|
12
|
+
::MeiliSearch::Client.new(
|
13
|
+
configuration[:meilisearch_host],
|
14
|
+
configuration[:meilisearch_api_key],
|
15
|
+
configuration.slice(:timeout, :max_retries)
|
16
|
+
)
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
@@ -9,7 +9,11 @@ module MeiliSearch
|
|
9
9
|
class Kaminari < ::Kaminari::PaginatableArray
|
10
10
|
|
11
11
|
def initialize(array, options)
|
12
|
-
|
12
|
+
if RUBY_VERSION >= '3'
|
13
|
+
super(array, **options)
|
14
|
+
else
|
15
|
+
super(array, options)
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
def limit(num)
|
@@ -25,12 +29,12 @@ module MeiliSearch
|
|
25
29
|
class << self
|
26
30
|
def create(results, total_hits, options = {})
|
27
31
|
offset = ((options[:page] - 1) * options[:per_page])
|
28
|
-
array = new results, :
|
32
|
+
array = new results, limit: options[:per_page], offset: offset, total_count: total_hits
|
29
33
|
if array.empty? and !results.empty?
|
30
34
|
# since Kaminari 0.16.0, you need to pad the results with nil values so it matches the offset param
|
31
35
|
# otherwise you'll get an empty array: https://github.com/amatsuda/kaminari/commit/29fdcfa8865f2021f710adaedb41b7a7b081e34d
|
32
36
|
results = ([nil] * offset) + results
|
33
|
-
array = new results, :
|
37
|
+
array = new results, offset: offset, limit: options[:per_page], total_count: total_hits
|
34
38
|
end
|
35
39
|
array
|
36
40
|
end
|
@@ -7,7 +7,8 @@ module MeiliSearch
|
|
7
7
|
elsif Rails.application
|
8
8
|
Rails.application.eager_load!
|
9
9
|
end
|
10
|
-
MeiliSearch.instance_variable_get
|
10
|
+
klasses = MeiliSearch.instance_variable_get(:@included_in)
|
11
|
+
(klasses + klasses.map{ |klass| klass.descendants }.flatten).uniq
|
11
12
|
end
|
12
13
|
|
13
14
|
def clear_all_indexes
|
@@ -26,7 +27,7 @@ module MeiliSearch
|
|
26
27
|
klasses.each do |klass|
|
27
28
|
puts klass
|
28
29
|
puts "Reindexing #{klass.count} records..."
|
29
|
-
klass.ms_reindex
|
30
|
+
klass.ms_reindex!
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
data/lib/meilisearch/version.rb
CHANGED
data/lib/meilisearch-rails.rb
CHANGED
@@ -52,16 +52,25 @@ module MeiliSearch
|
|
52
52
|
|
53
53
|
# MeiliSearch settings
|
54
54
|
OPTIONS = [
|
55
|
-
:searchableAttributes,
|
56
|
-
:
|
55
|
+
:searchableAttributes,
|
56
|
+
:filterableAttributes,
|
57
|
+
:displayedAttributes,
|
58
|
+
:distinctAttribute,
|
59
|
+
:synonyms,
|
60
|
+
:stopWords,
|
61
|
+
:rankingRules,
|
57
62
|
:attributesToHighlight,
|
58
|
-
:attributesToCrop,
|
63
|
+
:attributesToCrop,
|
64
|
+
:cropLength,
|
59
65
|
]
|
60
66
|
|
61
|
-
OPTIONS.each do |
|
62
|
-
define_method
|
63
|
-
instance_variable_set("@#{
|
67
|
+
OPTIONS.each do |option|
|
68
|
+
define_method option do |value|
|
69
|
+
instance_variable_set("@#{option}", value)
|
64
70
|
end
|
71
|
+
|
72
|
+
underscored_name = option.to_s.gsub(/(.)([A-Z])/, '\1_\2').downcase
|
73
|
+
alias_method underscored_name, option if underscored_name != option
|
65
74
|
end
|
66
75
|
|
67
76
|
def initialize(options, &block)
|
@@ -315,7 +324,7 @@ module MeiliSearch
|
|
315
324
|
|
316
325
|
def meilisearch(options = {}, &block)
|
317
326
|
self.meilisearch_settings = IndexSettings.new(options, &block)
|
318
|
-
self.meilisearch_options = { :
|
327
|
+
self.meilisearch_options = { type: ms_full_const_get(model_name.to_s), per_page: meilisearch_settings.get_setting(:hitsPerPage) || 20, page: 1 }.merge(options)
|
319
328
|
|
320
329
|
attr_accessor :formatted
|
321
330
|
|
@@ -552,8 +561,6 @@ module MeiliSearch
|
|
552
561
|
params[:cropLength] = meilisearch_settings.get_setting(:cropLength) if !meilisearch_settings.get_setting(:cropLength).nil?
|
553
562
|
end
|
554
563
|
index = ms_index(index_uid)
|
555
|
-
# index = ms_index(ms_index_uid)
|
556
|
-
# index.search(q, Hash[params.map { |k,v| [k.to_s, v.to_s] }])
|
557
564
|
index.search(q, Hash[params.map { |k,v| [k, v] }])
|
558
565
|
end
|
559
566
|
|
@@ -590,14 +597,6 @@ module MeiliSearch
|
|
590
597
|
params[:limit] = 200
|
591
598
|
end
|
592
599
|
|
593
|
-
if !meilisearch_settings.get_setting(:attributesToHighlight).nil?
|
594
|
-
params[:attributesToHighlight] = meilisearch_settings.get_setting(:attributesToHighlight)
|
595
|
-
end
|
596
|
-
|
597
|
-
if !meilisearch_settings.get_setting(:attributesToCrop).nil?
|
598
|
-
params[:attributesToCrop] = meilisearch_settings.get_setting(:attributesToCrop)
|
599
|
-
params[:cropLength] = meilisearch_settings.get_setting(:cropLength) if !meilisearch_settings.get_setting(:cropLength).nil?
|
600
|
-
end
|
601
600
|
# Returns raw json hits as follows:
|
602
601
|
# {"hits"=>[{"id"=>"13", "href"=>"apple", "name"=>"iphone"}], "offset"=>0, "limit"=>|| 20, "nbHits"=>1, "exhaustiveNbHits"=>false, "processingTimeMs"=>0, "query"=>"iphone"}
|
603
602
|
json = ms_raw_search(q, params)
|
@@ -632,7 +631,7 @@ module MeiliSearch
|
|
632
631
|
hits_per_page ||= 20
|
633
632
|
page ||= 1
|
634
633
|
|
635
|
-
res = MeiliSearch::Pagination.create(results, total_hits, meilisearch_options.merge({ :
|
634
|
+
res = MeiliSearch::Pagination.create(results, total_hits, meilisearch_options.merge({ page: page , per_page: hits_per_page }))
|
636
635
|
res.extend(AdditionalMethods)
|
637
636
|
res.send(:ms_init_raw_answer, json)
|
638
637
|
res
|
@@ -823,7 +822,7 @@ module MeiliSearch
|
|
823
822
|
|
824
823
|
def ms_find_in_batches(batch_size, &block)
|
825
824
|
if (defined?(::ActiveRecord) && ancestors.include?(::ActiveRecord::Base)) || respond_to?(:find_in_batches)
|
826
|
-
find_in_batches(:
|
825
|
+
find_in_batches(batch_size: batch_size, &block)
|
827
826
|
elsif defined?(::Sequel) && self < Sequel::Model
|
828
827
|
dataset.extension(:pagination).each_page(batch_size, &block)
|
829
828
|
else
|
data/meilisearch-rails.gemspec
CHANGED
@@ -41,6 +41,6 @@ Gem::Specification.new do |s|
|
|
41
41
|
s.licenses = ["MIT"]
|
42
42
|
s.require_paths = ["lib"]
|
43
43
|
s.summary = "MeiliSearch integration for Ruby on Rails."
|
44
|
-
s.add_dependency(
|
45
|
-
s.add_dependency(
|
44
|
+
s.add_dependency("json", [">= 1.5.1"])
|
45
|
+
s.add_dependency("meilisearch", [">= 0.15.4"])
|
46
46
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/utilities_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
|
-
MeiliSearch.configuration = { :
|
3
|
+
MeiliSearch.configuration = { meilisearch_host: ENV['MEILISEARCH_HOST'], meilisearch_api_key: ENV['MEILISEARCH_API_KEY'] }
|
4
4
|
|
5
5
|
describe MeiliSearch::Utilities do
|
6
6
|
|
@@ -17,6 +17,12 @@ describe MeiliSearch::Utilities do
|
|
17
17
|
|
18
18
|
meilisearch
|
19
19
|
end
|
20
|
+
|
21
|
+
class DummyChild < Dummy
|
22
|
+
end
|
23
|
+
|
24
|
+
class DummyGrandChild < DummyChild
|
25
|
+
end
|
20
26
|
end
|
21
27
|
|
22
28
|
after(:each) do
|
@@ -24,7 +30,7 @@ describe MeiliSearch::Utilities do
|
|
24
30
|
end
|
25
31
|
|
26
32
|
it "should get the models where MeiliSearch module was included" do
|
27
|
-
(MeiliSearch::Utilities.get_model_classes - [Dummy]).should == []
|
33
|
+
(MeiliSearch::Utilities.get_model_classes - [Dummy, DummyChild, DummyGrandChild]).should == []
|
28
34
|
end
|
29
35
|
|
30
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meilisearch-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Meili
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.15.
|
33
|
+
version: 0.15.4
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.15.
|
40
|
+
version: 0.15.4
|
41
41
|
description: MeiliSearch integration for Ruby on Rails. See https://github.com/meilisearch/MeiliSearch
|
42
42
|
email: bonjour@meilisearch.com
|
43
43
|
executables: []
|