searchlogic 1.6.4 → 1.6.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +9 -0
- data/MIT-LICENSE +1 -1
- data/lib/searchlogic/condition/blank.rb +7 -4
- data/lib/searchlogic/condition/keywords.rb +14 -9
- data/lib/searchlogic/conditions/magic_methods.rb +1 -0
- data/lib/searchlogic/helpers/control_types/links.rb +2 -2
- data/lib/searchlogic/search/protection.rb +1 -1
- data/lib/searchlogic/shared/utilities.rb +1 -0
- data/lib/searchlogic/version.rb +1 -1
- data/searchlogic.gemspec +2 -2
- data/test/active_record_tests/associations_test.rb +1 -1
- data/test/active_record_tests/base_test.rb +1 -1
- data/test/condition_tests/blank_test.rb +6 -6
- data/test/test_helper.rb +4 -3
- metadata +2 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 1.6.5 released 2009-04-2
|
2
|
+
|
3
|
+
* Skip all associations defined with the :finder_sql option, since conditions can not be chained to them, etc.
|
4
|
+
* Fixed bug when using non string values for the keywords condition.
|
5
|
+
* Fixed undefined methods link_options error.
|
6
|
+
* Return blank conditions when trying to scope blank conditions. Fixes the issue with groups that return a blank SQL string.
|
7
|
+
* Fixed issue with blank condition comparing boolean values to non boolean columns.
|
8
|
+
* Add utf-8 magic comment for ruby 1.9
|
9
|
+
|
1
10
|
== 1.6.4 released 2009-01-22
|
2
11
|
|
3
12
|
* Fixed calling attribute_condition with newer versions of rails.
|
data/MIT-LICENSE
CHANGED
@@ -10,10 +10,13 @@ module Searchlogic
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_conditions(value)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"(#{column_sql} IS NOT NULL and #{column_sql} != '' and #{column_sql} != false)"
|
13
|
+
case column.type
|
14
|
+
when :boolean
|
15
|
+
return "(#{column_sql} IS NULL or #{column_sql} = '' or #{column_sql} = false)" if value == true
|
16
|
+
return "(#{column_sql} IS NOT NULL and #{column_sql} != '' and #{column_sql} != false)" if value == false
|
17
|
+
else
|
18
|
+
return "(#{column_sql} IS NULL or #{column_sql} = '')" if value == true
|
19
|
+
return "(#{column_sql} IS NOT NULL and #{column_sql} != '')" if value == false
|
17
20
|
end
|
18
21
|
end
|
19
22
|
end
|
@@ -1,23 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
module Searchlogic
|
2
3
|
module Condition
|
3
4
|
class Keywords < Base
|
4
|
-
# Because be default it joins with AND, so padding an array just gives you more options. Joining with and is no different than combining all of the words.
|
5
|
-
self.join_arrays_with_or = true
|
6
|
-
|
7
|
-
BLACKLISTED_WORDS = ('a'..'z').to_a + ["about", "an", "are", "as", "at", "be", "by", "com", "de", "en", "for", "from", "how", "in", "is", "it", "la", "of", "on", "or", "that", "the", "the", "this", "to", "und", "was", "what", "when", "where", "who", "will", "with", "www"] # from ranks.nl
|
8
|
-
ALLOWED_CHARACTERS = 'àáâãäåßéèêëìíîïñòóôõöùúûüýÿ\-_\.@'
|
9
|
-
|
10
5
|
class << self
|
11
6
|
def condition_names_for_column
|
12
7
|
super + ["kwords", "kw"]
|
13
8
|
end
|
9
|
+
|
10
|
+
attr_accessor :blacklisted_words, :allowed_characters
|
14
11
|
end
|
15
12
|
|
13
|
+
# Because be default it joins with AND, so padding an array just gives you more options. Joining with and is no different than combining all of the words.
|
14
|
+
self.join_arrays_with_or = true
|
15
|
+
|
16
|
+
self.blacklisted_words ||= []
|
17
|
+
self.blacklisted_words << ('a'..'z').to_a + ["about", "an", "are", "as", "at", "be", "by", "com", "de", "en", "for", "from", "how", "in", "is", "it", "la", "of", "on", "or", "that", "the", "the", "this", "to", "und", "was", "what", "when", "where", "who", "will", "with", "www"] # from ranks.nl
|
18
|
+
self.allowed_characters ||= ""
|
19
|
+
self.allowed_characters += 'àáâãäåßéèêëìíîïñòóôõöùúûüýÿ\-_\.@'
|
20
|
+
|
16
21
|
def to_conditions(value)
|
17
22
|
strs = []
|
18
23
|
subs = []
|
19
24
|
|
20
|
-
search_parts = value.gsub(/,/, " ").split(/ /)
|
25
|
+
search_parts = value.to_s.gsub(/,/, " ").split(/ /)
|
21
26
|
replace_non_alnum_characters!(search_parts)
|
22
27
|
search_parts.uniq!
|
23
28
|
remove_blacklisted_words!(search_parts)
|
@@ -35,12 +40,12 @@ module Searchlogic
|
|
35
40
|
def replace_non_alnum_characters!(search_parts)
|
36
41
|
search_parts.each do |word|
|
37
42
|
word.downcase!
|
38
|
-
word.gsub!(/[^[:alnum:]#{
|
43
|
+
word.gsub!(/[^[:alnum:]#{self.class.allowed_characters}]/, '')
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
42
47
|
def remove_blacklisted_words!(search_parts)
|
43
|
-
search_parts.delete_if { |word| word.blank? ||
|
48
|
+
search_parts.delete_if { |word| word.blank? || self.class.blacklisted_words.include?(word.downcase) }
|
44
49
|
end
|
45
50
|
end
|
46
51
|
end
|
@@ -54,6 +54,7 @@ module Searchlogic
|
|
54
54
|
return true if self.class.added_associations
|
55
55
|
|
56
56
|
klass.reflect_on_all_associations.each do |association|
|
57
|
+
next if !association.options[:finder_sql].nil? # associations with finder_sql should not be added since conditions can not be chained to them, etc.
|
57
58
|
self.class.class_eval <<-"end_eval", __FILE__, __LINE__
|
58
59
|
def #{association.name}
|
59
60
|
return @#{association.name} unless @#{association.name}.nil?
|
@@ -20,7 +20,7 @@ module Searchlogic
|
|
20
20
|
links_options.delete(:choices)
|
21
21
|
html = ""
|
22
22
|
options[:choices].each do |choice|
|
23
|
-
link_options =
|
23
|
+
link_options = links_options.deep_dup
|
24
24
|
text, value = option_text_and_value(choice)
|
25
25
|
link_options[:text] ||= text
|
26
26
|
html += order_by_link(value, link_options)
|
@@ -46,7 +46,7 @@ module Searchlogic
|
|
46
46
|
links_options.delete(:choices)
|
47
47
|
html = ""
|
48
48
|
options[:choices].each do |choice|
|
49
|
-
link_options =
|
49
|
+
link_options = links_options.deep_dup
|
50
50
|
text, value = option_text_and_value(choice)
|
51
51
|
link_options[:text] ||= text
|
52
52
|
html += order_as_link(value, link_options)
|
@@ -82,7 +82,7 @@ module Searchlogic
|
|
82
82
|
|
83
83
|
def frisk!(options)
|
84
84
|
options.symbolize_keys.fast_assert_valid_keys(SAFE_OPTIONS)
|
85
|
-
raise(ArgumentError, ":order_by can only contain colum names in the string, hash, or array format") unless order_by_safe?(get_order_by_value(options[:order_by]))
|
85
|
+
raise(ArgumentError, ":order_by can only contain colum names and relationships in the string, hash, or array format. You are trying to pass a value that does not meet this criteria.") unless order_by_safe?(get_order_by_value(options[:order_by]))
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -29,6 +29,7 @@ module Searchlogic
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def scope_condition(condition)
|
32
|
+
return condition if condition.blank?
|
32
33
|
arr_condition = condition.is_a?(Array) ? condition : [condition]
|
33
34
|
arr_condition[0] = "(#{arr_condition[0]})"
|
34
35
|
arr_condition.size == 1 ? arr_condition.first : arr_condition
|
data/lib/searchlogic/version.rb
CHANGED
data/searchlogic.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{searchlogic}
|
5
|
-
s.version = "1.6.
|
5
|
+
s.version = "1.6.5"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Ben Johnson of Binary Logic"]
|
9
|
-
s.date = %q{2009-02
|
9
|
+
s.date = %q{2009-04-02}
|
10
10
|
s.description = %q{Object based ActiveRecord searching, ordering, pagination, and more!}
|
11
11
|
s.email = %q{bjohnson@binarylogic.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG.rdoc", "lib/searchlogic/active_record/associations.rb", "lib/searchlogic/active_record/base.rb", "lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb", "lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb", "lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb", "lib/searchlogic/condition/base.rb", "lib/searchlogic/condition/begins_with.rb", "lib/searchlogic/condition/blank.rb", "lib/searchlogic/condition/child_of.rb", "lib/searchlogic/condition/descendant_of.rb", "lib/searchlogic/condition/ends_with.rb", "lib/searchlogic/condition/equals.rb", "lib/searchlogic/condition/greater_than.rb", "lib/searchlogic/condition/greater_than_or_equal_to.rb", "lib/searchlogic/condition/inclusive_descendant_of.rb", "lib/searchlogic/condition/keywords.rb", "lib/searchlogic/condition/less_than.rb", "lib/searchlogic/condition/less_than_or_equal_to.rb", "lib/searchlogic/condition/like.rb", "lib/searchlogic/condition/nested_set.rb", "lib/searchlogic/condition/nil.rb", "lib/searchlogic/condition/not_begin_with.rb", "lib/searchlogic/condition/not_blank.rb", "lib/searchlogic/condition/not_end_with.rb", "lib/searchlogic/condition/not_equal.rb", "lib/searchlogic/condition/not_have_keywords.rb", "lib/searchlogic/condition/not_like.rb", "lib/searchlogic/condition/not_nil.rb", "lib/searchlogic/condition/sibling_of.rb", "lib/searchlogic/conditions/any_or_all.rb", "lib/searchlogic/conditions/base.rb", "lib/searchlogic/conditions/groups.rb", "lib/searchlogic/conditions/magic_methods.rb", "lib/searchlogic/conditions/multiparameter_attributes.rb", "lib/searchlogic/conditions/protection.rb", "lib/searchlogic/config/helpers.rb", "lib/searchlogic/config/search.rb", "lib/searchlogic/config.rb", "lib/searchlogic/core_ext/hash.rb", "lib/searchlogic/core_ext/object.rb", "lib/searchlogic/helpers/control_types/link.rb", "lib/searchlogic/helpers/control_types/links.rb", "lib/searchlogic/helpers/control_types/remote_link.rb", "lib/searchlogic/helpers/control_types/remote_links.rb", "lib/searchlogic/helpers/control_types/remote_select.rb", "lib/searchlogic/helpers/control_types/select.rb", "lib/searchlogic/helpers/form.rb", "lib/searchlogic/helpers/utilities.rb", "lib/searchlogic/modifiers/absolute.rb", "lib/searchlogic/modifiers/acos.rb", "lib/searchlogic/modifiers/asin.rb", "lib/searchlogic/modifiers/atan.rb", "lib/searchlogic/modifiers/avg.rb", "lib/searchlogic/modifiers/base.rb", "lib/searchlogic/modifiers/ceil.rb", "lib/searchlogic/modifiers/char_length.rb", "lib/searchlogic/modifiers/cos.rb", "lib/searchlogic/modifiers/cot.rb", "lib/searchlogic/modifiers/count.rb", "lib/searchlogic/modifiers/day_of_month.rb", "lib/searchlogic/modifiers/day_of_week.rb", "lib/searchlogic/modifiers/day_of_year.rb", "lib/searchlogic/modifiers/degrees.rb", "lib/searchlogic/modifiers/exp.rb", "lib/searchlogic/modifiers/floor.rb", "lib/searchlogic/modifiers/hex.rb", "lib/searchlogic/modifiers/hour.rb", "lib/searchlogic/modifiers/log.rb", "lib/searchlogic/modifiers/log10.rb", "lib/searchlogic/modifiers/log2.rb", "lib/searchlogic/modifiers/lower.rb", "lib/searchlogic/modifiers/ltrim.rb", "lib/searchlogic/modifiers/md5.rb", "lib/searchlogic/modifiers/microseconds.rb", "lib/searchlogic/modifiers/milliseconds.rb", "lib/searchlogic/modifiers/minute.rb", "lib/searchlogic/modifiers/month.rb", "lib/searchlogic/modifiers/octal.rb", "lib/searchlogic/modifiers/radians.rb", "lib/searchlogic/modifiers/round.rb", "lib/searchlogic/modifiers/rtrim.rb", "lib/searchlogic/modifiers/second.rb", "lib/searchlogic/modifiers/sign.rb", "lib/searchlogic/modifiers/sin.rb", "lib/searchlogic/modifiers/square_root.rb", "lib/searchlogic/modifiers/sum.rb", "lib/searchlogic/modifiers/tan.rb", "lib/searchlogic/modifiers/trim.rb", "lib/searchlogic/modifiers/upper.rb", "lib/searchlogic/modifiers/week.rb", "lib/searchlogic/modifiers/year.rb", "lib/searchlogic/search/base.rb", "lib/searchlogic/search/conditions.rb", "lib/searchlogic/search/ordering.rb", "lib/searchlogic/search/pagination.rb", "lib/searchlogic/search/protection.rb", "lib/searchlogic/search/searching.rb", "lib/searchlogic/shared/utilities.rb", "lib/searchlogic/shared/virtual_classes.rb", "lib/searchlogic/version.rb", "lib/searchlogic.rb", "README.rdoc", "TODO.rdoc"]
|
@@ -38,7 +38,7 @@ module ActiveRecordTests
|
|
38
38
|
search = binary_logic.orders.new_search
|
39
39
|
assert_kind_of Searchlogic::Search::Base, search
|
40
40
|
assert_equal Order, search.klass
|
41
|
-
assert_equal({:
|
41
|
+
assert_equal({:conditions => "(\"users\".account_id = 431064614)", :joins => "INNER JOIN \"users\" ON \"orders\".user_id = \"users\".id "}, search.scope)
|
42
42
|
|
43
43
|
bens_order = orders(:bens_order)
|
44
44
|
assert_equal [bens_order], search.all
|
@@ -37,7 +37,7 @@ module ActiveRecordTests
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_valid_ar_options
|
40
|
-
assert_equal [:conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :group, :from, :lock], ActiveRecord::Base.valid_find_options
|
40
|
+
assert_equal [:conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :group, :having, :from, :lock], ActiveRecord::Base.valid_find_options
|
41
41
|
assert_equal [:conditions, :joins, :order, :select, :group, :having, :distinct, :limit, :offset, :include, :from], ActiveRecord::Base.valid_calculations_options
|
42
42
|
end
|
43
43
|
|
@@ -5,19 +5,19 @@ module ConditionTests
|
|
5
5
|
def test_sanitize
|
6
6
|
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
7
7
|
condition.value = "true"
|
8
|
-
assert_equal "(\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = ''
|
8
|
+
assert_equal "(\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '')", condition.sanitize
|
9
9
|
|
10
10
|
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
11
11
|
condition.value = "false"
|
12
|
-
assert_equal "(\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != ''
|
12
|
+
assert_equal "(\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '')", condition.sanitize
|
13
13
|
|
14
|
-
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["
|
14
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["active"])
|
15
15
|
condition.value = true
|
16
|
-
assert_equal "(\"accounts\".\"
|
16
|
+
assert_equal "(\"accounts\".\"active\" IS NULL or \"accounts\".\"active\" = '' or \"accounts\".\"active\" = false)", condition.sanitize
|
17
17
|
|
18
|
-
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["
|
18
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["active"])
|
19
19
|
condition.value = false
|
20
|
-
assert_equal "(\"accounts\".\"
|
20
|
+
assert_equal "(\"accounts\".\"active\" IS NOT NULL and \"accounts\".\"active\" != '' and \"accounts\".\"active\" != false)", condition.sanitize
|
21
21
|
|
22
22
|
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
23
23
|
condition.value = nil
|
data/test/test_helper.rb
CHANGED
@@ -107,10 +107,11 @@ end
|
|
107
107
|
class Cat < Animal
|
108
108
|
end
|
109
109
|
|
110
|
-
class
|
110
|
+
class ActiveSupport::TestCase
|
111
|
+
include ActiveRecord::TestFixtures
|
111
112
|
self.fixture_path = File.dirname(__FILE__) + "/fixtures"
|
112
|
-
self.use_transactional_fixtures =
|
113
|
+
self.use_transactional_fixtures = false
|
113
114
|
self.use_instantiated_fixtures = false
|
114
|
-
self.pre_loaded_fixtures =
|
115
|
+
self.pre_loaded_fixtures = false
|
115
116
|
fixtures :all
|
116
117
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: searchlogic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Johnson of Binary Logic
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02
|
12
|
+
date: 2009-04-02 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|