outoftime-sunspot 0.7.1 → 0.7.2
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/sunspot/session.rb +20 -0
- data/lib/sunspot.rb +19 -0
- data/spec/api/session_spec.rb +50 -0
- metadata +1 -1
data/VERSION.yml
CHANGED
data/lib/sunspot/session.rb
CHANGED
@@ -19,6 +19,7 @@ module Sunspot
|
|
19
19
|
@config = config
|
20
20
|
yield(@config) if block_given?
|
21
21
|
@connection = connection
|
22
|
+
@updates = 0
|
22
23
|
end
|
23
24
|
|
24
25
|
#
|
@@ -34,6 +35,7 @@ module Sunspot
|
|
34
35
|
#
|
35
36
|
def index(*objects)
|
36
37
|
objects.flatten!
|
38
|
+
@updates += objects.length
|
37
39
|
for object in objects
|
38
40
|
setup_for(object).indexer(connection).add(object)
|
39
41
|
end
|
@@ -51,6 +53,7 @@ module Sunspot
|
|
51
53
|
# See Sunspot.commit!
|
52
54
|
#
|
53
55
|
def commit
|
56
|
+
@updates = 0
|
54
57
|
connection.commit
|
55
58
|
end
|
56
59
|
|
@@ -59,6 +62,7 @@ module Sunspot
|
|
59
62
|
#
|
60
63
|
def remove(*objects)
|
61
64
|
objects.flatten!
|
65
|
+
@updates += objects.length
|
62
66
|
for object in objects
|
63
67
|
setup_for(object).indexer(connection).remove(object)
|
64
68
|
end
|
@@ -70,14 +74,30 @@ module Sunspot
|
|
70
74
|
def remove_all(*classes)
|
71
75
|
classes.flatten!
|
72
76
|
if classes.empty?
|
77
|
+
@updates += 1
|
73
78
|
Indexer.remove_all(connection)
|
74
79
|
else
|
80
|
+
@updates += classes.length
|
75
81
|
for clazz in classes
|
76
82
|
Setup.for(clazz).indexer(connection).remove_all
|
77
83
|
end
|
78
84
|
end
|
79
85
|
end
|
80
86
|
|
87
|
+
#
|
88
|
+
# See Sunspot.dirty?
|
89
|
+
#
|
90
|
+
def dirty?
|
91
|
+
@updates > 0
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# See Sunspot.commit_if_dirty
|
96
|
+
#
|
97
|
+
def commit_if_dirty
|
98
|
+
commit if dirty?
|
99
|
+
end
|
100
|
+
|
81
101
|
private
|
82
102
|
|
83
103
|
#
|
data/lib/sunspot.rb
CHANGED
@@ -243,6 +243,25 @@ module Sunspot
|
|
243
243
|
session.remove_all(*classes)
|
244
244
|
end
|
245
245
|
|
246
|
+
#
|
247
|
+
# True if documents have been added, updated, or removed since the last
|
248
|
+
# commit.
|
249
|
+
#
|
250
|
+
# ==== Returns
|
251
|
+
#
|
252
|
+
# Boolean:: Whether there have been any updates since the last commit
|
253
|
+
#
|
254
|
+
def dirty?
|
255
|
+
session.dirty?
|
256
|
+
end
|
257
|
+
|
258
|
+
#
|
259
|
+
# Sends a commit if the session is dirty (see #dirty?).
|
260
|
+
#
|
261
|
+
def commit_if_dirty
|
262
|
+
session.commit_if_dirty
|
263
|
+
end
|
264
|
+
|
246
265
|
# Returns the configuration associated with the singleton session. See
|
247
266
|
# Sunspot::Configuration for details.
|
248
267
|
#
|
data/spec/api/session_spec.rb
CHANGED
@@ -46,6 +46,56 @@ describe 'Session' do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
context 'dirty sessions' do
|
50
|
+
before :each do
|
51
|
+
connection.stub!(:add)
|
52
|
+
connection.stub!(:commit)
|
53
|
+
Solr::Connection.stub!(:new).and_return(connection)
|
54
|
+
@session = Sunspot::Session.new
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should start out not dirty' do
|
58
|
+
@session.dirty?.should be_false
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should be dirty after adding an item' do
|
62
|
+
@session.index(Post.new)
|
63
|
+
@session.dirty?.should be_true
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should be dirty after deleting an item' do
|
67
|
+
@session.remove(Post.new)
|
68
|
+
@session.dirty?.should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should be dirty after a remove_all for a class' do
|
72
|
+
@session.remove_all(Post)
|
73
|
+
@session.dirty?.should be_true
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should be dirty after a global remove_all' do
|
77
|
+
@session.remove_all
|
78
|
+
@session.dirty?.should be_true
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should not be dirty after a commit' do
|
82
|
+
@session.index(Post.new)
|
83
|
+
@session.commit
|
84
|
+
@session.dirty?.should be_false
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should not commit when commit_if_dirty called on clean session' do
|
88
|
+
connection.should_not_receive(:commit)
|
89
|
+
@session.commit_if_dirty
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should commit when commit_if_dirty called on dirty session' do
|
93
|
+
connection.should_receive(:commit)
|
94
|
+
@session.index(Post.new)
|
95
|
+
@session.commit_if_dirty
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
49
99
|
def connection
|
50
100
|
@connection ||= mock('Connection').as_null_object
|
51
101
|
end
|