textacular 3.2.2 → 4.0.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/CHANGELOG.md +1 -0
- data/README.md +1 -1
- data/lib/textacular.rb +1 -78
- data/lib/textacular/version.rb +1 -1
- data/spec/textacular_spec.rb +1 -72
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b88b1c0a51ee49341f51fe2c2c6010b7d929644
|
4
|
+
data.tar.gz: fbe37bec170667ee3b828aa8156bd16aab704919
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 484b15d62a5bb4e87b3a90766b80fe6bf76106b732d271669ced769abfbec8703388d18239262e4bb670371b7e7d8f98968f0d4315c2d0386e9d9c893a8078eb
|
7
|
+
data.tar.gz: 94c859fc1ba3d8d71c052daeac3b3056ac3a5de68c0c9bc5399c8b442d45e264ac32f7417edb742e94a39f34330c2a85221568f0c9c09d3a322aa1c446944c31
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
data/lib/textacular.rb
CHANGED
@@ -37,34 +37,6 @@ module Textacular
|
|
37
37
|
assemble_query(similarities, conditions, exclusive)
|
38
38
|
end
|
39
39
|
|
40
|
-
def method_missing(method, *search_terms)
|
41
|
-
return super if self.abstract_class?
|
42
|
-
if Helper.dynamic_search_method?(method, self.columns)
|
43
|
-
warn("You are using a dynamic Textacular search method #{method}. These methods are deprecated and will be removed at the next major version release. Please use the has syntax for basic_search and advanced_search.")
|
44
|
-
exclusive = Helper.exclusive_dynamic_search_method?(method, self.columns)
|
45
|
-
columns = exclusive ? Helper.exclusive_dynamic_search_columns(method) : Helper.inclusive_dynamic_search_columns(method)
|
46
|
-
metaclass = class << self; self; end
|
47
|
-
metaclass.__send__(:define_method, method) do |*args|
|
48
|
-
query = columns.inject({}) do |query, column|
|
49
|
-
query.merge column => args.shift
|
50
|
-
end
|
51
|
-
self.send(Helper.search_type(method), query, exclusive)
|
52
|
-
end
|
53
|
-
__send__(method, *search_terms, exclusive)
|
54
|
-
else
|
55
|
-
super
|
56
|
-
end
|
57
|
-
rescue ActiveRecord::StatementInvalid
|
58
|
-
super
|
59
|
-
end
|
60
|
-
|
61
|
-
def respond_to?(method, include_private = false)
|
62
|
-
return super if self.abstract_class?
|
63
|
-
Helper.dynamic_search_method?(method, self.columns) or super
|
64
|
-
rescue StandardError
|
65
|
-
super
|
66
|
-
end
|
67
|
-
|
68
40
|
private
|
69
41
|
|
70
42
|
def munge_exclusive_and_query(exclusive, query)
|
@@ -157,7 +129,7 @@ module Textacular
|
|
157
129
|
end
|
158
130
|
|
159
131
|
def select_values
|
160
|
-
if ActiveRecord::VERSION::MAJOR
|
132
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
161
133
|
all.select_values
|
162
134
|
else
|
163
135
|
scoped.select_values
|
@@ -181,55 +153,6 @@ module Textacular
|
|
181
153
|
def normalize(query)
|
182
154
|
query.to_s.gsub(/\s(?![\&|\!|\|])/, '\\\\ ')
|
183
155
|
end
|
184
|
-
|
185
|
-
def method_name_regex
|
186
|
-
/^(?<search_type>((basic|advanced|fuzzy)_)?search)_by_(?<columns>[_a-zA-Z]\w*)$/
|
187
|
-
end
|
188
|
-
|
189
|
-
def search_type(method)
|
190
|
-
method.to_s.match(method_name_regex)[:search_type]
|
191
|
-
end
|
192
|
-
|
193
|
-
def exclusive_dynamic_search_columns(method)
|
194
|
-
if match = method.to_s.match(method_name_regex)
|
195
|
-
match[:columns].split('_and_')
|
196
|
-
else
|
197
|
-
[]
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def inclusive_dynamic_search_columns(method)
|
202
|
-
if match = method.to_s.match(method_name_regex)
|
203
|
-
match[:columns].split('_or_')
|
204
|
-
else
|
205
|
-
[]
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
def exclusive_dynamic_search_method?(method, class_columns)
|
210
|
-
string_columns = class_columns.map(&:name)
|
211
|
-
columns = exclusive_dynamic_search_columns(method)
|
212
|
-
unless columns.empty?
|
213
|
-
columns.all? {|column| string_columns.include?(column) }
|
214
|
-
else
|
215
|
-
false
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
def inclusive_dynamic_search_method?(method, class_columns)
|
220
|
-
string_columns = class_columns.map(&:name)
|
221
|
-
columns = inclusive_dynamic_search_columns(method)
|
222
|
-
unless columns.empty?
|
223
|
-
columns.all? {|column| string_columns.include?(column) }
|
224
|
-
else
|
225
|
-
false
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
def dynamic_search_method?(method, class_columns)
|
230
|
-
exclusive_dynamic_search_method?(method, class_columns) or
|
231
|
-
inclusive_dynamic_search_method?(method, class_columns)
|
232
|
-
end
|
233
156
|
end
|
234
157
|
end
|
235
158
|
end
|
data/lib/textacular/version.rb
CHANGED
data/spec/textacular_spec.rb
CHANGED
@@ -259,77 +259,6 @@ RSpec.describe Textacular do
|
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
262
|
-
context "via dynamic method names" do
|
263
|
-
it "only exists prior to 4.0.0" do
|
264
|
-
current_version = Gem::Version.new(Textacular.version)
|
265
|
-
|
266
|
-
expect(current_version).to be < Gem::Version.new("4.0.0")
|
267
|
-
end
|
268
|
-
|
269
|
-
it "generates methods for each string column" do
|
270
|
-
expect(
|
271
|
-
GameExtendedWithTextacular.advanced_search_by_title("Mario")
|
272
|
-
).to eq([mario])
|
273
|
-
expect(
|
274
|
-
GameExtendedWithTextacular.advanced_search_by_system("Saturn")
|
275
|
-
).to eq([takun])
|
276
|
-
end
|
277
|
-
|
278
|
-
it "generates methods for each text column" do
|
279
|
-
expect(
|
280
|
-
GameExtendedWithTextacular.advanced_search_by_description("platform")
|
281
|
-
).to eq([mario])
|
282
|
-
end
|
283
|
-
|
284
|
-
it "generates methods for any combination of string and text columns" do
|
285
|
-
expect(
|
286
|
-
GameExtendedWithTextacular.advanced_search_by_title_and_system("Mario", "NES")
|
287
|
-
).to eq([mario])
|
288
|
-
expect(
|
289
|
-
GameExtendedWithTextacular.advanced_search_by_system_and_title("Genesis", "Sonic")
|
290
|
-
).to eq([sonic])
|
291
|
-
expect(
|
292
|
-
GameExtendedWithTextacular.advanced_search_by_title_and_title("Mario", "Mario")
|
293
|
-
).to eq([mario])
|
294
|
-
expect(
|
295
|
-
GameExtendedWithTextacular.advanced_search_by_title_and_description("Man", "Brain")
|
296
|
-
).to eq([mega_man])
|
297
|
-
end
|
298
|
-
|
299
|
-
it "generates methods for inclusive searches" do
|
300
|
-
expect(
|
301
|
-
GameExtendedWithTextacular.advanced_search_by_system_or_title("Saturn", "Mega Man").to_set
|
302
|
-
).to eq(Set.new([mega_man, takun]))
|
303
|
-
end
|
304
|
-
|
305
|
-
it "scopes consecutively" do
|
306
|
-
expect(
|
307
|
-
GameExtendedWithTextacular.advanced_search_by_system("Genesis").advanced_search_by_title("Street Fighter")
|
308
|
-
).to eq([sf_genesis])
|
309
|
-
end
|
310
|
-
|
311
|
-
it "generates methods for non-string columns" do
|
312
|
-
expect(
|
313
|
-
GameExtendedWithTextacular.advanced_search_by_id(mario.id)
|
314
|
-
).to eq([mario])
|
315
|
-
end
|
316
|
-
|
317
|
-
it "works with #respond_to?" do
|
318
|
-
expect(GameExtendedWithTextacular).to respond_to(:advanced_search_by_system)
|
319
|
-
expect(GameExtendedWithTextacular).to respond_to(:advanced_search_by_title)
|
320
|
-
expect(GameExtendedWithTextacular).to respond_to(:advanced_search_by_system_and_title)
|
321
|
-
expect(GameExtendedWithTextacular).to respond_to(:advanced_search_by_system_or_title)
|
322
|
-
expect(GameExtendedWithTextacular).to respond_to(:advanced_search_by_title_and_title_and_title)
|
323
|
-
expect(GameExtendedWithTextacular).to respond_to(:advanced_search_by_id)
|
324
|
-
|
325
|
-
expect(GameExtendedWithTextacular).to_not respond_to(:advanced_search_by_title_and_title_or_title)
|
326
|
-
end
|
327
|
-
|
328
|
-
it "allows for 2 arguments to #respond_to?" do
|
329
|
-
expect(GameExtendedWithTextacular.respond_to?(:searchable_language, true)).to be_truthy
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
262
|
context "after selecting columns to return" do
|
334
263
|
it "doesn't fetch extra columns" do
|
335
264
|
expect {
|
@@ -348,7 +277,7 @@ RSpec.describe Textacular do
|
|
348
277
|
|
349
278
|
it "finds results" do
|
350
279
|
expect(
|
351
|
-
GameExtendedWithTextacularAndCustomLanguage.
|
280
|
+
GameExtendedWithTextacularAndCustomLanguage.advanced_search(title: "harry")
|
352
281
|
).to eq([harry_potter_7])
|
353
282
|
end
|
354
283
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: textacular
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Hamill
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2016-05-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: pg
|
@@ -104,7 +104,7 @@ dependencies:
|
|
104
104
|
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '3.0'
|
107
|
-
- - "
|
107
|
+
- - "<="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '5.0'
|
110
110
|
type: :runtime
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '3.0'
|
117
|
-
- - "
|
117
|
+
- - "<="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '5.0'
|
120
120
|
description: |-
|
@@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
181
|
version: '0'
|
182
182
|
requirements: []
|
183
183
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
184
|
+
rubygems_version: 2.4.5.1
|
185
185
|
signing_key:
|
186
186
|
specification_version: 4
|
187
187
|
summary: Textacular exposes full text search capabilities from PostgreSQL
|