simple_column_search 1.0.1 → 1.0.2
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/lib/simple_column_search.rb +14 -17
- data/simple_column_search.gemspec +2 -2
- metadata +4 -4
data/CHANGELOG
CHANGED
data/lib/simple_column_search.rb
CHANGED
@@ -4,11 +4,11 @@ require 'active_record'
|
|
4
4
|
module SimpleColumnSearch
|
5
5
|
# Adds a Model.search('term1 term2') method that searches across SEARCH_COLUMNS
|
6
6
|
# for ANDed TERMS ORed across columns.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# class User
|
9
9
|
# simple_column_search :first_name, :last_name
|
10
10
|
# end
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# User.search('elijah') # => anyone with first or last name elijah
|
13
13
|
# User.search('miller') # => anyone with first or last name miller
|
14
14
|
# User.search('elijah miller')
|
@@ -23,29 +23,26 @@ module SimpleColumnSearch
|
|
23
23
|
|
24
24
|
# PostgreSQL LIKE is case-sensitive, use ILIKE for case-insensitive
|
25
25
|
like = connection.adapter_name == "PostgreSQL" ? "ILIKE" : "LIKE"
|
26
|
-
#
|
27
|
-
if self.
|
26
|
+
# Determine if ActiveRecord 3 or ActiveRecord 2.3 - probaly beter way to do it!
|
27
|
+
if self.respond_to?(:where)
|
28
28
|
scope options[:name], lambda { |terms|
|
29
|
-
conditions = terms.split.inject(
|
29
|
+
conditions = terms.split.inject(where(nil)) do |acc, term|
|
30
30
|
pattern = get_simple_column_pattern options[:match], term
|
31
|
-
acc
|
32
|
-
|
31
|
+
acc.where(columns.collect { |column| "#{table_name}.#{column} #{like} :pattern" }.join(' OR '), { :pattern => pattern })
|
33
32
|
end
|
34
|
-
|
35
|
-
where conditions.map { |c| "(" + c.join(' or ') + ")" }.join(' and ')
|
36
|
-
}
|
33
|
+
}
|
37
34
|
else
|
38
35
|
named_scope options[:name], lambda { |terms|
|
39
36
|
conditions = terms.split.inject(nil) do |acc, term|
|
40
37
|
pattern = get_simple_column_pattern options[:match], term
|
41
|
-
merge_conditions
|
38
|
+
merge_conditions acc, [columns.collect { |column| "#{table_name}.#{column} #{like} :pattern" }.join(' OR '), { :pattern => pattern }]
|
42
39
|
end
|
43
40
|
{ :conditions => conditions }
|
44
|
-
}
|
41
|
+
}
|
45
42
|
end
|
46
|
-
|
43
|
+
|
47
44
|
end
|
48
|
-
|
45
|
+
|
49
46
|
def get_simple_column_pattern(match, term)
|
50
47
|
case(match)
|
51
48
|
when :exact
|
@@ -58,8 +55,8 @@ module SimpleColumnSearch
|
|
58
55
|
'%' + term
|
59
56
|
else
|
60
57
|
raise "Unexpected match type: #{options[:match]}"
|
61
|
-
end
|
58
|
+
end
|
62
59
|
end
|
63
|
-
|
64
|
-
|
60
|
+
|
61
|
+
|
65
62
|
end
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{simple_column_search}
|
5
|
-
s.version = "1.0.
|
5
|
+
s.version = "1.0.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Elijah Miller"]
|
9
|
-
s.date = %q{2010-
|
9
|
+
s.date = %q{2010-08-29}
|
10
10
|
s.description = %q{Quick and dirty multi column LIKE searches.}
|
11
11
|
s.email = %q{elijah.miller@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "lib/simple_column_search.rb", "README.rdoc"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_column_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Elijah Miller
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-29 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|