searchgasm 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,149 @@
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
@@ -0,0 +1,137 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSearchgasmConditions < 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_initialize
16
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account, :name_contains => "Binary")
17
+ assert_equal conditions.klass, Account
18
+ assert_equal conditions.name_contains, "Binary"
19
+ end
20
+
21
+ def test_setting_conditions
22
+ [Account, User, Order].each do |klass|
23
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(klass)
24
+
25
+ klass.columns.each do |column|
26
+ value = column_value(column)
27
+ BinaryLogic::Searchgasm::Search::Conditions.conditions_for_column_type(column.type).each do |condition|
28
+ name = BinaryLogic::Searchgasm::Search::Condition.generate_name(column, condition)
29
+ conditions.send("#{name}=", value)
30
+ assert_equal conditions.send(name), value
31
+ BinaryLogic::Searchgasm::Search::Conditions.alias_conditions(condition).each do |alias_condition|
32
+ alias_name = BinaryLogic::Searchgasm::Search::Condition.generate_name(column, alias_condition)
33
+ conditions.send("#{alias_name}=", value)
34
+ assert_equal conditions.send(alias_name), value
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ def test_setting_associations
42
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account, :users => {:first_name_like => "Ben"})
43
+ assert_equal conditions.users.first_name_like, "Ben"
44
+
45
+ conditions.users.last_name_begins_with = "Ben"
46
+ assert_equal conditions.users.last_name_begins_with, "Ben"
47
+ end
48
+
49
+ def test_includes
50
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account)
51
+ assert_equal conditions.includes, nil
52
+
53
+ conditions.name_like = "Binary"
54
+ assert_equal conditions.includes, nil
55
+
56
+ conditions.users.first_name_like = "Ben"
57
+ assert_equal conditions.includes, :users
58
+
59
+ conditions.users.orders.description_like = "apple"
60
+ assert_equal conditions.includes, {:users => :orders}
61
+ end
62
+
63
+ def test_objects
64
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account)
65
+ assert_equal conditions.objects, []
66
+
67
+ conditions.name_contains = "Binary"
68
+ assert_equal conditions.objects.size, 1
69
+
70
+ conditions.users.first_name_contains = "Ben"
71
+ assert_equal conditions.objects.size, 2
72
+ end
73
+
74
+ def test_reset
75
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account)
76
+
77
+ conditions.name_contains = "Binary"
78
+ assert_equal conditions.objects.size, 1
79
+
80
+ conditions.reset_name_contains!
81
+ assert_equal conditions.objects, []
82
+
83
+ conditions.users.first_name_like = "Ben"
84
+ assert_equal conditions.objects.size, 1
85
+
86
+ conditions.reset_users!
87
+ assert_equal conditions.objects, []
88
+
89
+ conditions.name_begins_with ="Binary"
90
+ conditions.users.orders.total_gt = 200
91
+ conditions.users.first_name_keywords = "Silly name"
92
+ conditions.reset!
93
+ assert_equal conditions.objects, []
94
+ end
95
+
96
+ def test_sanitize
97
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account)
98
+ conditions.name_contains = "Binary"
99
+ conditions.id_gt = 5
100
+ now = Time.now
101
+ conditions.created_at_after = now
102
+ assert_equal conditions.sanitize, ["(\"accounts\".\"name\" LIKE ?) AND (\"accounts\".\"id\" > ?) AND (\"accounts\".\"created_at\" > ?)", "%Binary%", 5, now]
103
+
104
+ # test out associations
105
+ conditions.users.first_name_like = "Ben"
106
+ conditions.users.id_gt = 10
107
+ conditions.users.orders.total_lt = 500
108
+ assert_equal conditions.sanitize, ["(\"accounts\".\"name\" LIKE ?) AND (\"accounts\".\"id\" > ?) AND (\"accounts\".\"created_at\" > ?) AND ((\"users\".\"first_name\" LIKE ?) AND (\"users\".\"id\" > ?) AND (\"orders\".\"total\" < ?))", "%Binary%", 5, now, "%Ben%", 10, 500]
109
+ end
110
+
111
+ def test_value
112
+ conditions = BinaryLogic::Searchgasm::Search::Conditions.new(Account)
113
+ now = Time.now
114
+ conditions.value = {:name_like => "Binary", :created_at_after => now}
115
+ assert_equal conditions.value, {:name_contains => "Binary", :created_at_greater_than => now}
116
+
117
+ conditions.value = "id in (1,2,3,4)"
118
+ assert_equal conditions.value, {}
119
+ assert_equal conditions.scope, "id in (1,2,3,4)"
120
+ end
121
+
122
+ private
123
+ def column_value(column)
124
+ case column.type
125
+ when :string, :text, :binary
126
+ Array.new(50) { (rand(122-97) + 97).chr }.join
127
+ when :integer
128
+ rand(99999)
129
+ when :float, :decimal
130
+ rand * 100
131
+ when :datetime, :timestamp, :time
132
+ Time.now
133
+ when :date
134
+ Date.today
135
+ end
136
+ end
137
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: searchgasm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Johnson of Binary Logic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-09-01 00:00:00 -04: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: echoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: Makes ActiveRecord searching easier, robust, and powerful. Automatic conditions, pagination support, object based searching, and more.
36
+ email: bjohnson@binarylogic.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - CHANGELOG
43
+ - lib/searchgasm/active_record/associations.rb
44
+ - lib/searchgasm/active_record/base.rb
45
+ - lib/searchgasm/active_record/protection.rb
46
+ - lib/searchgasm/helpers.rb
47
+ - lib/searchgasm/search/base.rb
48
+ - lib/searchgasm/search/condition.rb
49
+ - lib/searchgasm/search/conditions.rb
50
+ - lib/searchgasm/search/utilities.rb
51
+ - lib/searchgasm/version.rb
52
+ - lib/searchgasm.rb
53
+ - README.mdown
54
+ files:
55
+ - CHANGELOG
56
+ - init.rb
57
+ - lib/searchgasm/active_record/associations.rb
58
+ - lib/searchgasm/active_record/base.rb
59
+ - lib/searchgasm/active_record/protection.rb
60
+ - lib/searchgasm/helpers.rb
61
+ - lib/searchgasm/search/base.rb
62
+ - lib/searchgasm/search/condition.rb
63
+ - lib/searchgasm/search/conditions.rb
64
+ - lib/searchgasm/search/utilities.rb
65
+ - lib/searchgasm/version.rb
66
+ - lib/searchgasm.rb
67
+ - Manifest
68
+ - MIT-LICENSE
69
+ - Rakefile
70
+ - README.mdown
71
+ - test/fixtures/accounts.yml
72
+ - test/fixtures/orders.yml
73
+ - test/fixtures/users.yml
74
+ - test/libs/acts_as_tree.rb
75
+ - test/libs/rexml_fix.rb
76
+ - test/test_active_record_associations.rb
77
+ - test/test_active_record_base.rb
78
+ - test/test_active_record_protection.rb
79
+ - test/test_helper.rb
80
+ - test/test_searchgasm_base.rb
81
+ - test/test_searchgasm_condition.rb
82
+ - test/test_searchgasm_conditions.rb
83
+ - searchgasm.gemspec
84
+ has_rdoc: true
85
+ homepage: http://github.com/binarylogic/searchgasm
86
+ post_install_message:
87
+ rdoc_options:
88
+ - --line-numbers
89
+ - --inline-source
90
+ - --title
91
+ - Searchgasm
92
+ - --main
93
+ - README.mdown
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ version:
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "="
105
+ - !ruby/object:Gem::Version
106
+ version: "1.2"
107
+ version:
108
+ requirements: []
109
+
110
+ rubyforge_project: searchgasm
111
+ rubygems_version: 1.2.0
112
+ signing_key:
113
+ specification_version: 2
114
+ summary: Orgasmic ActiveRecord searching
115
+ test_files:
116
+ - test/test_active_record_associations.rb
117
+ - test/test_active_record_base.rb
118
+ - test/test_active_record_protection.rb
119
+ - test/test_helper.rb
120
+ - test/test_searchgasm_base.rb
121
+ - test/test_searchgasm_condition.rb
122
+ - test/test_searchgasm_conditions.rb