seymour 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ .bundle/
2
+ log/*.log
3
+ pkg/
4
+ spec/dummy/db/*.sqlite3
5
+ spec/dummy/log/*.log
6
+ spec/dummy/tmp/
7
+ tmp/
8
+ .rspec
@@ -0,0 +1,26 @@
1
+ ## 0.0.6 (2011-10-24)
2
+
3
+ * Ruby 1.8.7 compatiblity
4
+
5
+ ## 0.0.5 (2011-10-24)
6
+
7
+ * Support rails ~> 3.0
8
+ * Remove engine
9
+
10
+ ## 0.0.4 (2011-10-19)
11
+
12
+ * Support batched enumeration for activity distribution
13
+ * Additional specs for activity feed
14
+
15
+ ## 0.0.3 (2011-10-16)
16
+
17
+ * Added ability to render activity outside request cycle
18
+ * Using factory girl in specs
19
+
20
+ ## 0.0.2 (2011-10-16)
21
+
22
+ * Added activity distribution to feeds based on 'audience' declarations
23
+
24
+ ## 0.0.1 (2011-10-13)
25
+
26
+ * provide activity feed base class
data/Gemfile ADDED
@@ -0,0 +1,23 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Declare your gem's dependencies in seymour.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
7
+
8
+ # Declare any dependencies that are still in development here instead of in
9
+ # your gemspec. These might include edge Rails or gems from your path or
10
+ # Git. Remember to move these dependencies to your gemspec before releasing
11
+ # your gem to rubygems.org.
12
+
13
+ # To use debugger
14
+ group :test, :development do
15
+ gem 'ruby-debug19', :require => 'ruby-debug', :platform => :ruby_19
16
+ gem 'ruby-debug', :platform => :ruby_18
17
+ gem 'guard'
18
+ gem 'guard-rspec'
19
+ gem 'rb-fsevent' # Makes guard better
20
+ gem 'growl_notify' # Makes guard better
21
+ gem 'launchy'
22
+ gem 'yard'
23
+ end
@@ -0,0 +1,195 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ seymour (0.0.6)
5
+ rails (~> 3.0)
6
+ redis-namespace
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ actionmailer (3.1.1)
12
+ actionpack (= 3.1.1)
13
+ mail (~> 2.3.0)
14
+ actionpack (3.1.1)
15
+ activemodel (= 3.1.1)
16
+ activesupport (= 3.1.1)
17
+ builder (~> 3.0.0)
18
+ erubis (~> 2.7.0)
19
+ i18n (~> 0.6)
20
+ rack (~> 1.3.2)
21
+ rack-cache (~> 1.1)
22
+ rack-mount (~> 0.8.2)
23
+ rack-test (~> 0.6.1)
24
+ sprockets (~> 2.0.2)
25
+ activemodel (3.1.1)
26
+ activesupport (= 3.1.1)
27
+ builder (~> 3.0.0)
28
+ i18n (~> 0.6)
29
+ activerecord (3.1.1)
30
+ activemodel (= 3.1.1)
31
+ activesupport (= 3.1.1)
32
+ arel (~> 2.2.1)
33
+ tzinfo (~> 0.3.29)
34
+ activeresource (3.1.1)
35
+ activemodel (= 3.1.1)
36
+ activesupport (= 3.1.1)
37
+ activesupport (3.1.1)
38
+ multi_json (~> 1.0)
39
+ addressable (2.2.6)
40
+ ammeter (0.2.0)
41
+ activesupport (~> 3.0)
42
+ railties (~> 3.0)
43
+ rspec (~> 2.2)
44
+ rspec-rails (~> 2.2)
45
+ archive-tar-minitar (0.5.2)
46
+ arel (2.2.1)
47
+ builder (3.0.0)
48
+ capybara (1.1.1)
49
+ mime-types (>= 1.16)
50
+ nokogiri (>= 1.3.3)
51
+ rack (>= 1.0.0)
52
+ rack-test (>= 0.5.4)
53
+ selenium-webdriver (~> 2.0)
54
+ xpath (~> 0.1.4)
55
+ childprocess (0.2.2)
56
+ ffi (~> 1.0.6)
57
+ columnize (0.3.4)
58
+ database_cleaner (0.6.7)
59
+ diff-lcs (1.1.3)
60
+ erubis (2.7.0)
61
+ factory_girl (2.1.0)
62
+ factory_girl_rails (1.2.0)
63
+ factory_girl (~> 2.1.0)
64
+ railties (>= 3.0.0)
65
+ ffi (1.0.9)
66
+ growl_notify (0.0.3)
67
+ rb-appscript
68
+ guard (0.8.8)
69
+ thor (~> 0.14.6)
70
+ guard-rspec (0.5.0)
71
+ guard (>= 0.8.4)
72
+ hike (1.2.1)
73
+ i18n (0.6.0)
74
+ json (1.6.1)
75
+ json_pure (1.6.1)
76
+ launchy (2.0.5)
77
+ addressable (~> 2.2.6)
78
+ linecache (0.46)
79
+ rbx-require-relative (> 0.0.4)
80
+ linecache19 (0.5.12)
81
+ ruby_core_source (>= 0.1.4)
82
+ mail (2.3.0)
83
+ i18n (>= 0.4.0)
84
+ mime-types (~> 1.16)
85
+ treetop (~> 1.4.8)
86
+ mime-types (1.16)
87
+ multi_json (1.0.3)
88
+ nokogiri (1.5.0)
89
+ polyglot (0.3.2)
90
+ rack (1.3.3)
91
+ rack-cache (1.1)
92
+ rack (>= 0.4)
93
+ rack-mount (0.8.3)
94
+ rack (>= 1.0.0)
95
+ rack-ssl (1.3.2)
96
+ rack
97
+ rack-test (0.6.1)
98
+ rack (>= 1.0)
99
+ rails (3.1.1)
100
+ actionmailer (= 3.1.1)
101
+ actionpack (= 3.1.1)
102
+ activerecord (= 3.1.1)
103
+ activeresource (= 3.1.1)
104
+ activesupport (= 3.1.1)
105
+ bundler (~> 1.0)
106
+ railties (= 3.1.1)
107
+ railties (3.1.1)
108
+ actionpack (= 3.1.1)
109
+ activesupport (= 3.1.1)
110
+ rack-ssl (~> 1.3.2)
111
+ rake (>= 0.8.7)
112
+ rdoc (~> 3.4)
113
+ thor (~> 0.14.6)
114
+ rake (0.9.2.2)
115
+ rb-appscript (0.6.1)
116
+ rb-fsevent (0.4.3.1)
117
+ rbx-require-relative (0.0.5)
118
+ rdoc (3.10)
119
+ json (~> 1.4)
120
+ redis (2.2.2)
121
+ redis-namespace (1.1.0)
122
+ redis (< 3.0.0)
123
+ rspec (2.6.0)
124
+ rspec-core (~> 2.6.0)
125
+ rspec-expectations (~> 2.6.0)
126
+ rspec-mocks (~> 2.6.0)
127
+ rspec-core (2.6.4)
128
+ rspec-expectations (2.6.0)
129
+ diff-lcs (~> 1.1.2)
130
+ rspec-mocks (2.6.0)
131
+ rspec-rails (2.6.1)
132
+ actionpack (~> 3.0)
133
+ activesupport (~> 3.0)
134
+ railties (~> 3.0)
135
+ rspec (~> 2.6.0)
136
+ ruby-debug (0.10.4)
137
+ columnize (>= 0.1)
138
+ ruby-debug-base (~> 0.10.4.0)
139
+ ruby-debug-base (0.10.4)
140
+ linecache (>= 0.3)
141
+ ruby-debug-base19 (0.11.25)
142
+ columnize (>= 0.3.1)
143
+ linecache19 (>= 0.5.11)
144
+ ruby_core_source (>= 0.1.4)
145
+ ruby-debug19 (0.11.6)
146
+ columnize (>= 0.3.1)
147
+ linecache19 (>= 0.5.11)
148
+ ruby-debug-base19 (>= 0.11.19)
149
+ ruby_core_source (0.1.5)
150
+ archive-tar-minitar (>= 0.5.2)
151
+ rubyzip (0.9.4)
152
+ selenium-webdriver (2.6.0)
153
+ childprocess (>= 0.2.1)
154
+ ffi (>= 1.0.7)
155
+ json_pure
156
+ rubyzip
157
+ sprockets (2.0.2)
158
+ hike (~> 1.2)
159
+ rack (~> 1.0)
160
+ tilt (~> 1.1, != 1.3.0)
161
+ sqlite3 (1.3.4)
162
+ steak (2.0.0)
163
+ capybara (>= 1.0.0)
164
+ rspec-rails (>= 2.5.0)
165
+ thor (0.14.6)
166
+ tilt (1.3.3)
167
+ treetop (1.4.10)
168
+ polyglot
169
+ polyglot (>= 0.3.1)
170
+ tzinfo (0.3.30)
171
+ xpath (0.1.4)
172
+ nokogiri (~> 1.3)
173
+ yard (0.7.3)
174
+
175
+ PLATFORMS
176
+ ruby
177
+
178
+ DEPENDENCIES
179
+ ammeter
180
+ capybara
181
+ database_cleaner
182
+ factory_girl_rails
183
+ growl_notify
184
+ guard
185
+ guard-rspec
186
+ launchy
187
+ rb-fsevent
188
+ rspec
189
+ rspec-rails
190
+ ruby-debug
191
+ ruby-debug19
192
+ seymour!
193
+ sqlite3
194
+ steak
195
+ yard
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :version => 2, :notification => false do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/TODO ADDED
@@ -0,0 +1,7 @@
1
+ # Roadmap
2
+
3
+ * distribution queueing
4
+
5
+ * prerender activity
6
+
7
+ * callbacks (distribution, rendering)
@@ -14,7 +14,7 @@ module Seymour
14
14
  def audience(*names)
15
15
  options = names.extract_options!
16
16
  names.each do |name|
17
- feed_name = options.delete(:feed) || "#{name.downcase.to_s.singularize}_feed".camelize
17
+ feed_name = options.delete(:feed) || "#{name.to_s.downcase.singularize}_feed".camelize
18
18
  audience_mappings[name] = [feed_name, options]
19
19
  end
20
20
  end
@@ -24,7 +24,7 @@ module Seymour
24
24
  end
25
25
 
26
26
  def feed_class_names
27
- audience_mappings.values.map(&:first)
27
+ audience_mappings.values.map(&:first).flatten
28
28
  end
29
29
 
30
30
  def feeds_for(activity)
@@ -34,7 +34,7 @@ module Seymour
34
34
  def distribute(activity)
35
35
  tap_feeds_for(activity) { |feed| feed.push(activity) }
36
36
  end
37
-
37
+
38
38
  def remove(activity)
39
39
  tap_feeds_for(activity) { |feed| feed.remove(activity) }
40
40
  end
@@ -44,11 +44,13 @@ module Seymour
44
44
  def tap_feeds_for(activity, &block)
45
45
  [].tap do |feeds|
46
46
  audience_mappings.each do |audience_name, mapping|
47
- feed_class_name, options = mapping
48
- try_find_each(activity.send(audience_name), options) do |member|
49
- feed = feed_class_name.constantize.new(member)
50
- yield feed if block_given?
51
- feeds << feed
47
+ feed_classes, options = mapping
48
+ [feed_classes].flatten.each do |feed_class_name|
49
+ try_find_each(activity.send(audience_name), options) do |member|
50
+ feed = feed_class_name.constantize.new(member)
51
+ yield feed if block_given?
52
+ feeds << feed
53
+ end
52
54
  end
53
55
  end
54
56
  end
@@ -61,7 +63,7 @@ module Seymour
61
63
  def try_find_each(activity_audience, options = {}, &block)
62
64
  if defined? activity_audience.find_each
63
65
  options[:batch_size] ||= DEFAULT_BATCH_SIZE
64
-
66
+
65
67
  # TODO support exclusive scope
66
68
  # activity_audience.find_each(options) do
67
69
  # relation.send(:with_exclusive_scope) &block
@@ -27,8 +27,14 @@ module Seymour
27
27
  redis.lrange(key, 0, max_size).map{|id| id.to_i }
28
28
  end
29
29
 
30
- def push(activity, cmd = :lpush)
31
- perform_push(activity.id, cmd) if should_push?(activity)
30
+ def push(activity)
31
+ perform_push(activity.id) if should_push?(activity)
32
+ end
33
+
34
+ def bulk_push(activities)
35
+ activities.each do |activity|
36
+ push(activity)
37
+ end
32
38
  end
33
39
 
34
40
  def remove(activity)
@@ -39,15 +45,19 @@ module Seymour
39
45
  redis.lrem(key, 0, activity_id)
40
46
  end
41
47
 
42
- def insert_and_order(activities)
43
- ids = (activity_ids.map(&:to_i) + activities.map(&:id)).sort.uniq
48
+ def sort!(options = {})
49
+ sort({ :order => "DESC", :store => key }.merge(options)) # replaces itself with sorted list
50
+ end
44
51
 
45
- remove_all
52
+ def sort(options = {})
53
+ redis.sort(key, options)
54
+ end
46
55
 
47
- ids.each do |id|
48
- perform_push(id)
49
- end
56
+ def sorted_push(activities)
57
+ bulk_push(activities)
58
+ sort!
50
59
  end
60
+ alias_method :insert_and_order, :sorted_push
51
61
 
52
62
  protected
53
63
 
@@ -80,11 +90,11 @@ module Seymour
80
90
  end
81
91
 
82
92
  def should_push?(activity)
83
- true
93
+ !activity_ids.include?(activity.id)
84
94
  end
85
95
 
86
- def perform_push(activity_id, cmd = :lpush)
87
- redis.send(cmd, key, activity_id)
96
+ def perform_push(id)
97
+ redis.lpush(key, id)
88
98
  redis.ltrim(key, 0, max_size)
89
99
  end
90
100
  end
@@ -1,3 +1,3 @@
1
1
  module Seymour
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ # Maintain your gem's version:
5
+ require "seymour/version"
6
+
7
+ # Describe your gem and declare its dependencies:
8
+ Gem::Specification.new do |s|
9
+ s.name = "seymour"
10
+ s.version = Seymour::VERSION
11
+ s.authors = ["Ross Kaffenberger"]
12
+ s.email = ["rosskaff@gmail.com"]
13
+ s.homepage = ""
14
+ s.summary = %q{Feed me activities, Seymour, please!}
15
+ s.description = %q{Activity feed distribution for Rails applications}
16
+
17
+ s.require_paths = ["lib"]
18
+ s.files = `git ls-files`.split("\n")
19
+ # s.files = Dir["{lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.md"]
20
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
21
+ # s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+
23
+ s.add_dependency "rails", "~> 3.0"
24
+ s.add_dependency "redis-namespace"
25
+
26
+ s.add_development_dependency "rspec"
27
+ s.add_development_dependency "rspec-rails"
28
+ s.add_development_dependency 'steak'
29
+ s.add_development_dependency 'capybara'
30
+ s.add_development_dependency 'ammeter'
31
+ s.add_development_dependency 'database_cleaner'
32
+ s.add_development_dependency 'factory_girl_rails'
33
+ s.add_development_dependency "sqlite3"
34
+ end
@@ -1,6 +1,6 @@
1
1
  # Be sure to restart your server when you modify this file.
2
2
 
3
- Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
3
+ Dummy::Application.config.session_store :cookie_store, :key => '_dummy_session'
4
4
 
5
5
  # Use the database for sessions instead of the cookie-based default,
6
6
  # which shouldn't be used to store highly confidential information
@@ -5,7 +5,7 @@
5
5
 
6
6
  # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
7
  ActiveSupport.on_load(:action_controller) do
8
- wrap_parameters format: [:json]
8
+ wrap_parameters :format => [:json]
9
9
  end
10
10
 
11
11
  # Disable root element in JSON by default.
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # This file is auto-generated from the current state of the database. Instead
3
2
  # of editing this file, please use the migrations feature of Active Record to
4
3
  # incrementally modify your database, and then regenerate this schema definition.
@@ -5,10 +5,19 @@ describe Seymour::Distributable do
5
5
  class DistributableActivity
6
6
  include Seymour::Distributable
7
7
  audience :users, :admin
8
- audience :events, :batch_size => 100
8
+ audience :events, :batch_size => 100
9
9
  audience :soccer_teams, :feed => "TeamFeed"
10
+ audience :followers, :feed => %w[ DashboardFeed EmailDigest ]
10
11
 
11
- attr_accessor :users, :admin, :soccer_teams, :events
12
+ AUDIENCES = [:users, :admin, :soccer_teams, :events, :followers]
13
+
14
+ AUDIENCES.each do |audience_name|
15
+ attr_writer audience_name
16
+
17
+ define_method(audience_name) do
18
+ instance_variable_get("@#{audience_name}") || []
19
+ end
20
+ end
12
21
  end
13
22
 
14
23
  describe "class methods" do
@@ -29,14 +38,18 @@ describe Seymour::Distributable do
29
38
  feed_class_names.should include('EventFeed')
30
39
  end
31
40
 
41
+ it "should support multiple feeds for an audience" do
42
+ DistributableActivity.audience_names.should include(:followers)
43
+ DistributableActivity.feed_class_names.should include("DashboardFeed")
44
+ DistributableActivity.feed_class_names.should include("EmailDigest")
45
+ end
46
+
32
47
  end
33
48
 
34
49
  describe "feeding" do
35
50
  let(:activity) { DistributableActivity.new }
36
51
 
37
52
  before(:each) do
38
- activity.soccer_teams = []
39
- activity.events = []
40
53
  @user = mock_model(User)
41
54
  @admin = mock_model(User)
42
55
  activity.users = [@user]
@@ -56,6 +56,27 @@ describe Seymour::Feed do
56
56
  feed.activity_ids.should == [123]
57
57
  new_feed.activity_ids.should == [456]
58
58
  end
59
+
60
+ end
61
+
62
+ describe "bulk_push" do
63
+ it "should accept multiple values" do
64
+ feed.bulk_push [mock_model(Activity, :id => 123), mock_model(Activity, :id => 456)]
65
+ feed.activity_ids.should == [456, 123]
66
+ end
67
+
68
+ it "should not append duplicates" do
69
+ feed.bulk_push [mock_model(Activity, :id => 123), mock_model(Activity, :id => 456), mock_model(Activity, :id => 123)]
70
+ feed.activity_ids.should == [456, 123]
71
+ end
72
+ end
73
+
74
+ describe "sort" do
75
+ it "should sort list in desc order by default" do
76
+ feed.bulk_push [mock_model(Activity, :id => 456), mock_model(Activity, :id => 123)]
77
+ feed.sort!
78
+ feed.activity_ids.should == [456, 123]
79
+ end
59
80
  end
60
81
 
61
82
  describe "insert_and_order" do
@@ -77,7 +98,7 @@ describe Seymour::Feed do
77
98
  feed.activity_ids.should == [789, 456, 234, 123]
78
99
  end
79
100
 
80
- it "should remove duplicates" do
101
+ it "should not allow duplicates" do
81
102
  feed.push mock_model(Activity, :id => 123)
82
103
  feed.push mock_model(Activity, :id => 456)
83
104
 
metadata CHANGED
@@ -1,138 +1,187 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: seymour
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 6
10
+ version: 0.0.6
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Ross Kaffenberger
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-10-25 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rails
16
- requirement: &70116777384080 !ruby/object:Gem::Requirement
17
+
18
+ date: 2011-10-25 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
22
  none: false
18
- requirements:
23
+ requirements:
19
24
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '3.0'
25
+ - !ruby/object:Gem::Version
26
+ hash: 7
27
+ segments:
28
+ - 3
29
+ - 0
30
+ version: "3.0"
31
+ requirement: *id001
32
+ prerelease: false
33
+ name: rails
22
34
  type: :runtime
35
+ - !ruby/object:Gem::Dependency
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ requirement: *id002
23
46
  prerelease: false
24
- version_requirements: *70116777384080
25
- - !ruby/object:Gem::Dependency
26
47
  name: redis-namespace
27
- requirement: &70116777383560 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
48
  type: :runtime
49
+ - !ruby/object:Gem::Dependency
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ requirement: *id003
34
60
  prerelease: false
35
- version_requirements: *70116777383560
36
- - !ruby/object:Gem::Dependency
37
61
  name: rspec
38
- requirement: &70116777383100 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
44
62
  type: :development
63
+ - !ruby/object:Gem::Dependency
64
+ version_requirements: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ requirement: *id004
45
74
  prerelease: false
46
- version_requirements: *70116777383100
47
- - !ruby/object:Gem::Dependency
48
75
  name: rspec-rails
49
- requirement: &70116777382580 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
76
  type: :development
77
+ - !ruby/object:Gem::Dependency
78
+ version_requirements: &id005 !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ requirement: *id005
56
88
  prerelease: false
57
- version_requirements: *70116777382580
58
- - !ruby/object:Gem::Dependency
59
89
  name: steak
60
- requirement: &70116777382160 !ruby/object:Gem::Requirement
61
- none: false
62
- requirements:
63
- - - ! '>='
64
- - !ruby/object:Gem::Version
65
- version: '0'
66
90
  type: :development
91
+ - !ruby/object:Gem::Dependency
92
+ version_requirements: &id006 !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ requirement: *id006
67
102
  prerelease: false
68
- version_requirements: *70116777382160
69
- - !ruby/object:Gem::Dependency
70
103
  name: capybara
71
- requirement: &70116777381700 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
104
  type: :development
105
+ - !ruby/object:Gem::Dependency
106
+ version_requirements: &id007 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ hash: 3
112
+ segments:
113
+ - 0
114
+ version: "0"
115
+ requirement: *id007
78
116
  prerelease: false
79
- version_requirements: *70116777381700
80
- - !ruby/object:Gem::Dependency
81
117
  name: ammeter
82
- requirement: &70116777381280 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ! '>='
86
- - !ruby/object:Gem::Version
87
- version: '0'
88
118
  type: :development
119
+ - !ruby/object:Gem::Dependency
120
+ version_requirements: &id008 !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ hash: 3
126
+ segments:
127
+ - 0
128
+ version: "0"
129
+ requirement: *id008
89
130
  prerelease: false
90
- version_requirements: *70116777381280
91
- - !ruby/object:Gem::Dependency
92
131
  name: database_cleaner
93
- requirement: &70116777380840 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
132
  type: :development
133
+ - !ruby/object:Gem::Dependency
134
+ version_requirements: &id009 !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ hash: 3
140
+ segments:
141
+ - 0
142
+ version: "0"
143
+ requirement: *id009
100
144
  prerelease: false
101
- version_requirements: *70116777380840
102
- - !ruby/object:Gem::Dependency
103
145
  name: factory_girl_rails
104
- requirement: &70116777380280 !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
146
  type: :development
147
+ - !ruby/object:Gem::Dependency
148
+ version_requirements: &id010 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ hash: 3
154
+ segments:
155
+ - 0
156
+ version: "0"
157
+ requirement: *id010
111
158
  prerelease: false
112
- version_requirements: *70116777380280
113
- - !ruby/object:Gem::Dependency
114
159
  name: sqlite3
115
- requirement: &70116777379860 !ruby/object:Gem::Requirement
116
- none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
160
  type: :development
122
- prerelease: false
123
- version_requirements: *70116777379860
124
161
  description: Activity feed distribution for Rails applications
125
- email:
162
+ email:
126
163
  - rosskaff@gmail.com
127
164
  executables: []
165
+
128
166
  extensions: []
167
+
129
168
  extra_rdoc_files: []
130
- files:
169
+
170
+ files:
171
+ - .gitignore
172
+ - CHANGELOG.md
173
+ - Gemfile
174
+ - Gemfile.lock
175
+ - Guardfile
176
+ - MIT-LICENSE
177
+ - README.md
178
+ - Rakefile
179
+ - TODO
180
+ - lib/generators/seymour/feed/USAGE
131
181
  - lib/generators/seymour/feed/feed_generator.rb
132
182
  - lib/generators/seymour/feed/templates/feed.rb
133
- - lib/generators/seymour/feed/USAGE
183
+ - lib/seymour.rb
134
184
  - lib/seymour/acts_as_activity.rb
135
- - lib/seymour/batched_user_enumerator.rb
136
185
  - lib/seymour/distributable.rb
137
186
  - lib/seymour/engine.rb
138
187
  - lib/seymour/feed.rb
@@ -140,11 +189,8 @@ files:
140
189
  - lib/seymour/render_controller.rb
141
190
  - lib/seymour/renderable.rb
142
191
  - lib/seymour/version.rb
143
- - lib/seymour.rb
144
192
  - lib/tasks/seymour_tasks.rake
145
- - MIT-LICENSE
146
- - Rakefile
147
- - README.md
193
+ - seymour.gemspec
148
194
  - spec/dummy/Rakefile
149
195
  - spec/dummy/app/assets/javascripts/application.js
150
196
  - spec/dummy/app/assets/stylesheets/application.css
@@ -207,97 +253,39 @@ files:
207
253
  - spec/spec_helper.rb
208
254
  - spec/support/capybara.rb
209
255
  - spec/support/redis.rb
210
- homepage: ''
256
+ homepage: ""
211
257
  licenses: []
258
+
212
259
  post_install_message:
213
260
  rdoc_options: []
214
- require_paths:
261
+
262
+ require_paths:
215
263
  - lib
216
- required_ruby_version: !ruby/object:Gem::Requirement
264
+ required_ruby_version: !ruby/object:Gem::Requirement
217
265
  none: false
218
- requirements:
219
- - - ! '>='
220
- - !ruby/object:Gem::Version
221
- version: '0'
222
- segments:
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ hash: 3
270
+ segments:
223
271
  - 0
224
- hash: 2439215403903201446
225
- required_rubygems_version: !ruby/object:Gem::Requirement
272
+ version: "0"
273
+ required_rubygems_version: !ruby/object:Gem::Requirement
226
274
  none: false
227
- requirements:
228
- - - ! '>='
229
- - !ruby/object:Gem::Version
230
- version: '0'
231
- segments:
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ hash: 3
279
+ segments:
232
280
  - 0
233
- hash: 2439215403903201446
281
+ version: "0"
234
282
  requirements: []
283
+
235
284
  rubyforge_project:
236
285
  rubygems_version: 1.8.10
237
286
  signing_key:
238
287
  specification_version: 3
239
288
  summary: Feed me activities, Seymour, please!
240
- test_files:
241
- - spec/dummy/Rakefile
242
- - spec/dummy/app/assets/javascripts/application.js
243
- - spec/dummy/app/assets/stylesheets/application.css
244
- - spec/dummy/app/controllers/application_controller.rb
245
- - spec/dummy/app/helpers/application_helper.rb
246
- - spec/dummy/app/mailers/.gitkeep
247
- - spec/dummy/app/models/.gitkeep
248
- - spec/dummy/app/models/activities/comment_activity.rb
249
- - spec/dummy/app/models/activities/ignored_activity.rb
250
- - spec/dummy/app/models/activities/test_activity.rb
251
- - spec/dummy/app/models/activity.rb
252
- - spec/dummy/app/models/comment.rb
253
- - spec/dummy/app/models/event.rb
254
- - spec/dummy/app/models/feeds/test_feed.rb
255
- - spec/dummy/app/models/user.rb
256
- - spec/dummy/app/views/activities/_activity.html.erb
257
- - spec/dummy/app/views/activities/_test_activity.html.erb
258
- - spec/dummy/app/views/layouts/application.html.erb
259
- - spec/dummy/config.ru
260
- - spec/dummy/config/application.rb
261
- - spec/dummy/config/boot.rb
262
- - spec/dummy/config/database.yml
263
- - spec/dummy/config/environment.rb
264
- - spec/dummy/config/environments/development.rb
265
- - spec/dummy/config/environments/production.rb
266
- - spec/dummy/config/environments/test.rb
267
- - spec/dummy/config/initializers/backtrace_silencers.rb
268
- - spec/dummy/config/initializers/inflections.rb
269
- - spec/dummy/config/initializers/mime_types.rb
270
- - spec/dummy/config/initializers/secret_token.rb
271
- - spec/dummy/config/initializers/session_store.rb
272
- - spec/dummy/config/initializers/wrap_parameters.rb
273
- - spec/dummy/config/locales/en.yml
274
- - spec/dummy/config/routes.rb
275
- - spec/dummy/db/migrate/20111014120230_create_activities.rb
276
- - spec/dummy/db/migrate/20111014120251_create_users.rb
277
- - spec/dummy/db/migrate/20111014120336_create_events.rb
278
- - spec/dummy/db/migrate/20111015001158_create_comments.rb
279
- - spec/dummy/db/schema.rb
280
- - spec/dummy/lib/assets/.gitkeep
281
- - spec/dummy/lib/seymour/admin_feed.rb
282
- - spec/dummy/lib/seymour/event_feed.rb
283
- - spec/dummy/lib/seymour/player_feed.rb
284
- - spec/dummy/lib/seymour/user_feed.rb
285
- - spec/dummy/log/.gitkeep
286
- - spec/dummy/public/404.html
287
- - spec/dummy/public/422.html
288
- - spec/dummy/public/500.html
289
- - spec/dummy/public/favicon.ico
290
- - spec/dummy/script/rails
291
- - spec/dummy/spec/factories.rb
292
- - spec/generators/seymour/feed/feed_generator_spec.rb
293
- - spec/redis-spec.conf
294
- - spec/seymour/distributable_spec.rb
295
- - spec/seymour/dummy/test_activity_spec.rb
296
- - spec/seymour/feed_spec.rb
297
- - spec/seymour/redis_spec.rb
298
- - spec/seymour/renderable_spec.rb
299
- - spec/seymour_spec.rb
300
- - spec/spec_helper.rb
301
- - spec/support/capybara.rb
302
- - spec/support/redis.rb
289
+ test_files: []
290
+
303
291
  has_rdoc:
@@ -1,21 +0,0 @@
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