searchkick 5.0.2 → 5.0.3

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: 5ebb326348913a8532f1f4e7771bcdb57dda1abe4cc668e4f5bf8fe44bdbc85b
4
- data.tar.gz: 57b63c4444b9dbe26bb8decc4ab4dca81e4e037e6642d5728b96549aea0b2131
3
+ metadata.gz: ec7741cb306a56f1a5ae5a07450c5c102236bc6103079fc34a5f602fa2853b31
4
+ data.tar.gz: 2bd747ee31846c901ce2a58125b34e9c90af6937a2c7dc041f2dd9f69701f1e9
5
5
  SHA512:
6
- metadata.gz: f901dfae13328bb168e60cc72559ee2fd624f801456fee1628272c83ed402c4d00a83d3cac2ba978e6ce67c76853ca2dc5c1c0048b11ac34d74bb2b18bc3b974
7
- data.tar.gz: '086eb84edef491f27c254cb09ee5bce9ec07bcec46f79b2ca65404041e67bfccd877e30e92e6393ca2117c353ec71e8c632c50615c71e481e89c30c071934dd5'
6
+ metadata.gz: f92f2a3c7bb27862b1768f5ecedc19ad0eab515d62515f94d72412ed7c22a20493049dd0e52cba21b3a43d8c846b0dc0c6cda40c68edc12f6af37e8487fb9403
7
+ data.tar.gz: f69a1cfc401bad0f09bda3f2788b1096cc004dcb765eb20b3d8ada06202185eeae630d953005298e5944ed1b8c239fa808eeebb32e9440cc7ae9a32e771469dc
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 5.0.3 (2022-03-13)
2
+
3
+ - Fixed context for index name for inherited models
4
+
1
5
  ## 5.0.2 (2022-03-03)
2
6
 
3
7
  - Fixed index name for inherited models
data/README.md CHANGED
@@ -50,8 +50,8 @@ Searchkick 5.0 was recently released! See [how to upgrade](#upgrading)
50
50
  Install [Elasticsearch](https://www.elastic.co/downloads/elasticsearch) or [OpenSearch](https://opensearch.org/downloads.html). For Homebrew, use:
51
51
 
52
52
  ```sh
53
- brew install elasticsearch
54
- brew services start elasticsearch
53
+ brew install elastic/tap/elasticsearch-full
54
+ brew services start elasticsearch-full
55
55
  # or
56
56
  brew install opensearch
57
57
  brew services start opensearch
@@ -683,7 +683,7 @@ end
683
683
 
684
684
  Reindex and set up a cron job to add new conversions daily.
685
685
 
686
- ```ruby
686
+ ```sh
687
687
  rake searchkick:reindex CLASS=Product
688
688
  ```
689
689
 
@@ -66,7 +66,7 @@ module Searchkick
66
66
  alias_method Searchkick.search_method_name, :searchkick_search if Searchkick.search_method_name
67
67
 
68
68
  def searchkick_index(name: nil)
69
- index_name = name || searchkick_index_name
69
+ index_name = name || searchkick_klass.searchkick_index_name
70
70
  index_name = index_name.call if index_name.respond_to?(:call)
71
71
  index_cache = class_variable_get(:@@searchkick_index_cache)
72
72
  index_cache.fetch(index_name) { Searchkick::Index.new(index_name, searchkick_options) }
@@ -88,9 +88,9 @@ module Searchkick
88
88
  if options[:index_name]
89
89
  options[:index_name]
90
90
  elsif options[:index_prefix].respond_to?(:call)
91
- -> { [options[:index_prefix].call, searchkick_klass.model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_") }
91
+ -> { [options[:index_prefix].call, model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_") }
92
92
  else
93
- [options.key?(:index_prefix) ? options[:index_prefix] : Searchkick.index_prefix, searchkick_klass.model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_")
93
+ [options.key?(:index_prefix) ? options[:index_prefix] : Searchkick.index_prefix, model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_")
94
94
  end
95
95
  end
96
96
  end
@@ -30,16 +30,19 @@ module Searchkick
30
30
  self
31
31
  end
32
32
 
33
+ # experimental
33
34
  def limit(value)
34
35
  clone.limit!(value)
35
36
  end
36
37
 
38
+ # experimental
37
39
  def limit!(value)
38
40
  check_loaded
39
41
  @options[:limit] = value
40
42
  self
41
43
  end
42
44
 
45
+ # experimental
43
46
  def offset(value = NO_DEFAULT_VALUE)
44
47
  # TODO remove in Searchkick 6
45
48
  if value == NO_DEFAULT_VALUE
@@ -49,22 +52,26 @@ module Searchkick
49
52
  end
50
53
  end
51
54
 
55
+ # experimental
52
56
  def offset!(value)
53
57
  check_loaded
54
58
  @options[:offset] = value
55
59
  self
56
60
  end
57
61
 
62
+ # experimental
58
63
  def page(value)
59
64
  clone.page!(value)
60
65
  end
61
66
 
67
+ # experimental
62
68
  def page!(value)
63
69
  check_loaded
64
70
  @options[:page] = value
65
71
  self
66
72
  end
67
73
 
74
+ # experimental
68
75
  def per_page(value = NO_DEFAULT_VALUE)
69
76
  # TODO remove in Searchkick 6
70
77
  if value == NO_DEFAULT_VALUE
@@ -74,16 +81,116 @@ module Searchkick
74
81
  end
75
82
  end
76
83
 
84
+ # experimental
77
85
  def per_page!(value)
78
86
  check_loaded
79
87
  @options[:per_page] = value
80
88
  self
81
89
  end
82
90
 
91
+ # experimental
92
+ def where(value = NO_DEFAULT_VALUE)
93
+ if value == NO_DEFAULT_VALUE
94
+ Where.new(self)
95
+ else
96
+ clone.where!(value)
97
+ end
98
+ end
99
+
100
+ # experimental
101
+ def where!(value)
102
+ check_loaded
103
+ if @options[:where]
104
+ @options[:where] = {_and: [@options[:where], ensure_permitted(value)]}
105
+ else
106
+ @options[:where] = ensure_permitted(value)
107
+ end
108
+ self
109
+ end
110
+
111
+ # experimental
112
+ def rewhere(value)
113
+ clone.rewhere!(value)
114
+ end
115
+
116
+ # experimental
117
+ def rewhere!(value)
118
+ check_loaded
119
+ @options[:where] = ensure_permitted(value)
120
+ self
121
+ end
122
+
123
+ # experimental
124
+ def order(*values)
125
+ clone.order!(*values)
126
+ end
127
+
128
+ # experimental
129
+ def order!(*values)
130
+ values = values.first if values.size == 1 && values.first.is_a?(Array)
131
+ check_loaded
132
+ (@options[:order] ||= []).concat(values)
133
+ self
134
+ end
135
+
136
+ # experimental
137
+ def reorder(*values)
138
+ clone.reorder!(*values)
139
+ end
140
+
141
+ # experimental
142
+ def reorder!(*values)
143
+ check_loaded
144
+ @options[:order] = values
145
+ self
146
+ end
147
+
148
+ # experimental
149
+ def select(*values, &block)
150
+ if block_given?
151
+ private_execute.select(*values, &block)
152
+ else
153
+ clone.select!(*values)
154
+ end
155
+ end
156
+
157
+ # experimental
158
+ def select!(*values)
159
+ check_loaded
160
+ (@options[:select] ||= []).concat(values)
161
+ self
162
+ end
163
+
164
+ # experimental
165
+ def reselect(*values)
166
+ clone.reselect!(*values)
167
+ end
168
+
169
+ # experimental
170
+ def reselect!(*values)
171
+ check_loaded
172
+ @options[:select] = values
173
+ self
174
+ end
175
+
176
+ # experimental
177
+ def includes(*values)
178
+ clone.includes!(*values)
179
+ end
180
+
181
+ # experimental
182
+ def includes!(*values)
183
+ check_loaded
184
+ (@options[:includes] ||= []).concat(values)
185
+ self
186
+ end
187
+
188
+ # experimental
83
189
  def only(*keys)
84
190
  Relation.new(@model, @term, **@options.slice(*keys))
85
191
  end
86
192
 
193
+ # experimental
87
194
  def except(*keys)
88
195
  Relation.new(@model, @term, **@options.except(*keys))
89
196
  end
@@ -108,5 +215,11 @@ module Searchkick
108
215
  # reset query since options will change
109
216
  @query = nil
110
217
  end
218
+
219
+ # provides *very* basic protection from unfiltered parameters
220
+ # this is not meant to be comprehensive and may be expanded in the future
221
+ def ensure_permitted(obj)
222
+ obj.to_h
223
+ end
111
224
  end
112
225
  end
@@ -1,3 +1,3 @@
1
1
  module Searchkick
2
- VERSION = "5.0.2"
2
+ VERSION = "5.0.3"
3
3
  end
@@ -0,0 +1,11 @@
1
+ module Searchkick
2
+ class Where
3
+ def initialize(relation)
4
+ @relation = relation
5
+ end
6
+
7
+ def not(value)
8
+ @relation.where(_not: value)
9
+ end
10
+ end
11
+ end
data/lib/searchkick.rb CHANGED
@@ -27,6 +27,7 @@ require "searchkick/relation"
27
27
  require "searchkick/relation_indexer"
28
28
  require "searchkick/results"
29
29
  require "searchkick/version"
30
+ require "searchkick/where"
30
31
 
31
32
  # integrations
32
33
  require "searchkick/railtie" if defined?(Rails)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchkick
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.2
4
+ version: 5.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-03 00:00:00.000000000 Z
11
+ date: 2022-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -71,6 +71,7 @@ files:
71
71
  - lib/searchkick/relation_indexer.rb
72
72
  - lib/searchkick/results.rb
73
73
  - lib/searchkick/version.rb
74
+ - lib/searchkick/where.rb
74
75
  - lib/tasks/searchkick.rake
75
76
  homepage: https://github.com/ankane/searchkick
76
77
  licenses:
@@ -91,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
92
  - !ruby/object:Gem::Version
92
93
  version: '0'
93
94
  requirements: []
94
- rubygems_version: 3.3.3
95
+ rubygems_version: 3.3.7
95
96
  signing_key:
96
97
  specification_version: 4
97
98
  summary: Intelligent search made easy with Rails and Elasticsearch or OpenSearch