binarylogic-searchlogic 2.0.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.
@@ -0,0 +1,253 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "Conditions" do
4
+ it "should be dynamically created and then cached" do
5
+ User.should_not respond_to(:age_less_than)
6
+ User.age_less_than(5)
7
+ User.should respond_to(:age_less_than)
8
+ end
9
+
10
+ it "should not allow conditions on non columns" do
11
+ lambda { User.whatever_equals(2) }.should raise_error(NoMethodError)
12
+ end
13
+
14
+ context "comparison conditions" do
15
+ it "should have equals" do
16
+ (5..7).each { |age| User.create(:age => age) }
17
+ User.age_equals(6).all.should == User.find_all_by_age(6)
18
+ end
19
+
20
+ it "should have does not equal" do
21
+ (5..7).each { |age| User.create(:age => age) }
22
+ User.age_does_not_equal(6).all.should == User.find_all_by_age([5,7])
23
+ end
24
+
25
+ it "should have less than" do
26
+ (5..7).each { |age| User.create(:age => age) }
27
+ User.age_less_than(6).all.should == User.find_all_by_age(5)
28
+ end
29
+
30
+ it "should have less than or equal to" do
31
+ (5..7).each { |age| User.create(:age => age) }
32
+ User.age_less_than_or_equal_to(6).all.should == User.find_all_by_age([5, 6])
33
+ end
34
+
35
+ it "should have greater than" do
36
+ (5..7).each { |age| User.create(:age => age) }
37
+ User.age_greater_than(6).all.should == User.find_all_by_age(7)
38
+ end
39
+
40
+ it "should have greater than or equal to" do
41
+ (5..7).each { |age| User.create(:age => age) }
42
+ User.age_greater_than_or_equal_to(6).all.should == User.find_all_by_age([6, 7])
43
+ end
44
+ end
45
+
46
+ context "wildcard conditions" do
47
+ it "should have like" do
48
+ %w(bjohnson thunt).each { |username| User.create(:username => username) }
49
+ User.username_like("john").all.should == User.find_all_by_username("bjohnson")
50
+ end
51
+
52
+ it "should have begins with" do
53
+ %w(bjohnson thunt).each { |username| User.create(:username => username) }
54
+ User.username_begins_with("bj").all.should == User.find_all_by_username("bjohnson")
55
+ end
56
+
57
+ it "should have ends with" do
58
+ %w(bjohnson thunt).each { |username| User.create(:username => username) }
59
+ User.username_ends_with("son").all.should == User.find_all_by_username("bjohnson")
60
+ end
61
+ end
62
+
63
+ context "boolean conditions" do
64
+ it "should have null" do
65
+ ["bjohnson", nil].each { |username| User.create(:username => username) }
66
+ User.username_null.all.should == User.find_all_by_username(nil)
67
+ end
68
+
69
+ it "should have empty" do
70
+ ["bjohnson", ""].each { |username| User.create(:username => username) }
71
+ User.username_empty.all.should == User.find_all_by_username("")
72
+ end
73
+ end
74
+
75
+ context "any and all conditions" do
76
+ it "should do nothing if no arguments are passed" do
77
+ User.username_equals_any.proxy_options.should == {}
78
+ end
79
+
80
+ it "should have equals any" do
81
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
82
+ User.username_equals_any("bjohnson", "thunt").all == User.find_all_by_username(["bjohnson", "thunt"])
83
+ end
84
+
85
+ it "should have equals all" do
86
+ %w(bjohnson thunt dainor).each { |username| User.create(:username => username) }
87
+ User.username_equals_all("bjohnson", "thunt").all == []
88
+ end
89
+
90
+ it "should have does not equal any" do
91
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
92
+ User.username_does_not_equal_any("bjohnson", "thunt").all == User.find_all_by_username("dgainor")
93
+ end
94
+
95
+ it "should have does not equal all" do
96
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
97
+ User.username_does_not_equal_all("bjohnson", "thunt").all == User.find_all_by_username("dgainor")
98
+ end
99
+
100
+ it "should have less than any" do
101
+ (5..7).each { |age| User.create(:age => age) }
102
+ User.age_less_than_any(7,6).all == User.find_all_by_age([5, 6])
103
+ end
104
+
105
+ it "should have less than all" do
106
+ (5..7).each { |age| User.create(:age => age) }
107
+ User.age_less_than_all(7,6).all == User.find_all_by_age(5)
108
+ end
109
+
110
+ it "should have less than or equal to any" do
111
+ (5..7).each { |age| User.create(:age => age) }
112
+ User.age_less_than_or_equal_to_any(7,6).all == User.find_all_by_age([5, 6, 7])
113
+ end
114
+
115
+ it "should have less than or equal to all" do
116
+ (5..7).each { |age| User.create(:age => age) }
117
+ User.age_less_than_or_equal_to_all(7,6).all == User.find_all_by_age([5, 6])
118
+ end
119
+
120
+ it "should have less than any" do
121
+ (5..7).each { |age| User.create(:age => age) }
122
+ User.age_greater_than_any(5,6).all == User.find_all_by_age([6, 7])
123
+ end
124
+
125
+ it "should have greater than all" do
126
+ (5..7).each { |age| User.create(:age => age) }
127
+ User.age_greater_than_all(5,6).all == User.find_all_by_age(7)
128
+ end
129
+
130
+ it "should have greater than or equal to any" do
131
+ (5..7).each { |age| User.create(:age => age) }
132
+ User.age_greater_than_or_equal_to_any(5,6).all == User.find_all_by_age([5, 6, 7])
133
+ end
134
+
135
+ it "should have greater than or equal to all" do
136
+ (5..7).each { |age| User.create(:age => age) }
137
+ User.age_greater_than_or_equal_to_all(5,6).all == User.find_all_by_age([6, 7])
138
+ end
139
+
140
+ it "should have like all" do
141
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
142
+ User.username_like_all("bjohnson", "thunt").all == []
143
+ User.username_like_all("n", "o").all == User.find_all_by_username(["bjohnson", "thunt"])
144
+ end
145
+
146
+ it "should have like any" do
147
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
148
+ User.username_like_all("bjohnson", "thunt").all == User.find_all_by_username(["bjohnson", "thunt"])
149
+ end
150
+
151
+ it "should have begins with all" do
152
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
153
+ User.username_begins_with_all("bjohnson", "thunt").all == []
154
+ end
155
+
156
+ it "should have begins with any" do
157
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
158
+ User.username_begins_with_any("bj", "th").all == User.find_all_by_username(["bjohnson", "thunt"])
159
+ end
160
+
161
+ it "should have ends with all" do
162
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
163
+ User.username_ends_with_all("n", "r").all == []
164
+ end
165
+
166
+ it "should have ends with any" do
167
+ %w(bjohnson thunt dgainor).each { |username| User.create(:username => username) }
168
+ User.username_ends_with_any("n", "r").all == User.find_all_by_username(["bjohnson", "dgainor"])
169
+ end
170
+ end
171
+
172
+ context "alias conditions" do
173
+ it "should have is" do
174
+ User.age_is(5).proxy_options.should == User.age_equals(5).proxy_options
175
+ end
176
+
177
+ it "should have eq" do
178
+ User.age_eq(5).proxy_options.should == User.age_equals(5).proxy_options
179
+ end
180
+
181
+ it "should have not_equal_to" do
182
+ User.age_not_equal_to(5).proxy_options.should == User.age_does_not_equal(5).proxy_options
183
+ end
184
+
185
+ it "should have is_not" do
186
+ # This is matching "not" first. How do you give priority in a regex? Because it's matching the
187
+ # 'not' condition and thinking the column is 'age_is'.
188
+ pending
189
+ User.age_is_not(5).proxy_options.should == User.age_does_not_equal(5).proxy_options
190
+ end
191
+
192
+ it "should have not" do
193
+ User.age_not(5).proxy_options.should == User.age_does_not_equal(5).proxy_options
194
+ end
195
+
196
+ it "should have ne" do
197
+ User.age_ne(5).proxy_options.should == User.age_does_not_equal(5).proxy_options
198
+ end
199
+
200
+ it "should have lt" do
201
+ User.age_lt(5).proxy_options.should == User.age_less_than(5).proxy_options
202
+ end
203
+
204
+ it "should have lte" do
205
+ User.age_lte(5).proxy_options.should == User.age_less_than_or_equal_to(5).proxy_options
206
+ end
207
+
208
+ it "should have gt" do
209
+ User.age_gt(5).proxy_options.should == User.age_greater_than(5).proxy_options
210
+ end
211
+
212
+ it "should have gte" do
213
+ User.age_gte(5).proxy_options.should == User.age_greater_than_or_equal_to(5).proxy_options
214
+ end
215
+
216
+ it "should have contains" do
217
+ User.username_contains(5).proxy_options.should == User.username_like(5).proxy_options
218
+ end
219
+
220
+ it "should have contains" do
221
+ User.username_includes(5).proxy_options.should == User.username_like(5).proxy_options
222
+ end
223
+
224
+ it "should have bw" do
225
+ User.username_bw(5).proxy_options.should == User.username_begins_with(5).proxy_options
226
+ end
227
+
228
+ it "should have ew" do
229
+ User.username_ew(5).proxy_options.should == User.username_ends_with(5).proxy_options
230
+ end
231
+
232
+ it "should have nil" do
233
+ User.username_nil.proxy_options.should == User.username_nil.proxy_options
234
+ end
235
+ end
236
+
237
+ context "searchlogic lambda" do
238
+ it "should be a string" do
239
+ User.username_like("test")
240
+ User.named_scope_options(:username_like).searchlogic_arg_type.should == :string
241
+ end
242
+
243
+ it "should be an integer" do
244
+ User.id_gt(10)
245
+ User.named_scope_options(:id_gt).searchlogic_arg_type.should == :integer
246
+ end
247
+
248
+ it "should be a float" do
249
+ Order.total_gt(10)
250
+ Order.named_scope_options(:total_gt).searchlogic_arg_type.should == :float
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "Ordering" do
4
+ it "should be dynamically created and then cached" do
5
+ User.should_not respond_to(:ascend_by_username)
6
+ User.ascend_by_username
7
+ User.should respond_to(:ascend_by_username)
8
+ end
9
+
10
+ it "should have ascending" do
11
+ %w(bjohnson thunt).each { |username| User.create(:username => username) }
12
+ User.ascend_by_username.all.should == User.all(:order => "username ASC")
13
+ end
14
+
15
+ it "should have descending" do
16
+ %w(bjohnson thunt).each { |username| User.create(:username => username) }
17
+ User.descend_by_username.all.should == User.all(:order => "username DESC")
18
+ end
19
+
20
+ it "should have order" do
21
+ User.order("ascend_by_username").proxy_options.should == User.ascend_by_username.proxy_options
22
+ end
23
+ end
@@ -0,0 +1,251 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+
3
+ describe "Search" do
4
+ context "implementation" do
5
+ it "should create a search proxy" do
6
+ User.search(:username => "joe").should be_kind_of(Searchlogic::Search)
7
+ end
8
+
9
+ it "should create a search proxy using the same class" do
10
+ User.search.klass.should == User
11
+ end
12
+
13
+ it "should pass on the current scope to the proxy" do
14
+ company = Company.create
15
+ user = company.users.create
16
+ search = company.users.search
17
+ search.current_scope.should == company.users.scope(:find)
18
+ end
19
+ end
20
+
21
+ context "initialization" do
22
+ it "should require a class" do
23
+ lambda { Searchlogic::Search.new }.should raise_error(ArgumentError)
24
+ end
25
+
26
+ it "should set the conditions" do
27
+ search = User.search(:username => "bjohnson")
28
+ search.conditions.should == {:username => "bjohnson"}
29
+ end
30
+ end
31
+
32
+ context "conditions" do
33
+ it "should set the conditions and be accessible individually" do
34
+ search = User.search
35
+ search.conditions = {:username => "bjohnson"}
36
+ search.username.should == "bjohnson"
37
+ end
38
+
39
+ it "should set the conditions and allow string keys" do
40
+ search = User.search
41
+ search.conditions = {"username" => "bjohnson"}
42
+ search.username.should == "bjohnson"
43
+ end
44
+
45
+ it "should ignore blank values" do
46
+ search = User.search
47
+ search.conditions = {"username" => ""}
48
+ search.username.should be_nil
49
+ end
50
+
51
+ it "should ignore blank values in arrays" do
52
+ search = User.search
53
+ search.conditions = {"username_equals_any" => [""]}
54
+ search.username_equals_any.should be_blank
55
+ end
56
+ end
57
+
58
+ context "condition accessors" do
59
+ it "should allow setting exact columns individually" do
60
+ search = User.search
61
+ search.username = "bjohnson"
62
+ search.username.should == "bjohnson"
63
+ end
64
+
65
+ it "should allow setting local column conditions individually" do
66
+ search = User.search
67
+ search.username_gt = "bjohnson"
68
+ search.username_gt.should == "bjohnson"
69
+ end
70
+
71
+ it "should allow setting association conditions" do
72
+ search = User.search
73
+ search.orders_total_gt = 10
74
+ search.orders_total_gt.should == 10
75
+ end
76
+
77
+ it "should allow using custom conditions" do
78
+ User.named_scope(:four_year_olds, { :conditions => { :age => 4 } })
79
+ search = User.search
80
+ search.four_year_olds = true
81
+ search.four_year_olds.should == true
82
+ search.proxy_options.should == User.four_year_olds.proxy_options
83
+ end
84
+
85
+ it "should not merge conflicting conditions into one value" do
86
+ # This class should JUST be a proxy. It should not do anything more than that.
87
+ # A user would be allowed to call both named scopes if they wanted.
88
+ search = User.search
89
+ search.username_greater_than = "bjohnson1"
90
+ search.username_gt = "bjohnson2"
91
+ search.username_greater_than.should == "bjohnson1"
92
+ search.username_gt.should == "bjohnson2"
93
+ end
94
+
95
+ it "should allow setting custom conditions individually" do
96
+ User.named_scope(:four_year_olds, :conditions => {:age => 4})
97
+ search = User.search
98
+ search.four_year_olds = true
99
+ search.four_year_olds.should == true
100
+ end
101
+
102
+ it "should not allow setting conditions that are not scopes" do
103
+ search = User.search
104
+ lambda { search.unknown = true }.should raise_error(Searchlogic::Search::UnknownConditionError)
105
+ end
106
+
107
+ context "type casting" do
108
+ it "should be a Boolean given true" do
109
+ search = User.search
110
+ search.id_nil = true
111
+ search.id_nil.should == true
112
+ end
113
+
114
+ it "should be a Boolean given 'true'" do
115
+ search = User.search
116
+ search.id_nil = "true"
117
+ search.id_nil.should == true
118
+ end
119
+
120
+ it "should be a Boolean given '1'" do
121
+ search = User.search
122
+ search.id_nil = "1"
123
+ search.id_nil.should == true
124
+ end
125
+
126
+ it "should be a Boolean given false" do
127
+ search = User.search
128
+ search.id_nil = false
129
+ search.id_nil.should == false
130
+ end
131
+
132
+ it "should be a Boolean given 'false'" do
133
+ search = User.search
134
+ search.id_nil = "false"
135
+ search.id_nil.should == false
136
+ end
137
+
138
+ it "should be a Boolean given '0'" do
139
+ search = User.search
140
+ search.id_nil = "0"
141
+ search.id_nil.should == false
142
+ end
143
+
144
+ it "should be an Integer given 1" do
145
+ search = User.search
146
+ search.id_gt = 1
147
+ search.id_gt.should == 1
148
+ end
149
+
150
+ it "should be an Integer given '1'" do
151
+ search = User.search
152
+ search.id_gt = "1"
153
+ search.id_gt.should == 1
154
+ end
155
+
156
+ it "should be a Float given 1.0" do
157
+ search = Order.search
158
+ search.total_gt = 1.0
159
+ search.total_gt.should == 1.0
160
+ end
161
+
162
+ it "should be a Float given '1'" do
163
+ search = Order.search
164
+ search.total_gt = "1"
165
+ search.total_gt.should == 1.0
166
+ end
167
+
168
+ it "should be a Float given '1.5'" do
169
+ search = Order.search
170
+ search.total_gt = "1.5"
171
+ search.total_gt.should == 1.5
172
+ end
173
+
174
+ it "should be a Date given 'Jan 1, 2009'" do
175
+ search = Order.search
176
+ search.shipped_on_after = "Jan 1, 2009"
177
+ search.shipped_on_after.should == Date.parse("Jan 1, 2009")
178
+ end
179
+
180
+ it "should be a Time given 'Jan 1, 2009'" do
181
+ search = Order.search
182
+ search.created_at_after = "Jan 1, 2009"
183
+ search.created_at_after.should == Time.parse("Jan 1, 2009")
184
+ end
185
+
186
+ it "should be a Time given 'Jan 1, 2009 9:33AM'" do
187
+ search = Order.search
188
+ search.created_at_after = "Jan 1, 2009 9:33AM"
189
+ search.created_at_after.should == Time.parse("Jan 1, 2009 9:33AM")
190
+ end
191
+
192
+ it "should be an Array and cast it's values given ['1', '2', '3']" do
193
+ search = Order.search
194
+ search.id_equals_any = ["1", "2", "3"]
195
+ search.id_equals_any.should == [1, 2, 3]
196
+ end
197
+
198
+ it "should type cast association conditions" do
199
+ search = User.search
200
+ search.orders_total_gt = "10"
201
+ search.orders_total_gt.should == 10
202
+ end
203
+
204
+ it "should type cast deep association conditions" do
205
+ search = Company.search
206
+ search.users_orders_total_gt = "10"
207
+ search.users_orders_total_gt.should == 10
208
+ end
209
+ end
210
+ end
211
+
212
+ context "taking action" do
213
+ it "should return all when not given any conditions" do
214
+ 3.times { User.create }
215
+ User.search.all.length.should == 3
216
+ end
217
+
218
+ it "should implement the current scope based on an association" do
219
+ User.create
220
+ company = Company.create
221
+ user = company.users.create
222
+ company.users.search.all.should == [user]
223
+ end
224
+
225
+ it "should implement the current scope based on a named scope" do
226
+ User.named_scope(:four_year_olds, :conditions => {:age => 4})
227
+ (3..5).each { |age| User.create(:age => age) }
228
+ User.four_year_olds.search.all.should == User.find_all_by_age(4)
229
+ end
230
+
231
+ it "should call named scopes for conditions" do
232
+ User.search(:age_less_than => 5).proxy_options.should == User.age_less_than(5).proxy_options
233
+ end
234
+
235
+ it "should alias exact column names to use equals" do
236
+ User.search(:username => "joe").proxy_options.should == User.username_equals("joe").proxy_options
237
+ end
238
+
239
+ it "should recognize conditions with a value of true where the named scope has an arity of 0" do
240
+ User.search(:username_nil => true).proxy_options.should == User.username_nil.proxy_options
241
+ end
242
+
243
+ it "should ignore conditions with a value of false where the named scope has an arity of 0" do
244
+ User.search(:username_nil => false).proxy_options.should == {}
245
+ end
246
+
247
+ it "should recognize the order condition" do
248
+ User.search(:order => "ascend_by_username").proxy_options.should == User.ascend_by_username.proxy_options
249
+ end
250
+ end
251
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec'
2
+ require 'rubygems'
3
+ require 'ruby-debug'
4
+ require 'activerecord'
5
+
6
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
7
+ ActiveRecord::Base.configurations = true
8
+
9
+ ActiveRecord::Schema.verbose = false
10
+ ActiveRecord::Schema.define(:version => 1) do
11
+ create_table :companies do |t|
12
+ t.datetime :created_at
13
+ t.datetime :updated_at
14
+ end
15
+
16
+ create_table :users do |t|
17
+ t.datetime :created_at
18
+ t.datetime :updated_at
19
+ t.integer :company_id
20
+ t.string :username
21
+ t.integer :age
22
+ end
23
+
24
+ create_table :orders do |t|
25
+ t.datetime :created_at
26
+ t.datetime :updated_at
27
+ t.integer :user_id
28
+ t.date :shipped_on
29
+ t.float :taxes
30
+ t.float :total
31
+ end
32
+
33
+ create_table :line_items do |t|
34
+ t.datetime :created_at
35
+ t.datetime :updated_at
36
+ t.integer :order_id
37
+ t.float :price
38
+ end
39
+ end
40
+
41
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
42
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
43
+ require 'searchlogic'
44
+
45
+ Spec::Runner.configure do |config|
46
+ config.before(:each) do
47
+ class Company < ActiveRecord::Base
48
+ has_many :users, :dependent => :destroy
49
+ end
50
+
51
+ class User < ActiveRecord::Base
52
+ belongs_to :company
53
+ has_many :orders, :dependent => :destroy
54
+ end
55
+
56
+ class Order < ActiveRecord::Base
57
+ belongs_to :user
58
+ has_many :line_items, :dependent => :destroy
59
+ end
60
+
61
+ class LineItem < ActiveRecord::Base
62
+ belongs_to :order
63
+ end
64
+
65
+ Company.destroy_all
66
+ User.destroy_all
67
+ Order.destroy_all
68
+ LineItem.destroy_all
69
+ end
70
+
71
+ config.after(:each) do
72
+ Object.send(:remove_const, :Company)
73
+ Object.send(:remove_const, :User)
74
+ Object.send(:remove_const, :Order)
75
+ Object.send(:remove_const, :LineItem)
76
+ end
77
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: binarylogic-searchlogic
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - binarylogic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-15 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: bjohnson@binarylogic.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - LICENSE
24
+ - README.rdoc
25
+ files:
26
+ - .gitignore
27
+ - LICENSE
28
+ - README.rdoc
29
+ - Rakefile
30
+ - VERSION.yml
31
+ - init.rb
32
+ - lib/searchlogic.rb
33
+ - lib/searchlogic/core_ext/object.rb
34
+ - lib/searchlogic/core_ext/proc.rb
35
+ - lib/searchlogic/named_scopes/associations.rb
36
+ - lib/searchlogic/named_scopes/conditions.rb
37
+ - lib/searchlogic/named_scopes/ordering.rb
38
+ - lib/searchlogic/rails_helpers.rb
39
+ - lib/searchlogic/search.rb
40
+ - rails/init.rb
41
+ - spec/core_ext/object_spec.rb
42
+ - spec/core_ext/proc_spec.rb
43
+ - spec/named_scopes/associations_spec.rb
44
+ - spec/named_scopes/conditions_spec.rb
45
+ - spec/named_scopes/ordering_spec.rb
46
+ - spec/search_spec.rb
47
+ - spec/spec_helper.rb
48
+ has_rdoc: false
49
+ homepage: http://github.com/binarylogic/searchlogic
50
+ post_install_message:
51
+ rdoc_options:
52
+ - --charset=UTF-8
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ requirements: []
68
+
69
+ rubyforge_project: test
70
+ rubygems_version: 1.2.0
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: TODO
74
+ test_files:
75
+ - spec/core_ext/object_spec.rb
76
+ - spec/core_ext/proc_spec.rb
77
+ - spec/named_scopes/associations_spec.rb
78
+ - spec/named_scopes/conditions_spec.rb
79
+ - spec/named_scopes/ordering_spec.rb
80
+ - spec/search_spec.rb
81
+ - spec/spec_helper.rb