mongo_watchable 0.1.2 → 0.2.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.
- data/lib/mongo_watchable/proxy.rb +13 -3
- data/lib/mongo_watchable/watchable.rb +4 -2
- data/lib/mongo_watchable/watcher.rb +12 -2
- data/test/mongo_watchable_test.rb +59 -11
- metadata +3 -3
@@ -1,11 +1,12 @@
|
|
1
1
|
module MongoWatchable
|
2
2
|
class Proxy
|
3
3
|
attr_reader :array_key
|
4
|
+
attr_reader :array_count_key
|
4
5
|
attr_reader :model
|
5
6
|
attr_reader :target_class
|
6
7
|
|
7
|
-
def initialize(model, array_key, target_class)
|
8
|
-
@model, @array_key, @target_class = model, array_key, target_class
|
8
|
+
def initialize(model, array_key, array_count_key, target_class)
|
9
|
+
@model, @array_key, @array_count_key, @target_class = model, array_key, array_count_key, target_class
|
9
10
|
end
|
10
11
|
|
11
12
|
def to_a
|
@@ -47,11 +48,12 @@ module MongoWatchable
|
|
47
48
|
|
48
49
|
def << (entry)
|
49
50
|
array << entry.id
|
51
|
+
increment_array_count
|
50
52
|
@fetch ? @fetch << entry : fetch_all
|
51
53
|
end
|
52
54
|
|
53
55
|
def delete(entry)
|
54
|
-
array.delete
|
56
|
+
decrement_array_count if array.delete(entry.id)
|
55
57
|
@fetch ? @fetch.delete(entry) : fetch_all
|
56
58
|
end
|
57
59
|
|
@@ -67,5 +69,13 @@ module MongoWatchable
|
|
67
69
|
def array
|
68
70
|
model.send(array_key)
|
69
71
|
end
|
72
|
+
|
73
|
+
def increment_array_count
|
74
|
+
model.send("#{array_count_key}=", model.send(array_count_key) + 1)
|
75
|
+
end
|
76
|
+
|
77
|
+
def decrement_array_count
|
78
|
+
model.send("#{array_count_key}=", model.send(array_count_key) - 1)
|
79
|
+
end
|
70
80
|
end
|
71
81
|
end
|
@@ -4,9 +4,10 @@ module MongoWatchable
|
|
4
4
|
watchable.class_eval do
|
5
5
|
MongoWatchable.watchers.each do |watcher|
|
6
6
|
key :"#{watcher.name.underscore}_watcher_ids", Array
|
7
|
+
key :"#{watcher.name.underscore}_watchers_count", Integer, :default => 0, :index => true
|
7
8
|
|
8
9
|
define_method :"#{watcher.name.underscore}_watchers" do
|
9
|
-
MongoWatchable::Proxy.new(self, :"#{watcher.name.underscore}_watcher_ids", watcher)
|
10
|
+
MongoWatchable::Proxy.new(self, :"#{watcher.name.underscore}_watcher_ids", :"#{watcher.name.underscore}_watchers_count", watcher)
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
@@ -14,9 +15,10 @@ module MongoWatchable
|
|
14
15
|
MongoWatchable.watchers.each do |watcher|
|
15
16
|
watcher.class_eval do
|
16
17
|
key :"#{watchable.name.underscore}_watching_ids", Array
|
18
|
+
key :"#{watchable.name.underscore}_watchings_count", Integer, :default => 0, :index => true
|
17
19
|
|
18
20
|
define_method :"#{watchable.name.underscore}_watchings" do
|
19
|
-
MongoWatchable::Proxy.new(self, :"#{watchable.name.underscore}_watching_ids", watchable)
|
21
|
+
MongoWatchable::Proxy.new(self, :"#{watchable.name.underscore}_watching_ids", :"#{watchable.name.underscore}_watchings_count", watchable)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -4,9 +4,10 @@ module MongoWatchable
|
|
4
4
|
watcher.class_eval do
|
5
5
|
MongoWatchable.watchables.each do |watchable|
|
6
6
|
key :"#{watchable.name.underscore}_watching_ids", Array
|
7
|
+
key :"#{watchable.name.underscore}_watchings_count", Integer, :default => 0, :index => true
|
7
8
|
|
8
9
|
define_method :"#{watchable.name.underscore}_watchings" do
|
9
|
-
MongoWatchable::Proxy.new(self, :"#{watchable.name.underscore}_watching_ids", watchable)
|
10
|
+
MongoWatchable::Proxy.new(self, :"#{watchable.name.underscore}_watching_ids", :"#{watchable.name.underscore}_watchings_count", watchable)
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
@@ -14,9 +15,10 @@ module MongoWatchable
|
|
14
15
|
MongoWatchable.watchables.each do |watchable|
|
15
16
|
watchable.class_eval do
|
16
17
|
key :"#{watcher.name.underscore}_watcher_ids", Array
|
18
|
+
key :"#{watcher.name.underscore}_watchers_count", Integer, :default => 0, :index => true
|
17
19
|
|
18
20
|
define_method :"#{watcher.name.underscore}_watchers" do
|
19
|
-
MongoWatchable::Proxy.new(self, :"#{watcher.name.underscore}_watcher_ids", watcher)
|
21
|
+
MongoWatchable::Proxy.new(self, :"#{watcher.name.underscore}_watcher_ids", :"#{watcher.name.underscore}_watchers_count", watcher)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -75,6 +77,14 @@ module MongoWatchable
|
|
75
77
|
end
|
76
78
|
send("#{klass.name.underscore}_watchings")
|
77
79
|
end
|
80
|
+
|
81
|
+
def watchings_count_proxy_for(watchable)
|
82
|
+
klass = watchable.class
|
83
|
+
while klass.superclass && klass.superclass.include?(MongoWatchable::Watchable)
|
84
|
+
klass = klass.superclass
|
85
|
+
end
|
86
|
+
send("#{klass.name.underscore}_watchings")
|
87
|
+
end
|
78
88
|
|
79
89
|
private
|
80
90
|
def root_watching_class(instance)
|
@@ -38,11 +38,15 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
38
38
|
@widget.reload
|
39
39
|
end
|
40
40
|
|
41
|
-
should "
|
41
|
+
should "only have 1 widget in widget_watchings array" do
|
42
42
|
assert_equal 1, @user.widget_watchings.size
|
43
43
|
end
|
44
44
|
|
45
|
-
should "
|
45
|
+
should "increment widget_watchings_count" do
|
46
|
+
assert_equal 1, @user.widget_watchings_count
|
47
|
+
end
|
48
|
+
|
49
|
+
should "have widget in widget watchings array" do
|
46
50
|
assert_equal @widget, @user.widget_watchings.first
|
47
51
|
end
|
48
52
|
|
@@ -50,6 +54,10 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
50
54
|
assert_equal 1, @widget.user_watchers.size
|
51
55
|
end
|
52
56
|
|
57
|
+
should "increment user_watchers_count" do
|
58
|
+
assert_equal 1, @widget.user_watchers_count
|
59
|
+
end
|
60
|
+
|
53
61
|
should "be the watcher in widgets user_watchers array" do
|
54
62
|
assert_equal @user, @widget.user_watchers.first
|
55
63
|
end
|
@@ -84,21 +92,29 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
84
92
|
assert @return
|
85
93
|
end
|
86
94
|
|
87
|
-
should "
|
95
|
+
should "only have 2 widgets in widget_watchings array" do
|
88
96
|
assert_equal 2, @user.widget_watchings.size
|
89
97
|
end
|
98
|
+
|
99
|
+
should "increment widget_watchings_count" do
|
100
|
+
assert_equal 2, @user.widget_watchings_count
|
101
|
+
end
|
90
102
|
|
91
|
-
should "
|
103
|
+
should "have widget in widget watchings array" do
|
92
104
|
assert_equal @widget, @user.widget_watchings.first
|
93
105
|
end
|
94
106
|
|
95
|
-
should "
|
107
|
+
should "have widget2 in widget watchings array" do
|
96
108
|
assert_equal @widget2, @user.widget_watchings.last
|
97
109
|
end
|
98
110
|
|
99
111
|
should "have only one watcher in widget's user_watchers array" do
|
100
112
|
assert_equal 1, @widget.user_watchers.size
|
101
113
|
end
|
114
|
+
|
115
|
+
should "not increment user_watchers_count" do
|
116
|
+
assert_equal 1, @widget.user_watchers_count
|
117
|
+
end
|
102
118
|
|
103
119
|
should "be the watcher in widget's user_watchers array" do
|
104
120
|
assert_equal @user, @widget.user_watchers.first
|
@@ -127,6 +143,14 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
127
143
|
should "have no user_watchers in widget" do
|
128
144
|
assert @widget.user_watchers.empty?
|
129
145
|
end
|
146
|
+
|
147
|
+
should "have 0 widget_watchings_count" do
|
148
|
+
assert_equal 0, @user.widget_watchings_count
|
149
|
+
end
|
150
|
+
|
151
|
+
should "have 0 user_watchers_count" do
|
152
|
+
assert_equal 0, @widget.user_watchers_count
|
153
|
+
end
|
130
154
|
|
131
155
|
should "return with true" do
|
132
156
|
assert @return
|
@@ -144,11 +168,15 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
144
168
|
@widget.reload
|
145
169
|
end
|
146
170
|
|
147
|
-
should "
|
171
|
+
should "only have 1 widget in widget_watchings array" do
|
148
172
|
assert_equal 1, @user.widget_watchings.size
|
149
173
|
end
|
150
174
|
|
151
|
-
should "
|
175
|
+
should "increment widget_watchings_count" do
|
176
|
+
assert_equal 1, @user.widget_watchings_count
|
177
|
+
end
|
178
|
+
|
179
|
+
should "have widget in widget watchings array" do
|
152
180
|
assert_equal @widget, @user.widget_watchings.first
|
153
181
|
end
|
154
182
|
|
@@ -156,6 +184,10 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
156
184
|
assert_equal 1, @widget.user_watchers.size
|
157
185
|
end
|
158
186
|
|
187
|
+
should "increment user_watchers_count" do
|
188
|
+
assert_equal 1, @widget.user_watchers_count
|
189
|
+
end
|
190
|
+
|
159
191
|
should "be the watcher in widgets user_watchers array" do
|
160
192
|
assert_equal @user, @widget.user_watchers.first
|
161
193
|
end
|
@@ -172,21 +204,29 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
172
204
|
@widget2.reload
|
173
205
|
end
|
174
206
|
|
175
|
-
should "
|
207
|
+
should "have 2 widgets in widget_watchings array" do
|
176
208
|
assert_equal 2, @user.widget_watchings.size
|
177
209
|
end
|
210
|
+
|
211
|
+
should "increment widget_watchings_count" do
|
212
|
+
assert_equal 2, @user.widget_watchings_count
|
213
|
+
end
|
178
214
|
|
179
|
-
should "
|
215
|
+
should "have widget in widget watchings array" do
|
180
216
|
assert_equal @widget, @user.widget_watchings.first
|
181
217
|
end
|
182
218
|
|
183
|
-
should "
|
219
|
+
should "have widget2 in widget watchings array" do
|
184
220
|
assert_equal @widget2, @user.widget_watchings.last
|
185
221
|
end
|
186
222
|
|
187
|
-
should "have
|
223
|
+
should "have one watcher in widget's user_watchers array" do
|
188
224
|
assert_equal 1, @widget.user_watchers.size
|
189
225
|
end
|
226
|
+
|
227
|
+
should "not increment user_watchers_count" do
|
228
|
+
assert_equal 1, @widget.user_watchers_count
|
229
|
+
end
|
190
230
|
|
191
231
|
should "be the watcher in widget's user_watchers array" do
|
192
232
|
assert_equal @user, @widget.user_watchers.first
|
@@ -223,6 +263,14 @@ class MongoWatchableTest < ActiveSupport::TestCase
|
|
223
263
|
should "have no user_watchers in widget" do
|
224
264
|
assert @widget.user_watchers.empty?
|
225
265
|
end
|
266
|
+
|
267
|
+
should "have 0 widget_watchings_count" do
|
268
|
+
assert_equal 0, @user.widget_watchings_count
|
269
|
+
end
|
270
|
+
|
271
|
+
should "have 0 user_watchers_count" do
|
272
|
+
assert_equal 0, @widget.user_watchers_count
|
273
|
+
end
|
226
274
|
end
|
227
275
|
end
|
228
276
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
- 1
|
8
7
|
- 2
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jonathan Bell
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-06-14 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|