social_stream 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/comments_controller.rb +10 -0
- data/app/models/actor.rb +5 -0
- data/app/models/comment.rb +3 -0
- data/app/models/relation.rb +12 -0
- data/app/models/tie.rb +1 -0
- data/app/views/activities/_activity_options.html.erb +3 -1
- data/app/views/activities/_comments.html.erb +3 -0
- data/app/views/activities/_new.html.erb +1 -1
- data/app/views/activities/_root_activity.html.erb +5 -17
- data/app/views/activities/_subactivity.html.erb +1 -1
- data/app/views/comments/_comment.html.erb +1 -0
- data/app/views/comments/_new.html.erb +15 -0
- data/app/views/comments/create.js.erb +4 -0
- data/app/views/comments/destroy.js.erb +2 -0
- data/app/views/home/_activities.html.erb +4 -4
- data/config/locales/en.yml +3 -0
- data/lib/generators/social_stream/templates/initializer.rb +1 -1
- data/lib/generators/social_stream/templates/migration.rb +24 -1
- data/lib/generators/social_stream/templates/seeds.yml +30 -25
- data/lib/social_stream/models/actor.rb +4 -3
- data/lib/social_stream/rails/routes.rb +2 -0
- data/lib/social_stream/seed.rb +1 -1
- data/lib/social_stream/version.rb +1 -1
- data/lib/social_stream.rb +1 -1
- metadata +11 -5
- data/app/views/activities/_subactivity_options.html.erb +0 -7
data/app/models/actor.rb
CHANGED
@@ -97,6 +97,11 @@ class Actor < ActiveRecord::Base
|
|
97
97
|
candidates[rand(candidates.size)]
|
98
98
|
end
|
99
99
|
|
100
|
+
# All the ties this actor has with subject that support activities
|
101
|
+
def active_ties_to(subject)
|
102
|
+
sent_ties.received_by(subject).active
|
103
|
+
end
|
104
|
+
|
100
105
|
# The set of activities in the wall of this actor
|
101
106
|
# TODO: authorization
|
102
107
|
def wall
|
data/app/models/relation.rb
CHANGED
@@ -8,6 +8,11 @@
|
|
8
8
|
# two actors are stronger than others.
|
9
9
|
# When a strong tie is established, ties with weaker relations are establised as well
|
10
10
|
#
|
11
|
+
# == Reflexive relations
|
12
|
+
# Some relations are set by default for actors with theirselves. This sets some ties
|
13
|
+
# for posting in self wall at several visibility levels: only for friends, public and
|
14
|
+
# so on
|
15
|
+
#
|
11
16
|
# == Inverse relations
|
12
17
|
# A Relation can have its inverse. When a tie is established, an inverse tie will be
|
13
18
|
# established if an inverse relation exists. An example is a relation of friendship,
|
@@ -20,6 +25,11 @@
|
|
20
25
|
# sends a friendship_request to B. A is granting the friend relation with B, that is,
|
21
26
|
# friendship_request grants friend relation.
|
22
27
|
#
|
28
|
+
# == Active relations
|
29
|
+
# Those relations whose ties support activities. The default scope define active
|
30
|
+
# relations as those that do not grant other relations, those that are not invitations
|
31
|
+
# or requests.
|
32
|
+
#
|
23
33
|
class Relation < ActiveRecord::Base
|
24
34
|
has_ancestry
|
25
35
|
|
@@ -32,7 +42,9 @@ class Relation < ActiveRecord::Base
|
|
32
42
|
belongs_to :granted,
|
33
43
|
:class_name => "Relation"
|
34
44
|
|
45
|
+
scope :reflexive, where(:reflexive => true)
|
35
46
|
scope :request, where('relations.granted_id IS NOT NULL')
|
47
|
+
scope :active, where(:granted_id => nil)
|
36
48
|
|
37
49
|
has_many :relation_permissions, :dependent => :destroy
|
38
50
|
has_many :permissions, :through => :relation_permissions
|
data/app/models/tie.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
<div class="activity_options">
|
2
2
|
<ul class="activity_options" >
|
3
3
|
<li><div class="post_time_ago"><%= t('time.ago', :time => time_ago_in_words(activity.created_at)) %></div></li>
|
4
|
+
<% if activity.is_root? %>
|
4
5
|
<li><div class="verb_comment"> · <%= link_to t('activity.to_comment'), "#", :class => "to_comment" %> </div></li>
|
6
|
+
<% end %>
|
5
7
|
<li><div class="verb_like" id="like_<%= dom_id(activity) %>"> · <%= like_activity(activity)%></div></li>
|
6
|
-
<li><div class="verb_delete"> · <%= link_to t('activity.delete'), activity.direct_object , :confirm => t('activity.
|
8
|
+
<li><div class="verb_delete"> · <%= link_to t('activity.delete'), activity.direct_object , :confirm => t('confirm_delete', :scope => activity.direct_object.class.to_s.underscore), :method => :delete, :remote => true %> </div></li>
|
7
9
|
</ul>
|
8
10
|
</div>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div id="activities_header" class="content_size">
|
2
2
|
<%= form_for Post.new(:text => t('activity.input'),
|
3
|
-
:_activity_tie_id =>
|
3
|
+
:_activity_tie_id => current_user.active_ties_to(receiver).first.id),
|
4
4
|
:remote => true do |f| %>
|
5
5
|
<%= f.hidden_field :_activity_tie_id %>
|
6
6
|
<%= f.text_field :text, :id => "input_activities", :size => 85 %>
|
@@ -18,24 +18,12 @@
|
|
18
18
|
<%= render :partial => 'activities/activity_options',
|
19
19
|
:locals => { :activity => root_activity } %>
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
<%= render :partial => 'activities/comments',
|
22
|
+
:locals => { :activity => root_activity } %>
|
23
|
+
|
24
|
+
<%= render :partial => 'comments/new',
|
25
|
+
:locals => { :activity => root_activity } %>
|
24
26
|
|
25
|
-
<div class="activity_new_comment">
|
26
|
-
<%= form_for Comment.new(:text => t('comment.input'),
|
27
|
-
:_activity_tie_id => current_tie.id,
|
28
|
-
:_activity_parent_id => root_activity.id),
|
29
|
-
:remote => true do |f| %>
|
30
|
-
<%= f.hidden_field :_activity_tie_id %>
|
31
|
-
<%= f.hidden_field :_activity_parent_id %>
|
32
|
-
<%= f.text_field :text, :class =>"input_new_comments" %>
|
33
|
-
<div class="activities_comment_btn">
|
34
|
-
<div class="activities_security"></div>
|
35
|
-
<%= image_submit_tag "buttons/btn_share.png" %>
|
36
|
-
</div>
|
37
|
-
<% end %>
|
38
|
-
</div>
|
39
27
|
</div>
|
40
28
|
<div class="space_comments"></div>
|
41
29
|
<div class="space_activities">
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= comment.text %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="activity_new_comment">
|
2
|
+
<%= form_for Comment.new(:text => t('comment.input'),
|
3
|
+
:_activity_tie_id =>
|
4
|
+
current_user.active_ties_to(activity.receiver).first.id,
|
5
|
+
:_activity_parent_id => activity.id),
|
6
|
+
:remote => true do |f| %>
|
7
|
+
<%= f.hidden_field :_activity_tie_id %>
|
8
|
+
<%= f.hidden_field :_activity_parent_id %>
|
9
|
+
<%= f.text_field :text, :class =>"input_new_comments" %>
|
10
|
+
<div class="activities_comment_btn">
|
11
|
+
<div class="activities_security"></div>
|
12
|
+
<%= image_submit_tag "buttons/btn_share.png" %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
<div id="wrapper_activities">
|
7
7
|
<div id="wrapper_activities_header">
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
<div id="activities_title" class="content_size">
|
9
|
+
<%= image_tag("buttons/btn_activities.png") %> <%=t('activity.other')%>
|
10
|
+
</div>
|
11
11
|
|
12
|
-
<%= render :partial => 'activities/new' %>
|
12
|
+
<%= render :partial => 'activities/new', :locals => { :receiver => current_user } %>
|
13
13
|
</div>
|
14
14
|
<div id="wall">
|
15
15
|
<% if current_user.wall.any? %>
|
data/config/locales/en.yml
CHANGED
@@ -10,11 +10,14 @@ en:
|
|
10
10
|
unlike: Already I do not like
|
11
11
|
comment:
|
12
12
|
input: "Write a comment..."
|
13
|
+
confirm_delete: "Delete comment?"
|
13
14
|
home:
|
14
15
|
one: "Home"
|
15
16
|
location:
|
16
17
|
message: "You are here > %{location}"
|
17
18
|
message: "Message"
|
19
|
+
post:
|
20
|
+
confirm_delete: "Delete post?"
|
18
21
|
tie:
|
19
22
|
pending:
|
20
23
|
other: Pending requests
|
@@ -48,6 +48,15 @@ class CreateSocialStream < ActiveRecord::Migration
|
|
48
48
|
add_index "actors", ["email"], :name => "index_actors_on_email"
|
49
49
|
add_index "actors", ["permalink"], :name => "index_actors_on_permalink", :unique => true
|
50
50
|
|
51
|
+
create_table "comments", :force => true do |t|
|
52
|
+
t.integer "activity_object_id"
|
53
|
+
t.text "text"
|
54
|
+
t.datetime "updated_at"
|
55
|
+
t.datetime "created_at"
|
56
|
+
end
|
57
|
+
|
58
|
+
add_index "comments", ["activity_object_id"], :name => "fk_commets_activity_object"
|
59
|
+
|
51
60
|
create_table "permissions", :force => true do |t|
|
52
61
|
t.string "action"
|
53
62
|
t.string "object"
|
@@ -85,7 +94,7 @@ class CreateSocialStream < ActiveRecord::Migration
|
|
85
94
|
t.string "ancestry"
|
86
95
|
t.integer "inverse_id"
|
87
96
|
t.integer "granted_id"
|
88
|
-
t.boolean "
|
97
|
+
t.boolean "reflexive", :default => false
|
89
98
|
end
|
90
99
|
|
91
100
|
add_index "relations", ["ancestry"]
|
@@ -138,5 +147,19 @@ class CreateSocialStream < ActiveRecord::Migration
|
|
138
147
|
end
|
139
148
|
|
140
149
|
def self.down
|
150
|
+
drop_table :activities
|
151
|
+
drop_table :activity_object_activities
|
152
|
+
drop_table :activity_objects
|
153
|
+
drop_table :activity_verbs
|
154
|
+
drop_table :actors
|
155
|
+
drop_table :comments
|
156
|
+
drop_table :permissions
|
157
|
+
drop_table :posts
|
158
|
+
drop_table :_relation_permissions
|
159
|
+
drop_table :relations
|
160
|
+
drop_table :tags
|
161
|
+
drop_table :tags_activity_objects
|
162
|
+
drop_table :ties
|
163
|
+
drop_table :users
|
141
164
|
end
|
142
165
|
end
|
@@ -2,28 +2,33 @@
|
|
2
2
|
#
|
3
3
|
# Define your relations and add SocialStream.seed! to db/seeds.rb
|
4
4
|
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
|
12
|
-
#
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
#
|
24
|
-
|
25
|
-
#
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
5
|
+
relations:
|
6
|
+
user-friend:
|
7
|
+
sender_type: User
|
8
|
+
receiver_type: User
|
9
|
+
name: friend
|
10
|
+
# Friendship is a reciprocal relation
|
11
|
+
inverse: user-friend
|
12
|
+
# It is set for users by default
|
13
|
+
reflexive: true
|
14
|
+
permissions:
|
15
|
+
- [ create, resources, weak_set ]
|
16
|
+
- [ read, resources, group_set ]
|
17
|
+
- [ update, resources, weak_set ]
|
18
|
+
- [ destroy, resources, weak_set ]
|
19
|
+
user-public:
|
20
|
+
sender_type: User
|
21
|
+
receiver_type: User
|
22
|
+
name: public
|
23
|
+
# This relation is weaker than user-friend
|
24
|
+
parent: user-friend
|
25
|
+
# This relation is also reciprocal
|
26
|
+
inverse: user-public
|
27
|
+
permissions:
|
28
|
+
- [ read, resources, group_set ]
|
29
|
+
user-friend-request:
|
30
|
+
sender_type: User
|
31
|
+
receiver_type: User
|
32
|
+
name: friendship_request
|
33
|
+
# This relation is the request for user-friend
|
34
|
+
granted: user-friend
|
@@ -16,6 +16,7 @@ module SocialStream
|
|
16
16
|
:permalink, :permalink=,
|
17
17
|
:disabled, :disabled=,
|
18
18
|
:ties, :sent_ties, :received_ties,
|
19
|
+
:active_ties_to,
|
19
20
|
:sender_subjects, :receiver_subjects, :suggestion,
|
20
21
|
:wall,
|
21
22
|
:to => :actor!
|
@@ -24,7 +25,7 @@ module SocialStream
|
|
24
25
|
scope :with_sent_ties, joins(:actor => :sent_ties)
|
25
26
|
scope :with_received_ties, joins(:actor => :received_ties)
|
26
27
|
|
27
|
-
after_create :
|
28
|
+
after_create :initialize_reflexive_ties
|
28
29
|
end
|
29
30
|
|
30
31
|
module InstanceMethods
|
@@ -34,8 +35,8 @@ module SocialStream
|
|
34
35
|
|
35
36
|
private
|
36
37
|
|
37
|
-
def
|
38
|
-
self.class.relations.
|
38
|
+
def initialize_reflexive_ties
|
39
|
+
self.class.relations.reflexive.each do |r|
|
39
40
|
Tie.create! :sender => self.actor,
|
40
41
|
:receiver => self.actor,
|
41
42
|
:relation => r
|
data/lib/social_stream/seed.rb
CHANGED
@@ -24,7 +24,7 @@ module SocialStream
|
|
24
24
|
find_or_create_by_sender_type_and_receiver_type_and_name(r['sender_type'],
|
25
25
|
r['receiver_type'],
|
26
26
|
r['name'])
|
27
|
-
relations[name].update_attribute(:
|
27
|
+
relations[name].update_attribute(:reflexive, r['reflexive'])
|
28
28
|
|
29
29
|
# FIXME: optimize
|
30
30
|
relations[name].relation_permissions.destroy_all
|
data/lib/social_stream.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Antonio Tapiador
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-10-
|
19
|
+
date: 2010-10-21 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -91,9 +91,11 @@ files:
|
|
91
91
|
- app/models/permission.rb
|
92
92
|
- app/models/actor.rb
|
93
93
|
- app/models/activity_object_activity.rb
|
94
|
+
- app/models/comment.rb
|
94
95
|
- app/models/activity.rb
|
95
96
|
- app/models/relation.rb
|
96
97
|
- app/models/activity_verb.rb
|
98
|
+
- app/controllers/comments_controller.rb
|
97
99
|
- app/controllers/ties_controller.rb
|
98
100
|
- app/controllers/activities_controller.rb
|
99
101
|
- app/controllers/home_controller.rb
|
@@ -102,13 +104,17 @@ files:
|
|
102
104
|
- app/views/ties/_suggestion.html.erb
|
103
105
|
- app/views/ties/_pending.html.erb
|
104
106
|
- app/views/devise/registrations/new.html.erb
|
107
|
+
- app/views/comments/_new.html.erb
|
108
|
+
- app/views/comments/create.js.erb
|
109
|
+
- app/views/comments/destroy.js.erb
|
110
|
+
- app/views/comments/_comment.html.erb
|
105
111
|
- app/views/posts/_post.html.erb
|
106
112
|
- app/views/posts/create.js.erb
|
107
113
|
- app/views/posts/destroy.js.erb
|
108
114
|
- app/views/activities/_activity.html.erb
|
109
115
|
- app/views/activities/_activity_options.html.erb
|
110
|
-
- app/views/activities/_subactivity_options.html.erb
|
111
116
|
- app/views/activities/_jquery.html.erb
|
117
|
+
- app/views/activities/_comments.html.erb
|
112
118
|
- app/views/activities/_new.html.erb
|
113
119
|
- app/views/activities/_root_activity.html.erb
|
114
120
|
- app/views/activities/_subactivity.html.erb
|
@@ -1,7 +0,0 @@
|
|
1
|
-
<div class="activity_options">
|
2
|
-
<ul class="activity_options" >
|
3
|
-
<li><div class="post_time_ago"><%= t('time.ago', :time => time_ago_in_words(activity.created_at)) %></div></li>
|
4
|
-
<li><div class="verb_like" id="like_<%= dom_id(activity) %>"> · <%= like_activity(activity)%></div></li>
|
5
|
-
<li><div class="verb_delete"> · <%= link_to t('activity.delete'), activity.direct_object , :confirm => t('activity.confirm_delete'), :method => :delete, :remote => true %> </div></li>
|
6
|
-
</ul>
|
7
|
-
</div>
|