seymour 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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