searchgasm 0.9.0
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.
- data/CHANGELOG +1 -0
- data/MIT-LICENSE +20 -0
- data/Manifest +28 -0
- data/README.mdown +240 -0
- data/Rakefile +17 -0
- data/init.rb +1 -0
- data/lib/searchgasm/active_record/associations.rb +56 -0
- data/lib/searchgasm/active_record/base.rb +70 -0
- data/lib/searchgasm/active_record/protection.rb +37 -0
- data/lib/searchgasm/helpers.rb +100 -0
- data/lib/searchgasm/search/base.rb +142 -0
- data/lib/searchgasm/search/condition.rb +168 -0
- data/lib/searchgasm/search/conditions.rb +154 -0
- data/lib/searchgasm/search/utilities.rb +34 -0
- data/lib/searchgasm/version.rb +82 -0
- data/lib/searchgasm.rb +9 -0
- data/searchgasm.gemspec +124 -0
- data/test/fixtures/accounts.yml +15 -0
- data/test/fixtures/orders.yml +14 -0
- data/test/fixtures/users.yml +27 -0
- data/test/libs/acts_as_tree.rb +98 -0
- data/test/libs/rexml_fix.rb +14 -0
- data/test/test_active_record_associations.rb +38 -0
- data/test/test_active_record_base.rb +48 -0
- data/test/test_active_record_protection.rb +0 -0
- data/test/test_helper.rb +78 -0
- data/test/test_searchgasm_base.rb +116 -0
- data/test/test_searchgasm_condition.rb +149 -0
- data/test/test_searchgasm_conditions.rb +137 -0
- metadata +122 -0
@@ -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
|