searchlogic 2.4.30 → 2.4.31

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/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"