schof-searchlogic 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/CHANGELOG.rdoc +302 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Manifest +157 -0
  4. data/README.rdoc +461 -0
  5. data/Rakefile +13 -0
  6. data/TODO.rdoc +4 -0
  7. data/init.rb +1 -0
  8. data/lib/searchlogic.rb +100 -0
  9. data/lib/searchlogic/active_record/associations.rb +52 -0
  10. data/lib/searchlogic/active_record/base.rb +224 -0
  11. data/lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb +176 -0
  12. data/lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb +172 -0
  13. data/lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb +80 -0
  14. data/lib/searchlogic/condition/base.rb +165 -0
  15. data/lib/searchlogic/condition/begins_with.rb +17 -0
  16. data/lib/searchlogic/condition/blank.rb +21 -0
  17. data/lib/searchlogic/condition/child_of.rb +11 -0
  18. data/lib/searchlogic/condition/descendant_of.rb +11 -0
  19. data/lib/searchlogic/condition/ends_with.rb +17 -0
  20. data/lib/searchlogic/condition/equals.rb +33 -0
  21. data/lib/searchlogic/condition/greater_than.rb +15 -0
  22. data/lib/searchlogic/condition/greater_than_or_equal_to.rb +15 -0
  23. data/lib/searchlogic/condition/inclusive_descendant_of.rb +10 -0
  24. data/lib/searchlogic/condition/keywords.rb +47 -0
  25. data/lib/searchlogic/condition/less_than.rb +15 -0
  26. data/lib/searchlogic/condition/less_than_or_equal_to.rb +15 -0
  27. data/lib/searchlogic/condition/like.rb +15 -0
  28. data/lib/searchlogic/condition/nested_set.rb +17 -0
  29. data/lib/searchlogic/condition/nil.rb +21 -0
  30. data/lib/searchlogic/condition/not_begin_with.rb +20 -0
  31. data/lib/searchlogic/condition/not_blank.rb +19 -0
  32. data/lib/searchlogic/condition/not_end_with.rb +20 -0
  33. data/lib/searchlogic/condition/not_equal.rb +27 -0
  34. data/lib/searchlogic/condition/not_have_keywords.rb +20 -0
  35. data/lib/searchlogic/condition/not_like.rb +20 -0
  36. data/lib/searchlogic/condition/not_nil.rb +19 -0
  37. data/lib/searchlogic/condition/sibling_of.rb +14 -0
  38. data/lib/searchlogic/conditions/any_or_all.rb +42 -0
  39. data/lib/searchlogic/conditions/base.rb +244 -0
  40. data/lib/searchlogic/conditions/groups.rb +74 -0
  41. data/lib/searchlogic/conditions/magic_methods.rb +286 -0
  42. data/lib/searchlogic/conditions/multiparameter_attributes.rb +105 -0
  43. data/lib/searchlogic/conditions/protection.rb +36 -0
  44. data/lib/searchlogic/config.rb +31 -0
  45. data/lib/searchlogic/config/helpers.rb +338 -0
  46. data/lib/searchlogic/config/search.rb +53 -0
  47. data/lib/searchlogic/core_ext/hash.rb +75 -0
  48. data/lib/searchlogic/core_ext/object.rb +19 -0
  49. data/lib/searchlogic/helpers/control_types/link.rb +310 -0
  50. data/lib/searchlogic/helpers/control_types/links.rb +242 -0
  51. data/lib/searchlogic/helpers/control_types/remote_link.rb +87 -0
  52. data/lib/searchlogic/helpers/control_types/remote_links.rb +72 -0
  53. data/lib/searchlogic/helpers/control_types/remote_select.rb +36 -0
  54. data/lib/searchlogic/helpers/control_types/select.rb +82 -0
  55. data/lib/searchlogic/helpers/form.rb +208 -0
  56. data/lib/searchlogic/helpers/utilities.rb +197 -0
  57. data/lib/searchlogic/modifiers/absolute.rb +15 -0
  58. data/lib/searchlogic/modifiers/acos.rb +11 -0
  59. data/lib/searchlogic/modifiers/asin.rb +11 -0
  60. data/lib/searchlogic/modifiers/atan.rb +11 -0
  61. data/lib/searchlogic/modifiers/avg.rb +15 -0
  62. data/lib/searchlogic/modifiers/base.rb +27 -0
  63. data/lib/searchlogic/modifiers/ceil.rb +15 -0
  64. data/lib/searchlogic/modifiers/char_length.rb +15 -0
  65. data/lib/searchlogic/modifiers/cos.rb +15 -0
  66. data/lib/searchlogic/modifiers/cot.rb +15 -0
  67. data/lib/searchlogic/modifiers/count.rb +11 -0
  68. data/lib/searchlogic/modifiers/day_of_month.rb +15 -0
  69. data/lib/searchlogic/modifiers/day_of_week.rb +15 -0
  70. data/lib/searchlogic/modifiers/day_of_year.rb +15 -0
  71. data/lib/searchlogic/modifiers/degrees.rb +11 -0
  72. data/lib/searchlogic/modifiers/exp.rb +15 -0
  73. data/lib/searchlogic/modifiers/floor.rb +15 -0
  74. data/lib/searchlogic/modifiers/hex.rb +11 -0
  75. data/lib/searchlogic/modifiers/hour.rb +11 -0
  76. data/lib/searchlogic/modifiers/log.rb +15 -0
  77. data/lib/searchlogic/modifiers/log10.rb +11 -0
  78. data/lib/searchlogic/modifiers/log2.rb +11 -0
  79. data/lib/searchlogic/modifiers/lower.rb +15 -0
  80. data/lib/searchlogic/modifiers/ltrim.rb +15 -0
  81. data/lib/searchlogic/modifiers/md5.rb +11 -0
  82. data/lib/searchlogic/modifiers/microseconds.rb +11 -0
  83. data/lib/searchlogic/modifiers/milliseconds.rb +11 -0
  84. data/lib/searchlogic/modifiers/minute.rb +15 -0
  85. data/lib/searchlogic/modifiers/month.rb +15 -0
  86. data/lib/searchlogic/modifiers/octal.rb +15 -0
  87. data/lib/searchlogic/modifiers/radians.rb +11 -0
  88. data/lib/searchlogic/modifiers/round.rb +11 -0
  89. data/lib/searchlogic/modifiers/rtrim.rb +15 -0
  90. data/lib/searchlogic/modifiers/second.rb +15 -0
  91. data/lib/searchlogic/modifiers/sign.rb +11 -0
  92. data/lib/searchlogic/modifiers/sin.rb +11 -0
  93. data/lib/searchlogic/modifiers/square_root.rb +15 -0
  94. data/lib/searchlogic/modifiers/sum.rb +11 -0
  95. data/lib/searchlogic/modifiers/tan.rb +15 -0
  96. data/lib/searchlogic/modifiers/trim.rb +15 -0
  97. data/lib/searchlogic/modifiers/upper.rb +15 -0
  98. data/lib/searchlogic/modifiers/week.rb +11 -0
  99. data/lib/searchlogic/modifiers/year.rb +11 -0
  100. data/lib/searchlogic/search/base.rb +148 -0
  101. data/lib/searchlogic/search/conditions.rb +53 -0
  102. data/lib/searchlogic/search/ordering.rb +244 -0
  103. data/lib/searchlogic/search/pagination.rb +121 -0
  104. data/lib/searchlogic/search/protection.rb +89 -0
  105. data/lib/searchlogic/search/searching.rb +32 -0
  106. data/lib/searchlogic/shared/utilities.rb +56 -0
  107. data/lib/searchlogic/shared/virtual_classes.rb +39 -0
  108. data/lib/searchlogic/version.rb +79 -0
  109. data/searchlogic.gemspec +41 -0
  110. data/test/active_record_tests/associations_test.rb +94 -0
  111. data/test/active_record_tests/base_test.rb +115 -0
  112. data/test/condition_tests/base_test.rb +54 -0
  113. data/test/condition_tests/begins_with_test.rb +11 -0
  114. data/test/condition_tests/blank_test.rb +31 -0
  115. data/test/condition_tests/child_of_test.rb +17 -0
  116. data/test/condition_tests/descendant_of_test.rb +12 -0
  117. data/test/condition_tests/ends_with_test.rb +11 -0
  118. data/test/condition_tests/equals_test.rb +28 -0
  119. data/test/condition_tests/greater_than_or_equal_to_test.rb +11 -0
  120. data/test/condition_tests/greater_than_test.rb +11 -0
  121. data/test/condition_tests/inclusive_descendant_of_test.rb +12 -0
  122. data/test/condition_tests/keywords_test.rb +23 -0
  123. data/test/condition_tests/less_than_or_equal_to_test.rb +11 -0
  124. data/test/condition_tests/less_than_test.rb +11 -0
  125. data/test/condition_tests/like_test.rb +11 -0
  126. data/test/condition_tests/nil_test.rb +31 -0
  127. data/test/condition_tests/not_begin_with_test.rb +8 -0
  128. data/test/condition_tests/not_blank_test.rb +8 -0
  129. data/test/condition_tests/not_end_with_test.rb +8 -0
  130. data/test/condition_tests/not_equal_test.rb +19 -0
  131. data/test/condition_tests/not_have_keywords_test.rb +8 -0
  132. data/test/condition_tests/not_like_test.rb +8 -0
  133. data/test/condition_tests/not_nil_test.rb +13 -0
  134. data/test/condition_tests/sibling_of_test.rb +15 -0
  135. data/test/conditions_tests/any_or_all_test.rb +23 -0
  136. data/test/conditions_tests/base_test.rb +185 -0
  137. data/test/conditions_tests/groups_test.rb +68 -0
  138. data/test/conditions_tests/magic_methods_test.rb +36 -0
  139. data/test/conditions_tests/multiparameter_attributes_test.rb +15 -0
  140. data/test/conditions_tests/protection_test.rb +18 -0
  141. data/test/config_test.rb +23 -0
  142. data/test/fixtures/accounts.yml +12 -0
  143. data/test/fixtures/animals.yml +7 -0
  144. data/test/fixtures/orders.yml +12 -0
  145. data/test/fixtures/user_groups.yml +5 -0
  146. data/test/fixtures/users.yml +45 -0
  147. data/test/libs/awesome_nested_set.rb +545 -0
  148. data/test/libs/awesome_nested_set/compatability.rb +29 -0
  149. data/test/libs/awesome_nested_set/helper.rb +40 -0
  150. data/test/libs/awesome_nested_set/named_scope.rb +140 -0
  151. data/test/libs/rexml_fix.rb +14 -0
  152. data/test/modifier_tests/day_of_month_test.rb +16 -0
  153. data/test/search_tests/base_test.rb +241 -0
  154. data/test/search_tests/conditions_test.rb +21 -0
  155. data/test/search_tests/ordering_test.rb +167 -0
  156. data/test/search_tests/pagination_test.rb +74 -0
  157. data/test/search_tests/protection_test.rb +26 -0
  158. data/test/test_helper.rb +116 -0
  159. metadata +385 -0
@@ -0,0 +1,94 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ActiveRecordTests
4
+ class AssociationsTest < ActiveSupport::TestCase
5
+ def test_has_many
6
+ binary_logic = accounts(:binary_logic)
7
+ ben = users(:ben)
8
+ jennifer = users(:jennifer)
9
+
10
+ search = binary_logic.users.new_search
11
+ assert_kind_of Searchlogic::Search::Base, search
12
+ assert_equal User, search.klass
13
+ assert_equal({:conditions => "\"users\".account_id = #{binary_logic.id}"}, search.scope)
14
+
15
+ assert_equal [ben, jennifer], search.all
16
+ assert_equal ben, search.first
17
+ assert_equal ((ben.id + jennifer.id) / 2.0), search.average("id")
18
+ assert_equal 2, search.count
19
+
20
+ search.conditions.first_name_contains = "Ben"
21
+
22
+ assert_equal [ben], search.all
23
+ assert_equal ben, search.first
24
+ assert_equal ben.id, search.average("id")
25
+ assert_equal 1, search.count
26
+
27
+ assert_equal 2, binary_logic.users.count
28
+ assert_equal 1, binary_logic.users.all(:conditions => {:first_name_contains => "Ben"}).size
29
+ assert_equal 0, binary_logic.users.all(:conditions => {:first_name_contains => "No one"}).size
30
+ assert_equal ben.id, binary_logic.users.sum("id", :conditions => {:first_name_contains => "Ben"})
31
+ assert_equal 0, binary_logic.users.sum("id", :conditions => {:first_name_contains => "No one"})
32
+ assert_equal ben.id, binary_logic.users.average("id", :conditions => {:first_name_contains => "Ben"})
33
+ end
34
+
35
+ def test_has_many_through
36
+ binary_logic = accounts(:binary_logic)
37
+
38
+ search = binary_logic.orders.new_search
39
+ assert_kind_of Searchlogic::Search::Base, search
40
+ assert_equal Order, search.klass
41
+ assert_equal({:joins => "INNER JOIN users ON orders.user_id = users.id ", :conditions => "(\"users\".account_id = #{binary_logic.id})"}, search.scope)
42
+
43
+ bens_order = orders(:bens_order)
44
+ assert_equal [bens_order], search.all
45
+ assert_equal bens_order, search.first
46
+ assert_equal bens_order.id, search.average("id")
47
+ assert_equal 1, search.count
48
+
49
+ search.conditions.total_gt = 100
50
+
51
+ assert_equal [bens_order], search.all
52
+ assert_equal bens_order, search.first
53
+ assert_equal bens_order.id, search.average("id")
54
+ assert_equal 1, search.count
55
+
56
+ assert_equal 1, binary_logic.orders.count
57
+ assert_equal 1, binary_logic.orders.all(:conditions => {:total_gt => 100}).size
58
+ assert_equal 0, binary_logic.orders.all(:conditions => {:total_gt => 1000}).size
59
+ assert_equal bens_order.id, binary_logic.orders.sum("id", :conditions => {:total_gt => 100})
60
+ assert_equal 0, binary_logic.orders.sum("id", :conditions => {:total_gt => 1000})
61
+ assert_equal bens_order.id, binary_logic.orders.average("id", :conditions => {:total_gt => 100})
62
+ end
63
+
64
+ def test_habtm
65
+ neco = user_groups(:neco)
66
+ ben = users(:ben)
67
+ drew = users(:drew)
68
+
69
+ search = neco.users.new_search
70
+ assert_kind_of Searchlogic::Search::Base, search
71
+ assert_equal User, search.klass
72
+ assert_equal({:conditions => "\"user_groups_users\".user_group_id = #{neco.id} ", :joins => "INNER JOIN \"user_groups_users\" ON \"users\".id = \"user_groups_users\".user_id"}, search.scope)
73
+ assert_equal [drew, ben], search.all
74
+
75
+ assert_equal drew, search.first
76
+ assert_equal ((ben.id + drew.id) / 2.0).to_s, search.average("id").to_s
77
+ assert_equal 2, search.count
78
+
79
+ search.conditions.first_name_contains = "Ben"
80
+
81
+ assert_equal [ben], search.all
82
+ assert_equal ben, search.first
83
+ assert_equal ben.id, search.average("id")
84
+ assert_equal 1, search.count
85
+
86
+ assert_equal 2, neco.users.count
87
+ assert_equal 1, neco.users.all(:conditions => {:first_name_contains => "Ben"}).size
88
+ assert_equal 0, neco.users.all(:conditions => {:first_name_contains => "No one"}).size
89
+ assert_equal ben.id, neco.users.sum("id", :conditions => {:first_name_contains => "Ben"})
90
+ assert_equal 0, neco.users.sum("id", :conditions => {:first_name_contains => "No one"})
91
+ assert_equal ben.id, neco.users.average("id", :conditions => {:first_name_contains => "Ben"})
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,115 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ActiveRecordTests
4
+ class BaseTest < ActiveSupport::TestCase
5
+ def test_standard_find
6
+ binary_logic = accounts(:binary_logic)
7
+ neco = accounts(:neco)
8
+ binary_fun = accounts(:binary_fun)
9
+
10
+ assert_equal [binary_logic, binary_fun, neco], Account.all
11
+ assert_equal binary_logic, Account.first
12
+
13
+ assert_equal [binary_logic, binary_fun, neco], Account.find(:all)
14
+ assert_equal [binary_logic], Account.find(:all, :conditions => {:name => "Binary Logic"})
15
+ assert_equal [binary_logic], Account.find(:all, :conditions => ["name = ?", "Binary Logic"])
16
+ assert_equal [binary_logic], Account.find(:all, :conditions => "name = 'Binary Logic'")
17
+ assert_equal binary_logic, Account.find(:first)
18
+ assert_equal [binary_logic, binary_fun, neco], Account.find(:all, nil)
19
+ assert_equal [binary_logic, binary_fun, neco], Account.find(:all, {})
20
+ assert_equal [binary_logic, binary_fun, neco], Account.find(:all, :select => "id, name")
21
+ end
22
+
23
+ def test_standard_calculations
24
+ binary_logic = accounts(:binary_logic)
25
+ neco = accounts(:neco)
26
+ binary_fun = accounts(:binary_fun)
27
+
28
+ assert_equal 3, Account.count({})
29
+ assert_equal 3, Account.count(nil)
30
+ assert_equal 3, Account.count(:limit => 1)
31
+ assert_equal 0, Account.count(:limit => 10, :offset => 10)
32
+ assert_equal binary_logic.id + neco.id + binary_fun.id, Account.sum("id")
33
+ assert_equal binary_logic.id + neco.id + binary_fun.id, Account.sum("id", {})
34
+ assert_equal (binary_logic.id + neco.id + binary_fun.id) / 3.0, Account.average("id")
35
+ assert_equal neco.id, Account.maximum("id")
36
+ assert_equal binary_logic.id, Account.minimum("id")
37
+ end
38
+
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
41
+ assert_equal [:conditions, :joins, :order, :select, :group, :having, :distinct, :limit, :offset, :include, :from], ActiveRecord::Base.valid_calculations_options
42
+ end
43
+
44
+ def test_build_search
45
+ search = Account.new_search(:conditions => {:name_keywords => "awesome"}, :page => 2, :per_page => 15)
46
+ assert_kind_of Searchlogic::Search::Base, search
47
+ assert_equal({}, search.scope)
48
+ assert_equal Account, search.klass
49
+ assert_equal "awesome", search.conditions.name_keywords
50
+ assert_equal 2, search.page
51
+ assert_equal 15, search.per_page
52
+ end
53
+
54
+ def test_searchlogic_searching
55
+ binary_logic = accounts(:binary_logic)
56
+ neco = accounts(:neco)
57
+ binary_fun = accounts(:binary_fun)
58
+
59
+ assert_equal [binary_logic, binary_fun], Account.all(:conditions => {:name_contains => "Binary"})
60
+ assert_equal [binary_logic], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben"}})
61
+ assert_equal [], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben", :last_name => "Mills"}})
62
+ assert_equal [binary_logic, neco], Account.all(:conditions => {:users => {:id_gt => 0}}, :include => :users)
63
+
64
+ read_only_accounts = Account.all(:conditions => {:name_contains => "Binary"}, :readonly => true)
65
+ assert read_only_accounts.first.readonly?
66
+
67
+ assert_equal [binary_logic, binary_fun], Account.all(:conditions => {:name_contains => "Binary"}, :page => 2)
68
+ assert_equal [], Account.all(:conditions => {:name_contains => "Binary"}, :page => 2, :per_page => 20)
69
+
70
+ assert_equal [binary_logic], Account.scope1.all(:conditions => {:users => {:first_name_starts_with => "Ben"}})
71
+ end
72
+
73
+ def test_searchlogic_counting
74
+ assert_equal 2, Account.count(:conditions => {:name_contains => "Binary"})
75
+ assert_equal 1, Account.count(:conditions => {:name_contains => "Binary", :users => {:first_name_contains => "Ben"}})
76
+ assert_equal 1, Account.count(:conditions => {:name_contains => "Binary", :users => {:first_name_contains => "Ben"}}, :limit => 10, :offset => 10, :order_by => "id", :group => "accounts.id")
77
+ end
78
+
79
+ def test_scoping
80
+ assert_equal({:conditions => {:name => "Binary"}, :limit => 10, :readonly => true}, Account.send(:with_scope, :find => {:conditions => {:name => "Binary"}, :limit => 10, :readonly => true}) { Account.send(:scope, :find) })
81
+ assert_equal({:conditions => ["\"accounts\".\"name\" LIKE ?", "%Binary%"], :limit => 10, :offset => 20}, Account.send(:with_scope, :find => {:conditions => {:name_contains => "Binary"}, :per_page => 10, :page => 3}) { Account.send(:scope, :find) })
82
+ end
83
+
84
+ def test_accessible_conditions
85
+ Account.conditions_accessible :name_contains
86
+ assert_equal Set.new(["name_contains"]), Account.accessible_conditions
87
+ Account.conditions_accessible :id_gt
88
+ assert_equal Set.new(["id_gt", "name_contains"]), Account.accessible_conditions
89
+ Account.conditions_accessible :id_gt, :name_contains
90
+ assert_equal Set.new(["id_gt", "name_contains"]), Account.accessible_conditions
91
+ Account.send(:write_inheritable_attribute, :conditions_accessible, nil)
92
+ end
93
+
94
+ def test_protected_conditions
95
+ Account.conditions_protected :name_contains
96
+ assert_equal Set.new(["name_contains"]), Account.protected_conditions
97
+ Account.conditions_protected :id_gt
98
+ assert_equal Set.new(["id_gt", "name_contains"]), Account.protected_conditions
99
+ Account.conditions_protected :id_gt, :name_contains
100
+ assert_equal Set.new(["id_gt", "name_contains"]), Account.protected_conditions
101
+ Account.send(:write_inheritable_attribute, :conditions_protected, nil)
102
+ end
103
+
104
+ def test_includes
105
+ assert_nothing_raised { Account.all(:conditions => {:users => {:first_name_like => "Ben"}}, :include => :users) }
106
+ end
107
+
108
+ def test_remove_duplicate_joins
109
+ query = "SELECT DISTINCT `ticket_groups`.* FROM `ticket_groups` INNER JOIN tickets ON ticket_groups.id = tickets.ticket_group_id LEFT OUTER JOIN `tickets` ON tickets.ticket_group_id = ticket_groups.id WHERE (`tickets`.`id` = 2) AND ((`tickets`.event_id = 810802042)) LIMIT 20"
110
+ cleaned_query = ActiveRecord::Base.send(:remove_duplicate_joins, query)
111
+ expected_query = "SELECT DISTINCT `ticket_groups`.* FROM `ticket_groups` INNER JOIN tickets ON ticket_groups.id = tickets.ticket_group_id WHERE (`tickets`.`id` = 2) AND ((`tickets`.event_id = 810802042)) LIMIT 20"
112
+ assert_equal expected_query, cleaned_query
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class BaseTest < ActiveSupport::TestCase
5
+ def test_condition_type_name
6
+ assert_equal "equals", Searchlogic::Condition::Equals.condition_type_name
7
+ assert_equal "keywords", Searchlogic::Condition::Keywords.condition_type_name
8
+ assert_equal "greater_than_or_equal_to", Searchlogic::Condition::GreaterThanOrEqualTo.condition_type_name
9
+ end
10
+
11
+ def test_ignore_meaningless_value?
12
+ assert !Searchlogic::Condition::Equals.ignore_meaningless_value?
13
+ assert Searchlogic::Condition::Keywords.ignore_meaningless_value?
14
+ assert !Searchlogic::Condition::NotEqual.ignore_meaningless_value?
15
+ end
16
+
17
+ def test_value_type
18
+ assert_nil Searchlogic::Condition::Equals.value_type
19
+ assert_nil Searchlogic::Condition::Keywords.value_type
20
+ assert_equal :boolean, Searchlogic::Condition::Nil.value_type
21
+ assert_equal :boolean, Searchlogic::Condition::Blank.value_type
22
+ assert_nil Searchlogic::Condition::GreaterThan.value_type
23
+ end
24
+
25
+ def test_initialize
26
+ condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
27
+ assert_equal condition.klass, Account
28
+ assert_equal Account.columns_hash["name"], condition.column
29
+
30
+ condition = Searchlogic::Condition::GreaterThan.new(Account, :column => "id")
31
+ assert_equal Account.columns_hash["id"], condition.column
32
+
33
+ condition = Searchlogic::Condition::GreaterThan.new(Account, :column => "id", :column_type => :string, :column_sql_format => "some sql")
34
+ assert_equal Account.columns_hash["id"], condition.column
35
+ condition.value = "awesome"
36
+ assert_equal ["some sql > ?", "awesome"], condition.sanitize
37
+ end
38
+
39
+ def test_explicitly_set_value
40
+ condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
41
+ assert !condition.explicitly_set_value?
42
+ condition.value = "test"
43
+ assert condition.explicitly_set_value?
44
+ end
45
+
46
+ def test_sanitize
47
+ # This is tested thoroughly in test_condition_types
48
+ end
49
+
50
+ def test_value
51
+ # This is tested thoroughly in test_condition_types
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class BeginsWithTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::BeginsWith.new(Account, :column => Account.columns_hash["name"])
7
+ condition.value = "Binary"
8
+ assert_equal ["\"accounts\".\"name\" LIKE ?", "Binary%"], condition.sanitize
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class BlankTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
7
+ condition.value = "true"
8
+ assert_equal "(\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '' or \"accounts\".\"id\" = false)", condition.sanitize
9
+
10
+ condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
11
+ condition.value = "false"
12
+ assert_equal "(\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '' and \"accounts\".\"id\" != false)", condition.sanitize
13
+
14
+ condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
15
+ condition.value = true
16
+ assert_equal "(\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '' or \"accounts\".\"id\" = false)", condition.sanitize
17
+
18
+ condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
19
+ condition.value = false
20
+ assert_equal "(\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '' and \"accounts\".\"id\" != false)", condition.sanitize
21
+
22
+ condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
23
+ condition.value = nil
24
+ assert_nil condition.sanitize
25
+
26
+ condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
27
+ condition.value = ""
28
+ assert_nil condition.sanitize
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class ChildOfTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ ben = users(:ben)
7
+
8
+ condition = Searchlogic::Condition::ChildOf.new(User)
9
+ condition.value = ben.id
10
+ assert_equal ["\"users\".\"parent_id\" = ?", ben.id], condition.sanitize
11
+
12
+ condition = Searchlogic::Condition::ChildOf.new(User)
13
+ condition.value = ben
14
+ assert_equal ["\"users\".\"parent_id\" = ?", ben.id], condition.sanitize
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class DescendantOfTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ ben = users(:ben)
7
+ condition = Searchlogic::Condition::DescendantOf.new(User)
8
+ condition.value = ben
9
+ assert_equal ["(\"users\".\"id\" != ? AND (\"users\".\"lft\" >= ? AND \"users\".\"rgt\" <= ?))", ben.id, ben.left, ben.right], condition.sanitize
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class EndsWithTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::EndsWith.new(Account, :column => Account.columns_hash["name"])
7
+ condition.value = "Binary"
8
+ assert_equal ["\"accounts\".\"name\" LIKE ?", "%Binary"], condition.sanitize
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class EqualsTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
7
+ condition.value = 12
8
+ assert_equal ["\"accounts\".\"id\" = ?", 12], condition.sanitize
9
+
10
+ condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
11
+ condition.value = [1,2,3,4]
12
+ assert_equal ["\"accounts\".\"id\" IN (?)", [1, 2, 3, 4]], condition.sanitize
13
+
14
+ condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
15
+ condition.value = []
16
+ assert_equal [], condition.value
17
+ assert_nil condition.sanitize
18
+
19
+ search = User.new_search
20
+ search.conditions.id = []
21
+ assert_equal [], search.conditions.id
22
+
23
+ condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
24
+ condition.value = (1..10)
25
+ assert_equal ["\"accounts\".\"id\" BETWEEN ? AND ?", 1, 10], condition.sanitize
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class GreaterThanOrEqualToTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::GreaterThanOrEqualTo.new(Account, :column => Account.columns_hash["id"])
7
+ condition.value = 2
8
+ assert_equal ["\"accounts\".\"id\" >= ?", 2], condition.sanitize
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class GreaterThanTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::GreaterThan.new(Account, :column => Account.columns_hash["id"])
7
+ condition.value = 2
8
+ assert_equal ["\"accounts\".\"id\" > ?", 2], condition.sanitize
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class InclusiveDescendantOfTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ ben = users(:ben)
7
+ condition = Searchlogic::Condition::InclusiveDescendantOf.new(User)
8
+ condition.value = ben
9
+ assert_equal ["(\"users\".\"lft\" >= ? AND \"users\".\"rgt\" <= ?)", ben.left, ben.right], condition.sanitize
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module ConditionTests
4
+ class KeywordsTest < ActiveSupport::TestCase
5
+ def test_sanitize
6
+ condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
7
+ condition.value = "freedom yeah, freedom YEAH right"
8
+ assert_equal ["\"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ?", "%freedom%", "%yeah%", "%right%"], condition.sanitize
9
+
10
+ condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
11
+ condition.value = "%^$*(^$)"
12
+ assert_nil condition.sanitize
13
+
14
+ condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
15
+ condition.value = "%^$*(^$) àáâãäåßéèêëìíîïñòóôõöùúûüýÿ"
16
+ assert_equal ["\"accounts\".\"name\" LIKE ?", "%àáâãäåßéèêëìíîïñòóôõöùúûüýÿ%"], condition.sanitize
17
+
18
+ condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
19
+ condition.value = "ben@ben.com"
20
+ assert_equal ["\"accounts\".\"name\" LIKE ?", "%ben@ben.com%"], condition.sanitize
21
+ end
22
+ end
23
+ end