5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/minidusen/active_record_ext.rb', line 5
def where_like(conditions, options = {})
scope = scoped
ilike_operator = Util.ilike_operator(scope)
if options[:negate]
match_operator = "NOT #{ilike_operator}"
join_operator = 'AND'
else
match_operator = ilike_operator
join_operator = 'OR'
end
conditions.each do |field_or_fields, query|
fields = Array(field_or_fields).collect do |field|
Util.qualify_column_name(scope, field)
end
Array.wrap(query).each do |phrase|
phrase_with_placeholders = fields.collect { |field|
"#{field} #{match_operator} ?"
}.join(" #{join_operator} ")
like_expression = Minidusen::Util.like_expression(phrase)
bindings = [like_expression] * fields.size
conditions = [ phrase_with_placeholders, *bindings ]
scope = scope.where(conditions)
end
end
scope
end
|