social_stream 0.27.3 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- data/base/app/models/activity.rb +4 -2
- data/base/app/models/activity_action.rb +3 -2
- data/base/app/models/activity_object.rb +17 -10
- data/base/app/models/actor.rb +14 -1
- data/base/app/models/comment.rb +24 -0
- data/base/app/views/activities/_comments.html.erb +3 -1
- data/base/db/migrate/20120621135650_add_comment_count_to_activity_object.rb +24 -0
- data/base/db/migrate/20120627115244_fix_activity_object_follower_count.rb +17 -0
- data/base/lib/social_stream/base/version.rb +1 -1
- data/base/social_stream-base.gemspec +1 -1
- data/base/spec/integration/activity.rb +15 -0
- data/base/spec/models/activity_action_spec.rb +8 -0
- data/documents/lib/social_stream/documents/version.rb +1 -1
- data/documents/social_stream-documents.gemspec +1 -1
- data/events/app/assets/stylesheets/events.css.scss +2 -1
- data/events/lib/social_stream/events/version.rb +1 -1
- data/events/social_stream-events.gemspec +1 -1
- data/lib/social_stream/version.rb +1 -1
- data/linkser/lib/social_stream/linkser/version.rb +1 -1
- data/linkser/social_stream-linkser.gemspec +1 -1
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/social_stream-presence.gemspec +1 -1
- data/social_stream.gemspec +5 -5
- metadata +15 -12
data/base/app/models/activity.rb
CHANGED
@@ -182,12 +182,14 @@ class Activity < ActiveRecord::Base
|
|
182
182
|
|
183
183
|
# The first activity object of this activity
|
184
184
|
def direct_activity_object
|
185
|
-
|
185
|
+
@direct_activity_object ||=
|
186
|
+
activity_objects.first
|
186
187
|
end
|
187
188
|
|
188
189
|
# The first object of this activity
|
189
190
|
def direct_object
|
190
|
-
|
191
|
+
@direct_object ||=
|
192
|
+
direct_activity_object.try(:object)
|
191
193
|
end
|
192
194
|
|
193
195
|
# The title for this activity in the stream
|
@@ -5,8 +5,6 @@ class ActivityAction < ActiveRecord::Base
|
|
5
5
|
belongs_to :actor
|
6
6
|
belongs_to :activity_object
|
7
7
|
|
8
|
-
before_save :change_follower_count
|
9
|
-
|
10
8
|
scope :sent_by, lambda{ |actor|
|
11
9
|
where(:actor_id => Actor.normalize_id(actor))
|
12
10
|
}
|
@@ -27,8 +25,11 @@ class ActivityAction < ActiveRecord::Base
|
|
27
25
|
authored_or_owned.sent_by(subject)
|
28
26
|
}
|
29
27
|
|
28
|
+
|
30
29
|
before_create :follow_by_author_and_owner
|
31
30
|
|
31
|
+
after_save :change_follower_count
|
32
|
+
|
32
33
|
private
|
33
34
|
|
34
35
|
# Updates the follower_count counter in the {ActivityObject}
|
@@ -92,6 +92,21 @@ class ActivityObject < ActiveRecord::Base
|
|
92
92
|
merge(ActivityObjectAudience.where(:relation_id => Relation.ids_shared_with(subject)))
|
93
93
|
}
|
94
94
|
|
95
|
+
# Obtain the {ActivityAction} between this {ActivityObject}
|
96
|
+
# and the {Actor} identified by actor_id
|
97
|
+
def received_action_by(actor_id)
|
98
|
+
received_actions.
|
99
|
+
find{ |a| a.actor_id == actor_id }
|
100
|
+
end
|
101
|
+
|
102
|
+
# Obtain received_action_by(actor_id) or create it if it does
|
103
|
+
# not exist
|
104
|
+
def received_action_by!(actor_id)
|
105
|
+
received_action_by(actor_id) ||
|
106
|
+
received_actions.build(:actor_id => actor_id)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Get the first {ActivityAction} that has activated the role flag
|
95
110
|
def received_role_action(role)
|
96
111
|
received_actions.
|
97
112
|
find{ |a| a.__send__ "#{ role }?" }
|
@@ -106,16 +121,9 @@ class ActivityObject < ActiveRecord::Base
|
|
106
121
|
|
107
122
|
def #{ role }_id=(actor_id) # def author_id=(actor_id)
|
108
123
|
action = # action =
|
109
|
-
|
110
|
-
find{ |a| a.actor_id == actor_id } # select{ |a| a.actor_id == actor_id }
|
124
|
+
received_action_by!(actor_id) # received_action_by!(actor_id)
|
111
125
|
#
|
112
|
-
|
113
|
-
action.#{ role } = true # action.author = true
|
114
|
-
else # else
|
115
|
-
received_actions. # received_actions.
|
116
|
-
build :actor_id => actor_id, # build :actor_id => actor_id,
|
117
|
-
:#{ role } => true # :author => true
|
118
|
-
end # end
|
126
|
+
action.#{ role } = true # action.author = true
|
119
127
|
#
|
120
128
|
actor_id # actor_id
|
121
129
|
end # end
|
@@ -133,7 +141,6 @@ class ActivityObject < ActiveRecord::Base
|
|
133
141
|
def #{ role }_subject # def author_subject
|
134
142
|
#{ role }.subject # author.subject
|
135
143
|
end # end
|
136
|
-
|
137
144
|
EOC
|
138
145
|
|
139
146
|
class_eval code, __FILE__, __LINE__ - code.lines.count - 2
|
data/base/app/models/actor.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# type of a {Tie} is a {Relation}. Each actor can define and customize their relations own
|
6
6
|
# {Relation Relations}.
|
7
7
|
#
|
8
|
-
# Every {Actor} has an Avatar, a {Profile} with personal
|
8
|
+
# Every {Actor} has an Avatar, a {Profile} with personal or group information, contact data, etc.
|
9
9
|
#
|
10
10
|
# {Actor Actors} perform {ActivityAction actions} (like, suscribe, etc.) on
|
11
11
|
# {ActivityObject activity objects} ({Post posts}, {Comment commments}, pictures, events..)
|
@@ -81,6 +81,19 @@ class Actor < ActiveRecord::Base
|
|
81
81
|
:source => :activity_object,
|
82
82
|
:conditions => { 'activity_actions.follow' => true }
|
83
83
|
|
84
|
+
has_many :authored_activities,
|
85
|
+
:class_name => "Activity",
|
86
|
+
:foreign_key => :author_id,
|
87
|
+
:dependent => :destroy
|
88
|
+
has_many :user_authored_activities,
|
89
|
+
:class_name => "Activity",
|
90
|
+
:foreign_key => :user_author_id,
|
91
|
+
:dependent => :destroy
|
92
|
+
has_many :owned_activities,
|
93
|
+
:class_name => "Activity",
|
94
|
+
:foreign_key => :owner_id,
|
95
|
+
:dependent => :destroy
|
96
|
+
|
84
97
|
scope :alphabetic, order('actors.name')
|
85
98
|
|
86
99
|
scope :letter, lambda { |param|
|
data/base/app/models/comment.rb
CHANGED
@@ -4,6 +4,9 @@ class Comment < ActiveRecord::Base
|
|
4
4
|
alias_attribute :text, :description
|
5
5
|
validates_presence_of :text
|
6
6
|
|
7
|
+
after_create :increment_comment_count
|
8
|
+
before_destroy :decrement_comment_count
|
9
|
+
|
7
10
|
define_index do
|
8
11
|
activity_object_index
|
9
12
|
end
|
@@ -15,4 +18,25 @@ class Comment < ActiveRecord::Base
|
|
15
18
|
def title
|
16
19
|
description.truncate(30, :separator =>' ')
|
17
20
|
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# after_create callback
|
25
|
+
#
|
26
|
+
# Increment comment counter in parent's activity_object with a comment
|
27
|
+
def increment_comment_count
|
28
|
+
return if self.post_activity.parent.blank?
|
29
|
+
|
30
|
+
self.post_activity.parent.direct_activity_object.increment!(:comment_count)
|
31
|
+
end
|
32
|
+
|
33
|
+
# before_destroy callback
|
34
|
+
#
|
35
|
+
# Decrement comment counter in parent's activity_object when comment is destroyed
|
36
|
+
def decrement_comment_count
|
37
|
+
return if self.post_activity.blank? || self.post_activity.parent.blank?
|
38
|
+
|
39
|
+
self.post_activity.parent.direct_activity_object.decrement!(:comment_count)
|
40
|
+
end
|
41
|
+
|
18
42
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class AddCommentCountToActivityObject < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :activity_objects, :comment_count, :integer, :default => 0
|
4
|
+
|
5
|
+
ActivityObject.record_timestamps = false
|
6
|
+
ActivityObject.reset_column_information
|
7
|
+
|
8
|
+
ActivityObject.all.each do |ao|
|
9
|
+
parent_activity = ao.activities.first
|
10
|
+
|
11
|
+
# Actors have not parent activities
|
12
|
+
next if parent_activity.blank?
|
13
|
+
|
14
|
+
ao.update_attribute(:comment_count, Activity.includes(:activity_objects).where('activity_objects.object_type' => "Comment").where(:ancestry => [parent_activity.id]).size)
|
15
|
+
end
|
16
|
+
|
17
|
+
ActivityObject.record_timestamps = true
|
18
|
+
ActivityObject.reset_column_information
|
19
|
+
end
|
20
|
+
|
21
|
+
def down
|
22
|
+
remove_column :activity_objects, :comment_count
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Reset follower_count for all the ActivityObjects that are not Actors
|
2
|
+
# See: https://github.com/ging/social_stream/issues/274
|
3
|
+
class FixActivityObjectFollowerCount < ActiveRecord::Migration
|
4
|
+
def up
|
5
|
+
ActivityObject.record_timestamps = false
|
6
|
+
|
7
|
+
ActivityObject.where("object_type != ?", "Actor").all.each do |ao|
|
8
|
+
ao.update_attribute :follower_count, ao.received_actions.where(:follow => true).count
|
9
|
+
end
|
10
|
+
|
11
|
+
ActivityObject.record_timestamps = true
|
12
|
+
ActivityObject.reset_column_information
|
13
|
+
end
|
14
|
+
|
15
|
+
def down
|
16
|
+
end
|
17
|
+
end
|
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
# jQuery
|
35
35
|
s.add_runtime_dependency('jquery-rails', '>= 1.0.9')
|
36
36
|
# Authorization
|
37
|
-
s.add_runtime_dependency('cancan', '
|
37
|
+
s.add_runtime_dependency('cancan', '1.6.7')
|
38
38
|
# Pagination
|
39
39
|
s.add_runtime_dependency('kaminari', '~> 0.13.0')
|
40
40
|
# OAuth client
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Activity do
|
4
|
+
before(:all) do
|
5
|
+
@activity = Factory(:activity)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should be destroyed along with its author" do
|
9
|
+
author = @activity.author
|
10
|
+
|
11
|
+
author.destroy
|
12
|
+
|
13
|
+
Activity.find_by_id(@activity.id).should be_nil
|
14
|
+
end
|
15
|
+
end
|
@@ -31,6 +31,10 @@ describe ActivityAction do
|
|
31
31
|
it "should not be duplicated" do
|
32
32
|
@post.received_actions.count.should == 2
|
33
33
|
end
|
34
|
+
|
35
|
+
it "should initialize follower count" do
|
36
|
+
@post.reload.follower_count.should == 2
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
describe "where posting to self" do
|
@@ -41,6 +45,10 @@ describe ActivityAction do
|
|
41
45
|
it "should not be duplicated" do
|
42
46
|
@post.received_actions.count.should == 1
|
43
47
|
end
|
48
|
+
|
49
|
+
it "should initialize follower count" do
|
50
|
+
@post.reload.follower_count.should == 1
|
51
|
+
end
|
44
52
|
end
|
45
53
|
|
46
54
|
describe "where building the post" do
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
|
14
14
|
# Gem dependencies
|
15
|
-
s.add_runtime_dependency('social_stream-base', '~> 0.
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.22.0')
|
16
16
|
s.add_runtime_dependency('paperclip-ffmpeg', '~> 0.7.0')
|
17
17
|
s.add_runtime_dependency('paperclip','= 2.4.5')
|
18
18
|
s.add_runtime_dependency('delayed_paperclip','2.4.5.1')
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
|
14
14
|
# Gem dependencies
|
15
|
-
s.add_runtime_dependency('social_stream-base', '~> 0.
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.22.0')
|
16
16
|
s.add_runtime_dependency('rails-scheduler', '~> 0.0.8')
|
17
17
|
|
18
18
|
# Development Gem dependencies
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
|
14
14
|
# Gem dependencies
|
15
|
-
s.add_runtime_dependency('social_stream-base', '~> 0.
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.22.0')
|
16
16
|
s.add_runtime_dependency('linkser', '~> 0.0.12')
|
17
17
|
# Development Gem dependencies
|
18
18
|
s.add_development_dependency('sqlite3-ruby')
|
data/social_stream.gemspec
CHANGED
@@ -11,11 +11,11 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.files = `git ls-files`.split("\n")
|
12
12
|
|
13
13
|
# Gem dependencies
|
14
|
-
s.add_runtime_dependency('social_stream-base', '~> 0.
|
15
|
-
s.add_runtime_dependency('social_stream-documents', '~> 0.
|
16
|
-
s.add_runtime_dependency('social_stream-events', '~> 0.
|
17
|
-
s.add_runtime_dependency('social_stream-linkser', '~> 0.
|
18
|
-
s.add_runtime_dependency('social_stream-presence', '~> 0.
|
14
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.22.0')
|
15
|
+
s.add_runtime_dependency('social_stream-documents', '~> 0.16.0')
|
16
|
+
s.add_runtime_dependency('social_stream-events', '~> 0.14.0')
|
17
|
+
s.add_runtime_dependency('social_stream-linkser', '~> 0.13.0')
|
18
|
+
s.add_runtime_dependency('social_stream-presence', '~> 0.15.0')
|
19
19
|
|
20
20
|
# Development Gem dependencies
|
21
21
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-06-
|
13
|
+
date: 2012-06-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: social_stream-base
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: 0.22.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 0.
|
30
|
+
version: 0.22.0
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: social_stream-documents
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -35,7 +35,7 @@ dependencies:
|
|
35
35
|
requirements:
|
36
36
|
- - ~>
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: 0.
|
38
|
+
version: 0.16.0
|
39
39
|
type: :runtime
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
46
|
+
version: 0.16.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: social_stream-events
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,7 +51,7 @@ dependencies:
|
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.14.0
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 0.
|
62
|
+
version: 0.14.0
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
64
|
name: social_stream-linkser
|
65
65
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
requirements:
|
68
68
|
- - ~>
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.
|
70
|
+
version: 0.13.0
|
71
71
|
type: :runtime
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
requirements:
|
76
76
|
- - ~>
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: 0.
|
78
|
+
version: 0.13.0
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
80
|
name: social_stream-presence
|
81
81
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
requirements:
|
84
84
|
- - ~>
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: 0.
|
86
|
+
version: 0.15.0
|
87
87
|
type: :runtime
|
88
88
|
prerelease: false
|
89
89
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -91,7 +91,7 @@ dependencies:
|
|
91
91
|
requirements:
|
92
92
|
- - ~>
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0.
|
94
|
+
version: 0.15.0
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: capybara
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -743,6 +743,8 @@ files:
|
|
743
743
|
- base/db/migrate/20120411132550_add_visit_count_to_activity_object.rb
|
744
744
|
- base/db/migrate/20120411151413_relation_public_permissions.rb
|
745
745
|
- base/db/migrate/20120526171311_remove_activity_channels.rb
|
746
|
+
- base/db/migrate/20120621135650_add_comment_count_to_activity_object.rb
|
747
|
+
- base/db/migrate/20120627115244_fix_activity_object_follower_count.rb
|
746
748
|
- base/lib/acts_as_taggable_on/acts_as_taggable_on/dirty.rb
|
747
749
|
- base/lib/acts_as_taggable_on/social_stream.rb
|
748
750
|
- base/lib/generators/social_stream/base/install_generator.rb
|
@@ -879,6 +881,7 @@ files:
|
|
879
881
|
- base/spec/factories/relation_custom.rb
|
880
882
|
- base/spec/factories/tie.rb
|
881
883
|
- base/spec/factories/user.rb
|
884
|
+
- base/spec/integration/activity.rb
|
882
885
|
- base/spec/integration/navigation_spec.rb
|
883
886
|
- base/spec/integration/resque_access_spec.rb
|
884
887
|
- base/spec/models/activity_action_spec.rb
|