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 CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 2
3
3
  :minor: 4
4
- :patch: 30
4
+ :patch: 31
5
5
  :build:
@@ -91,81 +91,89 @@ module Searchlogic
91
91
  end
92
92
  end
93
93
 
94
- def create_condition(column, condition, args)
94
+ def create_condition(column_name, condition, args)
95
95
  if PRIMARY_CONDITIONS.include?(condition.to_sym)
96
- create_primary_condition(column, condition)
96
+ create_primary_condition(column_name, condition)
97
97
  elsif ALIAS_CONDITIONS.include?(condition.to_sym)
98
- create_alias_condition(column, condition, args)
98
+ create_alias_condition(column_name, condition, args)
99
99
  end
100
100
  end
101
101
 
102
- def create_primary_condition(column, condition)
103
- column_type = columns_hash[column.to_s].type
104
- skip_conversion = skip_time_zone_conversion_for_attributes.include?(columns_hash[column.to_s].name.to_sym)
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, column_type, lambda { |a| attribute_condition("#{table_name}.#{column}", a) }, :skip_conversion => skip_conversion)
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, column_type, "#{table_name}.#{column} != ?", :skip_conversion => skip_conversion)
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, column_type, "#{table_name}.#{column} <= ?", :skip_conversion => skip_conversion)
114
+ scope_options(condition, column, "#{table_name}.#{column.name} <= ?", :skip_conversion => skip_conversion)
114
115
  when /^less_than/
115
- scope_options(condition, column_type, "#{table_name}.#{column} < ?", :skip_conversion => skip_conversion)
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, column_type, "#{table_name}.#{column} >= ?", :skip_conversion => skip_conversion)
118
+ scope_options(condition, column, "#{table_name}.#{column.name} >= ?", :skip_conversion => skip_conversion)
118
119
  when /^greater_than/
119
- scope_options(condition, column_type, "#{table_name}.#{column} > ?", :skip_conversion => skip_conversion)
120
+ scope_options(condition, column, "#{table_name}.#{column.name} > ?", :skip_conversion => skip_conversion)
120
121
  when /^like/
121
- scope_options(condition, column_type, "#{table_name}.#{column} #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :like)
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, column_type, "#{table_name}.#{column} NOT #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :like)
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, column_type, "#{table_name}.#{column} #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :begins_with)
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, column_type, "#{table_name}.#{column} NOT #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :begins_with)
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, column_type, "#{table_name}.#{column} #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :ends_with)
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, column_type, "#{table_name}.#{column} NOT #{match_keyword} ?", :skip_conversion => skip_conversion, :value_modifier => :ends_with)
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, column_type, sql, options = {})
151
+ def scope_options(condition, column, sql, options = {})
151
152
  case condition.to_s
152
153
  when /_(any|all)$/
153
- searchlogic_lambda(column_type, :skip_conversion => options[:skip_conversion]) { |*values|
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
- values.flatten!
156
- values.collect! { |value| value_with_modifier(value, options[:value_modifier]) }
157
-
158
- join = $1 == "any" ? " OR " : " AND "
159
-
160
- scope_sql = values.collect { |value| sql.is_a?(Proc) ? sql.call(value) : sql }.join(join)
161
-
162
- {:conditions => [scope_sql, *expand_range_bind_variables(values)]}
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(column_type, :skip_conversion => options[:skip_conversion]) { |*values|
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(column, condition, args)
199
+ def create_alias_condition(column_name, condition, args)
192
200
  primary_condition = primary_condition(condition)
193
- alias_name = "#{column}_#{condition}"
194
- primary_name = "#{column}_#{primary_condition}"
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.30"
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-01}
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.30
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-01 00:00:00 -05:00
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: -368452768020776095
106
+ hash: 1771332641975741077
107
107
  segments:
108
108
  - 0
109
109
  version: "0"