seymour 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ ## 0.0.9 (2012-9-21)
2
+
3
+ * Bumps to redis-namespace v1.2.1
4
+ * Adds redis-namespace back to gemspec
5
+ * Update development dependencies
6
+
1
7
  ## 0.0.8 (2012-2-06)
2
8
 
3
9
  * travis build status; clean Gemfile dependencies
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
1
  source :rubygems
2
2
 
3
3
  gemspec
4
- gem 'redis-namespace', :git => "git://github.com/defunkt/redis-namespace.git"
5
4
 
6
5
  # Declare any dependencies that are still in development here instead of in
7
6
  # your gemspec. These might include edge Rails or gems from your path or
data/Gemfile.ci CHANGED
@@ -2,3 +2,4 @@ source :rubygems
2
2
 
3
3
  gemspec
4
4
  gem 'redis-namespace', :git => "git://github.com/defunkt/redis-namespace.git"
5
+ gem 'ammeter', :git => "git://github.com/alexrothenberg/ammeter"
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Seymour
2
2
 
3
- Feed me activities, Seymour, please!
3
+ Activities feeds with Redis. Feed me, Seymour, please!
4
4
 
5
- Seymour is a library for distributing activity items to Redis-backed activity feeds
5
+ Seymour is a library for distributing activity items to Redis-backed activity feeds
6
6
  in a Rails application.
7
7
 
8
8
  [![Build Status](https://secure.travis-ci.org/rossta/seymour.png)](http://travis-ci.org/rossta/seymour)
@@ -11,22 +11,3 @@ module Seymour
11
11
 
12
12
  end
13
13
  end
14
- # module Draper
15
- # class DecoratorGenerator < Rails::Generators::NamedBase
16
- # source_root File.expand_path('../templates', __FILE__)
17
- #
18
- # DECORATORS_ROOT = 'app/decorators/'
19
- # APPLICATION_DECORATOR = 'application_decorator.rb'
20
- # APPLICATION_DECORATOR_PATH = DECORATORS_ROOT + APPLICATION_DECORATOR
21
- #
22
- # def build_model_and_application_decorators
23
- # empty_directory "app/decorators"
24
- # unless File.exists?(APPLICATION_DECORATOR_PATH)
25
- # template APPLICATION_DECORATOR, APPLICATION_DECORATOR_PATH
26
- # end
27
- # template 'decorator.rb', "#{DECORATORS_ROOT}#{singular_name}_decorator.rb"
28
- # end
29
- #
30
- # hook_for :test_framework
31
- # end
32
- # end
@@ -47,6 +47,7 @@ module Seymour
47
47
  feed_classes, options = mapping
48
48
  [feed_classes].flatten.each do |feed_class_name|
49
49
  try_find_each(activity.send(audience_name), options) do |member|
50
+
50
51
  feed = feed_class_name.constantize.new(member)
51
52
  yield feed if block_given?
52
53
  feeds << feed
@@ -69,28 +70,29 @@ module Seymour
69
70
  # relation.send(:with_exclusive_scope) &block
70
71
  # end
71
72
  activity_audience.find_each(options, &block)
72
- else
73
+ elsif activity_audience.respond_to?(:each)
73
74
  activity_audience.each &block
75
+ elsif !activity_audience.nil?
76
+ yield activity_audience
74
77
  end
75
78
  end
76
79
 
77
80
  end
78
81
 
79
- module InstanceMethods
82
+ # instance methods
80
83
 
81
- def distribute
82
- self.class.distribute(self)
83
- end
84
-
85
- def remove
86
- self.class.remove(self)
87
- end
84
+ def distribute
85
+ self.class.distribute(self)
86
+ end
88
87
 
89
- def feeds
90
- self.class.feeds_for(self)
91
- end
88
+ def remove
89
+ self.class.remove(self)
90
+ end
92
91
 
92
+ def feeds
93
+ self.class.feeds_for(self)
93
94
  end
95
+
94
96
  end
95
97
 
96
98
 
@@ -6,31 +6,26 @@ module Seymour
6
6
  module Renderable
7
7
  extend ActiveSupport::Concern
8
8
 
9
- module InstanceMethods
10
-
11
- def render_html
12
- render("seymour/render", "activity", "seymour.activity" => self)
13
- rescue RenderError
14
- return nil
15
- end
16
-
17
- def render(controller_name, action_name, env = {})
18
- # TODO define proper server name
19
- # { "REQUEST_URI" => "", "SERVER_NAME" => 'http://www.example.com' }.merge(env))
9
+ def render_html
10
+ render("seymour/render", "activity", "seymour.activity" => self)
11
+ rescue RenderError
12
+ return nil
13
+ end
20
14
 
21
- env = Rack::MockRequest.env_for("/",
22
- { "REQUEST_URI" => "", "SERVER_NAME" => '' }.merge(env))
15
+ def render(controller_name, action_name, env = {})
16
+ # TODO define proper server name
17
+ # { "REQUEST_URI" => "", "SERVER_NAME" => 'http://www.example.com' }.merge(env))
23
18
 
24
- controller_class = "#{controller_name}_controller".classify.constantize
19
+ env = Rack::MockRequest.env_for("/",
20
+ { "REQUEST_URI" => "", "SERVER_NAME" => '' }.merge(env))
25
21
 
26
- status, headers, response = controller_class.action(action_name.to_sym).call(env)
27
- raise RenderError.new("#{controller_name}##{action_name}") unless status.to_i == 200
28
- response.body
29
- end
22
+ controller_class = "#{controller_name}_controller".classify.constantize
30
23
 
24
+ status, headers, response = controller_class.action(action_name.to_sym).call(env)
25
+ raise RenderError.new("#{controller_name}##{action_name}") unless status.to_i == 200
26
+ response.body
31
27
  end
32
28
 
33
-
34
29
  end
35
30
 
36
31
  end
@@ -1,3 +1,3 @@
1
1
  module Seymour
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -21,12 +21,12 @@ Gem::Specification.new do |s|
21
21
  # s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
22
 
23
23
  s.add_dependency "rails", "~> 3.0"
24
- # s.add_dependency "redis-namespace"
24
+ s.add_dependency "redis-namespace"
25
25
 
26
- s.add_development_dependency "rspec-rails", '~> 2.8.0'
27
- s.add_development_dependency 'capybara', '~> 1.1.0'
28
- s.add_development_dependency 'ammeter', '~> 0.2.0'
29
- s.add_development_dependency 'database_cleaner', '~> 0.7.1'
30
- s.add_development_dependency 'factory_girl_rails', '~> 1.2.0'
26
+ s.add_development_dependency "rspec-rails"
27
+ s.add_development_dependency 'capybara'
28
+ s.add_development_dependency 'database_cleaner'
29
+ s.add_development_dependency 'factory_girl_rails'
31
30
  s.add_development_dependency "sqlite3"
31
+ s.add_development_dependency 'ammeter'
32
32
  end
@@ -0,0 +1,13 @@
1
+ FactoryGirl.define do
2
+ factory :user do |f|
3
+ f.name "Bob"
4
+ end
5
+
6
+ factory :comment do |f|
7
+ f.author { FactoryGirl.create(:user) }
8
+ end
9
+
10
+ factory :test_activity do |f|
11
+ f.actor { FactoryGirl.create(:user) }
12
+ end
13
+ end
@@ -8,16 +8,23 @@ describe Seymour::Distributable do
8
8
  audience :events, :batch_size => 100
9
9
  audience :soccer_teams, :feed => "TeamFeed"
10
10
  audience :followers, :feed => %w[ DashboardFeed EmailDigest ]
11
+ audience :for_one, :feed => "UserFeed"
11
12
 
12
- AUDIENCES = [:users, :admin, :soccer_teams, :events, :followers]
13
+ GROUP_AUDIENCES = [:users, :admin, :soccer_teams, :events, :followers]
13
14
 
14
- AUDIENCES.each do |audience_name|
15
+ GROUP_AUDIENCES.each do |audience_name|
15
16
  attr_writer audience_name
16
17
 
17
18
  define_method(audience_name) do
18
19
  instance_variable_get("@#{audience_name}") || []
19
20
  end
20
21
  end
22
+
23
+ attr_writer :for_one
24
+ def for_one
25
+ @for_one || nil
26
+ end
27
+
21
28
  end
22
29
 
23
30
  describe "class methods" do
@@ -28,6 +35,8 @@ describe Seymour::Distributable do
28
35
  audience_names.should include(:admin)
29
36
  audience_names.should include(:soccer_teams)
30
37
  audience_names.should include(:events)
38
+ audience_names.should include(:followers)
39
+ audience_names.should include(:for_one)
31
40
  end
32
41
 
33
42
  it "should list activity feed classes" do
@@ -57,17 +66,17 @@ describe Seymour::Distributable do
57
66
  end
58
67
 
59
68
  describe "feeds_for" do
60
- it "should build feed for each audience member" do
69
+ it "builds feed for each audience member" do
61
70
  DistributableActivity.feeds_for(activity).size.should == 2
62
71
  end
63
72
 
64
- it "should return all assigned feed types" do
73
+ it "returns all assigned feed types" do
65
74
  feed_classes = DistributableActivity.feeds_for(activity).map(&:class)
66
75
  feed_classes.should include(UserFeed)
67
76
  feed_classes.should include(AdminFeed)
68
77
  end
69
78
 
70
- it "should assign owners to correct feed type" do
79
+ it "assigns owners to correct feed type" do
71
80
  feeds = DistributableActivity.feeds_for(activity)
72
81
  user_feed = feeds.detect { |feed| feed.is_a?(UserFeed) }
73
82
  admin_feed = feeds.detect { |feed| feed.is_a?(AdminFeed) }
@@ -76,17 +85,28 @@ describe Seymour::Distributable do
76
85
  admin_feed.owner.should == @admin
77
86
  end
78
87
 
79
- it "should use default batch size if iterating on arel scope" do
88
+ it "uses default batch size if iterating on arel scope" do
80
89
  activity.users = User.scoped
81
90
  activity.users.should_receive(:find_each).with(:batch_size => 500)
82
91
  DistributableActivity.feeds_for(activity)
83
92
  end
84
93
 
85
- it "should use specified batch size if iterating on arel scope" do
94
+ it "uses specified batch size if iterating on arel scope" do
86
95
  activity.events = Event.scoped
87
96
  activity.events.should_receive(:find_each).with(:batch_size => 100)
88
97
  DistributableActivity.feeds_for(activity)
89
98
  end
99
+
100
+ it "returns feed for non-enumerable audience (of one)" do
101
+ activity.users = []
102
+ activity.admin = []
103
+ activity.for_one = @user
104
+ feeds = DistributableActivity.feeds_for(activity)
105
+ feeds.size.should == 1
106
+ feeds.map(&:class).should include(UserFeed)
107
+ feeds.map(&:owner).should include(@user)
108
+ end
109
+
90
110
  end
91
111
  end
92
112
 
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe "TestActivity" do
4
4
 
5
5
  describe "TestActivity in dummy app" do
6
- let(:activity) { Factory(:test_activity) }
6
+ let(:activity) { FactoryGirl.create(:test_activity) }
7
7
  let(:user) { activity.actor }
8
8
 
9
9
  describe "render_html" do
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.8
4
+ version: 0.0.9
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: 2012-02-07 00:00:00.000000000Z
12
+ date: 2012-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70364335980540 !ruby/object:Gem::Requirement
16
+ requirement: &70212259063200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,65 +21,76 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70364335980540
24
+ version_requirements: *70212259063200
25
25
  - !ruby/object:Gem::Dependency
26
- name: rspec-rails
27
- requirement: &70364335979780 !ruby/object:Gem::Requirement
26
+ name: redis-namespace
27
+ requirement: &70212259078560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - ~>
30
+ - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 2.8.0
33
- type: :development
32
+ version: '0'
33
+ type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70364335979780
35
+ version_requirements: *70212259078560
36
36
  - !ruby/object:Gem::Dependency
37
- name: capybara
38
- requirement: &70364335979220 !ruby/object:Gem::Requirement
37
+ name: rspec-rails
38
+ requirement: &70212259076840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
- - - ~>
41
+ - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
- version: 1.1.0
43
+ version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70364335979220
46
+ version_requirements: *70212259076840
47
47
  - !ruby/object:Gem::Dependency
48
- name: ammeter
49
- requirement: &70364335978720 !ruby/object:Gem::Requirement
48
+ name: capybara
49
+ requirement: &70212259074960 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
- - - ~>
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.2.0
54
+ version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70364335978720
57
+ version_requirements: *70212259074960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: database_cleaner
60
- requirement: &70364335975300 !ruby/object:Gem::Requirement
60
+ requirement: &70212259073280 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
- - - ~>
63
+ - - ! '>='
64
64
  - !ruby/object:Gem::Version
65
- version: 0.7.1
65
+ version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70364335975300
68
+ version_requirements: *70212259073280
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl_rails
71
- requirement: &70364335974740 !ruby/object:Gem::Requirement
71
+ requirement: &70212259085340 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
- - - ~>
74
+ - - ! '>='
75
75
  - !ruby/object:Gem::Version
76
- version: 1.2.0
76
+ version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70364335974740
79
+ version_requirements: *70212259085340
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sqlite3
82
- requirement: &70364335974340 !ruby/object:Gem::Requirement
82
+ requirement: &70212259083120 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70212259083120
91
+ - !ruby/object:Gem::Dependency
92
+ name: ammeter
93
+ requirement: &70212259082400 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,7 +98,7 @@ dependencies:
87
98
  version: '0'
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *70364335974340
101
+ version_requirements: *70212259082400
91
102
  description: Activity feed distribution for Rails applications
92
103
  email:
93
104
  - rosskaff@gmail.com
@@ -174,7 +185,7 @@ files:
174
185
  - spec/dummy/public/500.html
175
186
  - spec/dummy/public/favicon.ico
176
187
  - spec/dummy/script/rails
177
- - spec/dummy/spec/factories.rb
188
+ - spec/factories/factories.rb
178
189
  - spec/generators/seymour/feed/feed_generator_spec.rb
179
190
  - spec/redis-spec.conf
180
191
  - spec/seymour/distributable_spec.rb
@@ -200,7 +211,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
211
  version: '0'
201
212
  segments:
202
213
  - 0
203
- hash: 3725206422773974737
214
+ hash: 2321509907141063680
204
215
  required_rubygems_version: !ruby/object:Gem::Requirement
205
216
  none: false
206
217
  requirements:
@@ -209,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
220
  version: '0'
210
221
  segments:
211
222
  - 0
212
- hash: 3725206422773974737
223
+ hash: 2321509907141063680
213
224
  requirements: []
214
225
  rubyforge_project:
215
226
  rubygems_version: 1.8.10
@@ -1,11 +0,0 @@
1
- Factory.define :user do |f|
2
- f.name "Bob"
3
- end
4
-
5
- Factory.define :comment do |f|
6
- f.author { Factory(:user) }
7
- end
8
-
9
- Factory.define :test_activity do |f|
10
- f.actor { Factory(:user) }
11
- end