streama 0.3.4 → 0.3.5

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