activity_feed 1.4.0 → 2.0.0.rc1

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.
@@ -1,295 +0,0 @@
1
- require 'spec_helper'
2
- require 'timecop'
3
-
4
- describe ActivityFeed do
5
- it 'should have defaults set' do
6
- ActivityFeed.namespace.should eql('activity')
7
- ActivityFeed.key.should eql('feed')
8
- ActivityFeed.persistence = :memory
9
- ActivityFeed.persistence.should be(ActivityFeed::Memory::Item)
10
- ActivityFeed.aggregate_key.should eql('aggregate')
11
- ActivityFeed.aggregate.should == []
12
- end
13
-
14
- describe 'creating' do
15
- it 'should allow you to create a new item using :memory' do
16
- user_id = 1
17
- ActivityFeed.persistence = :memory
18
-
19
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
20
- activity_feed_item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
21
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
22
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(1)
23
- end
24
-
25
- it 'should allow you to create a new item using :mongo_mapper' do
26
- user_id = 1
27
- ActivityFeed.persistence = :mongo_mapper
28
-
29
- ActivityFeed::MongoMapper::Item.count.should be(0)
30
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
31
- activity_feed_item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
32
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
33
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(1)
34
- ActivityFeed::MongoMapper::Item.count.should be(1)
35
- end
36
-
37
- it 'should allow you to create a new item using :mongoid' do
38
- user_id = 1
39
- ActivityFeed.persistence = :mongoid
40
-
41
- ActivityFeed::Mongoid::Item.count.should be(0)
42
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
43
- activity_feed_item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
44
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
45
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(1)
46
- ActivityFeed::Mongoid::Item.count.should be(1)
47
- end
48
-
49
- it 'should allow you to create a new item using :active_record' do
50
- user_id = 1
51
- ActivityFeed.persistence = :active_record
52
-
53
- ActivityFeed::ActiveRecord::Item.count.should be(0)
54
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
55
- activity_feed_item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
56
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
57
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(1)
58
- ActivityFeed::ActiveRecord::Item.count.should be(1)
59
- end
60
-
61
- it 'should allow you to create a new item using :ohm' do
62
- user_id = 1
63
- ActivityFeed.persistence = :ohm
64
-
65
- ActivityFeed::Ohm::Item.all.count.should be(0)
66
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
67
- activity_feed_item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
68
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
69
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(1)
70
- ActivityFeed::Ohm::Item.all.count.should be(1)
71
- end
72
-
73
- it 'should allow you to create a new item and not aggregate the item' do
74
- user_id = 1
75
- ActivityFeed.persistence = :ohm
76
-
77
- ActivityFeed::Ohm::Item.all.count.should be(0)
78
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
79
- activity_feed_item = ActivityFeed.create_item({:user_id => user_id, :text => 'This is text for my activity feed'}, false)
80
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
81
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(0)
82
- ActivityFeed::Ohm::Item.all.count.should be(1)
83
- end
84
- end
85
-
86
- describe 'loading' do
87
- it 'should allow you to load an item using :memory' do
88
- user_id = 1
89
- ActivityFeed.persistence = :memory
90
-
91
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
92
- loaded_item = ActivityFeed.load_item(item.to_json)
93
- loaded_item.should == JSON.parse(item.to_json)
94
- end
95
-
96
- it 'should allow you to load an item using :mongo_mapper' do
97
- user_id = 1
98
- ActivityFeed.persistence = :mongo_mapper
99
-
100
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
101
- loaded_item = ActivityFeed.load_item(item.id)
102
- loaded_item.should == item
103
- end
104
-
105
- it 'should allow you to load an item using :mongoid' do
106
- user_id = 1
107
- ActivityFeed.persistence = :mongoid
108
-
109
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
110
- loaded_item = ActivityFeed.load_item(item.id)
111
- loaded_item.should == item
112
- end
113
-
114
- it 'should allow you to load an item using :active_record' do
115
- user_id = 1
116
- ActivityFeed.persistence = :active_record
117
-
118
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
119
- loaded_item = ActivityFeed.load_item(item.id)
120
- loaded_item.should == item
121
- end
122
-
123
- it 'should allow you to load an item using :ohm' do
124
- user_id = 1
125
- ActivityFeed.persistence = :ohm
126
-
127
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
128
- loaded_item = ActivityFeed.load_item(item.id)
129
- loaded_item.should == item
130
- end
131
- end
132
-
133
- describe 'custom persistence' do
134
- it 'should allow you to define a custom persistence handler class' do
135
- ActivityFeed.persistence = :custom
136
- end
137
-
138
- it 'should allow you to create a new item using a custom persistence handler class' do
139
- user_id = 1
140
- ActivityFeed.persistence = :custom
141
-
142
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(0)
143
- activity_feed_item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
144
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
145
- ActivityFeed.aggregate_item(activity_feed_item)
146
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id, true)).should be(1)
147
- end
148
-
149
- it 'should allow you to load an item using a custom persistence handler class' do
150
- user_id = 1
151
- ActivityFeed.persistence = :custom
152
-
153
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
154
- loaded_item = ActivityFeed.load_item(item.to_json)
155
- loaded_item.should == JSON.parse(item.to_json)
156
- end
157
- end
158
-
159
- describe 'feed' do
160
- it 'should allow you to create a new ActivityFeed::Feed instance' do
161
- user_id = 1
162
- ActivityFeed.persistence = :ohm
163
-
164
- item = ActivityFeed.create_item(:user_id => user_id, :text => 'This is text for my activity feed')
165
- feed = ActivityFeed.feed(user_id)
166
-
167
- feed.total_items.should be(1)
168
- end
169
- end
170
-
171
- describe "create_item" do
172
- let(:user_id) { 1 }
173
- let(:friend_ids) { [99, 1337] }
174
- let(:item_attrs) {
175
- { "user_id" => user_id, "text" => 'This is my happy activity' }
176
- }
177
-
178
- context "with no explicit aggregation set" do
179
- it "just creates the item and saves it to the user's feed" do
180
- ActivityFeed.create_item(item_attrs)
181
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(user_id)).should be(1)
182
- feed = ActivityFeed::Feed.new(user_id)
183
- feed.page(1).first.should == item_attrs
184
- end
185
- end
186
-
187
- context "with the optional second parameter set to a falsy value" do
188
- it "only creates the item--without adding it to the aggregation feed" do
189
- ActivityFeed.create_item(item_attrs, false)
190
- feed = ActivityFeed::Feed.new(user_id)
191
- feed.page(1).size.should be(1) # user-only feed
192
- feed.page(1, true).should be_empty # aggregation feed
193
- end
194
- end
195
-
196
- context "with a list of aggregation ids as a second parameter" do
197
- it "creates the item and aggregates it out to all the feeds" do
198
- ActivityFeed.create_item(item_attrs, friend_ids)
199
- ( friend_ids << user_id ).each do |id|
200
- feed = ActivityFeed::Feed.new(id)
201
- feed.page(1, true).first.should == item_attrs
202
- end
203
- end
204
- end
205
- end
206
-
207
- describe "delete_item" do
208
- let(:user_id) { 1 }
209
- let(:item_attrs) {
210
- { "user_id" => user_id, "text" => 'This is my happy activity' }
211
- }
212
-
213
- context "non-memory backed persistence" do
214
- before(:each) do
215
- ActivityFeed.persistence = :ohm
216
- @item = ActivityFeed.create_item(item_attrs, true)
217
- end
218
-
219
- it "should allow you to delete an item from the personal activity feed" do
220
- feed = ActivityFeed::Feed.new(user_id)
221
- feed.total_items.should == 1
222
- ActivityFeed.delete_item(user_id, @item.id)
223
- feed.total_items.should == 0
224
- end
225
-
226
- it "should allow you to delete an item from the personal aggregate feed" do
227
- feed = ActivityFeed::Feed.new(user_id)
228
- feed.total_items(true).should == 1
229
- ActivityFeed.delete_item(user_id, @item.id, true)
230
- feed.total_items(true).should == 0
231
- end
232
- end
233
- end
234
-
235
- describe "update_item" do
236
- let(:user_id) { 1 }
237
- let(:item_attrs) {
238
- { "user_id" => user_id, "text" => 'This is my happy activity' }
239
- }
240
-
241
- it "should allow you to update an item from the personal activity feed" do
242
- ActivityFeed.persistence = :ohm
243
-
244
- item_1 = ActivityFeed.create_item(item_attrs, false)
245
- Timecop.travel(DateTime.now + 10)
246
- item_2 = ActivityFeed.create_item(item_attrs, false)
247
- Timecop.travel(DateTime.now + 10)
248
- item_3 = ActivityFeed.create_item(item_attrs, false)
249
- Timecop.travel(DateTime.now + 10)
250
-
251
- feed = ActivityFeed::Feed.new(user_id)
252
- feed.page(1).first.id.should == '3'
253
-
254
- ActivityFeed.update_item(user_id, 1, DateTime.now.to_i)
255
- feed.page(1).first.id.should == '1'
256
- Timecop.return
257
- end
258
-
259
- it "should allow you to update an item from the personal activity feed using :mongoid" do
260
- ActivityFeed.persistence = :mongoid
261
-
262
- item_1 = ActivityFeed.create_item(item_attrs, false)
263
- Timecop.travel(DateTime.now + 10)
264
- item_2 = ActivityFeed.create_item(item_attrs, false)
265
- Timecop.travel(DateTime.now + 10)
266
- item_3 = ActivityFeed.create_item(item_attrs, false)
267
- Timecop.travel(DateTime.now + 10)
268
-
269
- feed = ActivityFeed::Feed.new(user_id)
270
- feed.page(1).first.id.should == item_3.id
271
-
272
- ActivityFeed.update_item(user_id, item_1.id, DateTime.now.to_i)
273
- feed.page(1).first.id.should == item_1.id
274
- Timecop.return
275
- end
276
-
277
- it "should allow you to update an item from the personal aggregate feed" do
278
- ActivityFeed.persistence = :ohm
279
-
280
- item_1 = ActivityFeed.create_item(item_attrs, true)
281
- Timecop.travel(DateTime.now + 10)
282
- item_2 = ActivityFeed.create_item(item_attrs, true)
283
- Timecop.travel(DateTime.now + 10)
284
- item_3 = ActivityFeed.create_item(item_attrs, true)
285
- Timecop.travel(DateTime.now + 10)
286
-
287
- feed = ActivityFeed::Feed.new(user_id)
288
- feed.page(1, true).first.id.should == '3'
289
-
290
- ActivityFeed.update_item(user_id, 1, DateTime.now.to_i, true)
291
- feed.page(1, true).first.id.should == '1'
292
- Timecop.return
293
- end
294
- end
295
- end
@@ -1,43 +0,0 @@
1
- Fabricator(ActivityFeed::ActiveRecord::Item) do
2
- user_id { sequence(:user_id) }
3
- nickname { sequence(:nickname) { |i| "nickname_#{i}" } }
4
- type { 'activity' }
5
- title { 'item title' }
6
- text { 'feed item' }
7
- url { 'http://url' }
8
- icon { 'http://icon' }
9
- sticky { false }
10
- end
11
-
12
- Fabricator(ActivityFeed::Memory::Item) do
13
- user_id { sequence(:user_id) }
14
- nickname { sequence(:nickname) { |i| "nickname_#{i}" } }
15
- type { 'activity' }
16
- title { 'item title' }
17
- text { 'feed item' }
18
- url { 'http://url' }
19
- icon { 'http://icon' }
20
- sticky { false }
21
- end
22
-
23
- Fabricator(ActivityFeed::MongoMapper::Item) do
24
- user_id { sequence(:user_id) }
25
- nickname { sequence(:nickname) { |i| "nickname_#{i}" } }
26
- type { 'activity' }
27
- title { 'item title' }
28
- text { 'feed item' }
29
- url { 'http://url' }
30
- icon { 'http://icon' }
31
- sticky { false }
32
- end
33
-
34
- Fabricator(ActivityFeed::Ohm::Item) do
35
- user_id { sequence(:user_id) }
36
- nickname { sequence(:nickname) { |i| "nickname_#{i}" } }
37
- type { 'activity' }
38
- title { 'item title' }
39
- text { 'feed item' }
40
- url { 'http://url' }
41
- icon { 'http://icon' }
42
- sticky { false }
43
- end
data/spec/feed_spec.rb DELETED
@@ -1,106 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActivityFeed::Feed do
4
- it 'should pull up the correct list of ActivityFeed::Memory::Item when calling #page using :memory' do
5
- 1.upto(5) do |index|
6
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
7
- end
8
-
9
- feed = ActivityFeed::Feed.new(1)
10
- feed.page(1).size.should be(5)
11
- end
12
-
13
- it 'should pull up the correct list of ActivityFeed::ActiveRecord::Item when calling #page using :active_record' do
14
- ActivityFeed.persistence = :active_record
15
- ActivityFeed::ActiveRecord::Item.count.should be(0)
16
- 1.upto(5) do |index|
17
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
18
- end
19
- ActivityFeed::ActiveRecord::Item.count.should be(5)
20
-
21
- feed = ActivityFeed::Feed.new(1)
22
- feed.page(1).size.should be(5)
23
- end
24
-
25
- it 'should pull up the correct list of ActivityFeed::MongoMapper::Item when calling #page using :mongo_mapper' do
26
- ActivityFeed.persistence = :mongo_mapper
27
- ActivityFeed::MongoMapper::Item.count.should be(0)
28
- 1.upto(5) do |index|
29
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
30
- end
31
- ActivityFeed::MongoMapper::Item.count.should be(5)
32
-
33
- feed = ActivityFeed::Feed.new(1)
34
- feed.page(1).size.should be(5)
35
- end
36
-
37
- it 'should pull up the correct list of ActivityFeed::Mongoid::Item when calling #page using :mongoid' do
38
- ActivityFeed.persistence = :mongoid
39
- ActivityFeed::Mongoid::Item.count.should be(0)
40
- 1.upto(5) do |index|
41
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
42
- end
43
- ActivityFeed::Mongoid::Item.count.should be(5)
44
-
45
- feed = ActivityFeed::Feed.new(1)
46
- feed.page(1).size.should be(5)
47
- end
48
-
49
- it 'should pull up the correct list of ActivityFeed::Ohm::Item when calling #page using :ohm' do
50
- ActivityFeed.persistence = :ohm
51
- ActivityFeed::Ohm::Item.all.count.should be(0)
52
- 1.upto(5) do |index|
53
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
54
- end
55
- ActivityFeed::Ohm::Item.all.count.should be(5)
56
-
57
- feed = ActivityFeed::Feed.new(1)
58
- feed.page(1).size.should be(5)
59
- end
60
-
61
- it 'should return the correct number for #total_items' do
62
- 1.upto(3) do |index|
63
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
64
- end
65
-
66
- feed = ActivityFeed::Feed.new(1)
67
- feed.total_items.should be(3)
68
- end
69
-
70
- it 'should return the correct number for #total_pages' do
71
- 1.upto(Leaderboard::DEFAULT_PAGE_SIZE + 1) do |index|
72
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
73
- end
74
-
75
- feed = ActivityFeed::Feed.new(1)
76
- feed.total_pages.should be(2)
77
- end
78
-
79
- describe 'feed aggregation' do
80
- it 'should pull up the correct list of items from an aggregated activity feed' do
81
- ActivityFeed.persistence = :ohm
82
- 1.upto(5) do |index|
83
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
84
- another_item = ActivityFeed.create_item(:user_id => 2, :nickname => 'nickname_2', :text => "test_another_item_#{index}")
85
- ActivityFeed.aggregate_item(another_item, 1)
86
- end
87
-
88
- feed = ActivityFeed::Feed.new(1)
89
- feed.total_pages(true).should be(1)
90
- feed.total_items(true).should be(10)
91
- feed.page(1, true).size.should be(10)
92
- end
93
- end
94
-
95
- describe 'custom persistence' do
96
- it 'should allow you to pull up the correct list of ActivityFeed::Custom::Item when calling #page using :custom' do
97
- ActivityFeed.persistence = :custom
98
- 1.upto(5) do |index|
99
- item = ActivityFeed.create_item(:user_id => 1, :nickname => 'nickname_1', :text => "text_#{index}")
100
- end
101
-
102
- feed = ActivityFeed::Feed.new(1)
103
- feed.page(1).size.should be(5)
104
- end
105
- end
106
- end
data/spec/item_spec.rb DELETED
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'ActivityFeed::Item' do
4
- it 'should allow you to create a new Item' do
5
- item = Fabricate.build(ActivityFeed.persistence)
6
- item.save.should be_true
7
- end
8
-
9
- it 'should allow for a large amount of text' do
10
- item = Fabricate.build(ActivityFeed.persistence, :text => '*' * 8192)
11
- item.text.should eql('*' * 8192)
12
- end
13
-
14
- it 'should add the feed item ID to redis' do
15
- item = Fabricate.build(ActivityFeed.persistence)
16
-
17
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id)).should be(0)
18
- item.save
19
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id)).should be(1)
20
- ActivityFeed.aggregate_item(item)
21
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id, true)).should be(1)
22
- end
23
-
24
- it 'should have default attributes for .title .url .icon and .sticky' do
25
- item = Fabricate.build(ActivityFeed.persistence)
26
-
27
- item.title.should eql('item title')
28
- item.url.should eql('http://url')
29
- item.icon.should eql('http://icon')
30
- item.sticky.should be_false
31
- end
32
-
33
- it 'should not create a new item in Redis after saving, only on create' do
34
- item = Fabricate.build(ActivityFeed::Memory::Item)
35
-
36
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id)).should be(0)
37
- item.save
38
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id)).should be(1)
39
- ActivityFeed.aggregate_item(item)
40
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id, true)).should be(1)
41
-
42
- item.text = 'updated text'
43
- item.save
44
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id)).should be(1)
45
- ActivityFeed.aggregate_item(item)
46
- ActivityFeed.redis.zcard(ActivityFeed.feed_key(item.user_id, true)).should be(1)
47
- end
48
-
49
- it 'should output all the attributes for an item for Ohm' do
50
- item = Fabricate.build(ActivityFeed::Ohm::Item)
51
-
52
- hash = JSON.parse(item.to_json)
53
- hash.keys.size.should be(8)
54
- end
55
- end