seymour 0.0.8 → 0.0.9

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.
@@ -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