searchgasm 0.9.2 → 0.9.3

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.
Files changed (33) hide show
  1. data/CHANGELOG +2 -0
  2. data/Manifest +17 -4
  3. data/README.mdown +19 -16
  4. data/lib/searchgasm/search/base.rb +2 -4
  5. data/lib/searchgasm/search/condition_types/begins_with_condition.rb +28 -0
  6. data/lib/searchgasm/search/condition_types/child_of_condition.rb +17 -0
  7. data/lib/searchgasm/search/condition_types/condition.rb +107 -0
  8. data/lib/searchgasm/search/condition_types/contains_condition.rb +26 -0
  9. data/lib/searchgasm/search/condition_types/descendant_of_condition.rb +30 -0
  10. data/lib/searchgasm/search/condition_types/does_not_equal_condition.rb +34 -0
  11. data/lib/searchgasm/search/condition_types/ends_with_condition.rb +26 -0
  12. data/lib/searchgasm/search/condition_types/equals_condition.rb +26 -0
  13. data/lib/searchgasm/search/condition_types/greater_than_condition.rb +31 -0
  14. data/lib/searchgasm/search/condition_types/greater_than_or_equal_to_condition.rb +26 -0
  15. data/lib/searchgasm/search/condition_types/inclusive_descendant_of_condition.rb +19 -0
  16. data/lib/searchgasm/search/condition_types/keywords_condition.rb +39 -0
  17. data/lib/searchgasm/search/condition_types/less_than_condition.rb +31 -0
  18. data/lib/searchgasm/search/condition_types/less_than_or_equal_to_condition.rb +26 -0
  19. data/lib/searchgasm/search/condition_types/sibling_of_condition.rb +22 -0
  20. data/lib/searchgasm/search/condition_types/tree_condition.rb +20 -0
  21. data/lib/searchgasm/search/conditions.rb +55 -82
  22. data/lib/searchgasm/version.rb +1 -1
  23. data/lib/searchgasm.rb +23 -2
  24. data/searchgasm.gemspec +36 -10
  25. data/test/test_helper.rb +1 -0
  26. data/test/test_searchgasm_base.rb +32 -0
  27. data/test/test_searchgasm_condition_types.rb +143 -0
  28. data/test/test_searchgasm_conditions.rb +21 -29
  29. metadata +35 -9
  30. data/lib/searchgasm/helpers.rb +0 -100
  31. data/lib/searchgasm/search/condition.rb +0 -168
  32. data/test/test_active_record_protection.rb +0 -0
  33. data/test/test_searchgasm_condition.rb +0 -149
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchgasm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Johnson of Binary Logic
@@ -52,9 +52,23 @@ extra_rdoc_files:
52
52
  - CHANGELOG
53
53
  - lib/searchgasm/active_record/associations.rb
54
54
  - lib/searchgasm/active_record/base.rb
55
- - lib/searchgasm/helpers.rb
56
55
  - lib/searchgasm/search/base.rb
57
- - lib/searchgasm/search/condition.rb
56
+ - lib/searchgasm/search/condition_types/begins_with_condition.rb
57
+ - lib/searchgasm/search/condition_types/child_of_condition.rb
58
+ - lib/searchgasm/search/condition_types/condition.rb
59
+ - lib/searchgasm/search/condition_types/contains_condition.rb
60
+ - lib/searchgasm/search/condition_types/descendant_of_condition.rb
61
+ - lib/searchgasm/search/condition_types/does_not_equal_condition.rb
62
+ - lib/searchgasm/search/condition_types/ends_with_condition.rb
63
+ - lib/searchgasm/search/condition_types/equals_condition.rb
64
+ - lib/searchgasm/search/condition_types/greater_than_condition.rb
65
+ - lib/searchgasm/search/condition_types/greater_than_or_equal_to_condition.rb
66
+ - lib/searchgasm/search/condition_types/inclusive_descendant_of_condition.rb
67
+ - lib/searchgasm/search/condition_types/keywords_condition.rb
68
+ - lib/searchgasm/search/condition_types/less_than_condition.rb
69
+ - lib/searchgasm/search/condition_types/less_than_or_equal_to_condition.rb
70
+ - lib/searchgasm/search/condition_types/sibling_of_condition.rb
71
+ - lib/searchgasm/search/condition_types/tree_condition.rb
58
72
  - lib/searchgasm/search/conditions.rb
59
73
  - lib/searchgasm/search/utilities.rb
60
74
  - lib/searchgasm/version.rb
@@ -65,9 +79,23 @@ files:
65
79
  - init.rb
66
80
  - lib/searchgasm/active_record/associations.rb
67
81
  - lib/searchgasm/active_record/base.rb
68
- - lib/searchgasm/helpers.rb
69
82
  - lib/searchgasm/search/base.rb
70
- - lib/searchgasm/search/condition.rb
83
+ - lib/searchgasm/search/condition_types/begins_with_condition.rb
84
+ - lib/searchgasm/search/condition_types/child_of_condition.rb
85
+ - lib/searchgasm/search/condition_types/condition.rb
86
+ - lib/searchgasm/search/condition_types/contains_condition.rb
87
+ - lib/searchgasm/search/condition_types/descendant_of_condition.rb
88
+ - lib/searchgasm/search/condition_types/does_not_equal_condition.rb
89
+ - lib/searchgasm/search/condition_types/ends_with_condition.rb
90
+ - lib/searchgasm/search/condition_types/equals_condition.rb
91
+ - lib/searchgasm/search/condition_types/greater_than_condition.rb
92
+ - lib/searchgasm/search/condition_types/greater_than_or_equal_to_condition.rb
93
+ - lib/searchgasm/search/condition_types/inclusive_descendant_of_condition.rb
94
+ - lib/searchgasm/search/condition_types/keywords_condition.rb
95
+ - lib/searchgasm/search/condition_types/less_than_condition.rb
96
+ - lib/searchgasm/search/condition_types/less_than_or_equal_to_condition.rb
97
+ - lib/searchgasm/search/condition_types/sibling_of_condition.rb
98
+ - lib/searchgasm/search/condition_types/tree_condition.rb
71
99
  - lib/searchgasm/search/conditions.rb
72
100
  - lib/searchgasm/search/utilities.rb
73
101
  - lib/searchgasm/version.rb
@@ -83,10 +111,9 @@ files:
83
111
  - test/libs/rexml_fix.rb
84
112
  - test/test_active_record_associations.rb
85
113
  - test/test_active_record_base.rb
86
- - test/test_active_record_protection.rb
87
114
  - test/test_helper.rb
88
115
  - test/test_searchgasm_base.rb
89
- - test/test_searchgasm_condition.rb
116
+ - test/test_searchgasm_condition_types.rb
90
117
  - test/test_searchgasm_conditions.rb
91
118
  - searchgasm.gemspec
92
119
  has_rdoc: true
@@ -123,8 +150,7 @@ summary: Orgasmic ActiveRecord searching
123
150
  test_files:
124
151
  - test/test_active_record_associations.rb
125
152
  - test/test_active_record_base.rb
126
- - test/test_active_record_protection.rb
127
153
  - test/test_helper.rb
128
154
  - test/test_searchgasm_base.rb
129
- - test/test_searchgasm_condition.rb
155
+ - test/test_searchgasm_condition_types.rb
130
156
  - test/test_searchgasm_conditions.rb
@@ -1,100 +0,0 @@
1
- require "base64"
2
-
3
- module BinaryLogic
4
- module SearchGasm
5
- module Helpers
6
- def order_by_link(text, searcher, options = {})
7
- options[:order_by] ||= text.underscore.gsub(/ /, "_")
8
- options[:order_as] ||= "ASC"
9
- options[:form_prefix] ||= determine_form_prefix(searcher)
10
-
11
- if searcher.order_by == options[:order_by]
12
- options[:order_as] = searcher.order_as == "ASC" ? "DESC" : "ASC"
13
-
14
- text = content_tag("span", text + (searcher.order_as == "ASC" ? " ▲" : " ▼"), :class => searcher.order_as == "ASC" ? "ordering asc" : "ordering desc")
15
- end
16
-
17
- options[:order_by] = Base64.encode64(Marshal.dump(options[:order_by])) if !options[:order_by].nil? && !options[:order_by].is_a?(String) && !options[:order_by].is_a?(Symbol)
18
-
19
- link_to_function(text, "submit_form({form_prefix: '#{options[:form_prefix]}', dont_reset: true, fields: {order_by: '#{escape_javascript(options[:order_by])}', order_as: '#{options[:order_as]}'}});")
20
- end
21
-
22
- # tag methods
23
- #------------------------------------------------------------------------------
24
- def page_select_tag(name, items_count, searcher, options = {})
25
- options = options.dup
26
- form_prefix = options.delete(:form_prefix) || determine_form_prefix(searcher)
27
- options[:id] ||= "select_tag_#{unique_id}"
28
- options[:onchange] ||= "submit_form({form_prefix: '#{form_prefix}', dont_reset: true, fields: {page: this.value}});"
29
- items_count = items_count.to_i
30
- per_page = searcher.per_page.to_i
31
- page = searcher.page.to_i
32
- page = 1 if page < 1
33
- page_options = page_options_for_select(items_count, per_page)
34
-
35
- html = ""
36
- if page_options.size > 0
37
- html << (button_to_function("Prev", "sel = $('#{options[:id]}'); sel.value = '#{page-1}'; sel.onchange();", :class => "prev_page") + "&nbsp;") if page > 1
38
- html << select_tag(name, options_for_select(page_options, page), options)
39
- html << ("&nbsp;" + button_to_function("Next", "sel = $('#{options[:id]}'); sel.value = '#{page+1}'; sel.onchange();", :class => "next_page")) if page < page_options.size
40
- end
41
-
42
- html
43
- end
44
-
45
- def per_page_select_tag(name, items_count, searcher, options = {})
46
- options = options.dup
47
- form_prefix = options.delete(:form_prefix) || determine_form_prefix(searcher)
48
- options[:onchange] ||= "submit_form({form_prefix: '#{form_prefix}', dont_reset: true, fields: {per_page: this.value}});"
49
- items_count = items_count.to_i
50
- per_page = searcher.per_page.to_i
51
- per_page = 0 if items_count <= per_page
52
-
53
- # set up per page options
54
- per_page_options = per_page_options_for_select(items_count)
55
-
56
- return select_tag(name, options_for_select(per_page_options, per_page), options) if per_page_options.size > 0
57
-
58
- ""
59
- end
60
-
61
- # utility methods
62
- #------------------------------------------------------------------------------
63
- def page_options_for_select(items_count, per_page)
64
- page_count = per_page > 0 ? (items_count.to_f / per_page.to_f).ceil : 1
65
- page_options = []
66
- if page_count > 1
67
- page_count.times do |page|
68
- page_number = page + 1
69
- page_options << ["Page #{page_number} of #{page_count}", page_number]
70
- end
71
- end
72
- page_options
73
- end
74
-
75
- def per_page_options_for_select(items_count)
76
- per_page_options = []
77
- per_page_values = [10, 20, 30, 40, 50, 75, 100, 125, 150, 175, 200, 300, 400, 500, 1000, 1500, 2000]
78
- per_page_values.each do |per_page_num|
79
- if items_count > per_page_num
80
- per_page_options << ["#{per_page_num} per page", per_page_num] if per_page_num > 0
81
- else
82
- break
83
- end
84
- end
85
-
86
- if per_page_options.size > 0
87
- per_page_options << ["Show all #{items_count}", 0]
88
- end
89
-
90
- per_page_options
91
- end
92
-
93
- def determine_form_prefix(searcher)
94
- "#{searcher.class.name.underscore.gsub(/_searcher/, "").pluralize}_search_"
95
- end
96
- end
97
- end
98
- end
99
-
100
- ActionController::Base.helper BinaryLogic::SearchGasm::Helpers
@@ -1,168 +0,0 @@
1
- module BinaryLogic
2
- module Searchgasm
3
- module Search
4
- class Condition
5
- include Utilities
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
- attr_accessor :column, :condition, :name, :klass
9
- attr_reader :value
10
-
11
- class << self
12
- def generate_name(column, condition)
13
- name_parts = []
14
- name_parts << (column.is_a?(String) ? column : column.name) unless column.blank?
15
- name_parts << condition unless condition.blank?
16
- name_parts.join("_")
17
- end
18
- end
19
-
20
- def initialize(condition, klass, column = nil)
21
- raise(ArgumentError, "#{klass.name} must acts_as_tree to use the :#{condition} condition") if requires_tree?(condition) && !has_tree?(klass)
22
-
23
- self.condition = condition
24
- self.name = self.class.generate_name(column, condition)
25
- self.klass = klass
26
- self.column = column.is_a?(String) ? klass.columns_hash[column] : column
27
- end
28
-
29
- def explicitly_set_value=(value)
30
- @explicitly_set_value = value
31
- end
32
-
33
- # Need this if someone wants to actually use nil in a meaningful way
34
- def explicitly_set_value?
35
- @explicitly_set_value == true
36
- end
37
-
38
- def has_tree?(klass = klass)
39
- !klass.reflect_on_association(:parent).nil?
40
- end
41
-
42
- def ignore_blanks?
43
- ![:equals, :does_not_equal].include?(condition)
44
- end
45
-
46
- def quote_column_name(column_name)
47
- klass.connection.quote_column_name(column_name)
48
- end
49
-
50
- def quoted_column_name
51
- quote_column_name(column.name)
52
- end
53
-
54
- def requires_tree?(condition = condition)
55
- [:child_of, :sibling_of, :descendent_of, :inclusive_descendent_of].include?(condition)
56
- end
57
-
58
- def sanitize
59
- return unless explicitly_set_value?
60
- v = value
61
- v = v.utc if false && [:time, :timestamp, :datetime].include?(column.type) && klass.time_zone_aware_attributes && !klass.skip_time_zone_conversion_for_attributes.include?(column.name.to_sym)
62
- generate_conditions(condition, v)
63
- end
64
-
65
- def table_name
66
- klass.connection.quote_table_name(klass.table_name)
67
- end
68
-
69
- def value
70
- @value.is_a?(String) ? column.type_cast(@value) : @value
71
- end
72
-
73
- def value=(v)
74
- return if ignore_blanks? && v.blank?
75
- self.explicitly_set_value = true
76
- @value = v
77
- end
78
-
79
- private
80
- def generate_conditions(condition, value)
81
- if [:equals, :does_not_equal].include?(condition)
82
- # Let ActiveRecord handle this
83
- sql = klass.send(:sanitize_sql_hash_for_conditions, {column.name => value})
84
- if condition == :does_not_equal
85
- sql.gsub!(/ IS /, " IS NOT ")
86
- sql.gsub!(/ BETWEEN /, " NOT BETWEEN ")
87
- sql.gsub!(/ IN /, " NOT IN ")
88
- sql.gsub!(/=/, "!=")
89
- end
90
- return [sql]
91
- end
92
-
93
- strs = []
94
- subs = []
95
-
96
- if value.is_a?(Array)
97
- merge_conditions(*value.collect { |v| generate_conditions(condition, v) })
98
- else
99
- case condition
100
- when :begins_with
101
- search_parts = value.split(/ /)
102
- search_parts.each do |search_part|
103
- strs << "#{table_name}.#{quoted_column_name} LIKE ?"
104
- subs << "#{search_part}%"
105
- end
106
- when :contains
107
- strs << "#{table_name}.#{quoted_column_name} LIKE ?"
108
- subs << "%#{value}%"
109
- when :ends_with
110
- search_parts = value.split(/ /)
111
- search_parts.each do |search_part|
112
- strs << "#{table_name}.#{quoted_column_name} LIKE ?"
113
- subs << "%#{search_part}"
114
- end
115
- when :greater_than
116
- strs << "#{table_name}.#{quoted_column_name} > ?"
117
- subs << value
118
- when :greater_than_or_equal_to
119
- strs << "#{table_name}.#{quoted_column_name} >= ?"
120
- subs << value
121
- when :keywords
122
- search_parts = value.gsub(/,/, " ").split(/ /).collect { |word| word.downcase.gsub(/[^[:alnum:]]/, ''); }.uniq.select { |word| !BLACKLISTED_WORDS.include?(word.downcase) && !word.blank? }
123
- search_parts.each do |search_part|
124
- strs << "#{table_name}.#{quoted_column_name} LIKE ?"
125
- subs << "%#{search_part}%"
126
- end
127
- when :less_than
128
- strs << "#{table_name}.#{quoted_column_name} < ?"
129
- subs << value
130
- when :less_than_or_equal_to
131
- strs << "#{table_name}.#{quoted_column_name} <= ?"
132
- subs << value
133
- when :child_of
134
- parent_association = klass.reflect_on_association(:parent)
135
- foreign_key_name = (parent_association && parent_association.options[:foreign_key]) || "parent_id"
136
- strs << "#{table_name}.#{quote_column_name(foreign_key_name)} = ?"
137
- subs << value
138
- when :sibling_of
139
- parent_association = klass.reflect_on_association(:parent)
140
- foreign_key_name = (parent_association && parent_association.options[:foreign_key]) || "parent_id"
141
- parent_id = klass.find(value).send(foreign_key_name)
142
- return generate_conditions(:child_of, parent_id)
143
- when :descendent_of
144
- # Wish I knew how to do this in SQL
145
- root = klass.find(value) rescue return
146
- condition_strs = []
147
- all_children_ids(root).each do |child_id|
148
- condition_strs << "#{table_name}.#{quote_column_name(klass.primary_key)} = ?"
149
- subs << child_id
150
- end
151
- strs << condition_strs.join(" OR ")
152
- when :inclusive_descendent_of
153
- return merge_conditions(["#{table_name}.#{quote_column_name(klass.primary_key)} = ?", value], generate_conditions(:descendent_of, value), :any => true)
154
- end
155
-
156
- [strs.join(" AND "), *subs]
157
- end
158
- end
159
-
160
- def all_children_ids(record)
161
- ids = record.children.collect { |child| child.send(klass.primary_key) }
162
- record.children.each { |child| ids += all_children_ids(child) }
163
- ids
164
- end
165
- end
166
- end
167
- end
168
- end
File without changes
@@ -1,149 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestSearchgasmCondition < Test::Unit::TestCase
4
- fixtures :accounts, :users, :orders
5
-
6
- def setup
7
- setup_db
8
- load_fixtures
9
- end
10
-
11
- def teardown
12
- teardown_db
13
- end
14
-
15
- def test_generate_name
16
- name = BinaryLogic::Searchgasm::Search::Condition.generate_name(Account.columns_hash["id"], :equals)
17
- assert_equal name, "id_equals"
18
-
19
- name = BinaryLogic::Searchgasm::Search::Condition.generate_name("test", :equals)
20
- assert_equal name, "test_equals"
21
-
22
- name = BinaryLogic::Searchgasm::Search::Condition.generate_name("test", "")
23
- assert_equal name, "test"
24
-
25
- name = BinaryLogic::Searchgasm::Search::Condition.generate_name("test", nil)
26
- assert_equal name, "test"
27
- end
28
-
29
- def test_initialize
30
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
31
- assert_equal condition.condition, :equals
32
- assert_equal condition.name, "id_equals"
33
- assert_equal condition.klass, Account
34
- assert_equal condition.column, Account.columns_hash["id"]
35
-
36
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, "id")
37
- assert_equal condition.column, Account.columns_hash["id"]
38
- end
39
-
40
- def test_explicitly_set_value
41
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
42
- assert !condition.explicitly_set_value?
43
- condition.value = nil
44
- assert condition.explicitly_set_value?
45
- end
46
-
47
- def test_ignore_blanks?
48
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
49
- assert !condition.ignore_blanks?
50
-
51
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:greater_than, Account, Account.columns_hash["id"])
52
- assert condition.ignore_blanks?
53
-
54
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:contains, Account, Account.columns_hash["name"])
55
- assert condition.ignore_blanks?
56
- end
57
-
58
- def test_sanitize
59
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
60
- condition.value = 12
61
- assert_equal condition.sanitize, ["\"accounts\".\"id\" = 12"]
62
-
63
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
64
- condition.value = nil
65
- assert_equal condition.sanitize, ["\"accounts\".\"id\" IS NULL"]
66
-
67
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
68
- condition.value = (1..100)
69
- assert_equal condition.sanitize, ["\"accounts\".\"id\" BETWEEN 1 AND 100"]
70
-
71
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:equals, Account, Account.columns_hash["id"])
72
- condition.value = [1,2,3,4,5]
73
- assert_equal condition.sanitize, ["\"accounts\".\"id\" IN (1,2,3,4,5)"]
74
-
75
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:does_not_equal, Account, Account.columns_hash["id"])
76
- condition.value = 12
77
- assert_equal condition.sanitize, ["\"accounts\".\"id\" != 12"]
78
-
79
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:does_not_equal, Account, Account.columns_hash["id"])
80
- condition.value = nil
81
- assert_equal condition.sanitize, ["\"accounts\".\"id\" IS NOT NULL"]
82
-
83
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:does_not_equal, Account, Account.columns_hash["id"])
84
- condition.value = (1..100)
85
- assert_equal condition.sanitize, ["\"accounts\".\"id\" NOT BETWEEN 1 AND 100"]
86
-
87
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:does_not_equal, Account, Account.columns_hash["id"])
88
- condition.value = [1,2,3,4,5]
89
- assert_equal condition.sanitize, ["\"accounts\".\"id\" NOT IN (1,2,3,4,5)"]
90
-
91
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:begins_with, Account, Account.columns_hash["name"])
92
- condition.value = "Binary"
93
- assert_equal condition.sanitize, ["\"accounts\".\"name\" LIKE ?", "Binary%"]
94
-
95
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:contains, Account, Account.columns_hash["name"])
96
- condition.value = "Binary"
97
- assert_equal condition.sanitize, ["\"accounts\".\"name\" LIKE ?", "%Binary%"]
98
-
99
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:ends_with, Account, Account.columns_hash["name"])
100
- condition.value = "Binary"
101
- assert_equal condition.sanitize, ["\"accounts\".\"name\" LIKE ?", "%Binary"]
102
-
103
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:greater_than, Account, Account.columns_hash["id"])
104
- condition.value = 2
105
- assert_equal condition.sanitize, ["\"accounts\".\"id\" > ?", 2]
106
-
107
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:greater_than_or_equal_to, Account, Account.columns_hash["id"])
108
- condition.value = 2
109
- assert_equal condition.sanitize, ["\"accounts\".\"id\" >= ?", 2]
110
-
111
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:keywords, Account, Account.columns_hash["name"])
112
- condition.value = "freedom yeah, freedom YEAH right"
113
- assert_equal condition.sanitize, ["\"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ?", "%freedom%", "%yeah%", "%right%"]
114
-
115
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:keywords, Account, Account.columns_hash["name"])
116
- condition.value = "$^&*()!"
117
- assert_equal condition.sanitize, [""]
118
-
119
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:less_than, Account, Account.columns_hash["id"])
120
- condition.value = 2
121
- assert_equal condition.sanitize, ["\"accounts\".\"id\" < ?", 2]
122
-
123
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:less_than_or_equal_to, Account, Account.columns_hash["id"])
124
- condition.value = 2
125
- assert_equal condition.sanitize, ["\"accounts\".\"id\" <= ?", 2]
126
-
127
- assert_raise(ArgumentError) { BinaryLogic::Searchgasm::Search::Condition.new(:descendent_of, Account, nil) }
128
-
129
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:child_of, User, nil)
130
- condition.value = 1
131
- assert_equal condition.sanitize, ["\"users\".\"parent_id\" = ?", 1]
132
-
133
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:sibling_of, User, nil)
134
- condition.value = 2
135
- assert_equal condition.sanitize, ["\"users\".\"parent_id\" = ?", 1]
136
-
137
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:descendent_of, User, nil)
138
- condition.value = 1
139
- assert_equal condition.sanitize, ["\"users\".\"id\" = ? OR \"users\".\"id\" = ?", 2, 3]
140
-
141
- condition = BinaryLogic::Searchgasm::Search::Condition.new(:inclusive_descendent_of, User, nil)
142
- condition.value = 1
143
- assert_equal condition.sanitize, ["(\"users\".\"id\" = ?) OR (\"users\".\"id\" = ? OR \"users\".\"id\" = ?)", 1, 2, 3]
144
- end
145
-
146
- def test_value
147
- end
148
-
149
- end