streama 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,8 +4,14 @@
4
4
 
5
5
  Streama is a simple Ruby activity stream gem for use with the Mongoid ODM framework.
6
6
 
7
+ It works by posting to and querying from a firehose of individual activity items.
8
+
7
9
  [![travis](https://secure.travis-ci.org/christospappas/streama.png)](http://travis-ci.org/christospappas/streama)
8
10
 
11
+ ## Project Tracking
12
+
13
+ * [Streama Google Group](http://groups.google.com/group/streama)
14
+
9
15
  ## Install
10
16
 
11
17
  gem install streama
@@ -88,17 +94,30 @@ current_user.publish_activity(:new_photo, :object => @photo, :target_object => @
88
94
 
89
95
  ## Retrieving Activity
90
96
 
91
- To retrieve all activity for an actor
97
+ To retrieve the activity stream for an actor
92
98
 
93
99
  ``` ruby
94
100
  current_user.activity_stream
95
101
  ```
96
102
 
97
- To retrieve and filter to a particular activity type
103
+ To retrieve the activity stream and filter by activity type
98
104
 
99
105
  ``` ruby
100
106
  current_user.activity_stream(:type => :activity_verb)
101
107
  ```
108
+
109
+ To retrieve all activities published by an actor
110
+
111
+ ``` ruby
112
+ current_user.published_activities
113
+ ```
114
+
115
+ To retrieve all activities published by an actor and filtered by activity type
116
+
117
+ ``` ruby
118
+ current_user.published_activities(:type => :activity_verb)
119
+ ```
120
+
102
121
  If you need to return the instance of an :actor, :object or :target_object from an activity call the Activity#load_instance method
103
122
 
104
123
  ``` ruby
@@ -60,6 +60,12 @@ module Streama
60
60
  query.merge!({:verb => options[:type]}) if options[:type]
61
61
  self.where(query).without(:receivers).desc(:created_at)
62
62
  end
63
+
64
+ def stream_of(actor, options={})
65
+ query = {'actor.id' => actor.id, 'actor.type' => actor.class.to_s}
66
+ query.merge!({:verb => options[:type]}) if options[:type]
67
+ self.where(query).without(:receivers).desc(:created_at)
68
+ end
63
69
 
64
70
  end
65
71
 
@@ -98,13 +104,13 @@ module Streama
98
104
 
99
105
  class_sym = object.class.name.underscore.to_sym
100
106
 
101
- raise Streama::InvalidData.new(class_sym) unless definition.send(type).has_key?(class_sym)
107
+ raise Errors::InvalidData.new(class_sym) unless definition.send(type).has_key?(class_sym)
102
108
 
103
109
  hash = {'id' => object.id, 'type' => object.class.name}
104
110
 
105
111
  if fields = definition.send(type)[class_sym].try(:[],:cache)
106
112
  fields.each do |field|
107
- raise Streama::InvalidField.new(field) unless object.respond_to?(field)
113
+ raise Errors::InvalidField.new(field) unless object.respond_to?(field)
108
114
  hash[field.to_s] = object.send(field)
109
115
  end
110
116
  end
data/lib/streama/actor.rb CHANGED
@@ -4,6 +4,8 @@ module Streama
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ raise Errors::NotMongoid, "Must be included in a Mongoid::Document" unless self.ancestors.include? Mongoid::Document
8
+
7
9
  cattr_accessor :activity_klass
8
10
  end
9
11
 
@@ -31,6 +33,10 @@ module Streama
31
33
  activity_class.stream_for(self, options)
32
34
  end
33
35
 
36
+ def published_activities(options = {})
37
+ activity_class.stream_of(self, options)
38
+ end
39
+
34
40
  def activity_class
35
41
  @activity_klass ||= activity_klass ? activity_klass.classify.constantize : ::Activity
36
42
  end
@@ -32,7 +32,7 @@ module Streama
32
32
 
33
33
  def self.find(name)
34
34
  unless definition = registered.find{|definition| definition.name == name.to_sym}
35
- raise Streama::InvalidActivity, "Could not find a definition for `#{name}`"
35
+ raise Streama::Errors::InvalidActivity, "Could not find a definition for `#{name}`"
36
36
  else
37
37
  definition
38
38
  end
@@ -1,44 +1,51 @@
1
1
  module Streama
2
2
 
3
- class StreamaError < StandardError
4
- end
3
+ module Errors
5
4
 
6
- class InvalidActivity < StreamaError
7
- end
5
+ class StreamaError < StandardError
6
+ end
8
7
 
9
- # This error is raised when an object isn't defined
10
- # as an actor, object or target
11
- #
12
- # Example:
13
- #
14
- # <tt>InvalidField.new('field_name')</tt>
15
- class InvalidData < StreamaError
16
- attr_reader :message
17
-
18
- def initialize message
19
- @message = "Invalid Data: #{message}"
8
+ class InvalidActivity < StreamaError
20
9
  end
21
-
22
- end
23
10
 
24
- # This error is raised when trying to store a field that doesn't exist
25
- #
26
- # Example:
27
- #
28
- # <tt>InvalidField.new('field_name')</tt>
29
- class InvalidField < StreamaError
30
- attr_reader :message
11
+ # This error is raised when an object isn't defined
12
+ # as an actor, object or target
13
+ #
14
+ # Example:
15
+ #
16
+ # <tt>InvalidField.new('field_name')</tt>
17
+ class InvalidData < StreamaError
18
+ attr_reader :message
19
+
20
+ def initialize message
21
+ @message = "Invalid Data: #{message}"
22
+ end
31
23
 
32
- def initialize message
33
- @message = "Invalid Field: #{message}"
34
24
  end
25
+
26
+ # This error is raised when trying to store a field that doesn't exist
27
+ #
28
+ # Example:
29
+ #
30
+ # <tt>InvalidField.new('field_name')</tt>
31
+ class InvalidField < StreamaError
32
+ attr_reader :message
35
33
 
36
- end
34
+ def initialize message
35
+ @message = "Invalid Field: #{message}"
36
+ end
37
+
38
+ end
37
39
 
38
- class ActivityNotSaved < StreamaError
39
- end
40
+ class ActivityNotSaved < StreamaError
41
+ end
42
+
43
+ class NoFollowersDefined < StreamaError
44
+ end
40
45
 
41
- class NoFollowersDefined < StreamaError
46
+ class NotMongoid < StreamaError
47
+ end
48
+
42
49
  end
43
50
 
44
51
  end
@@ -1,3 +1,3 @@
1
1
  module Streama
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
@@ -0,0 +1,10 @@
1
+ class NoMongoid
2
+ include Streama::Actor
3
+
4
+ field :full_name
5
+
6
+ def followers
7
+ self.class.all
8
+ end
9
+
10
+ end
@@ -9,7 +9,7 @@ class User
9
9
  end
10
10
 
11
11
  def followers
12
- User.all
12
+ self.class.all
13
13
  end
14
14
 
15
15
  end
@@ -5,6 +5,10 @@ describe "Actor" do
5
5
  let(:photo) { Photo.create(:comment => "I'm interested") }
6
6
  let(:album) { Album.create(:title => "A test album") }
7
7
  let(:user) { User.create(:full_name => "Christos") }
8
+
9
+ it "raises an exception if the class is not a mongoid document" do
10
+ lambda { NoMongoid.new }.should raise_error Streama::Errors::NotMongoid
11
+ end
8
12
 
9
13
  describe "#publish_activity" do
10
14
  before :each do
@@ -26,20 +30,43 @@ describe "Actor" do
26
30
  describe "#activity_stream" do
27
31
 
28
32
  before :each do
29
- 2.times { |n| User.create(:full_name => "Receiver #{n}") }
30
33
  user.publish_activity(:new_photo, :object => photo, :target_object => album)
31
34
  user.publish_activity(:new_comment, :object => photo)
35
+
36
+ u = User.create(:full_name => "Other User")
37
+ u.publish_activity(:new_photo, :object => photo, :target_object => album)
38
+
32
39
  end
33
40
 
34
41
  it "retrieves the stream for an actor" do
35
- user.activity_stream.size.should eq 2
42
+ user.activity_stream.size.should eq 3
36
43
  end
37
44
 
38
45
  it "retrieves the stream and filters to a particular activity type" do
39
- user.activity_stream(:type => :new_photo).size.should eq 1
46
+ user.activity_stream(:type => :new_photo).size.should eq 2
40
47
  end
41
48
 
42
49
  end
50
+
51
+ describe "#published_activities" do
52
+ before :each do
53
+ user.publish_activity(:new_photo, :object => photo, :target_object => album)
54
+ user.publish_activity(:new_comment, :object => photo)
55
+
56
+ u = User.create(:full_name => "Other User")
57
+ u.publish_activity(:new_photo, :object => photo, :target_object => album)
58
+
59
+ end
60
+
61
+ it "retrieves published activities for the actor" do
62
+ user.published_activities.size.should eq 2
63
+ end
64
+
65
+ it "retrieves and filters published activities by type for the actor" do
66
+ user.published_activities(:type => :new_photo).size.should eq 1
67
+ end
68
+
69
+ end
43
70
 
44
71
 
45
72
  end
@@ -57,7 +57,7 @@ describe "Definition" do
57
57
  end
58
58
 
59
59
  it "raises an exception if invalid activity" do
60
- lambda { Streama::Definition.find(:unknown_activity) }.should raise_error Streama::InvalidActivity
60
+ lambda { Streama::Definition.find(:unknown_activity) }.should raise_error Streama::Errors::InvalidActivity
61
61
  end
62
62
 
63
63
  end
data/spec/spec_helper.rb CHANGED
@@ -9,13 +9,16 @@ $LOAD_PATH.unshift(SUPPORT)
9
9
  require 'streama'
10
10
  require 'mongoid'
11
11
  require 'rspec'
12
-
12
+ require 'database_cleaner'
13
+
13
14
  LOGGER = Logger.new($stdout)
14
15
  DATABASE_ID = Process.pid
15
16
 
17
+ DatabaseCleaner.strategy = :truncation
18
+
16
19
  Mongoid.configure do |config|
17
- database = Mongo::Connection.new.db("mongoid_#{DATABASE_ID}")
18
- database.add_user("mongoid", "test")
20
+ database = Mongo::Connection.new.db("streama_#{DATABASE_ID}")
21
+ database.add_user("streama", "test")
19
22
  config.master = database
20
23
  config.logger = nil
21
24
  end
@@ -35,11 +38,16 @@ RSpec.configure do |config|
35
38
  config.mock_with :rspec
36
39
 
37
40
  config.before(:each) do
41
+ DatabaseCleaner.start
38
42
  Mongoid::IdentityMap.clear
39
43
  end
40
44
 
45
+ config.after(:each) do
46
+ DatabaseCleaner.clean
47
+ end
48
+
41
49
  config.after :suite do
42
- Mongoid.master.connection.drop_database("mongoid_#{DATABASE_ID}")
50
+ Mongoid.master.connection.drop_database("streama_#{DATABASE_ID}")
43
51
  end
44
52
 
45
53
  end
data/streama.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_development_dependency "rspec", "~> 2.5"
22
+ s.add_development_dependency "database_cleaner", "~> 0.8"
22
23
  s.add_development_dependency "mongoid", "~> 2.4"
23
24
  s.add_development_dependency "bson_ext", "~> 1.5"
24
25
  s.add_development_dependency "rake"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: streama
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
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-12 00:00:00.000000000 Z
12
+ date: 2012-06-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70213468334740 !ruby/object:Gem::Requirement
16
+ requirement: &70201716311720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '2.5'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70213468334740
24
+ version_requirements: *70201716311720
25
+ - !ruby/object:Gem::Dependency
26
+ name: database_cleaner
27
+ requirement: &70201716311220 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '0.8'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70201716311220
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: mongoid
27
- requirement: &70213468333820 !ruby/object:Gem::Requirement
38
+ requirement: &70201716310740 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ~>
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '2.4'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70213468333820
46
+ version_requirements: *70201716310740
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: bson_ext
38
- requirement: &70213468332900 !ruby/object:Gem::Requirement
49
+ requirement: &70201716310280 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ~>
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '1.5'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70213468332900
57
+ version_requirements: *70201716310280
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: rake
49
- requirement: &70213468332440 !ruby/object:Gem::Requirement
60
+ requirement: &70201716309880 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,7 +65,7 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70213468332440
68
+ version_requirements: *70201716309880
58
69
  description: Streama is a simple activity stream gem for use with the Mongoid ODM
59
70
  framework
60
71
  email:
@@ -81,6 +92,7 @@ files:
81
92
  - lib/streama/version.rb
82
93
  - spec/app/models/activity.rb
83
94
  - spec/app/models/album.rb
95
+ - spec/app/models/no_mongoid.rb
84
96
  - spec/app/models/photo.rb
85
97
  - spec/app/models/user.rb
86
98
  - spec/lib/activity_spec.rb
@@ -109,13 +121,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
121
  version: '0'
110
122
  requirements: []
111
123
  rubyforge_project: streama
112
- rubygems_version: 1.8.16
124
+ rubygems_version: 1.8.17
113
125
  signing_key:
114
126
  specification_version: 3
115
127
  summary: Activity Streams for Mongoid
116
128
  test_files:
117
129
  - spec/app/models/activity.rb
118
130
  - spec/app/models/album.rb
131
+ - spec/app/models/no_mongoid.rb
119
132
  - spec/app/models/photo.rb
120
133
  - spec/app/models/user.rb
121
134
  - spec/lib/activity_spec.rb