searchkick_bharthur 0.0.1

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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.travis.yml +44 -0
  4. data/CHANGELOG.md +360 -0
  5. data/Gemfile +8 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +1443 -0
  8. data/Rakefile +8 -0
  9. data/lib/searchkick/index.rb +662 -0
  10. data/lib/searchkick/logging.rb +185 -0
  11. data/lib/searchkick/middleware.rb +12 -0
  12. data/lib/searchkick/model.rb +105 -0
  13. data/lib/searchkick/query.rb +845 -0
  14. data/lib/searchkick/reindex_job.rb +26 -0
  15. data/lib/searchkick/reindex_v2_job.rb +23 -0
  16. data/lib/searchkick/results.rb +211 -0
  17. data/lib/searchkick/tasks.rb +33 -0
  18. data/lib/searchkick/version.rb +3 -0
  19. data/lib/searchkick.rb +159 -0
  20. data/searchkick.gemspec +28 -0
  21. data/test/aggs_test.rb +115 -0
  22. data/test/autocomplete_test.rb +65 -0
  23. data/test/boost_test.rb +144 -0
  24. data/test/callbacks_test.rb +27 -0
  25. data/test/ci/before_install.sh +21 -0
  26. data/test/dangerous_reindex_test.rb +27 -0
  27. data/test/facets_test.rb +90 -0
  28. data/test/gemfiles/activerecord31.gemfile +7 -0
  29. data/test/gemfiles/activerecord32.gemfile +7 -0
  30. data/test/gemfiles/activerecord40.gemfile +8 -0
  31. data/test/gemfiles/activerecord41.gemfile +8 -0
  32. data/test/gemfiles/activerecord50.gemfile +7 -0
  33. data/test/gemfiles/apartment.gemfile +8 -0
  34. data/test/gemfiles/mongoid2.gemfile +7 -0
  35. data/test/gemfiles/mongoid3.gemfile +6 -0
  36. data/test/gemfiles/mongoid4.gemfile +7 -0
  37. data/test/gemfiles/mongoid5.gemfile +7 -0
  38. data/test/gemfiles/nobrainer.gemfile +6 -0
  39. data/test/highlight_test.rb +63 -0
  40. data/test/index_test.rb +120 -0
  41. data/test/inheritance_test.rb +78 -0
  42. data/test/match_test.rb +227 -0
  43. data/test/misspellings_test.rb +46 -0
  44. data/test/model_test.rb +42 -0
  45. data/test/multi_search_test.rb +22 -0
  46. data/test/multi_tenancy_test.rb +22 -0
  47. data/test/order_test.rb +44 -0
  48. data/test/pagination_test.rb +53 -0
  49. data/test/query_test.rb +13 -0
  50. data/test/records_test.rb +8 -0
  51. data/test/reindex_job_test.rb +31 -0
  52. data/test/reindex_v2_job_test.rb +32 -0
  53. data/test/routing_test.rb +13 -0
  54. data/test/should_index_test.rb +32 -0
  55. data/test/similar_test.rb +28 -0
  56. data/test/sql_test.rb +196 -0
  57. data/test/suggest_test.rb +80 -0
  58. data/test/synonyms_test.rb +54 -0
  59. data/test/test_helper.rb +361 -0
  60. data/test/where_test.rb +171 -0
  61. metadata +231 -0
@@ -0,0 +1,171 @@
1
+ require_relative "test_helper"
2
+
3
+ class WhereTest < Minitest::Test
4
+ def test_where
5
+ now = Time.now
6
+ store [
7
+ {name: "Product A", store_id: 1, in_stock: true, backordered: true, created_at: now, orders_count: 4, user_ids: [1, 2, 3]},
8
+ {name: "Product B", store_id: 2, in_stock: true, backordered: false, created_at: now - 1, orders_count: 3, user_ids: [1]},
9
+ {name: "Product C", store_id: 3, in_stock: false, backordered: true, created_at: now - 2, orders_count: 2, user_ids: [1, 3]},
10
+ {name: "Product D", store_id: 4, in_stock: false, backordered: false, created_at: now - 3, orders_count: 1}
11
+ ]
12
+ assert_search "product", ["Product A", "Product B"], where: {in_stock: true}
13
+ # date
14
+ assert_search "product", ["Product A"], where: {created_at: {gt: now - 1}}
15
+ assert_search "product", ["Product A", "Product B"], where: {created_at: {gte: now - 1}}
16
+ assert_search "product", ["Product D"], where: {created_at: {lt: now - 2}}
17
+ assert_search "product", ["Product C", "Product D"], where: {created_at: {lte: now - 2}}
18
+ # integer
19
+ assert_search "product", ["Product A"], where: {store_id: {lt: 2}}
20
+ assert_search "product", ["Product A", "Product B"], where: {store_id: {lte: 2}}
21
+ assert_search "product", ["Product D"], where: {store_id: {gt: 3}}
22
+ assert_search "product", ["Product C", "Product D"], where: {store_id: {gte: 3}}
23
+ # range
24
+ assert_search "product", ["Product A", "Product B"], where: {store_id: 1..2}
25
+ assert_search "product", ["Product A"], where: {store_id: 1...2}
26
+ assert_search "product", ["Product A", "Product B"], where: {store_id: [1, 2]}
27
+ assert_search "product", ["Product B", "Product C", "Product D"], where: {store_id: {not: 1}}
28
+ assert_search "product", ["Product C", "Product D"], where: {store_id: {not: [1, 2]}}
29
+ assert_search "product", ["Product A"], where: {user_ids: {lte: 2, gte: 2}}
30
+ # or
31
+ assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{in_stock: true}, {store_id: 3}]]}
32
+ assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{orders_count: [2, 4]}, {store_id: [1, 2]}]]}
33
+ assert_search "product", ["Product A", "Product D"], where: {or: [[{orders_count: 1}, {created_at: {gte: now - 1}, backordered: true}]]}
34
+ # all
35
+ assert_search "product", ["Product A", "Product C"], where: {user_ids: {all: [1, 3]}}
36
+ assert_search "product", [], where: {user_ids: {all: [1, 2, 3, 4]}}
37
+ # any / nested terms
38
+ assert_search "product", ["Product B", "Product C"], where: {user_ids: {not: [2], in: [1, 3]}}
39
+ # not / exists
40
+ assert_search "product", ["Product D"], where: {user_ids: nil}
41
+ assert_search "product", ["Product A", "Product B", "Product C"], where: {user_ids: {not: nil}}
42
+ assert_search "product", ["Product A", "Product C", "Product D"], where: {user_ids: [3, nil]}
43
+ assert_search "product", ["Product B"], where: {user_ids: {not: [3, nil]}}
44
+ end
45
+
46
+ def test_regexp
47
+ store_names ["Product A"]
48
+ assert_search "*", ["Product A"], where: {name: /Pro.+/}
49
+ end
50
+
51
+ def test_alternate_regexp
52
+ store_names ["Product A", "Item B"]
53
+ assert_search "*", ["Product A"], where: {name: {regexp: "Pro.+"}}
54
+ end
55
+
56
+ def test_where_string
57
+ store [
58
+ {name: "Product A", color: "RED"}
59
+ ]
60
+ assert_search "product", ["Product A"], where: {color: "RED"}
61
+ end
62
+
63
+ def test_where_nil
64
+ store [
65
+ {name: "Product A"},
66
+ {name: "Product B", color: "red"}
67
+ ]
68
+ assert_search "product", ["Product A"], where: {color: nil}
69
+ end
70
+
71
+ def test_where_id
72
+ store_names ["Product A"]
73
+ product = Product.last
74
+ assert_search "product", ["Product A"], where: {id: product.id.to_s}
75
+ end
76
+
77
+ def test_where_empty
78
+ store_names ["Product A"]
79
+ assert_search "product", ["Product A"], where: {}
80
+ end
81
+
82
+ def test_where_empty_array
83
+ store_names ["Product A"]
84
+ assert_search "product", [], where: {store_id: []}
85
+ end
86
+
87
+ # http://elasticsearch-users.115913.n3.nabble.com/Numeric-range-quey-or-filter-in-an-array-field-possible-or-not-td4042967.html
88
+ # https://gist.github.com/jprante/7099463
89
+ def test_where_range_array
90
+ store [
91
+ {name: "Product A", user_ids: [11, 23, 13, 16, 17, 23]},
92
+ {name: "Product B", user_ids: [1, 2, 3, 4, 5, 6, 7, 8, 9]},
93
+ {name: "Product C", user_ids: [101, 230, 150, 200]}
94
+ ]
95
+ assert_search "product", ["Product A"], where: {user_ids: {gt: 10, lt: 24}}
96
+ end
97
+
98
+ def test_where_range_array_again
99
+ store [
100
+ {name: "Product A", user_ids: [19, 32, 42]},
101
+ {name: "Product B", user_ids: [13, 40, 52]}
102
+ ]
103
+ assert_search "product", ["Product A"], where: {user_ids: {gt: 26, lt: 36}}
104
+ end
105
+
106
+ def test_near
107
+ store [
108
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
109
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
110
+ ]
111
+ assert_search "san", ["San Francisco"], where: {location: {near: [37.5, -122.5]}}
112
+ end
113
+
114
+ def test_near_hash
115
+ store [
116
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
117
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
118
+ ]
119
+ assert_search "san", ["San Francisco"], where: {location: {near: {lat: 37.5, lon: -122.5}}}
120
+ end
121
+
122
+ def test_near_within
123
+ store [
124
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
125
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000},
126
+ {name: "San Marino", latitude: 43.9333, longitude: 12.4667}
127
+ ]
128
+ assert_search "san", ["San Francisco", "San Antonio"], where: {location: {near: [37, -122], within: "2000mi"}}
129
+ end
130
+
131
+ def test_near_within_hash
132
+ store [
133
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
134
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000},
135
+ {name: "San Marino", latitude: 43.9333, longitude: 12.4667}
136
+ ]
137
+ assert_search "san", ["San Francisco", "San Antonio"], where: {location: {near: {lat: 37, lon: -122}, within: "2000mi"}}
138
+ end
139
+
140
+ def test_top_left_bottom_right
141
+ store [
142
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
143
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
144
+ ]
145
+ assert_search "san", ["San Francisco"], where: {location: {top_left: [38, -123], bottom_right: [37, -122]}}
146
+ end
147
+
148
+ def test_top_left_bottom_right_hash
149
+ store [
150
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
151
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
152
+ ]
153
+ assert_search "san", ["San Francisco"], where: {location: {top_left: {lat: 38, lon: -123}, bottom_right: {lat: 37, lon: -122}}}
154
+ end
155
+
156
+ def test_multiple_locations
157
+ store [
158
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
159
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
160
+ ]
161
+ assert_search "san", ["San Francisco"], where: {multiple_locations: {near: [37.5, -122.5]}}
162
+ end
163
+
164
+ def test_multiple_locations_hash
165
+ store [
166
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
167
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
168
+ ]
169
+ assert_search "san", ["San Francisco"], where: {multiple_locations: {near: {lat: 37.5, lon: -122.5}}}
170
+ end
171
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: searchkick_bharthur
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Kane
8
+ - Shiv Bharthur (Customization)
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-07-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: elasticsearch
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '1'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: hashie
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.6'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.6'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: minitest
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ description: Intelligent search made easy
99
+ email:
100
+ - andrew@chartkick.com
101
+ - shiv.bharthur@gmail.com
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - ".gitignore"
107
+ - ".travis.yml"
108
+ - CHANGELOG.md
109
+ - Gemfile
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - lib/searchkick.rb
114
+ - lib/searchkick/index.rb
115
+ - lib/searchkick/logging.rb
116
+ - lib/searchkick/middleware.rb
117
+ - lib/searchkick/model.rb
118
+ - lib/searchkick/query.rb
119
+ - lib/searchkick/reindex_job.rb
120
+ - lib/searchkick/reindex_v2_job.rb
121
+ - lib/searchkick/results.rb
122
+ - lib/searchkick/tasks.rb
123
+ - lib/searchkick/version.rb
124
+ - searchkick.gemspec
125
+ - test/aggs_test.rb
126
+ - test/autocomplete_test.rb
127
+ - test/boost_test.rb
128
+ - test/callbacks_test.rb
129
+ - test/ci/before_install.sh
130
+ - test/dangerous_reindex_test.rb
131
+ - test/facets_test.rb
132
+ - test/gemfiles/activerecord31.gemfile
133
+ - test/gemfiles/activerecord32.gemfile
134
+ - test/gemfiles/activerecord40.gemfile
135
+ - test/gemfiles/activerecord41.gemfile
136
+ - test/gemfiles/activerecord50.gemfile
137
+ - test/gemfiles/apartment.gemfile
138
+ - test/gemfiles/mongoid2.gemfile
139
+ - test/gemfiles/mongoid3.gemfile
140
+ - test/gemfiles/mongoid4.gemfile
141
+ - test/gemfiles/mongoid5.gemfile
142
+ - test/gemfiles/nobrainer.gemfile
143
+ - test/highlight_test.rb
144
+ - test/index_test.rb
145
+ - test/inheritance_test.rb
146
+ - test/match_test.rb
147
+ - test/misspellings_test.rb
148
+ - test/model_test.rb
149
+ - test/multi_search_test.rb
150
+ - test/multi_tenancy_test.rb
151
+ - test/order_test.rb
152
+ - test/pagination_test.rb
153
+ - test/query_test.rb
154
+ - test/records_test.rb
155
+ - test/reindex_job_test.rb
156
+ - test/reindex_v2_job_test.rb
157
+ - test/routing_test.rb
158
+ - test/should_index_test.rb
159
+ - test/similar_test.rb
160
+ - test/sql_test.rb
161
+ - test/suggest_test.rb
162
+ - test/synonyms_test.rb
163
+ - test/test_helper.rb
164
+ - test/where_test.rb
165
+ homepage: https://github.com/ankane/searchkick
166
+ licenses:
167
+ - MIT
168
+ metadata: {}
169
+ post_install_message:
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ requirements: []
184
+ rubyforge_project:
185
+ rubygems_version: 2.4.8
186
+ signing_key:
187
+ specification_version: 4
188
+ summary: Searchkick learns what your users are looking for. As more people search,
189
+ it gets smarter and the results get better. It’s friendly for developers - and magical
190
+ for your users.
191
+ test_files:
192
+ - test/aggs_test.rb
193
+ - test/autocomplete_test.rb
194
+ - test/boost_test.rb
195
+ - test/callbacks_test.rb
196
+ - test/ci/before_install.sh
197
+ - test/dangerous_reindex_test.rb
198
+ - test/facets_test.rb
199
+ - test/gemfiles/activerecord31.gemfile
200
+ - test/gemfiles/activerecord32.gemfile
201
+ - test/gemfiles/activerecord40.gemfile
202
+ - test/gemfiles/activerecord41.gemfile
203
+ - test/gemfiles/activerecord50.gemfile
204
+ - test/gemfiles/apartment.gemfile
205
+ - test/gemfiles/mongoid2.gemfile
206
+ - test/gemfiles/mongoid3.gemfile
207
+ - test/gemfiles/mongoid4.gemfile
208
+ - test/gemfiles/mongoid5.gemfile
209
+ - test/gemfiles/nobrainer.gemfile
210
+ - test/highlight_test.rb
211
+ - test/index_test.rb
212
+ - test/inheritance_test.rb
213
+ - test/match_test.rb
214
+ - test/misspellings_test.rb
215
+ - test/model_test.rb
216
+ - test/multi_search_test.rb
217
+ - test/multi_tenancy_test.rb
218
+ - test/order_test.rb
219
+ - test/pagination_test.rb
220
+ - test/query_test.rb
221
+ - test/records_test.rb
222
+ - test/reindex_job_test.rb
223
+ - test/reindex_v2_job_test.rb
224
+ - test/routing_test.rb
225
+ - test/should_index_test.rb
226
+ - test/similar_test.rb
227
+ - test/sql_test.rb
228
+ - test/suggest_test.rb
229
+ - test/synonyms_test.rb
230
+ - test/test_helper.rb
231
+ - test/where_test.rb