searchlogic 2.4.32 → 2.5.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.ruby-version +1 -0
- data/Appraisals +6 -0
- data/Gemfile +2 -10
- data/Gemfile.lock +29 -29
- data/README.rdoc +2 -0
- data/Rakefile +4 -21
- data/gemfiles/ar2.3.10.gemfile +7 -0
- data/gemfiles/ar2.3.10.gemfile.lock +28 -0
- data/gemfiles/ar2.3.11.gemfile +7 -0
- data/gemfiles/ar2.3.11.gemfile.lock +28 -0
- data/gemfiles/ar2.3.12.gemfile +7 -0
- data/gemfiles/ar2.3.12.gemfile.lock +28 -0
- data/gemfiles/ar2.3.14.gemfile +7 -0
- data/gemfiles/ar2.3.14.gemfile.lock +28 -0
- data/gemfiles/ar2.3.9.gemfile +7 -0
- data/gemfiles/ar2.3.9.gemfile.lock +28 -0
- data/lib/searchlogic/active_record/consistency.rb +4 -4
- data/lib/searchlogic/active_record/named_scope_tools.rb +7 -7
- data/lib/searchlogic/active_record/scope.rb +30 -0
- data/lib/searchlogic/core_ext/proc.rb +1 -1
- data/lib/searchlogic/named_scopes/alias_scope.rb +15 -14
- data/lib/searchlogic/named_scopes/association_conditions.rb +16 -16
- data/lib/searchlogic/named_scopes/association_ordering.rb +8 -9
- data/lib/searchlogic/named_scopes/base.rb +16 -0
- data/lib/searchlogic/named_scopes/{conditions.rb → column_conditions.rb} +47 -28
- data/lib/searchlogic/named_scopes/or_conditions.rb +65 -37
- data/lib/searchlogic/named_scopes/ordering.rb +9 -10
- data/lib/searchlogic/rails_helpers.rb +5 -1
- data/lib/searchlogic/search/conditions.rb +4 -4
- data/lib/searchlogic/search/method_missing.rb +7 -12
- data/lib/searchlogic/search/ordering.rb +5 -1
- data/lib/searchlogic/search/to_yaml.rb +2 -2
- data/lib/searchlogic/version.rb +3 -0
- data/lib/searchlogic.rb +9 -9
- data/searchlogic.gemspec +21 -92
- data/spec/searchlogic/active_record/association_proxy_spec.rb +1 -1
- data/spec/searchlogic/active_record/consistency_spec.rb +1 -1
- data/spec/searchlogic/core_ext/object_spec.rb +1 -1
- data/spec/searchlogic/core_ext/proc_spec.rb +1 -1
- data/spec/searchlogic/named_scopes/alias_scope_spec.rb +9 -2
- data/spec/searchlogic/named_scopes/association_conditions_spec.rb +34 -1
- data/spec/searchlogic/named_scopes/association_ordering_spec.rb +1 -1
- data/spec/searchlogic/named_scopes/{conditions_spec.rb → column_conditions_spec.rb} +16 -5
- data/spec/searchlogic/named_scopes/or_conditions_spec.rb +33 -15
- data/spec/searchlogic/named_scopes/ordering_spec.rb +4 -10
- data/spec/searchlogic/search_spec.rb +105 -74
- data/spec/spec_helper.rb +10 -12
- metadata +136 -60
- data/VERSION.yml +0 -5
- data/lib/searchlogic/active_record/association_proxy.rb +0 -20
@@ -6,11 +6,11 @@ describe Searchlogic::Search do
|
|
6
6
|
it "should create a search proxy" do
|
7
7
|
User.search(:username => "joe").should be_kind_of(Searchlogic::Search)
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
it "should create a search proxy using the same class" do
|
11
11
|
User.search.klass.should == User
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it "should pass on the current scope to the proxy" do
|
15
15
|
company = Company.create
|
16
16
|
user = company.users.create
|
@@ -19,18 +19,18 @@ describe Searchlogic::Search do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
context "#initialize" do
|
24
24
|
it "should require a class" do
|
25
25
|
lambda { Searchlogic::Search.new }.should raise_error(ArgumentError)
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
it "should set the conditions" do
|
29
29
|
search = User.search(:username => "bjohnson")
|
30
30
|
search.conditions.should == {:username => "bjohnson"}
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
context "#clone" do
|
35
35
|
it "should clone properly" do
|
36
36
|
company = Company.create
|
@@ -42,7 +42,7 @@ describe Searchlogic::Search do
|
|
42
42
|
search2.all.should == User.all
|
43
43
|
search1.all.should == [user2]
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
it "should clone properly without scope" do
|
47
47
|
user1 = User.create(:age => 5)
|
48
48
|
user2 = User.create(:age => 25)
|
@@ -53,20 +53,20 @@ describe Searchlogic::Search do
|
|
53
53
|
search1.all.should == [user2]
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
context "#conditions" do
|
58
58
|
it "should set the conditions and be accessible individually" do
|
59
59
|
search = User.search
|
60
60
|
search.conditions = {:username => "bjohnson"}
|
61
61
|
search.username.should == "bjohnson"
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
it "should set the conditions and allow string keys" do
|
65
65
|
search = User.search
|
66
66
|
search.conditions = {"username" => "bjohnson"}
|
67
67
|
search.username.should == "bjohnson"
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
it "should use custom scopes before normalizing" do
|
71
71
|
User.create(:username => "bjohnson")
|
72
72
|
User.named_scope :username, lambda { |value| {:conditions => {:username => value.reverse}} }
|
@@ -75,7 +75,7 @@ describe Searchlogic::Search do
|
|
75
75
|
search1.count.should == 0
|
76
76
|
search2.count.should == 1
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
# We ignore them upon execution. But we still want to accept the condition so that returning the conditions
|
80
80
|
# preserves the values.
|
81
81
|
it "should ignore blank values but still return on conditions" do
|
@@ -84,24 +84,30 @@ describe Searchlogic::Search do
|
|
84
84
|
search.username.should be_nil
|
85
85
|
search.conditions.should == {:username => ""}
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
it "should not ignore blank values and should not cast them" do
|
89
89
|
search = User.search
|
90
90
|
search.conditions = {"id_equals" => ""}
|
91
91
|
search.id_equals.should be_nil
|
92
92
|
search.conditions.should == {:id_equals => ""}
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
it "should ignore blank values in arrays" do
|
96
96
|
search = User.search
|
97
97
|
search.conditions = {"username_equals_any" => [""]}
|
98
98
|
search.username_equals_any.should be_nil
|
99
|
-
|
99
|
+
|
100
100
|
search.conditions = {"id_equals_any" => ["", "1"]}
|
101
101
|
search.id_equals_any.should == [1]
|
102
102
|
end
|
103
|
+
|
104
|
+
it "should remove duplicate values in arrays" do
|
105
|
+
search = User.search
|
106
|
+
search.conditions = {"username_equals_any" => ["dup", "dup"]}
|
107
|
+
search.username_equals_any.should == ["dup"]
|
108
|
+
end
|
103
109
|
end
|
104
|
-
|
110
|
+
|
105
111
|
context "#compact_conditions" do
|
106
112
|
it "should remove conditions with blank values" do
|
107
113
|
search = User.search
|
@@ -109,20 +115,20 @@ describe Searchlogic::Search do
|
|
109
115
|
search.compact_conditions.should == {:name_equals => "Ben"}
|
110
116
|
end
|
111
117
|
end
|
112
|
-
|
118
|
+
|
113
119
|
context "condition accessors" do
|
114
120
|
it "should allow setting exact columns individually" do
|
115
121
|
search = User.search
|
116
122
|
search.username = "bjohnson"
|
117
123
|
search.username.should == "bjohnson"
|
118
124
|
end
|
119
|
-
|
125
|
+
|
120
126
|
it "should allow setting local column conditions individually" do
|
121
127
|
search = User.search
|
122
128
|
search.username_gt = "bjohnson"
|
123
129
|
search.username_gt.should == "bjohnson"
|
124
130
|
end
|
125
|
-
|
131
|
+
|
126
132
|
it "should allow chaining conditions" do
|
127
133
|
user = User.create(:username => "bjohnson", :age => 20)
|
128
134
|
User.create(:username => "bjohnson", :age => 5)
|
@@ -130,27 +136,27 @@ describe Searchlogic::Search do
|
|
130
136
|
search.username_equals("bjohnson").age_gt(10)
|
131
137
|
search.all.should == [user]
|
132
138
|
end
|
133
|
-
|
139
|
+
|
134
140
|
it "should allow setting association conditions" do
|
135
141
|
search = User.search
|
136
142
|
search.orders_total_gt = 10
|
137
143
|
search.orders_total_gt.should == 10
|
138
144
|
end
|
139
|
-
|
145
|
+
|
140
146
|
it "should allow setting pre-existing association conditions" do
|
141
147
|
User.named_scope :uname, lambda { |value| {:conditions => ["users.username = ?", value]} }
|
142
148
|
search = Company.search
|
143
149
|
search.users_uname = "bjohnson"
|
144
150
|
search.users_uname.should == "bjohnson"
|
145
151
|
end
|
146
|
-
|
152
|
+
|
147
153
|
it "should allow setting pre-existing association alias conditions" do
|
148
154
|
User.alias_scope :username_has, lambda { |value| User.username_like(value) }
|
149
155
|
search = Company.search
|
150
156
|
search.users_username_has = "bjohnson"
|
151
157
|
search.users_username_has.should == "bjohnson"
|
152
158
|
end
|
153
|
-
|
159
|
+
|
154
160
|
it "should allow using custom conditions" do
|
155
161
|
User.named_scope(:four_year_olds, { :conditions => { :age => 4 } })
|
156
162
|
search = User.search
|
@@ -158,7 +164,7 @@ describe Searchlogic::Search do
|
|
158
164
|
search.four_year_olds.should == true
|
159
165
|
search.proxy_options.should == User.four_year_olds.proxy_options
|
160
166
|
end
|
161
|
-
|
167
|
+
|
162
168
|
it "should not merge conflicting conditions into one value" do
|
163
169
|
# This class should JUST be a proxy. It should not do anything more than that.
|
164
170
|
# A user would be allowed to call both named scopes if they wanted.
|
@@ -168,158 +174,165 @@ describe Searchlogic::Search do
|
|
168
174
|
search.username_greater_than.should == "bjohnson1"
|
169
175
|
search.username_gt.should == "bjohnson2"
|
170
176
|
end
|
171
|
-
|
177
|
+
|
172
178
|
it "should allow setting custom conditions individually with an arity of 0" do
|
173
179
|
User.named_scope(:four_year_olds, :conditions => {:age => 4})
|
174
180
|
search = User.search
|
175
181
|
search.four_year_olds = true
|
176
182
|
search.four_year_olds.should == true
|
177
183
|
end
|
178
|
-
|
184
|
+
|
179
185
|
it "should allow setting custom conditions individually with an arity of 1" do
|
180
186
|
User.named_scope(:username_should_be, lambda { |u| {:conditions => {:username => u}} })
|
181
187
|
search = User.search
|
182
188
|
search.username_should_be = "bjohnson"
|
183
189
|
search.username_should_be.should == "bjohnson"
|
184
190
|
end
|
185
|
-
|
191
|
+
|
186
192
|
it "should not allow setting conditions that are not scopes" do
|
187
193
|
search = User.search
|
188
194
|
lambda { search.unknown = true }.should raise_error(Searchlogic::Search::UnknownConditionError)
|
189
195
|
end
|
190
|
-
|
196
|
+
|
191
197
|
it "should not allow setting conditions on sensitive methods" do
|
192
198
|
search = User.search
|
193
199
|
lambda { search.destroy = true }.should raise_error(Searchlogic::Search::UnknownConditionError)
|
194
200
|
end
|
195
|
-
|
201
|
+
|
196
202
|
it "should not use the ruby implementation of the id method" do
|
197
203
|
search = User.search
|
198
204
|
search.id.should be_nil
|
199
205
|
end
|
200
|
-
|
206
|
+
|
201
207
|
context "type casting" do
|
202
208
|
it "should be a Boolean given true" do
|
203
209
|
search = User.search
|
204
210
|
search.id_nil = true
|
205
211
|
search.id_nil.should == true
|
206
212
|
end
|
207
|
-
|
213
|
+
|
208
214
|
it "should be a Boolean given 'true'" do
|
209
215
|
search = User.search
|
210
216
|
search.id_nil = "true"
|
211
217
|
search.id_nil.should == true
|
212
218
|
end
|
213
|
-
|
219
|
+
|
214
220
|
it "should be a Boolean given '1'" do
|
215
221
|
search = User.search
|
216
222
|
search.id_nil = "1"
|
217
223
|
search.id_nil.should == true
|
218
224
|
end
|
219
|
-
|
225
|
+
|
220
226
|
it "should be a Boolean given false" do
|
221
227
|
search = User.search
|
222
228
|
search.id_nil = false
|
223
229
|
search.id_nil.should == false
|
224
230
|
end
|
225
|
-
|
231
|
+
|
226
232
|
it "should be a Boolean given 'false'" do
|
227
233
|
search = User.search
|
228
234
|
search.id_nil = "false"
|
229
235
|
search.id_nil.should == false
|
230
236
|
end
|
231
|
-
|
237
|
+
|
232
238
|
it "should be a Boolean given '0'" do
|
233
239
|
search = User.search
|
234
240
|
search.id_nil = "0"
|
235
241
|
search.id_nil.should == false
|
236
242
|
end
|
237
|
-
|
243
|
+
|
238
244
|
it "should be an Integer given ''" do
|
239
245
|
search = User.search
|
240
246
|
search.id_gt = ''
|
241
247
|
search.id_gt.should == 0
|
242
248
|
end
|
243
|
-
|
249
|
+
|
244
250
|
it "should be an Integer given 1" do
|
245
251
|
search = User.search
|
246
252
|
search.id_gt = 1
|
247
253
|
search.id_gt.should == 1
|
248
254
|
end
|
249
|
-
|
255
|
+
|
250
256
|
it "should be an Integer given '1'" do
|
251
257
|
search = User.search
|
252
258
|
search.id_gt = "1"
|
253
259
|
search.id_gt.should == 1
|
254
260
|
end
|
255
|
-
|
261
|
+
|
256
262
|
it "should be a Float given 1.0" do
|
257
263
|
search = Order.search
|
258
264
|
search.total_gt = 1.0
|
259
265
|
search.total_gt.should == 1.0
|
260
266
|
end
|
261
|
-
|
267
|
+
|
262
268
|
it "should be a Float given '1'" do
|
263
269
|
search = Order.search
|
264
270
|
search.total_gt = "1"
|
265
271
|
search.total_gt.should == 1.0
|
266
272
|
end
|
267
|
-
|
273
|
+
|
268
274
|
it "should be a Float given '1.5'" do
|
269
275
|
search = Order.search
|
270
276
|
search.total_gt = "1.5"
|
271
277
|
search.total_gt.should == 1.5
|
272
278
|
end
|
273
|
-
|
279
|
+
|
274
280
|
it "should be a Range given 1..3" do
|
275
281
|
search = Order.search
|
276
282
|
search.total_eq = (1..3)
|
277
283
|
search.total_eq.should == (1..3)
|
278
284
|
end
|
279
|
-
|
285
|
+
|
280
286
|
it "should be a Date given 'Jan 1, 2009'" do
|
281
287
|
search = Order.search
|
282
288
|
search.shipped_on_after = "Jan 1, 2009"
|
283
289
|
search.shipped_on_after.should == Date.parse("Jan 1, 2009")
|
284
290
|
end
|
285
|
-
|
291
|
+
|
286
292
|
it "should be a Time given 'Jan 1, 2009'" do
|
287
293
|
search = Order.search
|
288
294
|
search.created_at_after = "Jan 1, 2009"
|
289
295
|
search.created_at_after.should == Time.zone.parse("Jan 1, 2009")
|
290
296
|
end
|
291
|
-
|
297
|
+
|
292
298
|
it "should be a Time given 'Jan 1, 2009 9:33AM'" do
|
293
299
|
search = Order.search
|
294
300
|
search.created_at_after = "Jan 1, 2009 9:33AM"
|
295
301
|
search.created_at_after.should == Time.zone.parse("Jan 1, 2009 9:33AM")
|
296
302
|
end
|
297
|
-
|
298
|
-
it "should
|
303
|
+
|
304
|
+
it "should still convert for strings, even if the conversion is skipped for the attribute" do
|
299
305
|
search = User.search
|
300
306
|
search.whatever_at_after = "Jan 1, 2009 9:33AM"
|
301
|
-
search.whatever_at_after.should == Time.parse("Jan 1, 2009 9:33AM")
|
307
|
+
search.whatever_at_after.should == Time.zone.parse("Jan 1, 2009 9:33AM")
|
302
308
|
end
|
303
|
-
|
309
|
+
|
304
310
|
it "should convert the time to the current zone" do
|
305
311
|
search = Order.search
|
306
312
|
now = Time.now
|
307
313
|
search.created_at_after = now
|
308
314
|
search.created_at_after.should == now.in_time_zone
|
309
315
|
end
|
310
|
-
|
316
|
+
|
317
|
+
it "should skip time zone conversion for attributes skipped" do
|
318
|
+
search = User.search
|
319
|
+
now = Time.now
|
320
|
+
search.whatever_at_after = now
|
321
|
+
search.whatever_at_after.should == now.utc
|
322
|
+
end
|
323
|
+
|
311
324
|
it "should be an Array and cast it's values given ['1', '2', '3']" do
|
312
325
|
search = Order.search
|
313
326
|
search.id_equals_any = ["1", "2", "3"]
|
314
327
|
search.id_equals_any.should == [1, 2, 3]
|
315
328
|
end
|
316
|
-
|
329
|
+
|
317
330
|
it "should type cast association conditions" do
|
318
331
|
search = User.search
|
319
332
|
search.orders_total_gt = "10"
|
320
333
|
search.orders_total_gt.should == 10
|
321
334
|
end
|
322
|
-
|
335
|
+
|
323
336
|
it "should type cast deep association conditions" do
|
324
337
|
search = Company.search
|
325
338
|
search.users_orders_total_gt = "10"
|
@@ -333,7 +346,7 @@ describe Searchlogic::Search do
|
|
333
346
|
end
|
334
347
|
end
|
335
348
|
end
|
336
|
-
|
349
|
+
|
337
350
|
context "#delete" do
|
338
351
|
it "should delete the condition" do
|
339
352
|
search = User.search(:username_like => "bjohnson")
|
@@ -342,55 +355,72 @@ describe Searchlogic::Search do
|
|
342
355
|
search.conditions["username_like"].should be_nil
|
343
356
|
end
|
344
357
|
end
|
345
|
-
|
358
|
+
|
346
359
|
context "#ordering_by" do
|
347
360
|
it "should return nil if we aren't ordering" do
|
348
361
|
search = User.search
|
349
362
|
search.ordering_by.should be_nil
|
350
363
|
end
|
351
|
-
|
364
|
+
|
352
365
|
it "should return the column name for ascending" do
|
353
366
|
search = User.search(:order => "ascend_by_first_name")
|
354
367
|
search.ordering_by.should == "first_name"
|
355
368
|
end
|
356
|
-
|
369
|
+
|
357
370
|
it "should return the column name for descending" do
|
358
371
|
search = User.search(:order => "descend_by_first_name")
|
359
372
|
search.ordering_by.should == "first_name"
|
360
373
|
end
|
361
|
-
|
374
|
+
|
362
375
|
it "should handle symbols" do
|
363
376
|
search = User.search(:order => :descend_by_first_name)
|
364
377
|
search.ordering_by.should == "first_name"
|
365
378
|
end
|
366
379
|
end
|
367
|
-
|
380
|
+
|
381
|
+
context "#ordering_direction" do
|
382
|
+
it "should return nil if we aren't ordering" do
|
383
|
+
search = User.search
|
384
|
+
search.ordering_direction.should be_nil
|
385
|
+
end
|
386
|
+
|
387
|
+
it "should return the column name for ascending" do
|
388
|
+
search = User.search(:order => "ascend_by_ticket_request_event_occurs_at")
|
389
|
+
search.ordering_direction.should == "ascend"
|
390
|
+
end
|
391
|
+
|
392
|
+
it "should return the column name for descending" do
|
393
|
+
search = User.search(:order => "descend_by_ticket_request_event_occurs_at")
|
394
|
+
search.ordering_direction.should == "descend"
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
368
398
|
context "#method_missing" do
|
369
399
|
context "setting" do
|
370
400
|
it "should call named scopes for conditions" do
|
371
401
|
User.search(:age_less_than => 5).proxy_options.should == User.age_less_than(5).proxy_options
|
372
402
|
end
|
373
|
-
|
403
|
+
|
374
404
|
it "should alias exact column names to use equals" do
|
375
405
|
User.search(:username => "joe").proxy_options.should == User.username_equals("joe").proxy_options
|
376
406
|
end
|
377
|
-
|
407
|
+
|
378
408
|
it "should recognize conditions with a value of true where the named scope has an arity of 0" do
|
379
409
|
User.search(:username_nil => true).proxy_options.should == User.username_nil.proxy_options
|
380
410
|
end
|
381
|
-
|
411
|
+
|
382
412
|
it "should ignore conditions with a value of false where the named scope has an arity of 0" do
|
383
413
|
User.search(:username_nil => false).proxy_options.should == {}
|
384
414
|
end
|
385
|
-
|
415
|
+
|
386
416
|
it "should not ignore conditions with a value of false where the named scope does not have an arity of 0" do
|
387
417
|
User.search(:username_is => false).proxy_options.should == User.username_is(false).proxy_options
|
388
418
|
end
|
389
|
-
|
419
|
+
|
390
420
|
it "should recognize the order condition" do
|
391
421
|
User.search(:order => "ascend_by_username").proxy_options.should == User.ascend_by_username.proxy_options
|
392
422
|
end
|
393
|
-
|
423
|
+
|
394
424
|
it "should pass array values as multiple arguments with arity -1" do
|
395
425
|
User.named_scope(:multiple_args, lambda { |*args|
|
396
426
|
raise "This should not be an array, it should be 1" if args.first.is_a?(Array)
|
@@ -398,7 +428,7 @@ describe Searchlogic::Search do
|
|
398
428
|
})
|
399
429
|
User.search(:multiple_args => [1,2]).proxy_options.should == User.multiple_args(1,2).proxy_options
|
400
430
|
end
|
401
|
-
|
431
|
+
|
402
432
|
it "should pass array as a single value with arity >= 0" do
|
403
433
|
User.named_scope(:multiple_args, lambda { |args|
|
404
434
|
raise "This should be an array" if !args.is_a?(Array)
|
@@ -406,13 +436,13 @@ describe Searchlogic::Search do
|
|
406
436
|
})
|
407
437
|
User.search(:multiple_args => [1,2]).proxy_options.should == User.multiple_args([1,2]).proxy_options
|
408
438
|
end
|
409
|
-
|
439
|
+
|
410
440
|
it "should not split out dates or times (big fix)" do
|
411
441
|
s = User.search
|
412
442
|
s.created_at_after = Time.now
|
413
443
|
lambda { s.count }.should_not raise_error
|
414
444
|
end
|
415
|
-
|
445
|
+
|
416
446
|
it "should not include blank values" do
|
417
447
|
s = User.search
|
418
448
|
s.conditions = {"id_equals" => ""}
|
@@ -420,43 +450,43 @@ describe Searchlogic::Search do
|
|
420
450
|
end
|
421
451
|
end
|
422
452
|
end
|
423
|
-
|
453
|
+
|
424
454
|
context "#respond_to?" do
|
425
455
|
it "should respond to created_at_lte" do
|
426
456
|
s = User.search
|
427
457
|
s.respond_to?(:created_at_lte).should == true
|
428
458
|
end
|
429
|
-
|
459
|
+
|
430
460
|
it "should respond to created_at" do
|
431
461
|
s = User.search
|
432
462
|
s.respond_to?(:created_at).should == true
|
433
463
|
end
|
434
|
-
|
464
|
+
|
435
465
|
it "should not respond to created_at_or_whatever" do
|
436
466
|
s = User.search
|
437
467
|
s.respond_to?(:created_at_or_whatever)
|
438
468
|
end
|
439
469
|
end
|
440
|
-
|
470
|
+
|
441
471
|
context "delegation" do
|
442
472
|
it "should return all when not given any conditions" do
|
443
473
|
3.times { User.create }
|
444
474
|
User.search.all.length.should == 3
|
445
475
|
end
|
446
|
-
|
476
|
+
|
447
477
|
it "should implement the current scope based on an association" do
|
448
478
|
User.create
|
449
479
|
company = Company.create
|
450
480
|
user = company.users.create
|
451
481
|
company.users.search.all.should == [user]
|
452
482
|
end
|
453
|
-
|
483
|
+
|
454
484
|
it "should implement the current scope based on a named scope" do
|
455
485
|
User.named_scope(:four_year_olds, :conditions => {:age => 4})
|
456
486
|
(3..5).each { |age| User.create(:age => age) }
|
457
487
|
User.four_year_olds.search.all.should == User.find_all_by_age(4)
|
458
488
|
end
|
459
|
-
|
489
|
+
|
460
490
|
it "should respond to count" do
|
461
491
|
User.create(:username => "bjohnson")
|
462
492
|
search1 = User.search(:username => "bjohnson")
|
@@ -464,7 +494,7 @@ describe Searchlogic::Search do
|
|
464
494
|
search1.count.should == 1
|
465
495
|
search2.count.should == 0
|
466
496
|
end
|
467
|
-
|
497
|
+
|
468
498
|
it "should respond to empty?" do
|
469
499
|
User.create(:username => "bjohnson")
|
470
500
|
search1 = User.search(:username => "bjohnson")
|
@@ -481,9 +511,10 @@ describe Searchlogic::Search do
|
|
481
511
|
search.paged(0, 0).count.should == 0
|
482
512
|
end
|
483
513
|
end
|
484
|
-
|
514
|
+
|
485
515
|
context "yaml" do
|
486
516
|
it "should load yaml" do
|
517
|
+
pending
|
487
518
|
time = Time.now
|
488
519
|
search = User.search(:name_like => "Ben", :created_at_after => time)
|
489
520
|
search.current_scope = {:conditions => "1=1"}
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
|
2
|
-
require '
|
3
|
-
require
|
4
|
-
|
5
|
-
require "active_record"
|
1
|
+
Bundler.setup
|
2
|
+
require 'searchlogic'
|
3
|
+
require "pry"
|
4
|
+
require "timecop"
|
6
5
|
|
7
6
|
ENV['TZ'] = 'UTC'
|
8
7
|
Time.zone = 'Eastern Time (US & Canada)'
|
@@ -77,9 +76,6 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
80
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
81
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
82
|
-
require 'searchlogic'
|
83
79
|
|
84
80
|
Spec::Runner.configure do |config|
|
85
81
|
config.before(:each) do
|
@@ -131,9 +127,11 @@ Spec::Runner.configure do |config|
|
|
131
127
|
end
|
132
128
|
|
133
129
|
config.after(:each) do
|
134
|
-
Object
|
135
|
-
|
136
|
-
|
137
|
-
|
130
|
+
class ::Object
|
131
|
+
remove_const :Company rescue nil
|
132
|
+
remove_const :User rescue nil
|
133
|
+
remove_const :Order rescue nil
|
134
|
+
remove_const :LineItem rescue nil
|
135
|
+
end
|
138
136
|
end
|
139
137
|
end
|