meilisearch-rails 0.9.1 → 0.10.2

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: bcc344e4fd67e6c871a2bd17a90f9f2ddfd621b455ab25ea4925bd97c797db97
4
- data.tar.gz: 6849bd317a751754beab3642c29405d6022da03cb1266fd0b77c6c12e57f5765
3
+ metadata.gz: cb990c26e799658b655df059ea7a22b4cfc7511a88e7581d72c27841b736f74f
4
+ data.tar.gz: c2457a258356732877729a9f110a8f392316a98d725d6d052f2dc64824a3ea2f
5
5
  SHA512:
6
- metadata.gz: a575ccd86876ac883955ec6f660635da5f9927802253d011131e7c16a3e681bd9942740785d16c117cd01e2e919ca036ab7439f84c8d6da609df95dcc3e95afe
7
- data.tar.gz: a03067f0ab9e8acfad6ace43421c80e332f118a16b15f8642537e0cc4749aaa04caf7cd33a19064560d0864614cd56807b933b1a06a56f6ceb9a070d4468b2d5
6
+ metadata.gz: 7499509091a149069f1322e3ceec9c789432c3495d8c2754d258bb17c5cc1d70a410ebcd41e1eb76bcbe50b3c9e301044d0a5e6931e94bdd8779eb290e9eaecf
7
+ data.tar.gz: 68173b7d7767308144b6987c35c9c2fb75806959a6fcdc3ee3545cab88779d24e013dea0ea0b3b0a3182f8fb9bcd5c7e1634aaf89ecd39f4cb7ad21231b95a0b
data/Gemfile CHANGED
@@ -13,7 +13,7 @@ group :development do
13
13
  end
14
14
 
15
15
  group :test do
16
- rails_version = ENV['RAILS_VERSION'] || '5.2'
16
+ rails_version = ENV['RAILS_VERSION'] || '6.1'
17
17
  sequel_version = ENV['SEQUEL_VERSION'] ? "~> #{ENV['SEQUEL_VERSION']}" : '>= 4.0'
18
18
 
19
19
  gem 'active_model_serializers'
@@ -31,6 +31,7 @@ group :test do
31
31
  gem 'jdbc-sqlite3', platform: :jruby
32
32
  gem 'rspec', '~> 3.0'
33
33
  gem 'simplecov', require: 'false'
34
+ gem 'codecov', require: 'false'
34
35
  gem 'threads'
35
36
 
36
37
  gem 'byebug'
data/README.md CHANGED
@@ -6,17 +6,21 @@
6
6
 
7
7
  <h4 align="center">
8
8
  <a href="https://github.com/meilisearch/meilisearch">Meilisearch</a> |
9
+ <a href="https://www.meilisearch.com/pricing?utm_campaign=oss&utm_source=integration&utm_medium=meilisearch-rails">Meilisearch Cloud</a> |
9
10
  <a href="https://docs.meilisearch.com">Documentation</a> |
10
11
  <a href="https://discord.meilisearch.com">Discord</a> |
11
12
  <a href="https://roadmap.meilisearch.com/tabs/1-under-consideration">Roadmap</a> |
12
13
  <a href="https://www.meilisearch.com">Website</a> |
13
- <a href="https://docs.meilisearch.com/faq">FAQ</a>
14
+ <a href="https://www.meilisearch.com/docs/faq">FAQ</a>
14
15
  </h4>
15
16
 
16
17
  <p align="center">
17
18
  <a href="https://github.com/meilisearch/meilisearch-rails/actions"><img src="https://github.com/meilisearch/meilisearch-rails/workflows/Tests/badge.svg" alt="Test"></a>
19
+ <a href="https://app.codecov.io/gh/meilisearch/meilisearch-rails/tree/main" >
20
+ <img src="https://codecov.io/gh/meilisearch/meilisearch-rails/branch/main/graph/badge.svg?token=9J7LRP11IR"/>
21
+ </a>
18
22
  <a href="https://github.com/meilisearch/meilisearch-rails/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-informational" alt="License"></a>
19
- <a href="https://app.bors.tech/repositories/33032"><img src="https://bors.tech/images/badge_small.svg" alt="Bors enabled"></a>
23
+ <a href="https://ms-bors.herokuapp.com/repositories/68"><img src="https://bors.tech/images/badge_small.svg" alt="Bors enabled"></a>
20
24
  </p>
21
25
 
22
26
  <p align="center">⚡ The Meilisearch integration for Ruby on Rails 💎</p>
@@ -25,9 +29,10 @@
25
29
 
26
30
  **Meilisearch** is an open-source search engine. [Learn more about Meilisearch.](https://github.com/meilisearch/meilisearch)
27
31
 
28
- ## Table of Contents <!-- omit in toc -->
32
+ ## Table of Contents <!-- omit in TOC -->
29
33
 
30
34
  - [📖 Documentation](#-documentation)
35
+ - [⚡ Supercharge your Meilisearch experience](#-supercharge-your-meilisearch-experience)
31
36
  - [🤖 Compatibility with Meilisearch](#-compatibility-with-meilisearch)
32
37
  - [🚀 Getting started](#-getting-started)
33
38
  - [Compatibility](#-compatibility)
@@ -58,7 +63,11 @@
58
63
 
59
64
  The whole usage of this gem is detailed in this README.
60
65
 
61
- 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/).
66
+ To learn more about Meilisearch, check out our [Documentation](https://www.meilisearch.com/docs/learn/tutorials/getting_started.html) or our [API References](https://www.meilisearch.com/docs/reference/api/).
67
+
68
+ ## ⚡ Supercharge your Meilisearch experience
69
+
70
+ Say goodbye to server deployment and manual updates with [Meilisearch Cloud](https://www.meilisearch.com/pricing?utm_campaign=oss&utm_source=integration&utm_medium=meilisearch-rails). No credit card required.
62
71
 
63
72
  ## 🤖 Compatibility with Meilisearch
64
73
 
@@ -66,7 +75,7 @@ This package guarantees compatibility with [version v1.x of Meilisearch](https:/
66
75
 
67
76
  ## 🔧 Installation <!-- omit in toc -->
68
77
 
69
- This package requires Ruby version 2.6.0 or later and Rails 5.2 or later.
78
+ This package requires Ruby version 2.7.0 or later and Rails 6.1 or later. It may work in older versions but it is not officially supported.
70
79
 
71
80
  With `gem` in command line:
72
81
  ```bash
@@ -82,7 +91,7 @@ gem 'meilisearch-rails'
82
91
 
83
92
  ### Run Meilisearch <!-- omit in toc -->
84
93
 
85
- There are many easy ways to [download and run a Meilisearch instance](https://docs.meilisearch.com/reference/features/installation.html#download-and-launch).
94
+ There are many easy ways to [download and run a Meilisearch instance](https://www.meilisearch.com/docs/reference/features/installation.html#download-and-launch).
86
95
 
87
96
  For example, if you use Docker:
88
97
 
@@ -101,13 +110,21 @@ Create a new file `config/initializers/meilisearch.rb` to setup your `MEILISEARC
101
110
 
102
111
  ```ruby
103
112
  MeiliSearch::Rails.configuration = {
104
- meilisearch_url: 'YourMeilisearchUrl', # example: http://localhost:7700
105
- meilisearch_api_key: 'YourMeilisearchAPIKey',
113
+ meilisearch_url: ENV.fetch('MEILISEARCH_HOST', 'http://localhost:7700'),
114
+ meilisearch_api_key: ENV.fetch('MEILISEARCH_API_KEY', 'YourMeilisearchAPIKey')
106
115
  }
107
116
  ```
108
117
 
118
+ Or you can run a rake task to create the initializer file for you:
119
+
120
+ ```bash
121
+ bin/rails meilisearch:install
122
+ ```
123
+
109
124
  The gem is compatible with [ActiveRecord](https://github.com/rails/rails/tree/master/activerecord), [Mongoid](https://github.com/mongoid/mongoid) and [Sequel](https://github.com/jeremyevans/sequel).
110
125
 
126
+ ⚠️ Note that even if you want to use all the default options, you must declare an empty `meilisearch` block in your model.
127
+
111
128
  #### Add documents <!-- omit in toc -->
112
129
 
113
130
  The following code will create a `Book` index and add search capabilities to your `Book` model.
@@ -123,7 +140,9 @@ class Book < ActiveRecord::Base
123
140
  end
124
141
  ```
125
142
 
126
- ⚠️ Note that even if you want to use all the default options, you must declare an empty `meilisearch` block in your model.
143
+ #### Automatic indexing
144
+
145
+ As soon as you configure your model as mentioned above, `meilisearch-rails` will keep your database table data in sync with your Meilisearch instance using the `ActiveRecord` callbacks automatically.
127
146
 
128
147
  #### Basic Backend Search <!-- omit in toc -->
129
148
 
@@ -191,11 +210,11 @@ class Book < ApplicationRecord
191
210
  end
192
211
  ```
193
212
 
194
- Check the dedicated section of the documentation, for more information on the [settings](https://docs.meilisearch.com/reference/features/settings.html).
213
+ Check the dedicated section of the documentation, for more information on the [settings](https://www.meilisearch.com/docs/reference/api/settings#settings_parameters).
195
214
 
196
215
  ## 🔍 Custom search
197
216
 
198
- All the supported options are described in the [search parameters](https://docs.meilisearch.com/reference/features/search_parameters.html) section of the documentation.
217
+ All the supported options are described in the [search parameters](https://www.meilisearch.com/docs/reference/api/search#search-parameters) section of the documentation.
199
218
 
200
219
  ```ruby
201
220
  Book.search('Harry', attributes_to_highlight: ['*'])
@@ -310,7 +329,7 @@ Check [`ddnexus/pagy`](https://ddnexus.github.io/pagy/extras/meilisearch) for mo
310
329
 
311
330
  #### Deactivate Meilisearch in certain moments
312
331
 
313
- By default HTTP connections to the Meilisearch URL is always active, but sometimes you want to disable the HTTP requests in a particular moment or environment.<br>
332
+ By default, HTTP connections to the Meilisearch URL are always active, but sometimes you want to disable the HTTP requests in a particular moment or environment.<br>
314
333
  you have multiple ways to achieve this.
315
334
 
316
335
  By adding `active: false` in the configuration initializer:
@@ -17,7 +17,7 @@ module MeiliSearch
17
17
  end
18
18
 
19
19
  def self.log_pagy_error
20
- (::Rails.logger || Logger.new($stdout))
20
+ MeiliSearch::Rails.logger
21
21
  .warning('[meilisearch-rails] Remove `pagination_backend: :pagy` from your initializer, `pagy` it is not required for `pagy`')
22
22
  end
23
23
 
@@ -19,4 +19,11 @@ namespace :meilisearch do
19
19
 
20
20
  MeiliSearch::Rails::Utilities.clear_all_indexes
21
21
  end
22
+
23
+ desc 'Create initializer file'
24
+ task install: :environment do
25
+ puts 'Creating initializer file'
26
+
27
+ copy_file "#{__dir__}/../templates/initializer.rb", 'config/initializers/meilisearch.rb'
28
+ end
22
29
  end
@@ -0,0 +1,4 @@
1
+ MeiliSearch::Rails.configuration = {
2
+ meilisearch_url: ENV.fetch('MEILISEARCH_HOST', 'http://localhost:7700'),
3
+ meilisearch_api_key: ENV.fetch('MEILISEARCH_API_KEY', 'YourMeilisearchAPIKey')
4
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  module MeiliSearch
4
4
  module Rails
5
- VERSION = '0.9.1'
5
+ VERSION = '0.10.2'
6
6
 
7
7
  def self.qualified_version
8
8
  "Meilisearch Rails (v#{VERSION})"
@@ -39,6 +39,10 @@ module MeiliSearch
39
39
  include InstanceMethods
40
40
  end
41
41
  end
42
+
43
+ def logger
44
+ @logger ||= (::Rails.logger || Logger.new($stdout))
45
+ end
42
46
  end
43
47
 
44
48
  class IndexSettings
@@ -48,23 +52,23 @@ module MeiliSearch
48
52
 
49
53
  # Meilisearch settings
50
54
  OPTIONS = %i[
51
- searchableAttributes
52
- filterableAttributes
53
- sortableAttributes
54
- displayedAttributes
55
- distinctAttribute
55
+ searchable_attributes
56
+ filterable_attributes
57
+ sortable_attributes
58
+ displayed_attributes
59
+ distinct_attribute
56
60
  synonyms
57
- stopWords
58
- rankingRules
59
- attributesToHighlight
60
- attributesToCrop
61
- cropLength
61
+ stop_words
62
+ ranking_rules
63
+ attributes_to_highlight
64
+ attributes_to_crop
65
+ crop_length
62
66
  pagination
63
67
  faceting
64
- typoTolerance
68
+ typo_tolerance
65
69
  ].freeze
66
70
 
67
- CAMELIZE_OPTIONS = %i[pagination faceting typoTolerance].freeze
71
+ CAMELIZE_OPTIONS = %i[pagination faceting typo_tolerance].freeze
68
72
 
69
73
  OPTIONS.each do |option|
70
74
  define_method option do |value|
@@ -265,9 +269,9 @@ module MeiliSearch
265
269
  ::MeiliSearch::Index.instance_methods(false).each do |m|
266
270
  define_method(m) do |*args, &block|
267
271
  if m == :update_settings
268
- args[0].delete(:attributesToHighlight) if args[0][:attributesToHighlight]
269
- args[0].delete(:attributesToCrop) if args[0][:attributesToCrop]
270
- args[0].delete(:cropLength) if args[0][:cropLength]
272
+ args[0].delete(:attributes_to_highlight) if args[0][:attributes_to_highlight]
273
+ args[0].delete(:attributes_to_crop) if args[0][:attributes_to_crop]
274
+ args[0].delete(:crop_length) if args[0][:crop_length]
271
275
  end
272
276
 
273
277
  SafeIndex.log_or_throw(m, @raise_on_failure) do
@@ -304,7 +308,7 @@ module MeiliSearch
304
308
  raise e if raise_on_failure
305
309
 
306
310
  # log the error
307
- (::Rails.logger || Logger.new($stdout)).info("[meilisearch-rails] #{e.message}")
311
+ MeiliSearch::Rails.logger.info("[meilisearch-rails] #{e.message}")
308
312
  # return something
309
313
  case method.to_s
310
314
  when 'search'
@@ -444,6 +448,8 @@ module MeiliSearch
444
448
  after_destroy { |searchable| searchable.ms_enqueue_remove_from_index!(ms_synchronous?) }
445
449
  end
446
450
  end
451
+
452
+ warn_searchable_missing_attributes
447
453
  end
448
454
 
449
455
  def ms_without_auto_index(&block)
@@ -581,15 +587,15 @@ module MeiliSearch
581
587
  def ms_raw_search(q, params = {})
582
588
  index_uid = params.delete(:index) || params.delete('index')
583
589
 
584
- unless meilisearch_settings.get_setting(:attributesToHighlight).nil?
585
- params[:attributesToHighlight] = meilisearch_settings.get_setting(:attributesToHighlight)
590
+ unless meilisearch_settings.get_setting(:attributes_to_highlight).nil?
591
+ params[:attributes_to_highlight] = meilisearch_settings.get_setting(:attributes_to_highlight)
586
592
  end
587
593
 
588
- unless meilisearch_settings.get_setting(:attributesToCrop).nil?
589
- params[:attributesToCrop] = meilisearch_settings.get_setting(:attributesToCrop)
594
+ unless meilisearch_settings.get_setting(:attributes_to_crop).nil?
595
+ params[:attributes_to_crop] = meilisearch_settings.get_setting(:attributes_to_crop)
590
596
 
591
- unless meilisearch_settings.get_setting(:cropLength).nil?
592
- params[:cropLength] = meilisearch_settings.get_setting(:cropLength)
597
+ unless meilisearch_settings.get_setting(:crop_length).nil?
598
+ params[:crop_length] = meilisearch_settings.get_setting(:crop_length)
593
599
  end
594
600
  end
595
601
 
@@ -858,6 +864,19 @@ module MeiliSearch
858
864
  # We don't know if the attribute has changed, so conservatively assume it has
859
865
  true
860
866
  end
867
+
868
+ def warn_searchable_missing_attributes
869
+ searchables = meilisearch_settings.get_setting(:searchable_attributes)
870
+ attrs = meilisearch_settings.get_setting(:attributes)&.keys
871
+
872
+ if searchables.present? && attrs.present?
873
+ (searchables.map(&:to_s) - attrs.map(&:to_s)).each do |missing_searchable|
874
+ MeiliSearch::Rails.logger.warn(
875
+ "[meilisearch-rails] #{name}##{missing_searchable} declared in searchable_attributes but not in attributes. Please add it to attributes if it should be searchable."
876
+ )
877
+ end
878
+ end
879
+ end
861
880
  end
862
881
 
863
882
  # these are the instance methods included
@@ -34,5 +34,5 @@ Gem::Specification.new do |s|
34
34
 
35
35
  s.required_ruby_version = '>= 2.6.0'
36
36
 
37
- s.add_dependency 'meilisearch', '~> 0.23.0'
37
+ s.add_dependency 'meilisearch', '~> 0.26.0'
38
38
  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.9.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Meili
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-27 00:00:00.000000000 Z
11
+ date: 2023-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: meilisearch
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.23.0
19
+ version: 0.26.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.23.0
26
+ version: 0.26.0
27
27
  description: Meilisearch integration for Ruby on Rails. See https://github.com/meilisearch/meilisearch
28
28
  email: bonjour@meilisearch.com
29
29
  executables: []
@@ -47,6 +47,7 @@ files:
47
47
  - lib/meilisearch/rails/pagination/will_paginate.rb
48
48
  - lib/meilisearch/rails/railtie.rb
49
49
  - lib/meilisearch/rails/tasks/meilisearch.rake
50
+ - lib/meilisearch/rails/templates/initializer.rb
50
51
  - lib/meilisearch/rails/utilities.rb
51
52
  - lib/meilisearch/rails/version.rb
52
53
  - meilisearch-rails.gemspec
@@ -69,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
70
  - !ruby/object:Gem::Version
70
71
  version: '0'
71
72
  requirements: []
72
- rubygems_version: 3.0.3.1
73
+ rubygems_version: 3.1.6
73
74
  signing_key:
74
75
  specification_version: 4
75
76
  summary: Meilisearch integration for Ruby on Rails.