searchgasm 0.9.5 → 0.9.6
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.
- data/CHANGELOG +2 -0
- data/README.mdown +3 -0
- data/lib/searchgasm/active_record/base.rb +8 -6
- data/lib/searchgasm/search/base.rb +8 -0
- data/lib/searchgasm/search/condition_types/keywords_condition.rb +2 -2
- data/lib/searchgasm/search/conditions.rb +10 -0
- data/lib/searchgasm/version.rb +1 -1
- data/searchgasm.gemspec +2 -2
- data/test/test_active_record_base.rb +19 -0
- data/test/test_searchgasm_base.rb +9 -0
- metadata +1 -1
data/CHANGELOG
CHANGED
data/README.mdown
CHANGED
@@ -273,6 +273,9 @@ I want to use it, so let's add it:
|
|
273
273
|
end
|
274
274
|
end
|
275
275
|
|
276
|
+
# You can return an array or a string. NOT a hash, because all of these conditions
|
277
|
+
# need to eventually get merged together. The array or string can be anything you would put in
|
278
|
+
# the :conditions option for ActiveRecord::Base.find()
|
276
279
|
def to_conditions(value)
|
277
280
|
["#{quoted_table_name}.#{quoted_column_name} SOUNDS LIKE ?", value]
|
278
281
|
end
|
@@ -23,7 +23,7 @@ module BinaryLogic
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def build_conditions(values = {}, &block)
|
26
|
-
conditions = searchgasm_conditions
|
26
|
+
conditions = searchgasm_conditions
|
27
27
|
conditions.protect = true
|
28
28
|
conditions.value = values
|
29
29
|
yield conditions if block_given?
|
@@ -37,8 +37,9 @@ module BinaryLogic
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def build_search(options = {}, &block)
|
40
|
-
|
41
|
-
search =
|
40
|
+
search = searchgasm_searcher
|
41
|
+
search.protect = true
|
42
|
+
search.options = options
|
42
43
|
yield search if block_given?
|
43
44
|
search
|
44
45
|
end
|
@@ -50,15 +51,16 @@ module BinaryLogic
|
|
50
51
|
end
|
51
52
|
|
52
53
|
private
|
53
|
-
def sanitize_options_with_searchgasm(options)
|
54
|
+
def sanitize_options_with_searchgasm(options = {})
|
55
|
+
return options unless BinaryLogic::Searchgasm::Search::Base.needed?(self, options)
|
54
56
|
searchgasm_searcher(options).sanitize
|
55
57
|
end
|
56
58
|
|
57
|
-
def searchgasm_conditions(options)
|
59
|
+
def searchgasm_conditions(options = {})
|
58
60
|
BinaryLogic::Searchgasm::Search::Conditions.new(self, options)
|
59
61
|
end
|
60
62
|
|
61
|
-
def searchgasm_searcher(options)
|
63
|
+
def searchgasm_searcher(options = {})
|
62
64
|
BinaryLogic::Searchgasm::Search::Base.new(self, options)
|
63
65
|
end
|
64
66
|
end
|
@@ -13,6 +13,14 @@ module BinaryLogic
|
|
13
13
|
attr_reader :conditions, :protect
|
14
14
|
attr_writer :options
|
15
15
|
|
16
|
+
def self.needed?(klass, options)
|
17
|
+
SPECIAL_FIND_OPTIONS.each do |option|
|
18
|
+
return true if options.symbolize_keys.keys.include?(option)
|
19
|
+
end
|
20
|
+
|
21
|
+
Conditions.needed?(klass, options[:conditions])
|
22
|
+
end
|
23
|
+
|
16
24
|
def initialize(klass, options = {})
|
17
25
|
self.klass = klass
|
18
26
|
self.conditions = Conditions.new(klass)
|
@@ -21,13 +21,13 @@ module BinaryLogic
|
|
21
21
|
subs = []
|
22
22
|
|
23
23
|
search_parts = value.gsub(/,/, " ").split(/ /).collect { |word| word.downcase.gsub(/[^[:alnum:]]/, ''); }.uniq.select { |word| !BLACKLISTED_WORDS.include?(word.downcase) && !word.blank? }
|
24
|
+
return if search_parts.blank?
|
25
|
+
|
24
26
|
search_parts.each do |search_part|
|
25
27
|
strs << "#{quoted_table_name}.#{quoted_column_name} LIKE ?"
|
26
28
|
subs << "%#{search_part}%"
|
27
29
|
end
|
28
30
|
|
29
|
-
return if strs.blank?
|
30
|
-
|
31
31
|
[strs.join(" AND "), *subs]
|
32
32
|
end
|
33
33
|
end
|
@@ -15,6 +15,16 @@ module BinaryLogic
|
|
15
15
|
def conditions
|
16
16
|
@@conditions ||= []
|
17
17
|
end
|
18
|
+
|
19
|
+
def needed?(klass, conditions)
|
20
|
+
if conditions.is_a?(Hash)
|
21
|
+
conditions.stringify_keys.keys.each do |condition|
|
22
|
+
return true unless klass.column_names.include?(condition)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
false
|
27
|
+
end
|
18
28
|
end
|
19
29
|
|
20
30
|
def initialize(klass, init_values = {})
|
data/lib/searchgasm/version.rb
CHANGED
data/searchgasm.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Searchgasm-0.9.
|
2
|
+
# Gem::Specification for Searchgasm-0.9.6
|
3
3
|
# Originally generated by Echoe
|
4
4
|
|
5
5
|
--- !ruby/object:Gem::Specification
|
6
6
|
name: searchgasm
|
7
7
|
version: !ruby/object:Gem::Version
|
8
|
-
version: 0.9.
|
8
|
+
version: 0.9.6
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- Ben Johnson of Binary Logic
|
@@ -16,6 +16,9 @@ class TestActiveRecordBase < Test::Unit::TestCase
|
|
16
16
|
assert_nothing_raised { Account.all }
|
17
17
|
assert_nothing_raised { Account.first }
|
18
18
|
assert_nothing_raised { Account.find(:all) }
|
19
|
+
assert_nothing_raised { Account.find(:all, :conditions => {:name => "Ben"}) }
|
20
|
+
assert_nothing_raised { Account.find(:all, :conditions => ["name = ?", "Ben"]) }
|
21
|
+
assert_nothing_raised { Account.find(:all, :conditions => "name = 'Ben'") }
|
19
22
|
assert_nothing_raised { Account.find(:first) }
|
20
23
|
assert_nothing_raised { Account.find(:all, nil) }
|
21
24
|
assert_nothing_raised { Account.find(:all, {}) }
|
@@ -30,6 +33,9 @@ class TestActiveRecordBase < Test::Unit::TestCase
|
|
30
33
|
end
|
31
34
|
|
32
35
|
def test_build_search
|
36
|
+
search = Account.new_search
|
37
|
+
assert_kind_of BinaryLogic::Searchgasm::Search::Base, search
|
38
|
+
|
33
39
|
search = Account.build_search(:conditions => {:name_keywords => "awesome"}, :page => 2, :per_page => 15)
|
34
40
|
assert_kind_of BinaryLogic::Searchgasm::Search::Base, search
|
35
41
|
assert_equal Account, search.klass
|
@@ -41,6 +47,19 @@ class TestActiveRecordBase < Test::Unit::TestCase
|
|
41
47
|
assert_equal Account, search.klass
|
42
48
|
end
|
43
49
|
|
50
|
+
def test_build_conditions
|
51
|
+
search = Account.new_conditions
|
52
|
+
assert_kind_of BinaryLogic::Searchgasm::Search::Conditions, search
|
53
|
+
|
54
|
+
search = Account.build_conditions(:name_keywords => "awesome")
|
55
|
+
assert_kind_of BinaryLogic::Searchgasm::Search::Conditions, search
|
56
|
+
assert_equal Account, search.klass
|
57
|
+
assert_equal "awesome", search.name_keywords
|
58
|
+
|
59
|
+
search = Account.new_conditions(:name_keywords => "awesome")
|
60
|
+
assert_equal Account, search.klass
|
61
|
+
end
|
62
|
+
|
44
63
|
def test_searching
|
45
64
|
assert_equal Account.find(1, 3), Account.all(:conditions => {:name_contains => "Binary"})
|
46
65
|
assert_equal [Account.find(1)], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben"}})
|
@@ -12,7 +12,16 @@ class TestSearchgasmBase < Test::Unit::TestCase
|
|
12
12
|
teardown_db
|
13
13
|
end
|
14
14
|
|
15
|
+
def test_needed
|
16
|
+
assert BinaryLogic::Searchgasm::Search::Base.needed?(Account, :page => 2, :conditions => {:name => "Ben"})
|
17
|
+
assert !BinaryLogic::Searchgasm::Search::Base.needed?(Account, :conditions => {:name => "Ben"})
|
18
|
+
assert BinaryLogic::Searchgasm::Search::Base.needed?(Account, :limit => 2, :conditions => {:name_contains => "Ben"})
|
19
|
+
assert !BinaryLogic::Searchgasm::Search::Base.needed?(Account, :limit => 2)
|
20
|
+
assert BinaryLogic::Searchgasm::Search::Base.needed?(Account, :per_page => 2)
|
21
|
+
end
|
22
|
+
|
15
23
|
def test_initialize
|
24
|
+
assert_nothing_raised { BinaryLogic::Searchgasm::Search::Base.new(Account) }
|
16
25
|
search = BinaryLogic::Searchgasm::Search::Base.new(Account, :conditions => {:name_like => "binary"}, :page => 2, :limit => 10, :readonly => true)
|
17
26
|
assert_equal Account, search.klass
|
18
27
|
assert_equal "binary", search.conditions.name_like
|