social_stream-base 0.9.36 → 0.10.0
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/app/controllers/groups_controller.rb +3 -2
- data/app/controllers/posts_controller.rb +2 -10
- data/app/helpers/activities_helper.rb +2 -1
- data/app/models/activity_object.rb +28 -0
- data/app/models/actor.rb +10 -0
- data/app/models/group.rb +7 -3
- data/app/models/user.rb +7 -2
- data/app/views/activities/_new.html.erb +0 -1
- data/app/views/activity_objects/_activity_object.html.erb +3 -3
- data/app/views/comments/_new.html.erb +2 -3
- data/app/views/groups/_new.html.erb +0 -3
- data/app/views/notifications/activities/_like.text.erb +1 -1
- data/app/views/objects/_new_activity.html.erb +2 -2
- data/app/views/objects/_show.html.erb +1 -1
- data/db/migrate/20111124100618_object_actors.rb +50 -0
- data/lib/social_stream/ability/base.rb +1 -1
- data/lib/social_stream/base/version.rb +1 -1
- data/lib/social_stream/controllers/objects.rb +33 -0
- data/lib/social_stream/models/object.rb +33 -28
- data/lib/social_stream/test_helpers/controllers.rb +3 -1
- data/lib/social_stream-base.rb +2 -1
- data/lib/tasks/db/populate.rake +9 -2
- data/spec/controllers/comments_controller_spec.rb +9 -6
- data/spec/controllers/groups_controller_spec.rb +7 -5
- data/spec/controllers/posts_controller_spec.rb +45 -9
- data/spec/controllers/users_controller_spec.rb +3 -1
- data/spec/factories/activity.rb +3 -2
- data/spec/factories/comment.rb +3 -2
- data/spec/factories/group.rb +2 -1
- data/spec/factories/post.rb +5 -4
- data/spec/models/activity_authorization_spec.rb +5 -4
- data/spec/models/group_spec.rb +5 -2
- data/spec/models/post_spec.rb +6 -2
- metadata +7 -5
@@ -51,7 +51,8 @@ class GroupsController < InheritedResources::Base
|
|
51
51
|
private
|
52
52
|
|
53
53
|
def set_founder
|
54
|
-
params[:group]
|
55
|
-
params[:group][:
|
54
|
+
params[:group] ||= {}
|
55
|
+
params[:group][:author_id] ||= current_subject.try(:actor_id)
|
56
|
+
params[:group][:user_author_id] ||= current_user.try(:actor_id)
|
56
57
|
end
|
57
58
|
end
|
@@ -1,11 +1,3 @@
|
|
1
|
-
class PostsController <
|
2
|
-
|
3
|
-
|
4
|
-
respond_to :html, :xml, :js
|
5
|
-
|
6
|
-
def destroy
|
7
|
-
@post_activity = resource.post_activity
|
8
|
-
|
9
|
-
destroy!
|
10
|
-
end
|
1
|
+
class PostsController < ApplicationController
|
2
|
+
include SocialStream::Controllers::Objects
|
11
3
|
end
|
@@ -31,6 +31,7 @@ module ActivitiesHelper
|
|
31
31
|
def new_post(receiver)
|
32
32
|
return Post.new unless user_signed_in?
|
33
33
|
|
34
|
-
Post.new :
|
34
|
+
Post.new :author_id => Actor.normalize_id(current_subject),
|
35
|
+
:owner_id => Actor.normalize_id(receiver)
|
35
36
|
end
|
36
37
|
end
|
@@ -14,9 +14,22 @@ class ActivityObject < ActiveRecord::Base
|
|
14
14
|
|
15
15
|
acts_as_taggable
|
16
16
|
|
17
|
+
# Author can be any type of Actor: User, Group, etc.
|
18
|
+
belongs_to :author,
|
19
|
+
:class_name => "Actor"
|
20
|
+
# Owner is the wall's subject this object is posted to
|
21
|
+
belongs_to :owner,
|
22
|
+
:class_name => "Actor"
|
23
|
+
|
24
|
+
# UserAuthor is the real user behind the Author
|
25
|
+
belongs_to :user_author,
|
26
|
+
:class_name => "Actor"
|
27
|
+
|
17
28
|
has_many :activity_object_activities, :dependent => :destroy
|
18
29
|
has_many :activities, :through => :activity_object_activities
|
19
30
|
|
31
|
+
validates_presence_of :object_type
|
32
|
+
|
20
33
|
# The object of this activity object
|
21
34
|
def object
|
22
35
|
subtype_instance.is_a?(Actor) ?
|
@@ -24,6 +37,21 @@ class ActivityObject < ActiveRecord::Base
|
|
24
37
|
subtype_instance
|
25
38
|
end
|
26
39
|
|
40
|
+
# The {SocialStream::Models::Subject subject} author
|
41
|
+
def author_subject
|
42
|
+
author.subject
|
43
|
+
end
|
44
|
+
|
45
|
+
# The {SocialStream::Models::Subject subject} owner
|
46
|
+
def owner_subject
|
47
|
+
owner.subject
|
48
|
+
end
|
49
|
+
|
50
|
+
# The {SocialStream::Models::Subject subject} user actor
|
51
|
+
def user_author_subject
|
52
|
+
user_author.subject
|
53
|
+
end
|
54
|
+
|
27
55
|
# The activity in which this activity_object was created
|
28
56
|
def post_activity
|
29
57
|
activities.includes(:activity_verb).where('activity_verbs.name' => 'post').first
|
data/app/models/actor.rb
CHANGED
@@ -58,6 +58,16 @@ class Actor < ActiveRecord::Base
|
|
58
58
|
has_many :relations,
|
59
59
|
:dependent => :destroy
|
60
60
|
|
61
|
+
has_many :authored_objects,
|
62
|
+
:class_name => "ActivityObject",
|
63
|
+
:foreign_key => :author_id,
|
64
|
+
:dependent => :destroy
|
65
|
+
|
66
|
+
has_many :owned_objects,
|
67
|
+
:class_name => "ActivityObject",
|
68
|
+
:foreign_key => :owner_id,
|
69
|
+
:dependent => :destroy
|
70
|
+
|
61
71
|
scope :alphabetic, order('actors.name')
|
62
72
|
|
63
73
|
scope :letter, lambda { |param|
|
data/app/models/group.rb
CHANGED
@@ -33,13 +33,17 @@ class Group < ActiveRecord::Base
|
|
33
33
|
|
34
34
|
# Creates the ties from the founder to the group
|
35
35
|
def create_ties_from_founder
|
36
|
-
|
37
|
-
|
36
|
+
author.sent_contacts.create! :receiver_id => actor_id,
|
37
|
+
:relation_ids => _relation_ids
|
38
|
+
|
39
|
+
if represented_author?
|
40
|
+
# TODO: create tie with future representation relation
|
41
|
+
end
|
38
42
|
end
|
39
43
|
|
40
44
|
# Creates the ties from the group to the participants
|
41
45
|
def create_ties_to_participants
|
42
|
-
([
|
46
|
+
([ author_id, user_author_id ].uniq | Array.wrap(@_participants)).uniq.each do |a|
|
43
47
|
sent_contacts.create! :receiver_id => a,
|
44
48
|
:relation_ids => Array(relation_customs.sort.first.id)
|
45
49
|
end
|
data/app/models/user.rb
CHANGED
@@ -3,12 +3,17 @@ require 'devise/orm/active_record'
|
|
3
3
|
class User < ActiveRecord::Base
|
4
4
|
include SocialStream::Models::Subject
|
5
5
|
|
6
|
-
has_many :authentications, :dependent => :destroy
|
7
6
|
devise *SocialStream.devise_modules
|
8
7
|
|
8
|
+
has_many :authentications, :dependent => :destroy
|
9
|
+
|
10
|
+
has_many :user_authored_objects,
|
11
|
+
:class_name => "ActivityObject",
|
12
|
+
:foreign_key => :user_author_id
|
13
|
+
|
9
14
|
# Setup accessible (or protected) attributes for your model
|
10
15
|
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :profile_attributes
|
11
|
-
|
16
|
+
|
12
17
|
validates_presence_of :email
|
13
18
|
|
14
19
|
validates_format_of :email, :with => Devise.email_regexp, :allow_blank => true
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<%
|
2
|
-
<%= render activity_object.object %>
|
3
|
-
<% else %>
|
1
|
+
<% if activity_object.object.is_a?(Actor) || activity_object.object.class.ancestors.include?(SocialStream::Models::Subject) %>
|
4
2
|
<div class="block">
|
5
3
|
<%= model_with_details activity_object.object %>
|
6
4
|
</div>
|
5
|
+
<% else %>
|
6
|
+
<%= render activity_object.object %>
|
7
7
|
<% end %>
|
@@ -9,9 +9,8 @@
|
|
9
9
|
<%= current_subject.name %>
|
10
10
|
</div>
|
11
11
|
<%= form_for Comment.new(:text => t('comment.input'),
|
12
|
-
|
13
|
-
|
14
|
-
:_activity_parent_id => activity.id
|
12
|
+
:owner_id => Actor.normalize_id(activity.receiver),
|
13
|
+
:_activity_parent_id => activity.id
|
15
14
|
),
|
16
15
|
:html => { :class => "new_comment", :id => "new_comment"+dom_id(activity) },
|
17
16
|
:remote => true do |f| %>
|
@@ -19,9 +19,6 @@
|
|
19
19
|
<div class="space_center"></div>
|
20
20
|
|
21
21
|
<%= form_for @group do |f| %>
|
22
|
-
<% f.object._contact_id ||= current_subject.ego_contact.id %>
|
23
|
-
<%= f.hidden_field :_contact_id %>
|
24
|
-
|
25
22
|
<% if @group.errors.any? %>
|
26
23
|
<div id="notice">
|
27
24
|
<h2><%= pluralize(@group.errors.count, "error") %> prohibited this group from being saved:</h2>
|
@@ -1,8 +1,8 @@
|
|
1
|
-
<% object.
|
1
|
+
<% object.owner_id = Actor.normalize_id(receiver) %>
|
2
2
|
<% remote = true if remote.nil? %>
|
3
3
|
|
4
4
|
<%= form_for object, :remote => remote do |f| %>
|
5
|
-
<%= f.hidden_field :
|
5
|
+
<%= f.hidden_field :owner_id %>
|
6
6
|
|
7
7
|
<%= render :partial => object.class.to_s.tableize+'/new_activity_fields' , :locals => {:f => f} %>
|
8
8
|
<% end %>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class ObjectActors < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
change_table :activity_objects do |t|
|
4
|
+
t.integer :author_id
|
5
|
+
t.integer :owner_id
|
6
|
+
t.integer :user_author_id
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index "activity_objects", "author_id"
|
10
|
+
add_index "activity_objects", "owner_id"
|
11
|
+
add_index "activity_objects", "user_author_id"
|
12
|
+
|
13
|
+
add_foreign_key "activity_objects", "actors", :name => "index_activity_objects_on_author_id", :column => :author_id
|
14
|
+
add_foreign_key "activity_objects", "actors", :name => "index_activity_objects_on_owner_id", :column => :owner_id
|
15
|
+
add_foreign_key "activity_objects", "actors", :name => "index_activity_objects_on_user_author_id", :column => :user_author_id
|
16
|
+
|
17
|
+
ActivityObject.record_timestamps = false
|
18
|
+
|
19
|
+
ActivityObject.all.each do |a|
|
20
|
+
if a.object_type == "Actor"
|
21
|
+
next if a.object.is_a? User
|
22
|
+
|
23
|
+
author = user_author = a.object.sent_ties.order(:created_at).first.receiver
|
24
|
+
|
25
|
+
until user_author.subject_type == "User"
|
26
|
+
user_author = user_author.sent_ties.order(:created_at).first.receiver
|
27
|
+
end
|
28
|
+
|
29
|
+
a.author = author
|
30
|
+
a.user_author = user_author
|
31
|
+
else
|
32
|
+
a.author = a.post_activity.sender
|
33
|
+
a.owner = a.post_activity.receiver
|
34
|
+
a.user_author = (a.author.is_a?(User) ? a.author : a.author.sent_ties.order(:created_at).first.receiver)
|
35
|
+
end
|
36
|
+
|
37
|
+
a.save!
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def down
|
42
|
+
remove_foreign_key "activity_objects", :name => "index_activity_objects_on_author_id"
|
43
|
+
remove_foreign_key "activity_objects", :name => "index_activity_objects_on_owner_id"
|
44
|
+
remove_foreign_key "activity_objects", :name => "index_activity_objects_on_user_author_id"
|
45
|
+
|
46
|
+
remove_column :activity_objects, :author_id
|
47
|
+
remove_column :activity_objects, :owner_id
|
48
|
+
remove_column :activity_objects, :user_author_id
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SocialStream
|
2
|
+
module Controllers
|
3
|
+
module Objects
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
inherit_resources
|
8
|
+
|
9
|
+
before_filter :set_author_ids, :only => [ :new, :create, :update ]
|
10
|
+
|
11
|
+
load_and_authorize_resource :except => :index
|
12
|
+
|
13
|
+
respond_to :html, :js
|
14
|
+
end
|
15
|
+
|
16
|
+
module InstanceMethods
|
17
|
+
|
18
|
+
def destroy
|
19
|
+
@post_activity = resource.post_activity
|
20
|
+
|
21
|
+
destroy!
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def set_author_ids
|
27
|
+
resource_params.first[:author_id] = current_subject.try(:actor_id)
|
28
|
+
resource_params.first[:user_author_id] = current_user.try(:actor_id)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -7,23 +7,20 @@ module SocialStream
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
attr_accessor :_contact_id
|
11
10
|
attr_writer :_relation_ids
|
12
11
|
attr_accessor :_activity_parent_id
|
13
12
|
|
14
|
-
belongs_to :activity_object,
|
15
|
-
|
13
|
+
belongs_to :activity_object,
|
14
|
+
:validate => true,
|
15
|
+
:autosave => true,
|
16
|
+
:dependent => :destroy
|
16
17
|
|
17
|
-
|
18
|
-
:like_count,
|
19
|
-
:tag_list, :tag_list=,
|
20
|
-
:tagged_with, :tag_counts,
|
21
|
-
:to => :activity_object!
|
18
|
+
has_many :activity_object_activities, :through => :activity_object
|
22
19
|
|
23
|
-
before_create :create_activity_object_with_type
|
20
|
+
# before_create :create_activity_object_with_type
|
24
21
|
|
25
22
|
unless self == Actor
|
26
|
-
validates_presence_of :
|
23
|
+
validates_presence_of :author_id, :owner_id, :user_author_id
|
27
24
|
|
28
25
|
after_create :create_post_activity
|
29
26
|
after_update :create_update_activity
|
@@ -35,6 +32,27 @@ module SocialStream
|
|
35
32
|
activity_object || build_activity_object(:object_type => self.class.to_s)
|
36
33
|
end
|
37
34
|
|
35
|
+
# Delegate missing methods to {ActivityObject}, if they exist there
|
36
|
+
def method_missing(method, *args, &block)
|
37
|
+
super
|
38
|
+
rescue NameError => object_error
|
39
|
+
# These methods must be raised to avoid loops (the :activity_object association calls here again)
|
40
|
+
exceptions = [ :_activity_object_id ]
|
41
|
+
raise object_error if exceptions.include?(method)
|
42
|
+
|
43
|
+
activity_object!.__send__ method, *args, &block
|
44
|
+
end
|
45
|
+
|
46
|
+
# {ActivityObject} handles some methods
|
47
|
+
def respond_to? *args
|
48
|
+
super || activity_object!.respond_to?(*args)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Was the author represented with this {SocialStream::Models::Object object} was created?
|
52
|
+
def represented_author?
|
53
|
+
author_id == user_author_id
|
54
|
+
end
|
55
|
+
|
38
56
|
# All the activities with this object
|
39
57
|
def activities
|
40
58
|
Activity.
|
@@ -42,13 +60,6 @@ module SocialStream
|
|
42
60
|
where("#{ self.class.quoted_table_name }.id" => self.id)
|
43
61
|
end
|
44
62
|
|
45
|
-
# The activity in which this object was posted
|
46
|
-
#
|
47
|
-
# FIXME: Currently it only supports direct objects
|
48
|
-
def post_activity
|
49
|
-
(activities.includes(:activity_verb) & ActivityVerb.verb_name('post')).first
|
50
|
-
end
|
51
|
-
|
52
63
|
# Build the post activity when this object is not saved
|
53
64
|
def build_post_activity
|
54
65
|
Activity.new :contact_id => _contact_id,
|
@@ -65,7 +76,11 @@ module SocialStream
|
|
65
76
|
end
|
66
77
|
|
67
78
|
def _contact
|
68
|
-
@_contact ||=
|
79
|
+
@_contact ||= author && owner && author.contact_to!(owner)
|
80
|
+
end
|
81
|
+
|
82
|
+
def _contact_id
|
83
|
+
_contact.try(:id)
|
69
84
|
end
|
70
85
|
|
71
86
|
def _relation_ids
|
@@ -90,16 +105,6 @@ module SocialStream
|
|
90
105
|
@_activity_parent ||= Activity.find(_activity_parent_id)
|
91
106
|
end
|
92
107
|
|
93
|
-
# The {SocialStream::Models::Subject subject} that posted this object
|
94
|
-
def _author
|
95
|
-
post_activity.contact.sender_subject
|
96
|
-
end
|
97
|
-
|
98
|
-
# The owner of the wall where {#_author} posted this object
|
99
|
-
def _owner
|
100
|
-
post_activity.contact.receiver_subject
|
101
|
-
end
|
102
|
-
|
103
108
|
private
|
104
109
|
|
105
110
|
def create_post_activity
|
@@ -33,7 +33,9 @@ module SocialStream
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def model_assigned_to contact, relation_ids
|
36
|
-
model_attributes[:
|
36
|
+
model_attributes[:author_id] = contact.sender.id
|
37
|
+
model_attributes[:owner_id] = contact.receiver.id
|
38
|
+
model_attributes[:user_author_id] = contact.sender.id
|
37
39
|
model_attributes[:_relation_ids] = Array(relation_ids).map(&:id)
|
38
40
|
end
|
39
41
|
|
data/lib/social_stream-base.rb
CHANGED
@@ -51,8 +51,9 @@ module SocialStream
|
|
51
51
|
autoload :TestHelpers, 'social_stream/test_helpers'
|
52
52
|
|
53
53
|
module Controllers
|
54
|
-
autoload :Helpers, 'social_stream/controllers/helpers'
|
55
54
|
autoload :CancanDeviseIntegration, 'social_stream/controllers/cancan_devise_integration'
|
55
|
+
autoload :Helpers, 'social_stream/controllers/helpers'
|
56
|
+
autoload :Objects, 'social_stream/controllers/objects'
|
56
57
|
end
|
57
58
|
|
58
59
|
module Models
|
data/lib/tasks/db/populate.rake
CHANGED
@@ -91,7 +91,8 @@ namespace :db do
|
|
91
91
|
|
92
92
|
Group.create! :name => Forgery::Name.company_name,
|
93
93
|
:email => Forgery::Internet.email_address,
|
94
|
-
:
|
94
|
+
:author_id => founder.id,
|
95
|
+
:user_author_id => founder.id
|
95
96
|
end
|
96
97
|
|
97
98
|
set_tags(Group)
|
@@ -128,11 +129,17 @@ namespace :db do
|
|
128
129
|
SocialStream::Populate.power_law(Tie.all) do |t|
|
129
130
|
updated = Time.at(rand(Time.now.to_i))
|
130
131
|
|
132
|
+
author = t.sender
|
133
|
+
owner = t.receiver
|
134
|
+
user_author = ( t.sender.subject_type == "User" ? t.sender : t.sender.user_author )
|
135
|
+
|
131
136
|
p = Post.create :text =>
|
132
137
|
"This post should be for #{ t.relation.name } of #{ t.sender.name }.\n#{ Forgery::LoremIpsum.paragraph(:random => true) }",
|
133
138
|
:created_at => Time.at(rand(updated.to_i)),
|
134
139
|
:updated_at => updated,
|
135
|
-
:
|
140
|
+
:author_id => author.id,
|
141
|
+
:owner_id => owner.id,
|
142
|
+
:user_author_id => user_author.id,
|
136
143
|
:_relation_ids => Array(t.relation_id)
|
137
144
|
|
138
145
|
p.post_activity.update_attributes(:created_at => p.created_at,
|
@@ -14,9 +14,10 @@ describe CommentsController do
|
|
14
14
|
describe "comment from user" do
|
15
15
|
before do
|
16
16
|
activity = Factory(:self_activity, :contact => Factory(:self_contact, :sender => @user.actor))
|
17
|
-
contact = @user.contact_to!(@user)
|
18
17
|
|
19
|
-
model_attributes[:
|
18
|
+
model_attributes[:author_id] = @user.actor_id
|
19
|
+
model_attributes[:owner_id] = @user.actor_id
|
20
|
+
model_attributes[:user_author_id] = @user.actor_id
|
20
21
|
model_attributes[:_activity_parent_id] = activity.id
|
21
22
|
end
|
22
23
|
|
@@ -38,9 +39,10 @@ describe CommentsController do
|
|
38
39
|
before do
|
39
40
|
f = Factory(:friend, :contact => Factory(:contact, :receiver => @user.actor)).sender
|
40
41
|
activity = Factory(:self_activity, :contact => f.contact_to!(f))
|
41
|
-
contact = @user.contact_to!(f)
|
42
42
|
|
43
|
-
model_attributes[:
|
43
|
+
model_attributes[:author_id] = @user.actor_id
|
44
|
+
model_attributes[:owner_id] = f.id
|
45
|
+
model_attributes[:user_author_id] = @user.actor_id
|
44
46
|
model_attributes[:_activity_parent_id] = activity.id
|
45
47
|
end
|
46
48
|
|
@@ -51,9 +53,10 @@ describe CommentsController do
|
|
51
53
|
before do
|
52
54
|
a = Factory(:acquaintance, :contact => Factory(:contact, :receiver => @user.actor)).sender
|
53
55
|
activity = Factory(:self_activity, :contact => a.contact_to!(a))
|
54
|
-
contact = @user.contact_to!(a)
|
55
56
|
|
56
|
-
model_attributes[:
|
57
|
+
model_attributes[:author_id] = @user.actor_id
|
58
|
+
model_attributes[:owner_id] = a.id
|
59
|
+
model_attributes[:user_author_id] = @user.actor_id
|
57
60
|
model_attributes[:_activity_parent_id] = activity.id
|
58
61
|
end
|
59
62
|
|
@@ -26,9 +26,7 @@ describe GroupsController do
|
|
26
26
|
|
27
27
|
context "faking a new group" do
|
28
28
|
it "should deny creating" do
|
29
|
-
post :create, :group => { :name => "Test"
|
30
|
-
:_contact_id => Factory(:user).ego_contact.id
|
31
|
-
}
|
29
|
+
post :create, :group => { :name => "Test" }
|
32
30
|
|
33
31
|
response.should redirect_to(new_user_session_path)
|
34
32
|
end
|
@@ -79,7 +77,8 @@ describe GroupsController do
|
|
79
77
|
|
80
78
|
context "a new own group" do
|
81
79
|
before do
|
82
|
-
model_attributes[:
|
80
|
+
model_attributes[:author_id] = @user.actor_id
|
81
|
+
model_attributes[:user_author_id] = @user.actor_id
|
83
82
|
end
|
84
83
|
|
85
84
|
it "should allow creating" do
|
@@ -125,7 +124,10 @@ describe GroupsController do
|
|
125
124
|
|
126
125
|
context "a new fake group" do
|
127
126
|
before do
|
128
|
-
|
127
|
+
user = Factory(:user)
|
128
|
+
|
129
|
+
model_attributes[:author_id] = user.actor_id
|
130
|
+
model_attributes[:user_author_id] = user.actor_id
|
129
131
|
end
|
130
132
|
|
131
133
|
it_should_behave_like "Deny Creating"
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
3
|
describe PostsController do
|
5
4
|
include SocialStream::TestHelpers
|
6
5
|
include SocialStream::TestHelpers::Controllers
|
@@ -19,7 +18,10 @@ describe PostsController do
|
|
19
18
|
contact = @user.contact_to!(@user)
|
20
19
|
relation = @user.relation_customs.sort.first
|
21
20
|
model_assigned_to @user.contact_to!(@user), relation
|
22
|
-
@current_model = Factory(:post, :
|
21
|
+
@current_model = Factory(:post, :author_id => @user.actor_id,
|
22
|
+
:owner_id => @user.actor_id,
|
23
|
+
:user_author_id => @user.actor_id,
|
24
|
+
:_relation_ids => Array(relation.id))
|
23
25
|
end
|
24
26
|
|
25
27
|
it_should_behave_like "Allow Creating"
|
@@ -31,7 +33,10 @@ describe PostsController do
|
|
31
33
|
contact = @user.contact_to!(@user)
|
32
34
|
relation = @user.relation_customs.sort.last
|
33
35
|
model_assigned_to @user.contact_to!(@user), relation
|
34
|
-
@current_model = Factory(:post, :
|
36
|
+
@current_model = Factory(:post, :author_id => @user.actor_id,
|
37
|
+
:owner_id => @user.actor_id,
|
38
|
+
:user_author_id => @user.actor_id,
|
39
|
+
:_relation_ids => Array(relation.id))
|
35
40
|
end
|
36
41
|
|
37
42
|
it_should_behave_like "Allow Creating"
|
@@ -43,7 +48,9 @@ describe PostsController do
|
|
43
48
|
contact = @user.contact_to!(@user)
|
44
49
|
relation = @user.relation_public
|
45
50
|
model_assigned_to @user.contact_to!(@user), relation
|
46
|
-
@current_model = Factory(:post, :
|
51
|
+
@current_model = Factory(:post, :author_id => @user.actor_id,
|
52
|
+
:owner_id => @user.actor_id,
|
53
|
+
:user_author_id => @user.actor_id)
|
47
54
|
end
|
48
55
|
|
49
56
|
it_should_behave_like "Allow Creating"
|
@@ -82,7 +89,10 @@ describe PostsController do
|
|
82
89
|
relation = @group.relation_custom('member')
|
83
90
|
|
84
91
|
model_assigned_to contact, relation
|
85
|
-
@current_model = Factory(:post, :
|
92
|
+
@current_model = Factory(:post, :author_id => contact.sender.id,
|
93
|
+
:owner_id => contact.receiver.id,
|
94
|
+
:user_author_id => contact.sender.id,
|
95
|
+
:_relation_ids => Array(relation.id))
|
86
96
|
end
|
87
97
|
|
88
98
|
it_should_behave_like "Allow Creating"
|
@@ -99,7 +109,10 @@ describe PostsController do
|
|
99
109
|
contact = @group.contact_to!(@group)
|
100
110
|
relation = @group.relation_customs.sort.first
|
101
111
|
model_assigned_to contact, relation
|
102
|
-
@current_model = Factory(:post, :
|
112
|
+
@current_model = Factory(:post, :author_id => contact.sender.id,
|
113
|
+
:owner_id => contact.receiver.id,
|
114
|
+
:user_author_id => contact.sender.id,
|
115
|
+
:_relation_ids => Array(relation.id))
|
103
116
|
end
|
104
117
|
|
105
118
|
it_should_behave_like "Allow Creating"
|
@@ -111,7 +124,10 @@ describe PostsController do
|
|
111
124
|
contact = @group.contact_to!(@group)
|
112
125
|
relation = @group.relation_customs.sort.last
|
113
126
|
model_assigned_to contact, relation
|
114
|
-
@current_model = Factory(:post, :
|
127
|
+
@current_model = Factory(:post, :author_id => contact.sender.id,
|
128
|
+
:owner_id => contact.receiver.id,
|
129
|
+
:user_author_id => contact.sender.id,
|
130
|
+
:_relation_ids => Array(relation.id))
|
115
131
|
end
|
116
132
|
|
117
133
|
it_should_behave_like "Allow Creating"
|
@@ -123,7 +139,10 @@ describe PostsController do
|
|
123
139
|
contact = @group.contact_to!(@group)
|
124
140
|
relation = @group.relation_public
|
125
141
|
model_assigned_to contact, relation
|
126
|
-
@current_model = Factory(:post,
|
142
|
+
@current_model = Factory(:post, :author_id => contact.sender.id,
|
143
|
+
:owner_id => contact.receiver.id,
|
144
|
+
:user_author_id => contact.sender.id,
|
145
|
+
:_relation_ids => Array(relation.id))
|
127
146
|
end
|
128
147
|
|
129
148
|
it_should_behave_like "Allow Creating"
|
@@ -143,7 +162,7 @@ describe PostsController do
|
|
143
162
|
sign_in @tie.receiver_subject
|
144
163
|
|
145
164
|
post :create, :post => { :text => "Test",
|
146
|
-
:
|
165
|
+
:owner_id => @tie.contact.sender.id
|
147
166
|
}
|
148
167
|
|
149
168
|
post = assigns(:post)
|
@@ -151,6 +170,23 @@ describe PostsController do
|
|
151
170
|
post.should be_valid
|
152
171
|
post.post_activity.relations.should include(@tie.relation)
|
153
172
|
end
|
173
|
+
|
174
|
+
it "should assign activity to member" do
|
175
|
+
sign_in @tie.receiver_subject
|
176
|
+
|
177
|
+
post :create, :post => { :text => "Test",
|
178
|
+
:owner_id => @tie.contact.sender.id
|
179
|
+
},
|
180
|
+
:format => :js
|
181
|
+
|
182
|
+
|
183
|
+
post = assigns(:post)
|
184
|
+
|
185
|
+
post.should be_valid
|
186
|
+
post.post_activity.relations.should include(@tie.relation)
|
187
|
+
|
188
|
+
response.should be_success
|
189
|
+
end
|
154
190
|
end
|
155
191
|
|
156
192
|
context "creating public post" do
|
@@ -74,7 +74,9 @@ describe UsersController do
|
|
74
74
|
it "should render other's page with activity" do
|
75
75
|
tie = Factory(:friend, :receiver => @user.actor)
|
76
76
|
friend = tie.sender
|
77
|
-
Factory(:post, :
|
77
|
+
Factory(:post, :author_id => tie.sender.id,
|
78
|
+
:owner_id => tie.receiver.id,
|
79
|
+
:user_author_id => tie.sender.id,
|
78
80
|
:_relation_ids => Array(tie.relation_id))
|
79
81
|
|
80
82
|
get :show, :id => friend.to_param
|
data/spec/factories/activity.rb
CHANGED
@@ -38,11 +38,12 @@ Factory.define :public_activity, :parent => :activity do |a|
|
|
38
38
|
a.relation_ids { |b| Array(b.sender.relation_public.id) }
|
39
39
|
end
|
40
40
|
|
41
|
-
Factory.define :like_activity, :
|
41
|
+
Factory.define :like_activity, :class => 'Activity' do |a|
|
42
42
|
a.association :parent, :factory => :activity
|
43
43
|
a.contact { |b| Factory(:friend, :sender => b.parent.sender).receiver.contact_to!(b.parent.sender) }
|
44
44
|
a.activity_verb { ActivityVerb["like"] }
|
45
|
-
a.relation_ids
|
45
|
+
a.relation_ids { |b| b.parent.relation_ids }
|
46
|
+
a.after_build{ |b| b.activity_object_ids = b.parent.activity_object_ids }
|
46
47
|
end
|
47
48
|
|
48
49
|
|
data/spec/factories/comment.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
Factory.define :comment do |p|
|
2
2
|
p.sequence(:text) { |n| "Comment #{ n }" }
|
3
|
-
p.
|
4
|
-
p.
|
3
|
+
p.author_id { Factory(:friend).receiver.id }
|
4
|
+
p.owner_id { |q| Actor.find(q.author_id).received_ties.first.sender.id }
|
5
|
+
p.user_author_id { |q| q.author_id }
|
5
6
|
end
|
data/spec/factories/group.rb
CHANGED
data/spec/factories/post.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
Factory.define :post do |p|
|
2
2
|
p.sequence(:text) { |n| "Post #{ n }" }
|
3
|
-
p.
|
4
|
-
p.
|
3
|
+
p.author_id { Factory(:friend).receiver.id }
|
4
|
+
p.owner_id { |q| Actor.find(q.author_id).received_ties.first.sender.id }
|
5
|
+
p.user_author_id { |q| q.author_id }
|
5
6
|
end
|
6
7
|
|
7
8
|
Factory.define :public_post, :parent => :post do |p|
|
8
|
-
p.
|
9
|
-
p._relation_ids { |q| Array(
|
9
|
+
p.owner_id { |q| q.author_id }
|
10
|
+
p._relation_ids { |q| Array(q.author.relation_public.id) }
|
10
11
|
end
|
@@ -2,10 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module ActivityTestHelper
|
4
4
|
def create_activity(contact, relations)
|
5
|
-
@activity = Factory(:
|
6
|
-
:
|
7
|
-
:
|
8
|
-
|
5
|
+
@activity = Factory(:post,
|
6
|
+
:author_id => contact.sender.id,
|
7
|
+
:owner_id => contact.receiver.id,
|
8
|
+
:user_author_id => contact.sender.id,
|
9
|
+
:_relation_ids => Array(Relation.normalize_id(relations))).post_activity
|
9
10
|
end
|
10
11
|
|
11
12
|
def create_ability_accessed_by(subject)
|
data/spec/models/group_spec.rb
CHANGED
@@ -2,9 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Group do
|
4
4
|
it "should save description" do
|
5
|
-
|
5
|
+
user = Factory(:user)
|
6
|
+
|
7
|
+
g = Group.create :name => "Test",
|
6
8
|
:description => "Testing description",
|
7
|
-
:
|
9
|
+
:author_id => user.actor.id,
|
10
|
+
:user_author_id => user.actor.id
|
8
11
|
|
9
12
|
g.reload.description.should be_present
|
10
13
|
end
|
data/spec/models/post_spec.rb
CHANGED
@@ -36,7 +36,9 @@ describe Post do
|
|
36
36
|
tie = Factory(:friend)
|
37
37
|
|
38
38
|
post = Post.new :text => "testing",
|
39
|
-
:
|
39
|
+
:author_id => tie.receiver.id,
|
40
|
+
:owner_id => tie.sender.id,
|
41
|
+
:user_author_id => tie.receiver.id
|
40
42
|
|
41
43
|
assert post.build_post_activity.allow? tie.receiver_subject, 'create'
|
42
44
|
|
@@ -49,7 +51,9 @@ describe Post do
|
|
49
51
|
tie = Factory(:friend)
|
50
52
|
|
51
53
|
post = Post.new :text => "testing",
|
52
|
-
:
|
54
|
+
:author_id => tie.receiver.id,
|
55
|
+
:owner_id => tie.sender.id,
|
56
|
+
:user_author_id => tie.receiver.id
|
53
57
|
|
54
58
|
post.save!
|
55
59
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_stream-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 55
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 10
|
9
|
+
- 0
|
10
|
+
version: 0.10.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- GING - DIT - UPM
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-11-
|
19
|
+
date: 2011-11-28 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -958,6 +958,7 @@ files:
|
|
958
958
|
- db/migrate/20110712090343_remove_spheres.rb
|
959
959
|
- db/migrate/20110712142140_remove_permission_function.rb
|
960
960
|
- db/migrate/20110912074426_add_reject_relation.rb
|
961
|
+
- db/migrate/20111124100618_object_actors.rb
|
961
962
|
- lib/acts_as_taggable_on/acts_as_taggable_on/dirty.rb
|
962
963
|
- lib/acts_as_taggable_on/social_stream.rb
|
963
964
|
- lib/generators/social_stream/base/install_generator.rb
|
@@ -973,6 +974,7 @@ files:
|
|
973
974
|
- lib/social_stream/base/version.rb
|
974
975
|
- lib/social_stream/controllers/cancan_devise_integration.rb
|
975
976
|
- lib/social_stream/controllers/helpers.rb
|
977
|
+
- lib/social_stream/controllers/objects.rb
|
976
978
|
- lib/social_stream/d3.rb
|
977
979
|
- lib/social_stream/migrations/base.rb
|
978
980
|
- lib/social_stream/migrations/components.rb
|