meilisearch-rails 0.14.2 → 0.15.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 +4 -4
- data/README.md +258 -50
- data/lib/meilisearch/rails/configuration.rb +3 -3
- data/lib/meilisearch/rails/errors.rb +2 -2
- data/lib/meilisearch/rails/ms_clean_up_job.rb +2 -2
- data/lib/meilisearch/rails/ms_job.rb +1 -1
- data/lib/meilisearch/rails/multi_search/federated_search_result.rb +78 -0
- data/lib/meilisearch/rails/multi_search/multi_search_result.rb +115 -0
- data/lib/meilisearch/rails/multi_search.rb +63 -8
- data/lib/meilisearch/rails/null_object.rb +1 -1
- data/lib/meilisearch/rails/pagination/kaminari.rb +10 -7
- data/lib/meilisearch/rails/pagination/will_paginate.rb +9 -3
- data/lib/meilisearch/rails/pagination.rb +4 -4
- data/lib/meilisearch/rails/railtie.rb +1 -1
- data/lib/meilisearch/rails/tasks/meilisearch.rake +3 -3
- data/lib/meilisearch/rails/templates/initializer.rb +1 -1
- data/lib/meilisearch/rails/utilities.rb +2 -2
- data/lib/meilisearch/rails/version.rb +2 -2
- data/lib/meilisearch-rails.rb +28 -22
- data/meilisearch-rails.gemspec +2 -2
- metadata +6 -5
- data/lib/meilisearch/rails/multi_search/result.rb +0 -84
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.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Meili
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-03-25 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.
|
19
|
+
version: 0.31.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.
|
26
|
+
version: 0.31.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mutex_m
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -57,7 +57,8 @@ files:
|
|
57
57
|
- lib/meilisearch/rails/ms_clean_up_job.rb
|
58
58
|
- lib/meilisearch/rails/ms_job.rb
|
59
59
|
- lib/meilisearch/rails/multi_search.rb
|
60
|
-
- lib/meilisearch/rails/multi_search/
|
60
|
+
- lib/meilisearch/rails/multi_search/federated_search_result.rb
|
61
|
+
- lib/meilisearch/rails/multi_search/multi_search_result.rb
|
61
62
|
- lib/meilisearch/rails/null_object.rb
|
62
63
|
- lib/meilisearch/rails/pagination.rb
|
63
64
|
- lib/meilisearch/rails/pagination/kaminari.rb
|
@@ -1,84 +0,0 @@
|
|
1
|
-
module MeiliSearch
|
2
|
-
module Rails
|
3
|
-
class MultiSearchResult
|
4
|
-
attr_reader :metadata
|
5
|
-
|
6
|
-
def initialize(searches, raw_results)
|
7
|
-
@results = {}
|
8
|
-
@metadata = {}
|
9
|
-
|
10
|
-
searches.zip(raw_results['results']).each do |(index_target, search_options), result|
|
11
|
-
index_target = search_options[:class_name].constantize if search_options[:class_name]
|
12
|
-
|
13
|
-
@results[index_target] = case index_target
|
14
|
-
when String, Symbol
|
15
|
-
result['hits']
|
16
|
-
else
|
17
|
-
load_results(index_target, result)
|
18
|
-
end
|
19
|
-
|
20
|
-
@metadata[index_target] = result.except('hits')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
include Enumerable
|
25
|
-
|
26
|
-
def each_hit(&block)
|
27
|
-
@results.each do |_index_target, results|
|
28
|
-
results.each(&block)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
alias each each_hit
|
32
|
-
|
33
|
-
def each_result(&block)
|
34
|
-
@results.each(&block)
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_a
|
38
|
-
@results.values.flatten(1)
|
39
|
-
end
|
40
|
-
alias to_ary to_a
|
41
|
-
|
42
|
-
def to_h
|
43
|
-
@results
|
44
|
-
end
|
45
|
-
alias to_hash to_h
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def load_results(klass, result)
|
50
|
-
pk_method = klass.ms_primary_key_method
|
51
|
-
pk_method = pk_method.in if Utilities.mongo_model?(klass)
|
52
|
-
|
53
|
-
condition_key = pk_is_virtual?(klass, pk_method) ? klass.primary_key : pk_method
|
54
|
-
|
55
|
-
hits_by_id =
|
56
|
-
result['hits'].index_by { |hit| hit[condition_key.to_s] }
|
57
|
-
|
58
|
-
records = klass.where(condition_key => hits_by_id.keys)
|
59
|
-
|
60
|
-
if records.respond_to? :in_order_of
|
61
|
-
records.in_order_of(condition_key, hits_by_id.keys).each do |record|
|
62
|
-
record.formatted = hits_by_id[record.send(condition_key).to_s]['_formatted']
|
63
|
-
end
|
64
|
-
else
|
65
|
-
results_by_id = records.index_by do |hit|
|
66
|
-
hit.send(condition_key).to_s
|
67
|
-
end
|
68
|
-
|
69
|
-
result['hits'].filter_map do |hit|
|
70
|
-
record = results_by_id[hit[condition_key.to_s].to_s]
|
71
|
-
record&.formatted = hit['_formatted']
|
72
|
-
record
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def pk_is_virtual?(model_class, pk_method)
|
78
|
-
model_class.columns
|
79
|
-
.map(&(Utilities.sequel_model?(model_class) ? :to_s : :name))
|
80
|
-
.exclude?(pk_method.to_s)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|