seymour 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -64,5 +64,6 @@ activity.distribute
64
64
 
65
65
  ## Background
66
66
 
67
- This library is based on the feed architecture used to distribute activity items at [Weplay](http://weplay.com). Weplay supports activity distribution to a variety of feeds: user dashboards, game day comment pages, global points leaders, etc.
67
+ This library is based on the feed architecture used to distribute activity items at [Weplay](http://weplay.com). Weplay supports activity distribution to a variety of feeds: user dashboards, game day comment pages, global points leaders, etc. The html for each activity item is pre-rendered in a background job. To build a user's dashboard activities, the activity feed needs only to select the activities at the top of the list and output the pre-rendered html for each item, reducing the extra includes and joins needed in-process.
68
+
68
69
 
data/Rakefile CHANGED
@@ -25,3 +25,20 @@ load 'rails/tasks/engine.rake'
25
25
 
26
26
  Bundler::GemHelper.install_tasks
27
27
 
28
+ require 'rspec/core/rake_task'
29
+
30
+ desc "Run specs"
31
+ RSpec::Core::RakeTask.new do |t|
32
+ t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
33
+ # Put spec opts in a file named .rspec in root
34
+ end
35
+
36
+ desc "Generate code coverage"
37
+ RSpec::Core::RakeTask.new(:coverage) do |t|
38
+ t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
39
+ t.rcov = true
40
+ t.rcov_opts = ['--exclude', 'spec']
41
+ end
42
+
43
+ desc "Run the specs"
44
+ task :default => ["spec"]
data/lib/seymour.rb CHANGED
@@ -5,7 +5,7 @@ require "seymour/activity_feed"
5
5
  require "seymour/acts_as_activity"
6
6
  require "seymour/distributable"
7
7
  require "seymour/renderable"
8
- require "seymour/render_controller"
8
+ # require "seymour/render_controller"
9
9
 
10
10
  module Seymour
11
11
  extend self
@@ -7,7 +7,7 @@ module Seymour
7
7
  @@feed_classes = []
8
8
 
9
9
  def distribute(activity)
10
- activity.feeds.map { |feed| feed.push(activity) }
10
+ activity.distribute
11
11
  end
12
12
 
13
13
  def inherited(subclass)
@@ -17,7 +17,6 @@ module Seymour
17
17
  def feed_classes
18
18
  @@feed_classes
19
19
  end
20
-
21
20
  end
22
21
 
23
22
  def initialize(owner)
@@ -0,0 +1,21 @@
1
+ class BatchedUserEnumerator
2
+ def initialize(find_in_batches_options)
3
+ @find_in_batches_options = find_in_batches_options
4
+ end
5
+
6
+ def self.for_ids(ids)
7
+ return [] if ids.empty?
8
+ self.new(:conditions => ['id in (?)', ids])
9
+ end
10
+
11
+ def each
12
+ User.find_in_batches(@find_in_batches_options) do |users|
13
+ User.send(:with_exclusive_scope) do
14
+ users.each do |user|
15
+ yield user
16
+ end
17
+ end
18
+ end
19
+ self
20
+ end
21
+ end
@@ -7,36 +7,60 @@ module Seymour
7
7
  end
8
8
 
9
9
  module ClassMethods
10
+ DEFAULT_BATCH_SIZE = 500
11
+
10
12
  attr_accessor :audience_names, :feed_class_names
11
13
 
12
14
  def audience(*names)
13
15
  options = names.extract_options!
14
16
  names.each do |name|
15
- feed_name = options[:feed] || "#{name.downcase.to_s.singularize}_feed".camelize
16
- audience_to_feed_classes[name] = feed_name
17
+ feed_name = options.delete(:feed) || "#{name.downcase.to_s.singularize}_feed".camelize
18
+ audience_mappings[name] = [feed_name, options]
17
19
  end
18
20
  end
19
21
 
20
22
  def audience_names
21
- audience_to_feed_classes.keys
23
+ audience_mappings.keys
22
24
  end
23
25
 
24
26
  def feed_class_names
25
- audience_to_feed_classes.values
27
+ audience_mappings.values.map(&:first)
26
28
  end
27
29
 
28
30
  def feeds_for(activity)
29
- audience_to_feed_classes.map do |audience_name, feed_class_name|
30
- activity.send(audience_name).map do |member|
31
- feed_class_name.constantize.new(member)
32
- end
33
- end.flatten
31
+ tap_feeds_for(activity)
32
+ end
33
+
34
+ def distribute(activity)
35
+ tap_feeds_for(activity) { |feed| feed.push(activity) }
34
36
  end
35
37
 
36
38
  private
37
39
 
38
- def audience_to_feed_classes
39
- @audience_to_feed_classes ||= {}
40
+ def tap_feeds_for(activity, &block)
41
+ [].tap do |feeds|
42
+ audience_mappings.each do |audience_name, mapping|
43
+ feed_class_name, options = mapping
44
+ try_find_each(activity.send(audience_name), options) do |member|
45
+ feed = feed_class_name.constantize.new(member)
46
+ yield feed if block_given?
47
+ feeds << feed
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def audience_mappings
54
+ @audience_mappings ||= {}
55
+ end
56
+
57
+ def try_find_each(activity_audience, options = {}, &block)
58
+ if defined? activity_audience.find_each
59
+ options[:batch_size] ||= DEFAULT_BATCH_SIZE
60
+ activity_audience.find_each(options) &block
61
+ else
62
+ activity_audience.each &block
63
+ end
40
64
  end
41
65
 
42
66
  end
@@ -44,7 +68,7 @@ module Seymour
44
68
  module InstanceMethods
45
69
 
46
70
  def distribute
47
- feeds.map { |feed| feed.push(self) }
71
+ self.class.distribute(self)
48
72
  end
49
73
 
50
74
  def feeds
@@ -22,7 +22,7 @@ module Seymour
22
22
  { "REQUEST_URI" => "", "SERVER_NAME" => '' }.merge(env))
23
23
 
24
24
  controller_class = "#{controller_name}_controller".classify.constantize
25
- # status, headers, response = controller_class.action(action_name.to_sym).call(env)
25
+
26
26
  status, headers, response = controller_class.action(action_name.to_sym).call(env)
27
27
  raise RenderError.new("#{controller_name}##{action_name}") unless status.to_i == 200
28
28
  response.body
@@ -1,3 +1,3 @@
1
1
  module Seymour
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,6 +1,10 @@
1
1
  class TestActivity < Activity
2
2
  audience :events
3
- audience :authors, :feed => "UserFeed"
3
+ audience :users, :feed => "UserFeed"
4
+
5
+ def users
6
+ [actor] + authors
7
+ end
4
8
 
5
9
  def events
6
10
  []
@@ -1,5 +1,4 @@
1
1
  class Event < ActiveRecord::Base
2
-
3
2
  has_many :attendees, :class_name => "User"
4
-
3
+ has_many :comments
5
4
  end
@@ -0,0 +1,2 @@
1
+ class AdminFeed < Seymour::ActivityFeed
2
+ end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Seymour::ActivityFeed do
4
4
 
5
- let(:owner) { mock("User", :id => 123) }
6
- let(:feed) { Seymour::ActivityFeed.new(owner) }
5
+ let(:owner) { mock_model(User) }
6
+ let(:feed) { Seymour::ActivityFeed.new(owner) }
7
7
 
8
8
  describe "class methods" do
9
9
  describe "feed_classes" do
@@ -13,13 +13,9 @@ describe Seymour::ActivityFeed do
13
13
  end
14
14
 
15
15
  describe "distribute" do
16
- it "should push given activity to activities destination feeds" do
17
- event_feed = EventFeed.new(mock_model("Event"))
18
- activity = mock_model("Activity")
19
-
20
- activity.should_receive(:feeds).and_return([event_feed])
21
- event_feed.should_receive(:push).with(activity)
22
-
16
+ it "should call activity distribute on activity" do
17
+ activity = mock_model(Activity)
18
+ activity.should_receive(:distribute)
23
19
  Seymour::ActivityFeed.distribute(activity)
24
20
  end
25
21
  end
@@ -32,17 +28,40 @@ describe Seymour::ActivityFeed do
32
28
  end
33
29
 
34
30
  describe "push" do
35
- it "adds id of given activity to activity_ids" do
36
- feed.push mock("Activity", :id => 456)
37
- feed.activity_ids.should == [456]
31
+ it "prepends id of given activity to activity_ids" do
32
+ feed.push mock_model(Activity, :id => 123)
33
+ feed.activity_ids.should == [123]
34
+
35
+ feed.push mock_model(Activity, :id => 456)
36
+ feed.activity_ids.should == [456, 123]
38
37
  end
39
38
 
39
+ it "new feed with same owner pushes to same list" do
40
+ new_feed = Seymour::ActivityFeed.new(owner)
41
+
42
+ feed.push mock_model(Activity, :id => 123)
43
+ new_feed.push mock_model(Activity, :id => 456)
44
+
45
+ feed.activity_ids.should == [456, 123]
46
+ new_feed.activity_ids.should == [456, 123]
47
+ end
48
+
49
+ it "new feed with different owner pushes to different list" do
50
+ new_owner = mock_model(User)
51
+ new_feed = Seymour::ActivityFeed.new(new_owner)
52
+
53
+ feed.push mock_model(Activity, :id => 123)
54
+ new_feed.push mock_model(Activity, :id => 456)
55
+
56
+ feed.activity_ids.should == [123]
57
+ new_feed.activity_ids.should == [456]
58
+ end
40
59
  end
41
60
 
42
61
  describe "remove" do
43
- it "removes id from list" do
44
- activity_1 = mock("Activity", :id => 456)
45
- activity_2 = mock("Activity", :id => 789)
62
+ it "removes activity from list by id" do
63
+ activity_1 = mock_model(Activity, :id => 456)
64
+ activity_2 = mock_model(Activity, :id => 789)
46
65
  feed.push activity_1
47
66
  feed.push activity_2
48
67
 
@@ -52,6 +71,19 @@ describe Seymour::ActivityFeed do
52
71
  end
53
72
  end
54
73
 
74
+ describe "remove_id" do
75
+ it "removes activity_id from list" do
76
+ activity_1 = mock_model(Activity, :id => 456)
77
+ activity_2 = mock_model(Activity, :id => 789)
78
+ feed.push activity_1
79
+ feed.push activity_2
80
+
81
+ feed.remove_id activity_1.id
82
+
83
+ feed.activity_ids.should == [activity_2.id]
84
+ end
85
+ end
86
+
55
87
  describe "owner" do
56
88
  it "should return given owner" do
57
89
  feed.owner.should == owner
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe Seymour::Distributable do
4
+
5
+ class DistributableActivity
6
+ include Seymour::Distributable
7
+ audience :users, :admin
8
+ audience :events, :batch_size => 100
9
+ audience :soccer_teams, :feed => "TeamFeed"
10
+
11
+ attr_accessor :users, :admin, :soccer_teams, :events
12
+ end
13
+
14
+ describe "class methods" do
15
+ describe "audience" do
16
+ it "should list audience names" do
17
+ audience_names = DistributableActivity.audience_names
18
+ audience_names.should include(:users)
19
+ audience_names.should include(:admin)
20
+ audience_names.should include(:soccer_teams)
21
+ audience_names.should include(:events)
22
+ end
23
+
24
+ it "should list activity feed classes" do
25
+ feed_class_names = DistributableActivity.feed_class_names
26
+ feed_class_names.should include('UserFeed')
27
+ feed_class_names.should include('AdminFeed')
28
+ feed_class_names.should include('TeamFeed')
29
+ feed_class_names.should include('EventFeed')
30
+ end
31
+
32
+ end
33
+
34
+ describe "feeding" do
35
+ let(:activity) { DistributableActivity.new }
36
+
37
+ before(:each) do
38
+ activity.soccer_teams = []
39
+ activity.events = []
40
+ @user = mock_model(User)
41
+ @admin = mock_model(User)
42
+ activity.users = [@user]
43
+ activity.admin = [@admin]
44
+ end
45
+
46
+ describe "feeds_for" do
47
+ it "should build feed for each audience member" do
48
+ DistributableActivity.feeds_for(activity).size.should == 2
49
+ end
50
+
51
+ it "should assign owner to correct feed type" do
52
+ feed_1, feed_2 = DistributableActivity.feeds_for(activity)
53
+ feed_1.should be_a(UserFeed)
54
+ feed_1.owner.should == @user
55
+ feed_2.should be_a(AdminFeed)
56
+ feed_2.owner.should == @admin
57
+ end
58
+
59
+ it "should use default batch size if iterating on arel scope" do
60
+ activity.users = User.scoped
61
+ activity.users.should_receive(:find_each).with(:batch_size => 500)
62
+ DistributableActivity.feeds_for(activity)
63
+ end
64
+
65
+ it "should use specified batch size if iterating on arel scope" do
66
+ activity.events = Event.scoped
67
+ activity.events.should_receive(:find_each).with(:batch_size => 100)
68
+ DistributableActivity.feeds_for(activity)
69
+ end
70
+ end
71
+
72
+ describe "distribute" do
73
+ it "should push activity to each feed" do
74
+ feed = UserFeed.new(mock_model(User))
75
+ DistributableActivity.stub!(:tap_feeds_for).with(activity).and_yield(feed)
76
+ feed.should_receive(:push).with(activity)
77
+ DistributableActivity.distribute(activity)
78
+ end
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ describe "instance methods" do
85
+ describe "distribute" do
86
+ it "should push itself to audience feeds" do
87
+ activity = DistributableActivity.new
88
+ feed = UserFeed.new(mock_model(User))
89
+ DistributableActivity.stub!(:tap_feeds_for).with(activity).and_yield(feed)
90
+ feed.should_receive(:push).with(activity)
91
+ activity.distribute
92
+ end
93
+ end
94
+ end
95
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Seymour::ActsAsActivity do
3
+ describe "TestActivity" do
4
4
 
5
5
  describe "TestActivity in dummy app" do
6
6
  let(:activity) { Factory(:test_activity) }
@@ -14,16 +14,14 @@ describe Seymour::ActsAsActivity do
14
14
 
15
15
  describe "distribute" do
16
16
  it "should push activity to audiences" do
17
- feed = mock(UserFeed)
18
- TestActivity.stub!(:feeds_for).and_return([feed])
19
- feed.should_receive(:push).with(activity)
20
17
  activity.distribute
18
+ UserFeed.new(activity.actor).activity_ids.should == [activity.id]
21
19
  end
22
20
  end
23
21
 
24
22
  describe "feeds" do
25
23
  before(:each) do
26
- activity.stub!(:authors).and_return([])
24
+ activity.stub!(:users).and_return([])
27
25
  activity.stub!(:events).and_return([])
28
26
  end
29
27
 
@@ -38,7 +36,7 @@ describe Seymour::ActsAsActivity do
38
36
  it "should create user feed for each author" do
39
37
  user_1 = mock_model(User)
40
38
  user_2 = mock_model(User)
41
- activity.should_receive(:authors).and_return [user_1, user_2]
39
+ activity.should_receive(:users).and_return [user_1, user_2]
42
40
  user_feed_1 = mock(UserFeed)
43
41
  user_feed_2 = mock(UserFeed)
44
42
  UserFeed.should_receive(:new).ordered.with(user_1).and_return(user_feed_1)
@@ -49,19 +47,5 @@ describe Seymour::ActsAsActivity do
49
47
  feeds.should include(user_feed_2)
50
48
  end
51
49
  end
52
-
53
- describe "class methods" do
54
- describe "audience" do
55
- it "should add events and authors audience names" do
56
- TestActivity.audience_names.should include(:events)
57
- TestActivity.audience_names.should include(:authors)
58
- end
59
-
60
- it "should set up feed class names" do
61
- TestActivity.feed_class_names.should include("UserFeed")
62
- TestActivity.feed_class_names.should include("EventFeed")
63
- end
64
- end
65
- end
66
50
  end
67
51
  end
@@ -1,9 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Seymour::Renderable do
4
+
5
+ class RenderableActivity
6
+ include Seymour::Renderable
7
+ end
8
+
4
9
  describe "render" do
5
10
  let(:response) { mock(ActionDispatch::Response, :body => 'Lots of activity going on') }
6
- let(:activity) { Factory(:test_activity) }
11
+ let(:activity) { RenderableActivity.new }
7
12
 
8
13
  before(:each) do
9
14
  ok_rack_response = lambda { |env| ['200', {}, response ] }
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,11 @@ ENV["RAILS_ENV"] ||= 'test'
3
3
 
4
4
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
5
  require 'rspec/rails'
6
- require "rails/test_help"
6
+ # require "rails/test_help"
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
7
11
 
8
12
  dir = File.dirname(File.expand_path(__FILE__))
9
13
  $LOAD_PATH.unshift dir + '/../lib'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seymour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-17 00:00:00.000000000Z
12
+ date: 2011-10-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70109574033260 !ruby/object:Gem::Requirement
16
+ requirement: &70358103560780 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70109574033260
24
+ version_requirements: *70358103560780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis-namespace
27
- requirement: &70109574031400 !ruby/object:Gem::Requirement
27
+ requirement: &70358103559520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70109574031400
35
+ version_requirements: *70358103559520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70109574029860 !ruby/object:Gem::Requirement
38
+ requirement: &70358103557760 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70109574029860
46
+ version_requirements: *70358103557760
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec-rails
49
- requirement: &70109574025400 !ruby/object:Gem::Requirement
49
+ requirement: &70358103556520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70109574025400
57
+ version_requirements: *70358103556520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70109574024660 !ruby/object:Gem::Requirement
60
+ requirement: &70358103555440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70109574024660
68
+ version_requirements: *70358103555440
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec-rails
71
- requirement: &70109574023780 !ruby/object:Gem::Requirement
71
+ requirement: &70358103554120 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70109574023780
79
+ version_requirements: *70358103554120
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: steak
82
- requirement: &70109574022240 !ruby/object:Gem::Requirement
82
+ requirement: &70358103552600 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70109574022240
90
+ version_requirements: *70358103552600
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: capybara
93
- requirement: &70109574021020 !ruby/object:Gem::Requirement
93
+ requirement: &70358103551580 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70109574021020
101
+ version_requirements: *70358103551580
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: database_cleaner
104
- requirement: &70109574019820 !ruby/object:Gem::Requirement
104
+ requirement: &70358103549920 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70109574019820
112
+ version_requirements: *70358103549920
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: factory_girl_rails
115
- requirement: &70109574018420 !ruby/object:Gem::Requirement
115
+ requirement: &70358103548340 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70109574018420
123
+ version_requirements: *70358103548340
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sqlite3
126
- requirement: &70109574016740 !ruby/object:Gem::Requirement
126
+ requirement: &70358103546000 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,7 +131,7 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70109574016740
134
+ version_requirements: *70358103546000
135
135
  description: Activity feed distribution for Rails applications
136
136
  email:
137
137
  - rosskaff@gmail.com
@@ -142,15 +142,16 @@ files:
142
142
  - app/assets/javascripts/seymour/application.js
143
143
  - app/assets/stylesheets/seymour/application.css
144
144
  - app/controllers/seymour/application_controller.rb
145
+ - app/controllers/seymour/render_controller.rb
145
146
  - app/helpers/seymour/application_helper.rb
146
147
  - app/views/layouts/seymour/application.html.erb
147
148
  - config/routes.rb
148
149
  - lib/seymour/activity_feed.rb
149
150
  - lib/seymour/acts_as_activity.rb
151
+ - lib/seymour/batched_user_enumerator.rb
150
152
  - lib/seymour/distributable.rb
151
153
  - lib/seymour/engine.rb
152
154
  - lib/seymour/redis.rb
153
- - lib/seymour/render_controller.rb
154
155
  - lib/seymour/renderable.rb
155
156
  - lib/seymour/version.rb
156
157
  - lib/seymour.rb
@@ -197,6 +198,7 @@ files:
197
198
  - spec/dummy/db/migrate/20111015001158_create_comments.rb
198
199
  - spec/dummy/db/schema.rb
199
200
  - spec/dummy/lib/assets/.gitkeep
201
+ - spec/dummy/lib/seymour/admin_feed.rb
200
202
  - spec/dummy/lib/seymour/event_feed.rb
201
203
  - spec/dummy/lib/seymour/player_feed.rb
202
204
  - spec/dummy/lib/seymour/user_feed.rb
@@ -209,7 +211,8 @@ files:
209
211
  - spec/dummy/spec/factories.rb
210
212
  - spec/redis-spec.conf
211
213
  - spec/seymour/activity_feed_spec.rb
212
- - spec/seymour/acts_as_activity_spec.rb
214
+ - spec/seymour/distributable_spec.rb
215
+ - spec/seymour/dummy/test_activity_spec.rb
213
216
  - spec/seymour/redis_spec.rb
214
217
  - spec/seymour/renderable_spec.rb
215
218
  - spec/seymour_spec.rb
@@ -229,7 +232,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
229
232
  version: '0'
230
233
  segments:
231
234
  - 0
232
- hash: 17470921223917954
235
+ hash: -259286616321666436
233
236
  required_rubygems_version: !ruby/object:Gem::Requirement
234
237
  none: false
235
238
  requirements:
@@ -238,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
241
  version: '0'
239
242
  segments:
240
243
  - 0
241
- hash: 17470921223917954
244
+ hash: -259286616321666436
242
245
  requirements: []
243
246
  rubyforge_project:
244
247
  rubygems_version: 1.8.10
@@ -285,6 +288,7 @@ test_files:
285
288
  - spec/dummy/db/migrate/20111015001158_create_comments.rb
286
289
  - spec/dummy/db/schema.rb
287
290
  - spec/dummy/lib/assets/.gitkeep
291
+ - spec/dummy/lib/seymour/admin_feed.rb
288
292
  - spec/dummy/lib/seymour/event_feed.rb
289
293
  - spec/dummy/lib/seymour/player_feed.rb
290
294
  - spec/dummy/lib/seymour/user_feed.rb
@@ -297,7 +301,8 @@ test_files:
297
301
  - spec/dummy/spec/factories.rb
298
302
  - spec/redis-spec.conf
299
303
  - spec/seymour/activity_feed_spec.rb
300
- - spec/seymour/acts_as_activity_spec.rb
304
+ - spec/seymour/distributable_spec.rb
305
+ - spec/seymour/dummy/test_activity_spec.rb
301
306
  - spec/seymour/redis_spec.rb
302
307
  - spec/seymour/renderable_spec.rb
303
308
  - spec/seymour_spec.rb