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.
- data/.rvmrc +1 -0
- data/README.markdown +212 -174
- data/Rakefile +5 -1
- data/activity_feed.gemspec +8 -14
- data/lib/activity_feed/configuration.rb +65 -0
- data/lib/activity_feed/feed.rb +89 -20
- data/lib/activity_feed/item.rb +44 -0
- data/lib/activity_feed/utility.rb +25 -0
- data/lib/activity_feed/version.rb +1 -1
- data/lib/activity_feed.rb +10 -109
- data/spec/activity_feed/configuration_spec.rb +14 -0
- data/spec/activity_feed/feed_spec.rb +270 -0
- data/spec/activity_feed/item_spec.rb +65 -0
- data/spec/activity_feed/utility_spec.rb +24 -0
- data/spec/spec_helper.rb +28 -66
- data/spec/support/active_record.rb +38 -0
- data/spec/support/mongoid.rb +38 -0
- data/spec/version_spec.rb +2 -2
- metadata +24 -155
- data/lib/activity_feed/active_record/item.rb +0 -17
- data/lib/activity_feed/memory/item.rb +0 -36
- data/lib/activity_feed/mongo_mapper/item.rb +0 -30
- data/lib/activity_feed/mongoid/item.rb +0 -31
- data/lib/activity_feed/ohm/item.rb +0 -41
- data/spec/activity_feed/custom/item.rb +0 -36
- data/spec/activity_feed_spec.rb +0 -295
- data/spec/fabricators/item_fabricator.rb +0 -43
- data/spec/feed_spec.rb +0 -106
- data/spec/item_spec.rb +0 -55
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActivityFeed::Utility do
|
4
|
+
describe '#feed_key' do
|
5
|
+
it 'should return the correct key for the non-aggregate feed' do
|
6
|
+
ActivityFeed.feed_key('david').should == 'activity_feed:david'
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should return the correct key for an aggregate feed' do
|
10
|
+
ActivityFeed.feed_key('david', true).should == 'activity_feed:aggregate:david'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#feederboard_for' do
|
15
|
+
it 'should create a leaderboard using an existing Redis connection' do
|
16
|
+
feederboard_david = ActivityFeed.feederboard_for('david')
|
17
|
+
feederboard_person = ActivityFeed.feederboard_for('person')
|
18
|
+
|
19
|
+
feederboard_david.should_not be_nil
|
20
|
+
feederboard_person.should_not be_nil
|
21
|
+
ActivityFeed.redis.info["connected_clients"].to_i.should be(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,82 +1,44 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rspec'
|
3
|
-
require 'redis'
|
4
|
-
require 'mongo_mapper'
|
5
|
-
require 'mongoid'
|
6
|
-
require 'database_cleaner'
|
7
|
-
require 'fabrication'
|
8
|
-
require 'json'
|
9
|
-
|
10
|
-
$redis = Redis.new(:host => '127.0.0.1', :port => 6379)
|
11
|
-
|
12
|
-
# TODO: Move to spec/mongo_mapper
|
13
|
-
MongoMapper.connection = Mongo::Connection.new('localhost', 27017)
|
14
|
-
MongoMapper.database = 'activity_feed_gem_test_mongo_mapper'
|
15
|
-
|
16
|
-
Mongoid.configure do |config|
|
17
|
-
config.master = Mongo::Connection.new.db("activity_feed_gem_test_mongoid")
|
18
|
-
# config.mongoid.logger = false
|
19
|
-
end
|
20
|
-
|
21
|
-
# TODO: Move to spec/active_record
|
22
|
-
require 'active_record'
|
23
|
-
|
24
|
-
ActiveRecord::Base.establish_connection(
|
25
|
-
:adapter => "sqlite3",
|
26
|
-
:database => ":memory:"
|
27
|
-
)
|
28
|
-
|
29
|
-
ActiveRecord::Migration.verbose = false
|
30
|
-
|
31
|
-
ActiveRecord::Schema.define do
|
32
|
-
create_table :activity_feed_items, :force => true do |t|
|
33
|
-
t.integer :user_id
|
34
|
-
t.string :nickname
|
35
|
-
t.string :type
|
36
|
-
t.string :title
|
37
|
-
t.text :text
|
38
|
-
t.string :url
|
39
|
-
t.string :icon
|
40
|
-
t.boolean :sticky
|
41
|
-
|
42
|
-
t.timestamps
|
43
|
-
end
|
44
|
-
|
45
|
-
add_index :activity_feed_items, :user_id
|
46
|
-
end
|
47
|
-
|
48
|
-
DatabaseCleaner[:active_record].strategy = :transaction
|
49
|
-
DatabaseCleaner[:mongo_mapper].strategy = :truncation
|
50
|
-
DatabaseCleaner[:mongoid].strategy = :truncation
|
51
|
-
|
52
1
|
require 'activity_feed'
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
require '
|
57
|
-
require 'activity_feed/memory/item'
|
58
|
-
require 'activity_feed/mongo_mapper/item'
|
59
|
-
require 'activity_feed/mongoid/item'
|
60
|
-
require 'activity_feed/ohm/item'
|
61
|
-
require 'activity_feed/custom/item'
|
2
|
+
require 'timecop'
|
3
|
+
require 'database_cleaner'
|
4
|
+
require 'support/mongoid'
|
5
|
+
require 'support/active_record'
|
62
6
|
|
63
7
|
RSpec.configure do |config|
|
64
8
|
config.mock_with :rspec
|
65
9
|
|
66
|
-
config.before(:
|
10
|
+
config.before(:all) do
|
67
11
|
DatabaseCleaner.strategy = :truncation
|
68
12
|
DatabaseCleaner.clean_with(:truncation)
|
69
|
-
$redis.flushdb
|
70
13
|
end
|
71
14
|
|
72
15
|
config.before(:each) do
|
73
|
-
ActivityFeed.persistence = :memory
|
74
16
|
DatabaseCleaner.start
|
75
17
|
DatabaseCleaner.clean
|
18
|
+
|
19
|
+
ActivityFeed.configure do |configuration|
|
20
|
+
configuration.item_loader = nil
|
21
|
+
configuration.redis = Redis.new(:db => 15)
|
22
|
+
end
|
23
|
+
|
24
|
+
ActivityFeed.redis.flushdb
|
76
25
|
end
|
77
26
|
|
78
27
|
config.after(:each) do
|
79
|
-
DatabaseCleaner.clean
|
80
|
-
|
81
|
-
|
28
|
+
DatabaseCleaner.clean
|
29
|
+
|
30
|
+
ActivityFeed.redis.quit
|
31
|
+
end
|
32
|
+
|
33
|
+
# Helper method to add items to a given feed.
|
34
|
+
#
|
35
|
+
# @param items_to_add [int] Number of items to add to the feed.
|
36
|
+
def add_items_to_feed(user_id, items_to_add = 5, aggregate = ActivityFeed.aggregate)
|
37
|
+
1.upto(items_to_add) do |index|
|
38
|
+
ActivityFeed.update_item(user_id, index, DateTime.now.to_i, aggregate)
|
39
|
+
Timecop.travel(DateTime.now + 10)
|
40
|
+
end
|
41
|
+
|
42
|
+
Timecop.return
|
43
|
+
end
|
82
44
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
ActiveRecord::Base.establish_connection(
|
4
|
+
:adapter => "sqlite3",
|
5
|
+
:database => ":memory:"
|
6
|
+
)
|
7
|
+
|
8
|
+
ActiveRecord::Migration.verbose = false
|
9
|
+
|
10
|
+
DatabaseCleaner[:active_record].strategy = :transaction
|
11
|
+
|
12
|
+
ActiveRecord::Schema.define do
|
13
|
+
create_table :activity_feed_items, :force => true do |t|
|
14
|
+
t.string :user_id
|
15
|
+
t.string :nickname
|
16
|
+
t.string :type
|
17
|
+
t.string :title
|
18
|
+
t.text :body
|
19
|
+
|
20
|
+
t.timestamps
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module ActivityFeed
|
25
|
+
module ActiveRecord
|
26
|
+
class Item < ::ActiveRecord::Base
|
27
|
+
set_table_name 'activity_feed_items'
|
28
|
+
|
29
|
+
after_save :update_activity_feed
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def update_activity_feed
|
34
|
+
ActivityFeed.update_item(self.user_id, self.id, self.created_at.to_i)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'mongoid'
|
3
|
+
|
4
|
+
Mongoid.configure do |config|
|
5
|
+
config.master = Mongo::Connection.new.db("activity_feed_gem_test")
|
6
|
+
end
|
7
|
+
|
8
|
+
DatabaseCleaner[:mongoid].strategy = :truncation
|
9
|
+
|
10
|
+
module ActivityFeed
|
11
|
+
module Mongoid
|
12
|
+
class Item
|
13
|
+
include ::Mongoid::Document
|
14
|
+
include ::Mongoid::Timestamps
|
15
|
+
|
16
|
+
field :user_id, :type => String
|
17
|
+
validates_presence_of :user_id
|
18
|
+
|
19
|
+
field :nickname, :type => String
|
20
|
+
field :type, :type => String
|
21
|
+
field :title, :type => String
|
22
|
+
field :text, :type => String
|
23
|
+
field :url, :type => String
|
24
|
+
field :icon, :type=> String
|
25
|
+
field :sticky, :type=> Boolean
|
26
|
+
|
27
|
+
index :user_id
|
28
|
+
|
29
|
+
after_save :update_activity_feed
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def update_activity_feed
|
34
|
+
ActivityFeed.update_item(self.user_id, self.id, self.created_at.to_i)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/version_spec.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activity_feed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- David Czarnecki
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: activesupport
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: timecop
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -91,38 +91,6 @@ dependencies:
|
|
91
91
|
- - ! '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: mongo_mapper
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ! '>='
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: mongo_ext
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ! '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
94
|
- !ruby/object:Gem::Dependency
|
127
95
|
name: bson_ext
|
128
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,39 +140,7 @@ dependencies:
|
|
172
140
|
- !ruby/object:Gem::Version
|
173
141
|
version: '0'
|
174
142
|
- !ruby/object:Gem::Dependency
|
175
|
-
name:
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
|
-
requirements:
|
179
|
-
- - ! '>='
|
180
|
-
- !ruby/object:Gem::Version
|
181
|
-
version: '0'
|
182
|
-
type: :development
|
183
|
-
prerelease: false
|
184
|
-
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ! '>='
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '0'
|
190
|
-
- !ruby/object:Gem::Dependency
|
191
|
-
name: ohm-contrib
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
|
-
requirements:
|
195
|
-
- - ! '>='
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
version: '0'
|
198
|
-
type: :development
|
199
|
-
prerelease: false
|
200
|
-
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ! '>='
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: '0'
|
206
|
-
- !ruby/object:Gem::Dependency
|
207
|
-
name: timecop
|
143
|
+
name: database_cleaner
|
208
144
|
requirement: !ruby/object:Gem::Requirement
|
209
145
|
none: false
|
210
146
|
requirements:
|
@@ -219,70 +155,6 @@ dependencies:
|
|
219
155
|
- - ! '>='
|
220
156
|
- !ruby/object:Gem::Version
|
221
157
|
version: '0'
|
222
|
-
- !ruby/object:Gem::Dependency
|
223
|
-
name: activesupport
|
224
|
-
requirement: !ruby/object:Gem::Requirement
|
225
|
-
none: false
|
226
|
-
requirements:
|
227
|
-
- - ! '>='
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
version: '0'
|
230
|
-
type: :runtime
|
231
|
-
prerelease: false
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
none: false
|
234
|
-
requirements:
|
235
|
-
- - ! '>='
|
236
|
-
- !ruby/object:Gem::Version
|
237
|
-
version: '0'
|
238
|
-
- !ruby/object:Gem::Dependency
|
239
|
-
name: i18n
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
241
|
-
none: false
|
242
|
-
requirements:
|
243
|
-
- - ! '>='
|
244
|
-
- !ruby/object:Gem::Version
|
245
|
-
version: '0'
|
246
|
-
type: :runtime
|
247
|
-
prerelease: false
|
248
|
-
version_requirements: !ruby/object:Gem::Requirement
|
249
|
-
none: false
|
250
|
-
requirements:
|
251
|
-
- - ! '>='
|
252
|
-
- !ruby/object:Gem::Version
|
253
|
-
version: '0'
|
254
|
-
- !ruby/object:Gem::Dependency
|
255
|
-
name: json
|
256
|
-
requirement: !ruby/object:Gem::Requirement
|
257
|
-
none: false
|
258
|
-
requirements:
|
259
|
-
- - ! '>='
|
260
|
-
- !ruby/object:Gem::Version
|
261
|
-
version: '0'
|
262
|
-
type: :runtime
|
263
|
-
prerelease: false
|
264
|
-
version_requirements: !ruby/object:Gem::Requirement
|
265
|
-
none: false
|
266
|
-
requirements:
|
267
|
-
- - ! '>='
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
version: '0'
|
270
|
-
- !ruby/object:Gem::Dependency
|
271
|
-
name: redis
|
272
|
-
requirement: !ruby/object:Gem::Requirement
|
273
|
-
none: false
|
274
|
-
requirements:
|
275
|
-
- - ! '>='
|
276
|
-
- !ruby/object:Gem::Version
|
277
|
-
version: '0'
|
278
|
-
type: :runtime
|
279
|
-
prerelease: false
|
280
|
-
version_requirements: !ruby/object:Gem::Requirement
|
281
|
-
none: false
|
282
|
-
requirements:
|
283
|
-
- - ! '>='
|
284
|
-
- !ruby/object:Gem::Version
|
285
|
-
version: '0'
|
286
158
|
- !ruby/object:Gem::Dependency
|
287
159
|
name: leaderboard
|
288
160
|
requirement: !ruby/object:Gem::Requirement
|
@@ -316,19 +188,18 @@ files:
|
|
316
188
|
- Rakefile
|
317
189
|
- activity_feed.gemspec
|
318
190
|
- lib/activity_feed.rb
|
319
|
-
- lib/activity_feed/
|
191
|
+
- lib/activity_feed/configuration.rb
|
320
192
|
- lib/activity_feed/feed.rb
|
321
|
-
- lib/activity_feed/
|
322
|
-
- lib/activity_feed/
|
323
|
-
- lib/activity_feed/mongoid/item.rb
|
324
|
-
- lib/activity_feed/ohm/item.rb
|
193
|
+
- lib/activity_feed/item.rb
|
194
|
+
- lib/activity_feed/utility.rb
|
325
195
|
- lib/activity_feed/version.rb
|
326
|
-
- spec/activity_feed/
|
327
|
-
- spec/
|
328
|
-
- spec/
|
329
|
-
- spec/
|
330
|
-
- spec/item_spec.rb
|
196
|
+
- spec/activity_feed/configuration_spec.rb
|
197
|
+
- spec/activity_feed/feed_spec.rb
|
198
|
+
- spec/activity_feed/item_spec.rb
|
199
|
+
- spec/activity_feed/utility_spec.rb
|
331
200
|
- spec/spec_helper.rb
|
201
|
+
- spec/support/active_record.rb
|
202
|
+
- spec/support/mongoid.rb
|
332
203
|
- spec/version_spec.rb
|
333
204
|
homepage: https://github.com/agoragames/activity_feed
|
334
205
|
licenses: []
|
@@ -344,16 +215,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
344
215
|
version: '0'
|
345
216
|
segments:
|
346
217
|
- 0
|
347
|
-
hash:
|
218
|
+
hash: 2514115119128722927
|
348
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
349
220
|
none: false
|
350
221
|
requirements:
|
351
|
-
- - ! '
|
222
|
+
- - ! '>'
|
352
223
|
- !ruby/object:Gem::Version
|
353
|
-
version:
|
354
|
-
segments:
|
355
|
-
- 0
|
356
|
-
hash: -660248918297139575
|
224
|
+
version: 1.3.1
|
357
225
|
requirements: []
|
358
226
|
rubyforge_project: activity_feed
|
359
227
|
rubygems_version: 1.8.23
|
@@ -361,10 +229,11 @@ signing_key:
|
|
361
229
|
specification_version: 3
|
362
230
|
summary: Activity feeds backed by Redis
|
363
231
|
test_files:
|
364
|
-
- spec/activity_feed/
|
365
|
-
- spec/
|
366
|
-
- spec/
|
367
|
-
- spec/
|
368
|
-
- spec/item_spec.rb
|
232
|
+
- spec/activity_feed/configuration_spec.rb
|
233
|
+
- spec/activity_feed/feed_spec.rb
|
234
|
+
- spec/activity_feed/item_spec.rb
|
235
|
+
- spec/activity_feed/utility_spec.rb
|
369
236
|
- spec/spec_helper.rb
|
237
|
+
- spec/support/active_record.rb
|
238
|
+
- spec/support/mongoid.rb
|
370
239
|
- spec/version_spec.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
|
3
|
-
module ActivityFeed
|
4
|
-
module ActiveRecord
|
5
|
-
class Item < ::ActiveRecord::Base
|
6
|
-
set_table_name 'activity_feed_items'
|
7
|
-
|
8
|
-
after_save :update_redis
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def update_redis
|
13
|
-
ActivityFeed.redis.zadd(ActivityFeed.feed_key(self.user_id), self.created_at.to_i, self.id)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/object/blank'
|
2
|
-
require 'active_support/core_ext/date_time/conversions'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module ActivityFeed
|
6
|
-
module Memory
|
7
|
-
class Item
|
8
|
-
attr_accessor :user_id
|
9
|
-
attr_accessor :nickname
|
10
|
-
attr_accessor :type
|
11
|
-
attr_accessor :title
|
12
|
-
attr_accessor :text
|
13
|
-
attr_accessor :url
|
14
|
-
attr_accessor :icon
|
15
|
-
attr_accessor :sticky
|
16
|
-
|
17
|
-
def initialize(attributes = {})
|
18
|
-
@attributes = attributes
|
19
|
-
|
20
|
-
attributes.each do |key,value|
|
21
|
-
self.send("#{key}=", value)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def attributes
|
26
|
-
@attributes
|
27
|
-
end
|
28
|
-
|
29
|
-
def save
|
30
|
-
raise 'user_id MUST be defined in the attributes' if user_id.blank?
|
31
|
-
|
32
|
-
ActivityFeed.redis.zadd(ActivityFeed.feed_key(self.user_id), DateTime.now.to_i, @attributes.to_json)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'mongo_mapper'
|
2
|
-
|
3
|
-
module ActivityFeed
|
4
|
-
module MongoMapper
|
5
|
-
class Item
|
6
|
-
include ::MongoMapper::Document
|
7
|
-
|
8
|
-
key :user_id, Integer, :required => true, :numeric => true
|
9
|
-
key :nickname, String
|
10
|
-
key :type, String
|
11
|
-
key :title, String
|
12
|
-
key :text, String
|
13
|
-
key :url, String
|
14
|
-
key :icon, String
|
15
|
-
key :sticky, Boolean
|
16
|
-
|
17
|
-
timestamps!
|
18
|
-
|
19
|
-
self.ensure_index(:user_id)
|
20
|
-
|
21
|
-
after_save :update_redis
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def update_redis
|
26
|
-
ActivityFeed.redis.zadd(ActivityFeed.feed_key(self.user_id), self.created_at.to_i, self.id)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'mongoid'
|
2
|
-
|
3
|
-
module ActivityFeed
|
4
|
-
module Mongoid
|
5
|
-
class Item
|
6
|
-
include ::Mongoid::Document
|
7
|
-
include ::Mongoid::Timestamps
|
8
|
-
|
9
|
-
field :user_id, type: Integer
|
10
|
-
validates_presence_of :user_id
|
11
|
-
|
12
|
-
field :nickname, type: String
|
13
|
-
field :type, type: String
|
14
|
-
field :title, type: String
|
15
|
-
field :text, type: String
|
16
|
-
field :url, type: String
|
17
|
-
field :icon, type: String
|
18
|
-
field :sticky, type: Boolean
|
19
|
-
|
20
|
-
index :user_id
|
21
|
-
|
22
|
-
after_save :update_redis
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def update_redis
|
27
|
-
ActivityFeed.redis.zadd(ActivityFeed.feed_key(self.user_id), self.created_at.to_i, self.id)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'ohm'
|
2
|
-
require 'ohm/contrib'
|
3
|
-
|
4
|
-
module ActivityFeed
|
5
|
-
module Ohm
|
6
|
-
class Item < ::Ohm::Model
|
7
|
-
include ::Ohm::Callbacks
|
8
|
-
include ::Ohm::Timestamping
|
9
|
-
|
10
|
-
attribute :user_id
|
11
|
-
attribute :nickname
|
12
|
-
attribute :type
|
13
|
-
attribute :title
|
14
|
-
attribute :text
|
15
|
-
attribute :url
|
16
|
-
attribute :icon
|
17
|
-
attribute :sticky
|
18
|
-
|
19
|
-
after :save, :update_redis
|
20
|
-
|
21
|
-
def to_hash
|
22
|
-
super.merge(
|
23
|
-
:user_id => user_id,
|
24
|
-
:nickname => nickname,
|
25
|
-
:type => type,
|
26
|
-
:title => title,
|
27
|
-
:text => text,
|
28
|
-
:url => url,
|
29
|
-
:icon => icon,
|
30
|
-
:sticky => sticky
|
31
|
-
)
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def update_redis
|
37
|
-
ActivityFeed.redis.zadd(ActivityFeed.feed_key(self.user_id), DateTime.parse(self.created_at).to_i, self.id)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module ActivityFeed
|
2
|
-
module Custom
|
3
|
-
class Item
|
4
|
-
attr_accessor :user_id
|
5
|
-
attr_accessor :nickname
|
6
|
-
attr_accessor :type
|
7
|
-
attr_accessor :title
|
8
|
-
attr_accessor :text
|
9
|
-
attr_accessor :url
|
10
|
-
attr_accessor :icon
|
11
|
-
attr_accessor :sticky
|
12
|
-
|
13
|
-
def initialize(attributes = {})
|
14
|
-
@attributes = attributes
|
15
|
-
|
16
|
-
attributes.each do |key,value|
|
17
|
-
self.send("#{key}=", value)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def attributes
|
22
|
-
@attributes
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.find(item)
|
26
|
-
JSON.parse(item)
|
27
|
-
end
|
28
|
-
|
29
|
-
def save
|
30
|
-
raise 'user_id MUST be defined in the attributes' if user_id.blank?
|
31
|
-
|
32
|
-
ActivityFeed.redis.zadd(ActivityFeed.feed_key(self.user_id), DateTime.now.to_i, @attributes.to_json)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|