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,21 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module SearchTests
4
+ class TestSearchConditions < ActiveSupport::TestCase
5
+ def test_conditions
6
+ search = Account.new_search
7
+ assert_kind_of Searchlogic::Conditions::Base, search.conditions
8
+ assert_equal search.conditions.klass, Account
9
+
10
+ search.conditions = {:name_like => "Binary"}
11
+ assert_kind_of Searchlogic::Conditions::Base, search.conditions
12
+
13
+ search = Account.new_search(:conditions => {:name_like => "Ben"})
14
+ assert_equal({:name_like => "Ben"}, search.conditions.conditions)
15
+ end
16
+
17
+ def test_sanitize
18
+ # This is tested in test_search_base
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,167 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module SearchTests
4
+ class OrderingTest < ActiveSupport::TestCase
5
+ def test_order_to_order_by
6
+ search = Account.new_search
7
+ search.order = "name"
8
+ assert_equal "name", search.order_by
9
+ search.order = "users.first_name"
10
+ assert_equal({"users" => "first_name"}, search.order_by)
11
+ search.order = "\"users\".\"first_name\""
12
+ assert_equal({"users" => "first_name"}, search.order_by)
13
+ search.order = "\"users\".\"first_name\", name ASC"
14
+ assert_equal([{"users" => "first_name"}, "name"], search.order_by)
15
+ end
16
+
17
+ def test_order_by
18
+ search = Account.new_search
19
+ assert_nil search.order
20
+ assert_nil search.order_by
21
+
22
+ search.order_by = "first_name"
23
+ assert_equal "first_name", search.order_by
24
+ assert_equal "\"accounts\".\"first_name\"", search.order
25
+
26
+ search.order_by = "last_name"
27
+ assert_equal "last_name", search.order_by
28
+ assert_equal "\"accounts\".\"last_name\"", search.order
29
+
30
+ search.order_by = ["first_name", "last_name"]
31
+ assert_equal ["first_name", "last_name"], search.order_by
32
+ assert_equal "\"accounts\".\"first_name\", \"accounts\".\"last_name\"", search.order
33
+
34
+ search.order = "created_at DESC"
35
+ assert_equal "created_at", search.order_by
36
+ assert_equal "created_at DESC", search.order
37
+
38
+ search.order = "\"users\".updated_at ASC"
39
+ assert_equal({"users" => "updated_at"}, search.order_by)
40
+ assert_equal "\"users\".updated_at ASC", search.order
41
+
42
+ search.order = "`users`.first_name DESC"
43
+ assert_equal({"users" => "first_name"}, search.order_by)
44
+ assert_equal "`users`.first_name DESC", search.order
45
+
46
+ search.order = "`accounts`.name DESC"
47
+ assert_equal "name", search.order_by
48
+ assert_equal "`accounts`.name DESC", search.order
49
+
50
+ search.order = "accounts.name DESC"
51
+ assert_equal "name", search.order_by
52
+ assert_equal "accounts.name DESC", search.order
53
+
54
+ search.order = "`users`.first_name DESC, name DESC, `accounts`.id DESC"
55
+ assert_equal [{"users" => "first_name"}, "name", "id"], search.order_by
56
+ assert_equal "`users`.first_name DESC, name DESC, `accounts`.id DESC", search.order
57
+
58
+ search.order = "`users`.first_name DESC, `line_items`.id DESC, `accounts`.id DESC"
59
+ assert_equal [{"users" => "first_name"}, "id"], search.order_by
60
+ assert_equal "`users`.first_name DESC, `line_items`.id DESC, `accounts`.id DESC", search.order
61
+
62
+ search.order = "`line_items`.id DESC"
63
+ assert_nil search.order_by
64
+ assert_equal "`line_items`.id DESC", search.order
65
+ end
66
+
67
+ def test_order_as
68
+ search = Account.new_search
69
+ assert_nil search.order
70
+ assert_nil search.order_as
71
+ assert search.asc?
72
+ assert !search.desc?
73
+
74
+ search.order_as = "DESC"
75
+ assert_nil search.order_as
76
+ assert !search.desc?
77
+ assert_nil search.order
78
+
79
+ search.order_by = "name"
80
+ assert_equal "\"accounts\".\"name\" DESC", search.order
81
+
82
+ search.order_as = "ASC"
83
+ assert_equal "\"accounts\".\"name\" ASC", search.order
84
+ assert search.asc?
85
+
86
+ search.order = "id ASC"
87
+ assert_equal "ASC", search.order_as
88
+ assert search.asc?
89
+ assert_equal "id ASC", search.order
90
+
91
+ search.order = "id DESC"
92
+ assert_equal "DESC", search.order_as
93
+ assert search.desc?
94
+ assert_equal "id DESC", search.order
95
+
96
+ search.order_by = "name"
97
+ assert_equal "DESC", search.order_as
98
+ assert search.desc?
99
+ assert_equal "\"accounts\".\"name\" DESC", search.order
100
+
101
+ assert_raise(ArgumentError) { search.order_as = "awesome" }
102
+ end
103
+
104
+ def test_order_by_auto_joins
105
+ search = Account.new_search
106
+ assert_nil search.order_by_auto_joins
107
+ search.order_by = :name
108
+ assert_nil search.order_by_auto_joins
109
+ search.order_by = {:users => :first_name}
110
+ assert_equal :users, search.order_by_auto_joins
111
+ search.order_by = [{:users => :first_name}, {:orders => :total}, {:users => {:user_groups => :name}}]
112
+ assert_equal [:users, :orders, {:users => :user_groups}], search.order_by_auto_joins
113
+ search.priority_order_by = {:users => :first_name}
114
+ assert_equal [:users, :orders, {:users => :user_groups}], search.order_by_auto_joins
115
+ search.priority_order_by = {:users => {:orders => :total}}
116
+ assert_equal({:users => :orders}, search.priority_order_by_auto_joins)
117
+ end
118
+
119
+ def test_priority_order_by
120
+ search = Account.new_search
121
+ assert_nil search.priority_order
122
+ assert_nil search.priority_order_by
123
+ assert_nil search.priority_order_as
124
+
125
+ search.priority_order_by = :name
126
+ assert_equal "\"accounts\".\"name\"", search.priority_order
127
+ assert_equal "\"accounts\".\"name\"", search.sanitize[:order]
128
+ assert_nil search.order
129
+ assert_equal :name, search.priority_order_by
130
+ assert_nil search.priority_order_as
131
+
132
+ search.order_by = :id
133
+ assert_equal "\"accounts\".\"name\", \"accounts\".\"id\"", search.sanitize[:order]
134
+ search.order_as = "DESC"
135
+ assert_equal "\"accounts\".\"name\", \"accounts\".\"id\" DESC", search.sanitize[:order]
136
+ end
137
+
138
+ def test_priority_order_as
139
+ search = Account.new_search
140
+ assert_nil search.priority_order_as
141
+ assert_nil search.order_as
142
+ search.priority_order_as = "ASC"
143
+ assert_nil search.priority_order_as
144
+ assert_nil search.order_as
145
+ search.priority_order_by = :name
146
+ assert_equal "ASC", search.priority_order_as
147
+ assert_nil search.order_as
148
+ search.priority_order_as = "DESC"
149
+ assert_equal "DESC", search.priority_order_as
150
+ assert_nil search.order_as
151
+ assert_raise(ArgumentError) { search.priority_order_as = "awesome" }
152
+ search.priority_order = nil
153
+ assert_nil search.priority_order_as
154
+ assert_nil search.order_as
155
+ end
156
+
157
+ def test_sanitize
158
+ # tested in test_priority_order_by
159
+ end
160
+
161
+ def test_ordering_includes_blank
162
+ search = User.new_search!
163
+ search.order_by = {:account => :name}
164
+ assert_equal 4, search.count
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module SearchTests
4
+ class PaginationTest < ActiveSupport::TestCase
5
+ def test_limit
6
+ search = Account.new_search
7
+ search.limit = 10
8
+ assert_equal 10, search.limit
9
+ search.page = 2
10
+ assert_equal 10, search.offset
11
+ search.limit = 25
12
+ assert_equal 25, search.offset
13
+ assert_equal 2, search.page
14
+ search.page = 5
15
+ assert_equal 5, search.page
16
+ assert_equal 25, search.limit
17
+ search.limit = 3
18
+ assert_equal 12, search.offset
19
+ end
20
+
21
+ def test_page
22
+ search = Account.new_search(:per_page => nil)
23
+ search.page = 2
24
+ assert_equal 1, search.page
25
+ search.per_page = 20
26
+ assert_equal 2, search.page
27
+ search.limit = 0
28
+ assert_equal 1, search.page
29
+ search.per_page = 20
30
+ assert_equal 2, search.page
31
+ search.limit = nil
32
+ assert_equal 1, search.page
33
+ end
34
+
35
+ def test_per_page
36
+ search = Account.new_search
37
+ search.per_page = 10
38
+ assert_equal 10, search.per_page
39
+ search.per_page = ""
40
+ assert_nil search.per_page
41
+ search.per_page = 40
42
+ assert_equal 40, search.per_page
43
+ search.per_page = nil
44
+ assert_nil search.per_page
45
+ search.per_page = 60
46
+ assert_equal 60, search.per_page
47
+ search.per_page = false
48
+ assert_nil search.per_page
49
+ end
50
+
51
+ def test_next_page
52
+
53
+ end
54
+
55
+ def test_prev_page
56
+
57
+ end
58
+
59
+ def test_page_count
60
+ search = Account.new_search
61
+ assert_equal 1, search.page_count
62
+ search.per_page = 1
63
+ assert_equal 3, search.page_count
64
+ search.per_page = 100
65
+ assert_equal 1, search.page_count
66
+
67
+ Searchlogic::Config.search.per_page = 1
68
+ search = Account.new_search
69
+ assert_equal 3, search.page_count
70
+ search.conditions.users.first_name_contains
71
+ assert_equal 3, search.page_count
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module SearchTests
4
+ class ProtectionTest < ActiveSupport::TestCase
5
+ def test_protection
6
+ assert_raise(ArgumentError) { Account.build_search(:conditions => "(DELETE FROM users)", :page => 2, :per_page => 15) }
7
+ Searchlogic::Search::Base::VULNERABLE_FIND_OPTIONS.each { |option| assert_raise(ArgumentError) { Account.build_search(option => "(DELETE FROM users)") } }
8
+
9
+ assert_nothing_raised { Account.build_search!(:conditions => "(DELETE FROM users)", :page => 2, :per_page => 15) }
10
+ Searchlogic::Search::Base::VULNERABLE_FIND_OPTIONS.each { |option| assert_nothing_raised { Account.build_search!(option => "(DELETE FROM users)") } }
11
+
12
+ account = Account.first
13
+
14
+ assert_raise(ArgumentError) { account.users.build_search(:conditions => "(DELETE FROM users)", :page => 2, :per_page => 15) }
15
+ Searchlogic::Search::Base::VULNERABLE_FIND_OPTIONS.each { |option| assert_raise(ArgumentError) { account.users.build_search(option => "(DELETE FROM users)") } }
16
+
17
+ assert_nothing_raised { account.users.build_search!(:conditions => "(DELETE FROM users)", :page => 2, :per_page => 15) }
18
+ Searchlogic::Search::Base::VULNERABLE_FIND_OPTIONS.each { |option| assert_nothing_raised { account.users.build_search!(option => "(DELETE FROM users)") } }
19
+
20
+ assert_raise(ArgumentError) { Account.build_search(:order_by => "unknown_column") }
21
+ assert_nothing_raised { Account.build_search!(:order_by => "unknown_column") }
22
+ assert_raise(ArgumentError) { Account.build_search(:order_by => ["name", "unknown_column"]) }
23
+ assert_nothing_raised { Account.build_search!(:order_by => ["name", "unknown_column"]) }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,116 @@
1
+ require "test/unit"
2
+ require "rubygems"
3
+ require "ruby-debug"
4
+ require "active_record"
5
+ require "active_record/fixtures"
6
+ require File.dirname(__FILE__) + '/libs/awesome_nested_set'
7
+ require File.dirname(__FILE__) + '/libs/rexml_fix'
8
+ require File.dirname(__FILE__) + '/../lib/searchlogic' unless defined?(Searchlogic)
9
+
10
+ ActiveRecord::Schema.verbose = false
11
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
12
+ ActiveRecord::Base.configurations = true
13
+ ActiveRecord::Schema.define(:version => 1) do
14
+ create_table :accounts do |t|
15
+ t.datetime :created_at
16
+ t.datetime :updated_at
17
+ t.string :name
18
+ t.boolean :active
19
+ end
20
+
21
+ create_table :user_groups do |t|
22
+ t.datetime :created_at
23
+ t.datetime :updated_at
24
+ t.string :name
25
+ end
26
+
27
+ create_table :user_groups_users, :id => false do |t|
28
+ t.integer :user_group_id
29
+ t.integer :user_id
30
+ end
31
+
32
+ create_table :users do |t|
33
+ t.datetime :created_at
34
+ t.datetime :updated_at
35
+ t.integer :account_id
36
+ t.integer :parent_id
37
+ t.integer :lft
38
+ t.integer :rgt
39
+ t.string :first_name
40
+ t.string :last_name
41
+ t.boolean :active
42
+ t.text :bio
43
+ end
44
+
45
+ create_table :orders do |t|
46
+ t.datetime :created_at
47
+ t.datetime :updated_at
48
+ t.integer :user_id
49
+ t.float :total
50
+ t.text :description
51
+ t.binary :receipt
52
+ end
53
+
54
+ create_table :line_items do |t|
55
+ t.datetime :created_at
56
+ t.datetime :updated_at
57
+ t.integer :order_id
58
+ t.string :name
59
+ end
60
+
61
+ create_table :animals do |t|
62
+ t.datetime :created_at
63
+ t.datetime :updated_at
64
+ t.string :type
65
+ t.text :description
66
+ end
67
+ end
68
+
69
+
70
+ class Account < ActiveRecord::Base
71
+ has_one :admin, :class_name => "User", :conditions => {:first_name => "Ben"}
72
+ has_many :users, :dependent => :destroy
73
+ has_many :orders, :through => :users
74
+
75
+ named_scope :scope1, :conditions => {:users => {:first_name_contains => "Ben"}}
76
+ end
77
+
78
+ class UserGroup < ActiveRecord::Base
79
+ has_and_belongs_to_many :users
80
+ end
81
+
82
+ class User < ActiveRecord::Base
83
+ acts_as_nested_set
84
+ belongs_to :account
85
+ has_many :orders, :dependent => :destroy
86
+ has_many :cats, :dependent => :destroy
87
+ has_many :dogs, :dependent => :destroy
88
+ has_and_belongs_to_many :user_groups
89
+ end
90
+
91
+ class Order < ActiveRecord::Base
92
+ belongs_to :user
93
+ has_many :line_items
94
+ end
95
+
96
+ class LineItem < ActiveRecord::Base
97
+ belongs_to :order
98
+ end
99
+
100
+ # STI
101
+ class Animal < ActiveRecord::Base
102
+ end
103
+
104
+ class Dog < Animal
105
+ end
106
+
107
+ class Cat < Animal
108
+ end
109
+
110
+ class Test::Unit::TestCase
111
+ self.fixture_path = File.dirname(__FILE__) + "/fixtures"
112
+ self.use_transactional_fixtures = true
113
+ self.use_instantiated_fixtures = false
114
+ self.pre_loaded_fixtures = true
115
+ fixtures :all
116
+ end
metadata ADDED
@@ -0,0 +1,385 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: schof-searchlogic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ben Johnson of Binary Logic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-03 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activerecord
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: echoe
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description: Object based ActiveRecord searching, ordering, pagination, and more!
46
+ email: bjohnson@binarylogic.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - CHANGELOG.rdoc
53
+ - lib/searchlogic/active_record/associations.rb
54
+ - lib/searchlogic/active_record/base.rb
55
+ - lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb
56
+ - lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb
57
+ - lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb
58
+ - lib/searchlogic/condition/base.rb
59
+ - lib/searchlogic/condition/begins_with.rb
60
+ - lib/searchlogic/condition/blank.rb
61
+ - lib/searchlogic/condition/child_of.rb
62
+ - lib/searchlogic/condition/descendant_of.rb
63
+ - lib/searchlogic/condition/ends_with.rb
64
+ - lib/searchlogic/condition/equals.rb
65
+ - lib/searchlogic/condition/greater_than.rb
66
+ - lib/searchlogic/condition/greater_than_or_equal_to.rb
67
+ - lib/searchlogic/condition/inclusive_descendant_of.rb
68
+ - lib/searchlogic/condition/keywords.rb
69
+ - lib/searchlogic/condition/less_than.rb
70
+ - lib/searchlogic/condition/less_than_or_equal_to.rb
71
+ - lib/searchlogic/condition/like.rb
72
+ - lib/searchlogic/condition/nested_set.rb
73
+ - lib/searchlogic/condition/nil.rb
74
+ - lib/searchlogic/condition/not_begin_with.rb
75
+ - lib/searchlogic/condition/not_blank.rb
76
+ - lib/searchlogic/condition/not_end_with.rb
77
+ - lib/searchlogic/condition/not_equal.rb
78
+ - lib/searchlogic/condition/not_have_keywords.rb
79
+ - lib/searchlogic/condition/not_like.rb
80
+ - lib/searchlogic/condition/not_nil.rb
81
+ - lib/searchlogic/condition/sibling_of.rb
82
+ - lib/searchlogic/conditions/any_or_all.rb
83
+ - lib/searchlogic/conditions/base.rb
84
+ - lib/searchlogic/conditions/groups.rb
85
+ - lib/searchlogic/conditions/magic_methods.rb
86
+ - lib/searchlogic/conditions/multiparameter_attributes.rb
87
+ - lib/searchlogic/conditions/protection.rb
88
+ - lib/searchlogic/config/helpers.rb
89
+ - lib/searchlogic/config/search.rb
90
+ - lib/searchlogic/config.rb
91
+ - lib/searchlogic/core_ext/hash.rb
92
+ - lib/searchlogic/core_ext/object.rb
93
+ - lib/searchlogic/helpers/control_types/link.rb
94
+ - lib/searchlogic/helpers/control_types/links.rb
95
+ - lib/searchlogic/helpers/control_types/remote_link.rb
96
+ - lib/searchlogic/helpers/control_types/remote_links.rb
97
+ - lib/searchlogic/helpers/control_types/remote_select.rb
98
+ - lib/searchlogic/helpers/control_types/select.rb
99
+ - lib/searchlogic/helpers/form.rb
100
+ - lib/searchlogic/helpers/utilities.rb
101
+ - lib/searchlogic/modifiers/absolute.rb
102
+ - lib/searchlogic/modifiers/acos.rb
103
+ - lib/searchlogic/modifiers/asin.rb
104
+ - lib/searchlogic/modifiers/atan.rb
105
+ - lib/searchlogic/modifiers/avg.rb
106
+ - lib/searchlogic/modifiers/base.rb
107
+ - lib/searchlogic/modifiers/ceil.rb
108
+ - lib/searchlogic/modifiers/char_length.rb
109
+ - lib/searchlogic/modifiers/cos.rb
110
+ - lib/searchlogic/modifiers/cot.rb
111
+ - lib/searchlogic/modifiers/count.rb
112
+ - lib/searchlogic/modifiers/day_of_month.rb
113
+ - lib/searchlogic/modifiers/day_of_week.rb
114
+ - lib/searchlogic/modifiers/day_of_year.rb
115
+ - lib/searchlogic/modifiers/degrees.rb
116
+ - lib/searchlogic/modifiers/exp.rb
117
+ - lib/searchlogic/modifiers/floor.rb
118
+ - lib/searchlogic/modifiers/hex.rb
119
+ - lib/searchlogic/modifiers/hour.rb
120
+ - lib/searchlogic/modifiers/log.rb
121
+ - lib/searchlogic/modifiers/log10.rb
122
+ - lib/searchlogic/modifiers/log2.rb
123
+ - lib/searchlogic/modifiers/lower.rb
124
+ - lib/searchlogic/modifiers/ltrim.rb
125
+ - lib/searchlogic/modifiers/md5.rb
126
+ - lib/searchlogic/modifiers/microseconds.rb
127
+ - lib/searchlogic/modifiers/milliseconds.rb
128
+ - lib/searchlogic/modifiers/minute.rb
129
+ - lib/searchlogic/modifiers/month.rb
130
+ - lib/searchlogic/modifiers/octal.rb
131
+ - lib/searchlogic/modifiers/radians.rb
132
+ - lib/searchlogic/modifiers/round.rb
133
+ - lib/searchlogic/modifiers/rtrim.rb
134
+ - lib/searchlogic/modifiers/second.rb
135
+ - lib/searchlogic/modifiers/sign.rb
136
+ - lib/searchlogic/modifiers/sin.rb
137
+ - lib/searchlogic/modifiers/square_root.rb
138
+ - lib/searchlogic/modifiers/sum.rb
139
+ - lib/searchlogic/modifiers/tan.rb
140
+ - lib/searchlogic/modifiers/trim.rb
141
+ - lib/searchlogic/modifiers/upper.rb
142
+ - lib/searchlogic/modifiers/week.rb
143
+ - lib/searchlogic/modifiers/year.rb
144
+ - lib/searchlogic/search/base.rb
145
+ - lib/searchlogic/search/conditions.rb
146
+ - lib/searchlogic/search/ordering.rb
147
+ - lib/searchlogic/search/pagination.rb
148
+ - lib/searchlogic/search/protection.rb
149
+ - lib/searchlogic/search/searching.rb
150
+ - lib/searchlogic/shared/utilities.rb
151
+ - lib/searchlogic/shared/virtual_classes.rb
152
+ - lib/searchlogic/version.rb
153
+ - lib/searchlogic.rb
154
+ - README.rdoc
155
+ - TODO.rdoc
156
+ files:
157
+ - CHANGELOG.rdoc
158
+ - init.rb
159
+ - lib/searchlogic/active_record/associations.rb
160
+ - lib/searchlogic/active_record/base.rb
161
+ - lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb
162
+ - lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb
163
+ - lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb
164
+ - lib/searchlogic/condition/base.rb
165
+ - lib/searchlogic/condition/begins_with.rb
166
+ - lib/searchlogic/condition/blank.rb
167
+ - lib/searchlogic/condition/child_of.rb
168
+ - lib/searchlogic/condition/descendant_of.rb
169
+ - lib/searchlogic/condition/ends_with.rb
170
+ - lib/searchlogic/condition/equals.rb
171
+ - lib/searchlogic/condition/greater_than.rb
172
+ - lib/searchlogic/condition/greater_than_or_equal_to.rb
173
+ - lib/searchlogic/condition/inclusive_descendant_of.rb
174
+ - lib/searchlogic/condition/keywords.rb
175
+ - lib/searchlogic/condition/less_than.rb
176
+ - lib/searchlogic/condition/less_than_or_equal_to.rb
177
+ - lib/searchlogic/condition/like.rb
178
+ - lib/searchlogic/condition/nested_set.rb
179
+ - lib/searchlogic/condition/nil.rb
180
+ - lib/searchlogic/condition/not_begin_with.rb
181
+ - lib/searchlogic/condition/not_blank.rb
182
+ - lib/searchlogic/condition/not_end_with.rb
183
+ - lib/searchlogic/condition/not_equal.rb
184
+ - lib/searchlogic/condition/not_have_keywords.rb
185
+ - lib/searchlogic/condition/not_like.rb
186
+ - lib/searchlogic/condition/not_nil.rb
187
+ - lib/searchlogic/condition/sibling_of.rb
188
+ - lib/searchlogic/conditions/any_or_all.rb
189
+ - lib/searchlogic/conditions/base.rb
190
+ - lib/searchlogic/conditions/groups.rb
191
+ - lib/searchlogic/conditions/magic_methods.rb
192
+ - lib/searchlogic/conditions/multiparameter_attributes.rb
193
+ - lib/searchlogic/conditions/protection.rb
194
+ - lib/searchlogic/config/helpers.rb
195
+ - lib/searchlogic/config/search.rb
196
+ - lib/searchlogic/config.rb
197
+ - lib/searchlogic/core_ext/hash.rb
198
+ - lib/searchlogic/core_ext/object.rb
199
+ - lib/searchlogic/helpers/control_types/link.rb
200
+ - lib/searchlogic/helpers/control_types/links.rb
201
+ - lib/searchlogic/helpers/control_types/remote_link.rb
202
+ - lib/searchlogic/helpers/control_types/remote_links.rb
203
+ - lib/searchlogic/helpers/control_types/remote_select.rb
204
+ - lib/searchlogic/helpers/control_types/select.rb
205
+ - lib/searchlogic/helpers/form.rb
206
+ - lib/searchlogic/helpers/utilities.rb
207
+ - lib/searchlogic/modifiers/absolute.rb
208
+ - lib/searchlogic/modifiers/acos.rb
209
+ - lib/searchlogic/modifiers/asin.rb
210
+ - lib/searchlogic/modifiers/atan.rb
211
+ - lib/searchlogic/modifiers/avg.rb
212
+ - lib/searchlogic/modifiers/base.rb
213
+ - lib/searchlogic/modifiers/ceil.rb
214
+ - lib/searchlogic/modifiers/char_length.rb
215
+ - lib/searchlogic/modifiers/cos.rb
216
+ - lib/searchlogic/modifiers/cot.rb
217
+ - lib/searchlogic/modifiers/count.rb
218
+ - lib/searchlogic/modifiers/day_of_month.rb
219
+ - lib/searchlogic/modifiers/day_of_week.rb
220
+ - lib/searchlogic/modifiers/day_of_year.rb
221
+ - lib/searchlogic/modifiers/degrees.rb
222
+ - lib/searchlogic/modifiers/exp.rb
223
+ - lib/searchlogic/modifiers/floor.rb
224
+ - lib/searchlogic/modifiers/hex.rb
225
+ - lib/searchlogic/modifiers/hour.rb
226
+ - lib/searchlogic/modifiers/log.rb
227
+ - lib/searchlogic/modifiers/log10.rb
228
+ - lib/searchlogic/modifiers/log2.rb
229
+ - lib/searchlogic/modifiers/lower.rb
230
+ - lib/searchlogic/modifiers/ltrim.rb
231
+ - lib/searchlogic/modifiers/md5.rb
232
+ - lib/searchlogic/modifiers/microseconds.rb
233
+ - lib/searchlogic/modifiers/milliseconds.rb
234
+ - lib/searchlogic/modifiers/minute.rb
235
+ - lib/searchlogic/modifiers/month.rb
236
+ - lib/searchlogic/modifiers/octal.rb
237
+ - lib/searchlogic/modifiers/radians.rb
238
+ - lib/searchlogic/modifiers/round.rb
239
+ - lib/searchlogic/modifiers/rtrim.rb
240
+ - lib/searchlogic/modifiers/second.rb
241
+ - lib/searchlogic/modifiers/sign.rb
242
+ - lib/searchlogic/modifiers/sin.rb
243
+ - lib/searchlogic/modifiers/square_root.rb
244
+ - lib/searchlogic/modifiers/sum.rb
245
+ - lib/searchlogic/modifiers/tan.rb
246
+ - lib/searchlogic/modifiers/trim.rb
247
+ - lib/searchlogic/modifiers/upper.rb
248
+ - lib/searchlogic/modifiers/week.rb
249
+ - lib/searchlogic/modifiers/year.rb
250
+ - lib/searchlogic/search/base.rb
251
+ - lib/searchlogic/search/conditions.rb
252
+ - lib/searchlogic/search/ordering.rb
253
+ - lib/searchlogic/search/pagination.rb
254
+ - lib/searchlogic/search/protection.rb
255
+ - lib/searchlogic/search/searching.rb
256
+ - lib/searchlogic/shared/utilities.rb
257
+ - lib/searchlogic/shared/virtual_classes.rb
258
+ - lib/searchlogic/version.rb
259
+ - lib/searchlogic.rb
260
+ - Manifest
261
+ - MIT-LICENSE
262
+ - Rakefile
263
+ - README.rdoc
264
+ - test/active_record_tests/associations_test.rb
265
+ - test/active_record_tests/base_test.rb
266
+ - test/condition_tests/base_test.rb
267
+ - test/condition_tests/begins_with_test.rb
268
+ - test/condition_tests/blank_test.rb
269
+ - test/condition_tests/child_of_test.rb
270
+ - test/condition_tests/descendant_of_test.rb
271
+ - test/condition_tests/ends_with_test.rb
272
+ - test/condition_tests/equals_test.rb
273
+ - test/condition_tests/greater_than_or_equal_to_test.rb
274
+ - test/condition_tests/greater_than_test.rb
275
+ - test/condition_tests/inclusive_descendant_of_test.rb
276
+ - test/condition_tests/keywords_test.rb
277
+ - test/condition_tests/less_than_or_equal_to_test.rb
278
+ - test/condition_tests/less_than_test.rb
279
+ - test/condition_tests/like_test.rb
280
+ - test/condition_tests/nil_test.rb
281
+ - test/condition_tests/not_begin_with_test.rb
282
+ - test/condition_tests/not_blank_test.rb
283
+ - test/condition_tests/not_end_with_test.rb
284
+ - test/condition_tests/not_equal_test.rb
285
+ - test/condition_tests/not_have_keywords_test.rb
286
+ - test/condition_tests/not_like_test.rb
287
+ - test/condition_tests/not_nil_test.rb
288
+ - test/condition_tests/sibling_of_test.rb
289
+ - test/conditions_tests/any_or_all_test.rb
290
+ - test/conditions_tests/base_test.rb
291
+ - test/conditions_tests/groups_test.rb
292
+ - test/conditions_tests/magic_methods_test.rb
293
+ - test/conditions_tests/multiparameter_attributes_test.rb
294
+ - test/conditions_tests/protection_test.rb
295
+ - test/config_test.rb
296
+ - test/fixtures/accounts.yml
297
+ - test/fixtures/animals.yml
298
+ - test/fixtures/orders.yml
299
+ - test/fixtures/user_groups.yml
300
+ - test/fixtures/users.yml
301
+ - test/libs/awesome_nested_set/compatability.rb
302
+ - test/libs/awesome_nested_set/helper.rb
303
+ - test/libs/awesome_nested_set/named_scope.rb
304
+ - test/libs/awesome_nested_set.rb
305
+ - test/libs/rexml_fix.rb
306
+ - test/modifier_tests/day_of_month_test.rb
307
+ - test/search_tests/base_test.rb
308
+ - test/search_tests/conditions_test.rb
309
+ - test/search_tests/ordering_test.rb
310
+ - test/search_tests/pagination_test.rb
311
+ - test/search_tests/protection_test.rb
312
+ - test/test_helper.rb
313
+ - TODO.rdoc
314
+ - searchlogic.gemspec
315
+ has_rdoc: true
316
+ homepage: http://github.com/binarylogic/searchlogic
317
+ post_install_message:
318
+ rdoc_options:
319
+ - --line-numbers
320
+ - --inline-source
321
+ - --title
322
+ - Searchlogic
323
+ - --main
324
+ - README.rdoc
325
+ require_paths:
326
+ - lib
327
+ required_ruby_version: !ruby/object:Gem::Requirement
328
+ requirements:
329
+ - - ">="
330
+ - !ruby/object:Gem::Version
331
+ version: "0"
332
+ version:
333
+ required_rubygems_version: !ruby/object:Gem::Requirement
334
+ requirements:
335
+ - - ">="
336
+ - !ruby/object:Gem::Version
337
+ version: "1.2"
338
+ version:
339
+ requirements: []
340
+
341
+ rubyforge_project: spree-searchlogic
342
+ rubygems_version: 1.2.0
343
+ signing_key:
344
+ specification_version: 2
345
+ summary: Object based ActiveRecord searching, ordering, pagination, and more!
346
+ test_files:
347
+ - test/active_record_tests/associations_test.rb
348
+ - test/active_record_tests/base_test.rb
349
+ - test/condition_tests/base_test.rb
350
+ - test/condition_tests/begins_with_test.rb
351
+ - test/condition_tests/blank_test.rb
352
+ - test/condition_tests/child_of_test.rb
353
+ - test/condition_tests/descendant_of_test.rb
354
+ - test/condition_tests/ends_with_test.rb
355
+ - test/condition_tests/equals_test.rb
356
+ - test/condition_tests/greater_than_or_equal_to_test.rb
357
+ - test/condition_tests/greater_than_test.rb
358
+ - test/condition_tests/inclusive_descendant_of_test.rb
359
+ - test/condition_tests/keywords_test.rb
360
+ - test/condition_tests/less_than_or_equal_to_test.rb
361
+ - test/condition_tests/less_than_test.rb
362
+ - test/condition_tests/like_test.rb
363
+ - test/condition_tests/nil_test.rb
364
+ - test/condition_tests/not_begin_with_test.rb
365
+ - test/condition_tests/not_blank_test.rb
366
+ - test/condition_tests/not_end_with_test.rb
367
+ - test/condition_tests/not_equal_test.rb
368
+ - test/condition_tests/not_have_keywords_test.rb
369
+ - test/condition_tests/not_like_test.rb
370
+ - test/condition_tests/not_nil_test.rb
371
+ - test/condition_tests/sibling_of_test.rb
372
+ - test/conditions_tests/any_or_all_test.rb
373
+ - test/conditions_tests/base_test.rb
374
+ - test/conditions_tests/groups_test.rb
375
+ - test/conditions_tests/magic_methods_test.rb
376
+ - test/conditions_tests/multiparameter_attributes_test.rb
377
+ - test/conditions_tests/protection_test.rb
378
+ - test/config_test.rb
379
+ - test/modifier_tests/day_of_month_test.rb
380
+ - test/search_tests/base_test.rb
381
+ - test/search_tests/conditions_test.rb
382
+ - test/search_tests/ordering_test.rb
383
+ - test/search_tests/pagination_test.rb
384
+ - test/search_tests/protection_test.rb
385
+ - test/test_helper.rb