mongodb_meilisearch 1.1.1 → 1.2.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: c7873b1a21e75522aa4fdaa063231997319faae90ddb9a4774cd814bf18a4afc
4
- data.tar.gz: b4f241003a1ff709c1247f6411cec39831459795d8e17c429a9b7b187ff790cd
3
+ metadata.gz: 8dcda2174ac28dc1b3e134d90d2fc92b2d43e6815cab31dfc8a2c8954939d658
4
+ data.tar.gz: 45b658a38a761d8c02bc1ee4d21f82d7762a60e749ba14b8ec53e987284bdc4f
5
5
  SHA512:
6
- metadata.gz: 8ad38b1b7f7c14baaee4c12491affeb62c9b9a700ec41d3bddcdf3c095288c084c9bf8f6c9feb28300b441e5fd94380179c9f334c7d2df078d48410221fbc05f
7
- data.tar.gz: 5792131d06698d2af16194078e1d5a8bfbf37b9084502f25183d5f3c347d712d2eeac7e604edf0298800a03795e573336adbdc9a5b1d47929691f9288e974027
6
+ metadata.gz: 425ebd155ffec9c67e96cbb8b028be16a27948566d8cd5e64bfb4226a9a3d89551a449cad2bc9c8ecb6dd2261cab702fdf426c603c82a5402d7660de90596149
7
+ data.tar.gz: 322b9b928ea51c65df41906e872c9497af27b8cda2b2e04e0f1d360348c6ed9d4e7ebfad731d6e97956fa4d3cf0eb3b7b686db8352fcd2285be984690138eade
data/CHANGELOG.md CHANGED
@@ -1,3 +1,52 @@
1
+ ## [1.2.0] - 2024-06-19
2
+
3
+ ### Features
4
+ - The value of `SEARCHABLE_ATTRIBUTES` can now optionally
5
+ include method names, not just field names.
6
+
7
+ This makes for easier incorporation of dynamically generated index values,
8
+ because it eliminates many cases where you would have had to define
9
+ a `search_indexable_hash` method. If you already have one, it'll
10
+ continue to work.
11
+
12
+ ## [1.1.1] 2023-11-13
13
+ bug fix
14
+
15
+ ### Fixes
16
+
17
+ Issue #7 - adding the first document from a new model didn't
18
+ configure the filterable attributes or searchable attributes.
19
+ The lack of the former would cause basic searches to fail
20
+ because of our expectation that "object_class" will always
21
+ be a filterable field unless you've specifically designated
22
+ your model as unfilterable.
23
+
24
+
25
+ ## [1.1.0] - 2023-09-16
26
+ Sorting & Filtering
27
+
28
+ ## Additions
29
+ - adds the ability to specify sortable attributes
30
+ - these default to match the filterable attributes
31
+ - filterable attributes still default to match
32
+ searchable attributes
33
+ - `set_filterable_attributes`
34
+ - `set_sortable_attributes`
35
+ - `set_sortable_attributes!`
36
+ - `reindex` and `reindex!` now set searchable attributes
37
+
38
+ ## Fixes
39
+ - `set_filterable_attributes!` is now synchronous as the name implies
40
+ - `reindex_core` correctly honors the user's async request when
41
+ setting filterable attributes (previously it was always async)
42
+
43
+ ## [1.0.1] - 2023-09-2
44
+
45
+ ids from `belongs_to` relations are no longer
46
+ indexed by default. You can explicitly specify
47
+ their inclusion if you want.
48
+
49
+
1
50
  ## [1.0.0] - 2023-07-22
2
51
 
3
52
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongodb_meilisearch (1.1.1)
4
+ mongodb_meilisearch (1.2.1)
5
5
  meilisearch
6
6
  mongoid (~> 7.0)
7
7
  rails
data/README.md CHANGED
@@ -169,16 +169,19 @@ unless you intend to allow users to sort by when a record was created,
169
169
  there's no point in recording it's `created_at` in the search index.
170
170
  It'll just waste bandwidth, memory, and disk space.
171
171
 
172
- Define a `SEARCHABLE_ATTRIBUTES` constant with an array of strings to limit things.
173
- By default these will _also_ be the fields you can filter on. Note that
174
- Meilisearch requires there to be an `id` field and it must be a string.
172
+ Define a `SEARCHABLE_ATTRIBUTES` constant with an array of strings to limit things.
173
+ These are the field names, and/or names of methods you wish to have indexed.
174
+
175
+ By default these will _also_ be the fields you can filter on.
176
+
177
+ Note that Meilisearch requires there to be an `id` field and it must be a string.
175
178
  If you don't define one it will use string version of the `_id` your
176
179
  document's `BSON::ObjectId`.
177
180
 
178
181
  ```ruby
179
182
  # explicitly define the fields you want to be searchable
180
183
  # this should be an array of symbols
181
- SEARCHABLE_ATTRIBUTES = %i[title body]
184
+ SEARCHABLE_ATTRIBUTES = %w[title body]
182
185
  # OR explicitly define the fields you DON'T want searchable
183
186
  SEARCHABLE_ATTRIBUTES = searchable_attributes - [:created_at]
184
187
  ```
@@ -194,9 +197,16 @@ exclude any fields that are `Mongoid::Fields::ForeignKey` objects.
194
197
 
195
198
  #### Getting Extra Specific
196
199
  If your searchable data needs to by dynamically generated instead of
197
- just taken directly from the `Mongoid::Document`'s attributes you can
198
- define a `search_indexable_hash` method on your class. This method
199
- must return a hash, and that hash must include the following keys:
200
+ just taken directly from the `Mongoid::Document`'s attributes or
201
+ existing methods you can define a `search_indexable_hash` method on your class.
202
+
203
+ Before you do, please note that as of v1.1 your `SEARCHABLE_ATTRIBUTES`
204
+ constant can contain fields and method names in its array of values. Making
205
+ a method for each thing dynamically generated thing you want in the search
206
+ and then including it in SEARCHABLE_ATTRIBUTES is going to be
207
+ the easiest way of accomplishing this.
208
+
209
+ Your `search_indexable_hash` must return a hash, and that hash must include the following keys:
200
210
  - `"id"` - a string that uniquely identifies the record
201
211
  - `"object_class"` the name of the class that this record corresponds to.
202
212
 
@@ -5,5 +5,5 @@ module MongodbMeilisearch
5
5
  # @note This library will adhere to strict semantic versioning.
6
6
  # See https://semver.org/
7
7
  #
8
- VERSION = "1.1.1"
8
+ VERSION = "1.2.1"
9
9
  end
@@ -44,6 +44,10 @@ module Search
44
44
  search_index.delete_document!(send(primary_search_key).to_s)
45
45
  end
46
46
 
47
+ def searchable_attributes
48
+ self.class.searchable_attributes
49
+ end
50
+
47
51
  # returns a hash of all the attributes
48
52
  # if searchable_attributes method is defined
49
53
  # it is assumed to return a list of symbols
@@ -57,9 +61,10 @@ module Search
57
61
  # in returned results
58
62
  def search_indexable_hash
59
63
  klass = self.class
60
- hash = attributes
61
- .to_h
62
- .slice(* klass.searchable_attributes.map { |a| a.to_s })
64
+ # the to_s & to_sym is just safety in case someone
65
+ # defined searchable_attributes as an array of strings
66
+ hash = {}
67
+ searchable_attributes.each { |a| hash[a.to_s] = send(a.to_sym) }
63
68
 
64
69
  # Meilisearch doesn't like a primary key of _id
65
70
  # but Mongoid ids are _id
@@ -69,7 +74,7 @@ module Search
69
74
  id = hash.delete("_id").to_s
70
75
  new_id = (!klass.has_class_prefixed_search_ids?) ? id : "#{self.class.name}_#{id}"
71
76
  hash["id"] = new_id
72
- elsif hash.has_key?("id") && !hash[id].is_a?(String)
77
+ elsif hash.has_key?("id") && !hash["id"].is_a?(String)
73
78
  # this is mostly in case it's a BSON::ObjectId
74
79
  hash["id"] = hash["id"].to_s
75
80
  elsif !hash.has_key?("id")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb_meilisearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - masukomi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-13 00:00:00.000000000 Z
11
+ date: 2024-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails