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.
@@ -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
- ActivityFeed.redis = $redis
55
-
56
- require 'activity_feed/active_record/item'
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(:suite) do
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
- $redis.flushdb
81
- end
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
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ActivityFeed do
3
+ describe 'ActivityFeed::VERSION' do
4
4
  it "should be the correct version" do
5
- ActivityFeed::VERSION.should == '1.4.0'
5
+ ActivityFeed::VERSION.should == '2.0.0.rc1'
6
6
  end
7
7
  end
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: 1.4.0
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-16 00:00:00.000000000 Z
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: database_cleaner
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: fabrication
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: ohm
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/active_record/item.rb
191
+ - lib/activity_feed/configuration.rb
320
192
  - lib/activity_feed/feed.rb
321
- - lib/activity_feed/memory/item.rb
322
- - lib/activity_feed/mongo_mapper/item.rb
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/custom/item.rb
327
- - spec/activity_feed_spec.rb
328
- - spec/fabricators/item_fabricator.rb
329
- - spec/feed_spec.rb
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: -660248918297139575
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: '0'
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/custom/item.rb
365
- - spec/activity_feed_spec.rb
366
- - spec/fabricators/item_fabricator.rb
367
- - spec/feed_spec.rb
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