searchlogic 2.4.30 → 2.4.31
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/lib/searchlogic/named_scopes/conditions.rb +46 -38
- data/searchlogic.gemspec +2 -2
- metadata +3 -3
data/VERSION.yml
CHANGED
@@ -91,81 +91,89 @@ module Searchlogic
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def create_condition(
|
94
|
+
def create_condition(column_name, condition, args)
|
95
95
|
if PRIMARY_CONDITIONS.include?(condition.to_sym)
|
96
|
-
create_primary_condition(
|
96
|
+
create_primary_condition(column_name, condition)
|
97
97
|
elsif ALIAS_CONDITIONS.include?(condition.to_sym)
|
98
|
-
create_alias_condition(
|
98
|
+
create_alias_condition(column_name, condition, args)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
def create_primary_condition(
|
103
|
-
|
104
|
-
|
102
|
+
def create_primary_condition(column_name, condition)
|
103
|
+
column = columns_hash[column_name.to_s]
|
104
|
+
column_type = column.type
|
105
|
+
skip_conversion = skip_time_zone_conversion_for_attributes.include?(column.name.to_sym)
|
105
106
|
match_keyword = ::ActiveRecord::Base.connection.adapter_name == "PostgreSQL" ? "ILIKE" : "LIKE"
|
106
107
|
|
107
108
|
scope_options = case condition.to_s
|
108
109
|
when /^equals/
|
109
|
-
scope_options(condition,
|
110
|
+
scope_options(condition, column, lambda { |a| attribute_condition("#{table_name}.#{column.name}", a) }, :skip_conversion => skip_conversion)
|
110
111
|
when /^does_not_equal/
|
111
|
-
scope_options(condition,
|
112
|
+
scope_options(condition, column, "#{table_name}.#{column.name} != ?", :skip_conversion => skip_conversion)
|
112
113
|
when /^less_than_or_equal_to/
|
113
|
-
scope_options(condition,
|
114
|
+
scope_options(condition, column, "#{table_name}.#{column.name} <= ?", :skip_conversion => skip_conversion)
|
114
115
|
when /^less_than/
|
115
|
-
scope_options(condition,
|
116
|
+
scope_options(condition, column, "#{table_name}.#{column.name} < ?", :skip_conversion => skip_conversion)
|
116
117
|
when /^greater_than_or_equal_to/
|
117
|
-
scope_options(condition,
|
118
|
+
scope_options(condition, column, "#{table_name}.#{column.name} >= ?", :skip_conversion => skip_conversion)
|
118
119
|
when /^greater_than/
|
119
|
-
scope_options(condition,
|
120
|
+
scope_options(condition, column, "#{table_name}.#{column.name} > ?", :skip_conversion => skip_conversion)
|
120
121
|
when /^like/
|
121
|
-
scope_options(condition,
|
122
|
+
scope_options(condition, column, "#{table_name}.#{column.name} #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :like)
|
122
123
|
when /^not_like/
|
123
|
-
scope_options(condition,
|
124
|
+
scope_options(condition, column, "#{table_name}.#{column.name} NOT #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :like)
|
124
125
|
when /^begins_with/
|
125
|
-
scope_options(condition,
|
126
|
+
scope_options(condition, column, "#{table_name}.#{column.name} #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :begins_with)
|
126
127
|
when /^not_begin_with/
|
127
|
-
scope_options(condition,
|
128
|
+
scope_options(condition, column, "#{table_name}.#{column.name} NOT #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :begins_with)
|
128
129
|
when /^ends_with/
|
129
|
-
scope_options(condition,
|
130
|
+
scope_options(condition, column, "#{table_name}.#{column.name} #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :ends_with)
|
130
131
|
when /^not_end_with/
|
131
|
-
scope_options(condition,
|
132
|
+
scope_options(condition, column, "#{table_name}.#{column.name} NOT #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :ends_with)
|
132
133
|
when "null"
|
133
|
-
{:conditions => "#{table_name}.#{column} IS NULL"}
|
134
|
+
{:conditions => "#{table_name}.#{column.name} IS NULL"}
|
134
135
|
when "not_null"
|
135
|
-
{:conditions => "#{table_name}.#{column} IS NOT NULL"}
|
136
|
+
{:conditions => "#{table_name}.#{column.name} IS NOT NULL"}
|
136
137
|
when "empty"
|
137
|
-
{:conditions => "#{table_name}.#{column} = ''"}
|
138
|
+
{:conditions => "#{table_name}.#{column.name} = ''"}
|
138
139
|
when "blank"
|
139
|
-
{:conditions => "#{table_name}.#{column} = '' OR #{table_name}.#{column} IS NULL"}
|
140
|
+
{:conditions => "#{table_name}.#{column.name} = '' OR #{table_name}.#{column.name} IS NULL"}
|
140
141
|
when "not_blank"
|
141
|
-
{:conditions => "#{table_name}.#{column} != '' AND #{table_name}.#{column} IS NOT NULL"}
|
142
|
+
{:conditions => "#{table_name}.#{column.name} != '' AND #{table_name}.#{column.name} IS NOT NULL"}
|
142
143
|
end
|
143
144
|
|
144
|
-
named_scope("#{column}_#{condition}".to_sym, scope_options)
|
145
|
+
named_scope("#{column.name}_#{condition}".to_sym, scope_options)
|
145
146
|
end
|
146
147
|
|
147
148
|
# This method helps cut down on defining scope options for conditions that allow *_any or *_all conditions.
|
148
149
|
# Kepp in mind that the lambdas get cached in a method, so you want to keep the contents of the lambdas as
|
149
150
|
# fast as possible, which is why I didn't do the case statement inside of the lambda.
|
150
|
-
def scope_options(condition,
|
151
|
+
def scope_options(condition, column, sql, options = {})
|
151
152
|
case condition.to_s
|
152
153
|
when /_(any|all)$/
|
153
|
-
|
154
|
+
any = $1 == "any"
|
155
|
+
join_word = any ? " OR " : " AND "
|
156
|
+
equals = condition.to_s =~ /^equals_/
|
157
|
+
searchlogic_lambda(column.type, :skip_conversion => options[:skip_conversion]) { |*values|
|
154
158
|
unless values.empty?
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
159
|
+
if equals && any
|
160
|
+
values = values.flatten
|
161
|
+
r = attribute_condition("#{table_name}.#{column.name}", values)
|
162
|
+
{:conditions => [r, values]}
|
163
|
+
else
|
164
|
+
values.flatten!
|
165
|
+
values.collect! { |value| value_with_modifier(value, options[:value_modifier]) }
|
166
|
+
|
167
|
+
scope_sql = values.collect { |value| sql.is_a?(Proc) ? sql.call(value) : sql }.join(join_word)
|
168
|
+
|
169
|
+
{:conditions => [scope_sql, *expand_range_bind_variables(values)]}
|
170
|
+
end
|
163
171
|
else
|
164
172
|
{}
|
165
173
|
end
|
166
174
|
}
|
167
175
|
else
|
168
|
-
searchlogic_lambda(
|
176
|
+
searchlogic_lambda(column.type, :skip_conversion => options[:skip_conversion]) { |*values|
|
169
177
|
values.collect! { |value| value_with_modifier(value, options[:value_modifier]) }
|
170
178
|
|
171
179
|
scope_sql = sql.is_a?(Proc) ? sql.call(*values) : sql
|
@@ -188,10 +196,10 @@ module Searchlogic
|
|
188
196
|
end
|
189
197
|
end
|
190
198
|
|
191
|
-
def create_alias_condition(
|
199
|
+
def create_alias_condition(column_name, condition, args)
|
192
200
|
primary_condition = primary_condition(condition)
|
193
|
-
alias_name = "#{
|
194
|
-
primary_name = "#{
|
201
|
+
alias_name = "#{column_name}_#{condition}"
|
202
|
+
primary_name = "#{column_name}_#{primary_condition}"
|
195
203
|
send(primary_name, *args) # go back to method_missing and make sure we create the method
|
196
204
|
(class << self; self; end).class_eval { alias_method alias_name, primary_name }
|
197
205
|
end
|
data/searchlogic.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{searchlogic}
|
8
|
-
s.version = "2.4.
|
8
|
+
s.version = "2.4.31"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ben Johnson of Binary Logic"]
|
12
|
-
s.date = %q{2011-03-
|
12
|
+
s.date = %q{2011-03-03}
|
13
13
|
s.description = %q{Searchlogic makes using ActiveRecord named scopes easier and less repetitive.}
|
14
14
|
s.email = %q{bjohnson@binarylogic.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: searchlogic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 2.4.
|
5
|
+
version: 2.4.31
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ben Johnson of Binary Logic
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-03 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
103
|
requirements:
|
104
104
|
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
hash:
|
106
|
+
hash: 1771332641975741077
|
107
107
|
segments:
|
108
108
|
- 0
|
109
109
|
version: "0"
|