redi_search 6.3.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +3 -3
  3. data/.github/workflows/tests.yml +6 -6
  4. data/.rubocop.yml +1 -1
  5. data/.ruby-version +1 -1
  6. data/Appraisals +5 -5
  7. data/Gemfile +4 -1
  8. data/gemfiles/{activerecord_60.gemfile → activerecord_71.gemfile} +1 -1
  9. data/lib/redi_search/aggregate/clauses/apply.rb +24 -0
  10. data/lib/redi_search/aggregate/clauses/filter.rb +22 -0
  11. data/lib/redi_search/aggregate/clauses/group_by.rb +79 -0
  12. data/lib/redi_search/aggregate/clauses/limit.rb +28 -0
  13. data/lib/redi_search/aggregate/clauses/load.rb +22 -0
  14. data/lib/redi_search/aggregate/clauses/sort_by.rb +43 -0
  15. data/lib/redi_search/aggregate/clauses/verbatim.rb +17 -0
  16. data/lib/redi_search/aggregate/reducers/average.rb +26 -0
  17. data/lib/redi_search/aggregate/reducers/count.rb +23 -0
  18. data/lib/redi_search/aggregate/reducers/distinct_count.rb +26 -0
  19. data/lib/redi_search/aggregate/reducers/distinctish_count.rb +26 -0
  20. data/lib/redi_search/aggregate/reducers/max.rb +26 -0
  21. data/lib/redi_search/aggregate/reducers/min.rb +26 -0
  22. data/lib/redi_search/aggregate/reducers/quantile.rb +30 -0
  23. data/lib/redi_search/aggregate/reducers/stdev.rb +26 -0
  24. data/lib/redi_search/aggregate/reducers/sum.rb +26 -0
  25. data/lib/redi_search/aggregate/reducers/to_list.rb +26 -0
  26. data/lib/redi_search/aggregate.rb +104 -0
  27. data/lib/redi_search/application_clause.rb +37 -0
  28. data/lib/redi_search/client.rb +5 -4
  29. data/lib/redi_search/index.rb +6 -0
  30. data/lib/redi_search/log_subscriber.rb +8 -3
  31. data/lib/redi_search/model.rb +5 -1
  32. data/lib/redi_search/schema/tag_field.rb +8 -0
  33. data/lib/redi_search/schema.rb +10 -10
  34. data/lib/redi_search/search/clauses/highlight.rb +3 -1
  35. data/lib/redi_search/search/clauses/in_order.rb +2 -0
  36. data/lib/redi_search/search/clauses/language.rb +1 -0
  37. data/lib/redi_search/search/clauses/limit.rb +1 -0
  38. data/lib/redi_search/search/clauses/no_content.rb +2 -0
  39. data/lib/redi_search/search/clauses/no_stop_words.rb +2 -0
  40. data/lib/redi_search/search/clauses/return.rb +1 -0
  41. data/lib/redi_search/search/clauses/slop.rb +1 -0
  42. data/lib/redi_search/search/clauses/sort_by.rb +1 -0
  43. data/lib/redi_search/search/clauses/timeout.rb +24 -0
  44. data/lib/redi_search/search/clauses/verbatim.rb +2 -0
  45. data/lib/redi_search/search/clauses/with_payloads.rb +17 -0
  46. data/lib/redi_search/search/clauses/with_scores.rb +2 -0
  47. data/lib/redi_search/search/clauses/with_sort_keys.rb +17 -0
  48. data/lib/redi_search/search/clauses.rb +36 -55
  49. data/lib/redi_search/search/{clauses → queries}/and.rb +1 -1
  50. data/lib/redi_search/search/{clauses → queries}/boolean.rb +4 -4
  51. data/lib/redi_search/search/{clauses → queries}/or.rb +1 -1
  52. data/lib/redi_search/search/{clauses → queries}/where.rb +2 -2
  53. data/lib/redi_search/search/queries.rb +39 -0
  54. data/lib/redi_search/search.rb +7 -6
  55. data/lib/redi_search/version.rb +1 -1
  56. data/redi_search.gemspec +2 -6
  57. metadata +34 -60
  58. data/lib/redi_search/search/clauses/application_clause.rb +0 -31
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RediSearch
4
+ class Search
5
+ module Queries
6
+ def where(**condition)
7
+ @query = Search::Queries::Where.new(self, condition, @query)
8
+
9
+ self
10
+ end
11
+
12
+ def not(**condition)
13
+ raise NoMethodError unless @query.is_a?(Search::Queries::Where)
14
+
15
+ @query.not(condition)
16
+ end
17
+
18
+ def and(new_term = nil, **term_options)
19
+ @query = Queries::And.new(self, new_term, @query, **term_options)
20
+
21
+ if new_term.nil?
22
+ @query
23
+ else
24
+ self
25
+ end
26
+ end
27
+
28
+ def or(new_term = nil, **term_options)
29
+ @query = Queries::Or.new(self, new_term, @query, **term_options)
30
+
31
+ if new_term.nil?
32
+ @query
33
+ else
34
+ self
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -5,8 +5,9 @@ module RediSearch
5
5
  extend Forwardable
6
6
  include LazilyLoad
7
7
  include Clauses
8
+ include Queries
8
9
 
9
- attr_reader :term_clause, :used_clauses, :index, :clauses
10
+ attr_reader :query, :used_clauses, :index, :clauses
10
11
 
11
12
  def_delegator :index, :model
12
13
 
@@ -15,8 +16,7 @@ module RediSearch
15
16
  @clauses = []
16
17
  @used_clauses = Set.new
17
18
 
18
- @term_clause = term &&
19
- And.new(self, term, nil, **term_options)
19
+ @query = term && And.new(self, term, nil, **term_options)
20
20
  end
21
21
 
22
22
  def results
@@ -31,7 +31,7 @@ module RediSearch
31
31
 
32
32
  def explain
33
33
  RediSearch.client.call!(
34
- "EXPLAINCLI", index.name, term_clause.to_s
34
+ "EXPLAINCLI", index.name, query.to_s
35
35
  ).join(" ").strip
36
36
  end
37
37
 
@@ -44,7 +44,8 @@ module RediSearch
44
44
  attr_writer :index, :clauses
45
45
 
46
46
  def command
47
- ["SEARCH", index.name, term_clause.to_s, *clauses]
47
+ ["SEARCH", index.name, query.to_s,
48
+ *clauses.sort_by(&:clause_order).flat_map(&:clause)]
48
49
  end
49
50
 
50
51
  def parse_response(response)
@@ -52,7 +53,7 @@ module RediSearch
52
53
  end
53
54
 
54
55
  def valid?
55
- !term_clause.to_s.empty?
56
+ !query.to_s.empty?
56
57
  end
57
58
  end
58
59
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RediSearch
4
- VERSION = "6.3.0"
4
+ VERSION = "7.0.0"
5
5
  end
data/redi_search.gemspec CHANGED
@@ -26,13 +26,9 @@ Gem::Specification.new do |spec|
26
26
  "changelog_uri" => "https://github.com/npezza93/redi_search/releases",
27
27
  }
28
28
 
29
- spec.required_ruby_version = ">= 2.7.0"
29
+ spec.required_ruby_version = ">= 3.0"
30
30
 
31
- spec.add_runtime_dependency "activesupport", ">= 5.1", "< 7.1"
31
+ spec.add_runtime_dependency "activesupport", ">= 5.1", "< 8.0"
32
32
  spec.add_runtime_dependency "redis", ">= 4.0", "< 6.0"
33
33
  spec.add_runtime_dependency "zeitwerk"
34
-
35
- spec.add_development_dependency "bundler", ">= 1.17", "< 3"
36
- spec.add_development_dependency "minitest", "~> 5.0"
37
- spec.add_development_dependency "rake", "~> 13.0"
38
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redi_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Pezza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-21 00:00:00.000000000 Z
11
+ date: 2023-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '5.1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '7.1'
22
+ version: '8.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '5.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '7.1'
32
+ version: '8.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: redis
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -64,54 +64,6 @@ dependencies:
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
- - !ruby/object:Gem::Dependency
68
- name: bundler
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: '1.17'
74
- - - "<"
75
- - !ruby/object:Gem::Version
76
- version: '3'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '1.17'
84
- - - "<"
85
- - !ruby/object:Gem::Version
86
- version: '3'
87
- - !ruby/object:Gem::Dependency
88
- name: minitest
89
- requirement: !ruby/object:Gem::Requirement
90
- requirements:
91
- - - "~>"
92
- - !ruby/object:Gem::Version
93
- version: '5.0'
94
- type: :development
95
- prerelease: false
96
- version_requirements: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - "~>"
99
- - !ruby/object:Gem::Version
100
- version: '5.0'
101
- - !ruby/object:Gem::Dependency
102
- name: rake
103
- requirement: !ruby/object:Gem::Requirement
104
- requirements:
105
- - - "~>"
106
- - !ruby/object:Gem::Version
107
- version: '13.0'
108
- type: :development
109
- prerelease: false
110
- version_requirements: !ruby/object:Gem::Requirement
111
- requirements:
112
- - - "~>"
113
- - !ruby/object:Gem::Version
114
- version: '13.0'
115
67
  description:
116
68
  email: pezza@hey.com
117
69
  executables: []
@@ -136,11 +88,30 @@ files:
136
88
  - bin/publish
137
89
  - bin/setup
138
90
  - gemfiles/.bundle/config
139
- - gemfiles/activerecord_60.gemfile
140
91
  - gemfiles/activerecord_61.gemfile
141
92
  - gemfiles/activerecord_70.gemfile
93
+ - gemfiles/activerecord_71.gemfile
142
94
  - lib/redi_search.rb
143
95
  - lib/redi_search/add_field.rb
96
+ - lib/redi_search/aggregate.rb
97
+ - lib/redi_search/aggregate/clauses/apply.rb
98
+ - lib/redi_search/aggregate/clauses/filter.rb
99
+ - lib/redi_search/aggregate/clauses/group_by.rb
100
+ - lib/redi_search/aggregate/clauses/limit.rb
101
+ - lib/redi_search/aggregate/clauses/load.rb
102
+ - lib/redi_search/aggregate/clauses/sort_by.rb
103
+ - lib/redi_search/aggregate/clauses/verbatim.rb
104
+ - lib/redi_search/aggregate/reducers/average.rb
105
+ - lib/redi_search/aggregate/reducers/count.rb
106
+ - lib/redi_search/aggregate/reducers/distinct_count.rb
107
+ - lib/redi_search/aggregate/reducers/distinctish_count.rb
108
+ - lib/redi_search/aggregate/reducers/max.rb
109
+ - lib/redi_search/aggregate/reducers/min.rb
110
+ - lib/redi_search/aggregate/reducers/quantile.rb
111
+ - lib/redi_search/aggregate/reducers/stdev.rb
112
+ - lib/redi_search/aggregate/reducers/sum.rb
113
+ - lib/redi_search/aggregate/reducers/to_list.rb
114
+ - lib/redi_search/application_clause.rb
144
115
  - lib/redi_search/client.rb
145
116
  - lib/redi_search/client/response.rb
146
117
  - lib/redi_search/configuration.rb
@@ -161,22 +132,25 @@ files:
161
132
  - lib/redi_search/schema/text_field.rb
162
133
  - lib/redi_search/search.rb
163
134
  - lib/redi_search/search/clauses.rb
164
- - lib/redi_search/search/clauses/and.rb
165
- - lib/redi_search/search/clauses/application_clause.rb
166
- - lib/redi_search/search/clauses/boolean.rb
167
135
  - lib/redi_search/search/clauses/highlight.rb
168
136
  - lib/redi_search/search/clauses/in_order.rb
169
137
  - lib/redi_search/search/clauses/language.rb
170
138
  - lib/redi_search/search/clauses/limit.rb
171
139
  - lib/redi_search/search/clauses/no_content.rb
172
140
  - lib/redi_search/search/clauses/no_stop_words.rb
173
- - lib/redi_search/search/clauses/or.rb
174
141
  - lib/redi_search/search/clauses/return.rb
175
142
  - lib/redi_search/search/clauses/slop.rb
176
143
  - lib/redi_search/search/clauses/sort_by.rb
144
+ - lib/redi_search/search/clauses/timeout.rb
177
145
  - lib/redi_search/search/clauses/verbatim.rb
178
- - lib/redi_search/search/clauses/where.rb
146
+ - lib/redi_search/search/clauses/with_payloads.rb
179
147
  - lib/redi_search/search/clauses/with_scores.rb
148
+ - lib/redi_search/search/clauses/with_sort_keys.rb
149
+ - lib/redi_search/search/queries.rb
150
+ - lib/redi_search/search/queries/and.rb
151
+ - lib/redi_search/search/queries/boolean.rb
152
+ - lib/redi_search/search/queries/or.rb
153
+ - lib/redi_search/search/queries/where.rb
180
154
  - lib/redi_search/search/result.rb
181
155
  - lib/redi_search/search/term.rb
182
156
  - lib/redi_search/spellcheck.rb
@@ -204,14 +178,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
204
178
  requirements:
205
179
  - - ">="
206
180
  - !ruby/object:Gem::Version
207
- version: 2.7.0
181
+ version: '3.0'
208
182
  required_rubygems_version: !ruby/object:Gem::Requirement
209
183
  requirements:
210
184
  - - ">="
211
185
  - !ruby/object:Gem::Version
212
186
  version: '0'
213
187
  requirements: []
214
- rubygems_version: 3.4.0.dev
188
+ rubygems_version: 3.4.20
215
189
  signing_key:
216
190
  specification_version: 4
217
191
  summary: RediSearch ruby wrapper that can integrate with Rails
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RediSearch
4
- class Search
5
- module Clauses
6
- class ApplicationClause
7
- include Validatable
8
-
9
- class << self
10
- def clause_term(term, **validations)
11
- attr_reader term
12
-
13
- validations.each do |validation_type, options|
14
- define_validation(term, validation_type, options)
15
- end
16
- end
17
-
18
- private
19
-
20
- def define_validation(term, type, options)
21
- if options.is_a? Hash
22
- public_send("validates_#{type}_of", term, **options)
23
- else
24
- public_send("validates_#{type}_of", term)
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end