ninjudd-model_set 0.10.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/lib/model_set/set_query.rb +1 -1
- data/lib/model_set/sphinx_query.rb +2 -0
- data/lib/model_set/sql_query.rb +15 -0
- data/lib/model_set.rb +13 -3
- data/test/model_set_test.rb +26 -0
- metadata +2 -2
data/VERSION.yml
CHANGED
data/lib/model_set/set_query.rb
CHANGED
@@ -3,6 +3,7 @@ require File.dirname(__FILE__) + '/../../vendor/sphinx_client/lib/sphinx'
|
|
3
3
|
class ModelSet
|
4
4
|
class SphinxQuery < Query
|
5
5
|
MAX_SPHINX_RESULTS = 1000
|
6
|
+
MAX_QUERY_TIME = 5000 # milliseconds
|
6
7
|
|
7
8
|
class SphinxError < StandardError; end
|
8
9
|
|
@@ -86,6 +87,7 @@ class ModelSet
|
|
86
87
|
before_query(opts)
|
87
88
|
|
88
89
|
search = Sphinx::Client.new
|
90
|
+
search.SetMaxQueryTime(MAX_QUERY_TIME)
|
89
91
|
search.SetServer(self.class.server_host, self.class.server_port)
|
90
92
|
search.SetMatchMode(Sphinx::Client::SPH_MATCH_EXTENDED2)
|
91
93
|
if limit
|
data/lib/model_set/sql_query.rb
CHANGED
@@ -40,6 +40,21 @@ class ModelSet
|
|
40
40
|
clear_cache!
|
41
41
|
end
|
42
42
|
|
43
|
+
def reverse!
|
44
|
+
if @sort_order
|
45
|
+
@sort_order = @sort_order.split(/\s*,\s*/).collect do |sub_order|
|
46
|
+
if sub_order =~ / DESC$/i
|
47
|
+
sub_order.slice(0..-6)
|
48
|
+
else
|
49
|
+
"#{sub_order} DESC"
|
50
|
+
end
|
51
|
+
end.join(', ')
|
52
|
+
else
|
53
|
+
@sort_order = "#{id_field_with_prefix} DESC"
|
54
|
+
end
|
55
|
+
clear_cache!
|
56
|
+
end
|
57
|
+
|
43
58
|
def sql
|
44
59
|
"#{select_clause} #{from_clause} #{order_clause} #{limit_clause}"
|
45
60
|
end
|
data/lib/model_set.rb
CHANGED
@@ -24,6 +24,8 @@ class ModelSet
|
|
24
24
|
|
25
25
|
MAX_CACHE_SIZE = 1000 if not defined?(MAX_CACHE_SIZE)
|
26
26
|
|
27
|
+
attr_reader :created_at
|
28
|
+
|
27
29
|
def initialize(query_or_models)
|
28
30
|
if query_or_models.kind_of?(Query)
|
29
31
|
@query = query_or_models
|
@@ -33,6 +35,11 @@ class ModelSet
|
|
33
35
|
elsif query_or_models
|
34
36
|
self.ids = as_ids(query_or_models)
|
35
37
|
end
|
38
|
+
@created_at = Time.now
|
39
|
+
end
|
40
|
+
|
41
|
+
def older_than?(duration)
|
42
|
+
created_at.nil? or created_at < Time.now - duration
|
36
43
|
end
|
37
44
|
|
38
45
|
def ids
|
@@ -352,12 +359,15 @@ class ModelSet
|
|
352
359
|
end
|
353
360
|
end
|
354
361
|
|
355
|
-
[:unsorted!, :limit!, :page!, :unlimited!].each do |method_name|
|
362
|
+
[:unsorted!, :limit!, :page!, :unlimited!, :reverse!].each do |method_name|
|
356
363
|
clone_method method_name
|
357
364
|
define_method(method_name) do |*args|
|
358
365
|
# Don't change the query engine by default
|
359
366
|
anchor!( extract_opt(:query_type, args) )
|
360
367
|
|
368
|
+
# Use the default query engine if the the current engine doesn't respond to the method.
|
369
|
+
anchor!(default_query_type) unless query.respond_to?(method_name)
|
370
|
+
|
361
371
|
query.send(method_name, *args)
|
362
372
|
self
|
363
373
|
end
|
@@ -529,11 +539,11 @@ class ModelSet
|
|
529
539
|
end
|
530
540
|
|
531
541
|
def marshal_dump
|
532
|
-
[ @query, @add_fields, @included_models ]
|
542
|
+
[ @query, @add_fields, @included_models, @created_at ]
|
533
543
|
end
|
534
544
|
|
535
545
|
def marshal_load(fields)
|
536
|
-
@query, @add_fields, @included_models = fields
|
546
|
+
@query, @add_fields, @included_models, @created_at = fields
|
537
547
|
end
|
538
548
|
|
539
549
|
protected
|
data/test/model_set_test.rb
CHANGED
@@ -105,6 +105,29 @@ class ModelSetTest < Test::Unit::TestCase
|
|
105
105
|
set = HeroSet.with_universe('Marvel')
|
106
106
|
assert_equal [captain.id, spidey.id, ironman.id], set.ids
|
107
107
|
end
|
108
|
+
|
109
|
+
should "order and reverse set" do
|
110
|
+
captain = Hero.create(:name => 'Captain America', :universe => 'Marvel')
|
111
|
+
spidey = Hero.create(:name => 'Spider Man', :universe => 'Marvel')
|
112
|
+
wolverine = Hero.create(:name => 'Wolverine', :universe => 'Marvel' )
|
113
|
+
phoenix = Hero.create(:name => 'Phoenix', :universe => 'Marvel' )
|
114
|
+
ironman = Hero.create(:name => 'Iron Man', :universe => 'Marvel')
|
115
|
+
|
116
|
+
ids = [captain.id, ironman.id, phoenix.id, spidey.id, wolverine.id]
|
117
|
+
set = HeroSet.with_universe('Marvel')
|
118
|
+
|
119
|
+
set.order_by!('name')
|
120
|
+
assert_equal ids, set.ids
|
121
|
+
|
122
|
+
set.reverse!
|
123
|
+
assert_equal ids.reverse, set.ids
|
124
|
+
|
125
|
+
set.order_by!('name DESC')
|
126
|
+
assert_equal ids.reverse, set.ids
|
127
|
+
|
128
|
+
set.reverse!
|
129
|
+
assert_equal ids, set.ids
|
130
|
+
end
|
108
131
|
|
109
132
|
should "have missing ids" do
|
110
133
|
missing_id = 5555
|
@@ -231,6 +254,9 @@ class ModelSetTest < Test::Unit::TestCase
|
|
231
254
|
|
232
255
|
@bot_set.sort! {|a,b| b.name <=> a.name}
|
233
256
|
assert_equal [@bender,@c3po,@johnny5,@r2d2,@rosie,@t1000,@small_wonder].reverse, @bot_set.to_a
|
257
|
+
|
258
|
+
@bot_set.reverse!
|
259
|
+
assert_equal [@bender,@c3po,@johnny5,@r2d2,@rosie,@t1000,@small_wonder], @bot_set.to_a
|
234
260
|
end
|
235
261
|
|
236
262
|
should "sort a set by name" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ninjudd-model_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Balthrop
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-04-
|
12
|
+
date: 2009-04-24 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|