ninjudd-model_set 0.10.0 → 0.10.1
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/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
|
|