social_stream-base 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/menu.js +2 -2
- data/app/assets/stylesheets/menu.css +8 -9
- data/app/controllers/groups_controller.rb +13 -0
- data/app/controllers/invitations_controller.rb +26 -12
- data/app/helpers/activities_helper.rb +17 -9
- data/app/helpers/toolbar_helper.rb +68 -7
- data/app/mailers/invitation_mailer.rb +2 -0
- data/app/models/actor.rb +4 -0
- data/app/models/comment.rb +5 -0
- data/app/models/contact.rb +2 -2
- data/app/views/comments/_new.html.erb +0 -3
- data/app/views/home/index.html.erb +3 -2
- data/app/views/invitation_mailer/send_invitation.text.erb +1 -1
- data/app/views/invitations/_new.html.erb +1 -3
- data/app/views/invitations/new.js.erb +4 -0
- data/app/views/toolbar/_home.html.erb +13 -2
- data/app/views/toolbar/_profile.html.erb +26 -5
- data/db/migrate/20110705103202_empty_ties_count.rb +13 -0
- data/lib/generators/social_stream/base/templates/initializer.rb +4 -2
- data/lib/social_stream/ability.rb +17 -1
- data/lib/social_stream/base/version.rb +1 -1
- data/lib/social_stream/models/object.rb +4 -0
- data/spec/controllers/comments_controller_spec.rb +9 -6
- data/spec/controllers/contacts_controller_spec.rb +22 -0
- data/spec/controllers/groups_controller_spec.rb +1 -1
- data/spec/dummy/config/initializers/social_stream.rb +4 -2
- data/spec/models/contact_spec.rb +11 -0
- data/spec/spec_helper.rb +3 -3
- data/spec/support/db.rb +1 -2
- data/spec/support/migrations.rb +0 -4
- metadata +6 -12
- data/app/views/toolbar/_home_menu.html.erb +0 -13
- data/app/views/toolbar/_home_menu_options.html.erb +0 -41
- data/app/views/toolbar/_home_menu_options_subjects.html.erb +0 -12
- data/app/views/toolbar/_invitations_menu.html.erb +0 -3
- data/app/views/toolbar/_message_menu.html.erb +0 -17
- data/app/views/toolbar/_notifications_menu.html.erb +0 -3
- data/app/views/toolbar/_profile_menu.html.erb +0 -15
- data/spec/dummy/db/migrate/.gitkeep +0 -0
@@ -1,14 +1,13 @@
|
|
1
1
|
/**************MENU***********/
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
.toolbar_menu {list-style-type:none; margin: 0; padding: 0; width: 15em; border-bottom: thin solid #D4E4EA; }
|
3
|
+
.toolbar_menu ul {list-style-type:none; margin: 0; padding: 0; width: 15em; }
|
4
|
+
.toolbar_menu a { display: block; text-decoration: none; }
|
5
|
+
.toolbar_menu li { border-top: thin solid #D4E4EA; padding-left:0px; }
|
6
|
+
.toolbar_menu li a, ul.menu ul.menu li a { background: #fff; color: #2A3890; padding: 0.3em; padding:5px 0px 5px 0px; }
|
7
|
+
.toolbar_menu li a:hover, ul.menu ul.menu li a:hover { background: #DEEFF8; color: #2A3890; text-decoration:none; }
|
8
|
+
.toolbar_menu li ul li a, ul.menu ul.menu li ul li a { background: #fff; border-left: 5px #2A3890 solid;
|
9
9
|
color: #2A3890; padding-left: 10px;}
|
10
|
-
|
11
|
-
|
10
|
+
.toolbar_menu li ul li a:hover { background: #DEEFF8; border-left: 5px #2A3890 solid; padding-left: 15px;}
|
12
11
|
|
13
12
|
/*
|
14
13
|
div.panel { border: 1px #2A3890 solid; padding: 5px; margin-top: 0px;}
|
@@ -1,4 +1,8 @@
|
|
1
1
|
class GroupsController < InheritedResources::Base
|
2
|
+
# Set group founder to current_subject
|
3
|
+
# Must do before authorization
|
4
|
+
before_filter :set_founder, :only => :new
|
5
|
+
|
2
6
|
load_and_authorize_resource
|
3
7
|
|
4
8
|
respond_to :html, :js
|
@@ -32,4 +36,13 @@ class GroupsController < InheritedResources::Base
|
|
32
36
|
def resource
|
33
37
|
@group ||= end_of_association_chain.find_by_slug!(params[:id])
|
34
38
|
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def set_founder
|
43
|
+
return unless user_signed_in?
|
44
|
+
|
45
|
+
params[:group] ||= {}
|
46
|
+
params[:group][:_founder] ||= current_subject.slug
|
47
|
+
end
|
35
48
|
end
|
@@ -1,20 +1,34 @@
|
|
1
1
|
class InvitationsController < ApplicationController
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
def new
|
3
|
+
|
5
4
|
end
|
6
|
-
|
5
|
+
|
7
6
|
def create
|
8
|
-
|
7
|
+
|
9
8
|
if params[:mails].present?
|
10
|
-
receivers = params[:mails].split(
|
11
|
-
receivers
|
12
|
-
|
9
|
+
receivers = params[:mails].split(/, */)
|
10
|
+
if are_valid_emails?(receivers)
|
11
|
+
receivers.each do |receiver|
|
12
|
+
InvitationMailer.send_invitation(receiver, current_subject, params[:message]).deliver
|
13
|
+
end
|
14
|
+
redirect_to new_invitation_path, :flash => { :success => t('invitation.success')}
|
15
|
+
return
|
13
16
|
end
|
14
|
-
redirect_to new_invitation_path, :flash => { :success => t('invitation.success')}
|
15
|
-
else
|
16
|
-
redirect_to new_invitation_path, :flash => { :error => t('invitation.error')}
|
17
17
|
end
|
18
|
-
|
18
|
+
redirect_to new_invitation_path, :flash => { :error => t('invitation.error')}
|
19
|
+
|
19
20
|
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def are_valid_emails?(emails)
|
25
|
+
email_regex= /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/
|
26
|
+
emails.each do |email|
|
27
|
+
if !(email_regex.match(email))
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return true
|
32
|
+
end
|
33
|
+
|
20
34
|
end
|
@@ -1,20 +1,28 @@
|
|
1
1
|
module ActivitiesHelper
|
2
|
-
|
3
2
|
# Link to 'like' or 'unlike' depending on the like status of the activity to current_subject
|
4
|
-
#
|
3
|
+
#
|
5
4
|
# @param [Object]
|
6
5
|
# @return [String]
|
7
6
|
def link_like(object)
|
7
|
+
params = link_like_params(object)
|
8
|
+
link_to params[0],params[1],params[2]
|
9
|
+
end
|
10
|
+
|
11
|
+
def link_like_params(object)
|
12
|
+
params = Array.new
|
8
13
|
if !user_signed_in?
|
9
|
-
|
10
|
-
|
14
|
+
params << image_tag("btn/nolike.png", :class => "menu_icon")+t('activity.like')
|
15
|
+
params << new_user_session_path
|
16
|
+
params << {:class => "verb_like",:id => "like_" + dom_id(object)}
|
11
17
|
else
|
12
18
|
if (object.liked_by?(current_subject))
|
13
|
-
|
14
|
-
|
19
|
+
params << image_tag("btn/like.png", :class => "menu_icon")+t('activity.unlike')
|
20
|
+
params << [object, :like]
|
21
|
+
params << {:class => "verb_like",:id => "like_" + dom_id(object),:method => :delete, :remote => true}
|
15
22
|
else
|
16
|
-
|
17
|
-
|
23
|
+
params << image_tag("btn/nolike.png", :class => "menu_icon")+t('activity.like')
|
24
|
+
params << [object, :like]
|
25
|
+
params << {:class => "verb_like",:id => "like_" + dom_id(object),:method => :post, :remote => true}
|
18
26
|
end
|
19
27
|
end
|
20
28
|
end
|
@@ -24,6 +32,6 @@ module ActivitiesHelper
|
|
24
32
|
return Activity.new unless user_signed_in?
|
25
33
|
|
26
34
|
Activity.new :contact_id => current_subject.contact_to!(receiver).id,
|
27
|
-
|
35
|
+
:relation_ids => current_subject.activity_relations(receiver, :from => :receiver).map(&:id)
|
28
36
|
end
|
29
37
|
end
|
@@ -85,21 +85,82 @@ module ToolbarHelper
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def default_toolbar_menu
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
home_menu
|
89
|
+
end
|
90
|
+
|
91
|
+
def home_toolbar_menu
|
92
|
+
items = Array.new
|
93
|
+
#Notifications
|
94
|
+
items << {:key => :notifications,
|
95
|
+
:name => image_tag("btn/btn_notification.png")+t('notification.other')+' ('+ current_subject.mailbox.notifications.not_trashed.unread.count.to_s+')',
|
96
|
+
:url => notifications_path,
|
97
|
+
:options => {:link => {:id => "notifications_menu"}}}
|
91
98
|
|
92
|
-
|
93
|
-
|
94
|
-
|
99
|
+
#Messages
|
100
|
+
items << {:key => :messages,
|
101
|
+
:name => image_tag("btn/new.png")+t('message.other')+' (' + current_subject.mailbox.inbox(:unread => true).count.to_s + ')',
|
102
|
+
:url => "#",
|
103
|
+
:options => {:link => {:id => "messages_menu"}},
|
104
|
+
:items => [
|
105
|
+
{:key => :message_new, :name => image_tag("btn/message_new.png")+ t('message.new'), :url => new_message_path},
|
106
|
+
{:key => :message_inbox, :name => image_tag("btn/message_inbox.png")+t('message.inbox')+' (' + current_subject.mailbox.inbox(:unread => true).count.to_s + ')',
|
107
|
+
:url => conversations_path, :options => {:link =>{:remote=> true}}},
|
108
|
+
{:key => :message_sentbox, :name => image_tag("btn/message_sentbox.png")+t('message.sentbox'), :url => conversations_path(:box => :sentbox), :remote=> true},
|
109
|
+
{:key => :message_trash, :name => image_tag("btn/message_trash.png")+t('message.trash'), :url => conversations_path(:box => :trash)}
|
95
110
|
]}
|
96
111
|
|
112
|
+
#Documents if present
|
113
|
+
if SocialStream.activity_forms.include? :document
|
114
|
+
items << {:key => :resources,
|
115
|
+
:name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t('resource.title'),
|
116
|
+
:url => "#",
|
117
|
+
:options => {:link => {:id => "resources_menu"}},
|
118
|
+
:items => [
|
119
|
+
{:key => :resources_documents,:name => image_tag("btn/btn_documents.png")+t('document.title'),:url => documents_path},
|
120
|
+
{:key => :resources_pictores,:name => image_tag("btn/btn_gallery.png")+t('picture.title'),:url => pictures_path},
|
121
|
+
{:key => :resources_videos,:name => image_tag("btn/btn_video.png")+t('video.title'),:url => videos_path},
|
122
|
+
{:key => :resources_audios,:name => image_tag("btn/btn_audio.png")+t('audio.title'),:url => audios_path}
|
123
|
+
]}
|
124
|
+
end
|
125
|
+
|
126
|
+
#Contacts
|
127
|
+
relation_items = [{:key => :invitations, :name => image_tag("btn/btn_invitation.png")+t('invitation.other'), :url => new_invitation_path}]
|
128
|
+
current_subject.relation_customs.sort.each do |r|
|
129
|
+
relation_items << {:key => r.name + "_menu",
|
130
|
+
:name => image_tag("btn/btn_friend.png") + r.name,
|
131
|
+
:url => contacts_path(:relation => r.id)}
|
132
|
+
end
|
133
|
+
items << {:key => :contacts,
|
134
|
+
:name => image_tag("btn/btn_friend.png")+t('contact.other'),
|
135
|
+
:url => "#",
|
136
|
+
:options => {:link => {:id => "contacts_menu"}},
|
137
|
+
:items => relation_items}
|
138
|
+
|
139
|
+
#Subjects
|
140
|
+
items << {:key => :groups,
|
141
|
+
:name => image_tag("btn/btn_group.png")+t('group.other'),
|
142
|
+
:url => "#",
|
143
|
+
:options => {:link => {:id => "groups_menu"}},
|
144
|
+
:items => [{:key => :new_group ,:name => image_tag("btn/btn_group.png")+t('group.new.action'),:url => new_group_path('group' => { '_founder' => current_subject.slug })}]
|
145
|
+
}
|
146
|
+
|
147
|
+
return render_items items
|
148
|
+
end
|
149
|
+
|
150
|
+
def profile_toolbar_menu(subject=current_subject)
|
151
|
+
items = Array.new
|
152
|
+
|
153
|
+
if subject!=current_subject
|
154
|
+
items << {:key => :like_button,
|
155
|
+
:name => link_like_params(subject)[0],
|
156
|
+
:url => link_like_params(subject)[1],
|
157
|
+
:options => {:link => link_like_params(subject)[2]}}
|
158
|
+
end
|
97
159
|
return render_items items
|
98
160
|
end
|
99
161
|
|
100
162
|
def render_items(items)
|
101
163
|
menu = render_navigation :items => items
|
102
|
-
menu = menu.gsub(/\<ul\>/,'<ul class="menu">')
|
103
164
|
return raw menu
|
104
165
|
end
|
105
166
|
end
|
data/app/models/actor.rb
CHANGED
@@ -353,7 +353,11 @@ class Actor < ActiveRecord::Base
|
|
353
353
|
end
|
354
354
|
|
355
355
|
# Is this {Actor} allowed to create a comment on activity?
|
356
|
+
#
|
357
|
+
# We are allowing comments from everyone signed in by now
|
356
358
|
def can_comment?(activity)
|
359
|
+
return true
|
360
|
+
|
357
361
|
comment_relations(activity).any?
|
358
362
|
end
|
359
363
|
|
data/app/models/comment.rb
CHANGED
data/app/models/contact.rb
CHANGED
@@ -126,11 +126,11 @@ class Contact < ActiveRecord::Base
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
# Send a message to the contact receiver
|
131
131
|
def send_message
|
132
132
|
if message.present?
|
133
|
-
sender.send_message(receiver, message, I18n.t("activity.verb.#{
|
133
|
+
sender.send_message(receiver, message, I18n.t("activity.verb.#{ verb }.#{ receiver.subject_type }.message", :name => sender.name))
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
@@ -7,9 +7,6 @@
|
|
7
7
|
),
|
8
8
|
:html => { :class => "new_comment", :id => "new_comment"+dom_id(activity) },
|
9
9
|
:remote => true do |f| %>
|
10
|
-
<% current_subject.comment_relations(activity).each do |r| %>
|
11
|
-
<%= f.hidden_field "_relation_ids][", :id => "comment__relation_ids_#{ r.id }", :value => r.id %>
|
12
|
-
<% end %>
|
13
10
|
<%= f.hidden_field :_activity_parent_id %>
|
14
11
|
|
15
12
|
<%= f.text_field :text, :class =>"input_new_comments" , :id => "comment_text_"+dom_id(activity) %>
|
@@ -11,8 +11,9 @@
|
|
11
11
|
<div class="space_center">
|
12
12
|
</div>
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
<% if SocialStream.activity_forms.include? :document %>
|
15
|
+
<%= render :partial => '/documents/mediawall' %>
|
16
|
+
<% end %>
|
16
17
|
|
17
18
|
<% if current_subject.respond_to?(:recent_groups) %>
|
18
19
|
<div id="my_groups">
|
@@ -4,13 +4,11 @@
|
|
4
4
|
});
|
5
5
|
<% end %>
|
6
6
|
|
7
|
-
<br class="clearfloat" />
|
8
|
-
<div class="space_center"></div>
|
9
7
|
<div class="space_center"></div>
|
10
8
|
|
11
9
|
<h2><%=t('invitation.other')%></h2>
|
12
10
|
|
13
|
-
<%= form_tag invitations_path, :method=> :post, :class => "invitation_form" do %>
|
11
|
+
<%= form_tag invitations_path, :method=> :post, :class => "invitation_form", :remote => true do %>
|
14
12
|
<div class="block">
|
15
13
|
<h3 class= "form_row"><%=t('invitation.join')%></h3>
|
16
14
|
<div class="form_row form_label ">
|
@@ -1,9 +1,20 @@
|
|
1
|
-
|
1
|
+
<% content_for :headers do %>
|
2
|
+
<%= stylesheet_link_tag "menu", :media => "screen, projection" %>
|
3
|
+
<%= javascript_include_tag 'menu' %>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<%= render :partial => 'toolbar/logo', :locals => {:subject => current_subject} %>
|
2
7
|
|
3
8
|
<div class="block space_center">
|
4
9
|
</div>
|
5
10
|
|
6
|
-
|
11
|
+
<div id="menu_lateral" class="toolbar_menu">
|
12
|
+
Testing SimpleNavigation
|
13
|
+
<br>
|
14
|
+
Please comment any bug
|
15
|
+
<hr>
|
16
|
+
<%= yield(:toolbar_menu).empty? ? home_toolbar_menu : yield(:toolbar_menu)%>
|
17
|
+
</div>
|
7
18
|
|
8
19
|
<div class="block space_center">
|
9
20
|
</div>
|
@@ -1,13 +1,34 @@
|
|
1
|
+
<% content_for :headers do %>
|
2
|
+
<%= stylesheet_link_tag "menu", :media => "screen, projection" %>
|
3
|
+
<%= javascript_include_tag 'menu' %>
|
4
|
+
<% end %>
|
5
|
+
|
1
6
|
<%= render :partial => 'toolbar/logo', :locals => { :subject => subject } %>
|
2
7
|
|
3
|
-
<div class="block space_center"
|
8
|
+
<div class="block space_center">
|
9
|
+
</div>
|
4
10
|
|
5
|
-
|
11
|
+
<div id="menu_lateral" class="toolbar_menu">
|
12
|
+
<ul>
|
13
|
+
<% unless subject == current_subject %>
|
14
|
+
<%= render :partial => "toolbar/profile_menu_tie_options", :locals => { :subject => subject } %>
|
15
|
+
<% end %>
|
6
16
|
|
7
|
-
|
17
|
+
<%= render :partial => "toolbar/profile_menu_basic_options", :locals => { :subject => subject } %>
|
18
|
+
</ul>
|
19
|
+
<hr>
|
20
|
+
Testing SimpleNavigation
|
21
|
+
<br>
|
22
|
+
Please move along
|
23
|
+
<hr>
|
24
|
+
<%= yield(:toolbar_menu).empty? ? profile_toolbar_menu(subject) : yield(:toolbar_menu) %>
|
25
|
+
</div>
|
8
26
|
|
27
|
+
<div class="block space_center">
|
28
|
+
</div>
|
9
29
|
|
10
30
|
<%= render :partial => 'subjects/contacts', :locals => { :subject => subject } %>
|
11
31
|
|
12
|
-
<div class="block space_center"
|
13
|
-
|
32
|
+
<div class="block space_center">
|
33
|
+
</div>
|
34
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class EmptyTiesCount < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
change_column :contacts, :ties_count, :integer, :default => 0
|
4
|
+
|
5
|
+
Contact.record_timestamps = false
|
6
|
+
Contact.all.each do |c|
|
7
|
+
c.update_attribute(:ties_count, 0) if c.ties_count.nil?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def down
|
12
|
+
end
|
13
|
+
end
|
@@ -16,6 +16,8 @@ SocialStream.setup do |config|
|
|
16
16
|
#
|
17
17
|
# config.objects = [ :post, :comment ]
|
18
18
|
|
19
|
-
# Form
|
20
|
-
#
|
19
|
+
# Form for activity objects to be loaded
|
20
|
+
# You can write your own activity objects
|
21
|
+
#
|
22
|
+
# config.activity_forms = [ :post, :document, :foo, :bar ]
|
21
23
|
end
|
@@ -9,7 +9,7 @@ module SocialStream
|
|
9
9
|
alias_action :download, :to => :show
|
10
10
|
|
11
11
|
# Activity Objects
|
12
|
-
(SocialStream.objects - [ :actor ]).map{ |obj|
|
12
|
+
(SocialStream.objects - [ :actor, :comment ]).map{ |obj|
|
13
13
|
obj.to_s.classify.constantize
|
14
14
|
}.each do |klass|
|
15
15
|
can :create, klass do |k| # can :create, Post do |post|
|
@@ -29,6 +29,22 @@ module SocialStream
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
can :create, Comment do |c|
|
33
|
+
c._activity_parent.allow?(subject, 'read')
|
34
|
+
end
|
35
|
+
|
36
|
+
can :read, Comment do |c|
|
37
|
+
c.post_activity.allow?(subject, 'read')
|
38
|
+
end
|
39
|
+
|
40
|
+
can :update, Comment do |c|
|
41
|
+
c.post_activity.allow?(subject, 'update')
|
42
|
+
end
|
43
|
+
|
44
|
+
can :destroy, Comment do |c|
|
45
|
+
c.post_activity.allow?(subject, 'destroy')
|
46
|
+
end
|
47
|
+
|
32
48
|
# Activities
|
33
49
|
can :create, Activity do |a|
|
34
50
|
a.allow?(subject, 'create')
|
@@ -13,10 +13,11 @@ describe CommentsController do
|
|
13
13
|
|
14
14
|
describe "comment from user" do
|
15
15
|
before do
|
16
|
+
activity = Factory(:self_activity, :contact => Factory(:self_contact, :sender => @user.actor))
|
16
17
|
contact = @user.contact_to!(@user)
|
17
|
-
relation = @user.relation_customs.sort.first
|
18
18
|
|
19
|
-
|
19
|
+
model_attributes[:_contact_id] = contact.id
|
20
|
+
model_attributes[:_activity_parent_id] = activity.id
|
20
21
|
end
|
21
22
|
|
22
23
|
it_should_behave_like "Allow Creating"
|
@@ -25,10 +26,11 @@ describe CommentsController do
|
|
25
26
|
describe "comment to friend" do
|
26
27
|
before do
|
27
28
|
f = Factory(:friend, :contact => Factory(:contact, :receiver => @user.actor)).sender
|
29
|
+
activity = Factory(:self_activity, :contact => f.contact_to!(f))
|
28
30
|
contact = @user.contact_to!(f)
|
29
|
-
relation = f.relation_custom('friend')
|
30
31
|
|
31
|
-
|
32
|
+
model_attributes[:_contact_id] = contact.id
|
33
|
+
model_attributes[:_activity_parent_id] = activity.id
|
32
34
|
end
|
33
35
|
|
34
36
|
it_should_behave_like "Allow Creating"
|
@@ -37,10 +39,11 @@ describe CommentsController do
|
|
37
39
|
describe "post to acquaintance" do
|
38
40
|
before do
|
39
41
|
a = Factory(:acquaintance, :contact => Factory(:contact, :receiver => @user.actor)).sender
|
42
|
+
activity = Factory(:self_activity, :contact => a.contact_to!(a))
|
40
43
|
contact = @user.contact_to!(a)
|
41
|
-
relation = a.relation_custom('acquaintance')
|
42
44
|
|
43
|
-
|
45
|
+
model_attributes[:_contact_id] = contact.id
|
46
|
+
model_attributes[:_activity_parent_id] = activity.id
|
44
47
|
end
|
45
48
|
|
46
49
|
it_should_behave_like "Deny Creating"
|
@@ -56,4 +56,26 @@ describe ContactsController do
|
|
56
56
|
should == @user.relations.last
|
57
57
|
end
|
58
58
|
|
59
|
+
it "should create contact with several relations" do
|
60
|
+
sign_in @user
|
61
|
+
|
62
|
+
group = Factory(:group)
|
63
|
+
contact = @user.contact_to!(group)
|
64
|
+
# Initialize inverse contact
|
65
|
+
contact.inverse!
|
66
|
+
relations = [ @user.relation_custom('friend'), @user.relation_custom('partner') ]
|
67
|
+
|
68
|
+
|
69
|
+
put :update, :id => contact.id,
|
70
|
+
:contact => { :relation_ids => [ "gotcha", relations.map(&:id) ].flatten,
|
71
|
+
:message => "Testing" }
|
72
|
+
|
73
|
+
response.should redirect_to(contact.receiver_subject)
|
74
|
+
|
75
|
+
contact.reload.
|
76
|
+
ties.
|
77
|
+
map(&:relation).
|
78
|
+
map(&:id).sort.
|
79
|
+
should == relations.map(&:id).sort
|
80
|
+
end
|
59
81
|
end
|
@@ -16,6 +16,8 @@ SocialStream.setup do |config|
|
|
16
16
|
#
|
17
17
|
# config.objects = [ :post, :comment ]
|
18
18
|
|
19
|
-
# Form
|
20
|
-
#
|
19
|
+
# Form for activity objects to be loaded
|
20
|
+
# You can write your own activity objects
|
21
|
+
#
|
22
|
+
# config.activity_forms = [ :post, :document, :foo, :bar ]
|
21
23
|
end
|
data/spec/models/contact_spec.rb
CHANGED
@@ -12,5 +12,16 @@ describe Contact do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
context "with message" do
|
16
|
+
before do
|
17
|
+
@sent = Factory(:contact, :message => 'Hello')
|
18
|
+
@received = @sent.inverse!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should send to the receiver" do
|
22
|
+
@sent.message.should == 'Hello'
|
23
|
+
@sent.sender_subject.should eq(@received.receiver_subject)
|
24
|
+
end
|
25
|
+
end
|
15
26
|
|
16
27
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -18,12 +18,12 @@ Capybara.default_selector = :css
|
|
18
18
|
# FIXME orm
|
19
19
|
ActiveRecord::Migration.verbose = false
|
20
20
|
|
21
|
-
# Run any available migration
|
22
|
-
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
23
|
-
|
24
21
|
# Load support files
|
25
22
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
26
23
|
|
24
|
+
# Run any available migration
|
25
|
+
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
26
|
+
|
27
27
|
# Load Factories
|
28
28
|
require 'factory_girl'
|
29
29
|
Dir["#{File.dirname(__FILE__)}/factories/*.rb"].each {|f| require f}
|
data/spec/support/db.rb
CHANGED
@@ -6,7 +6,7 @@ rescue
|
|
6
6
|
puts "WARNING: ActsAsTaggableOnMigration failed to rollback"
|
7
7
|
end
|
8
8
|
|
9
|
-
%w(
|
9
|
+
%w(Mailboxer).each do |m|
|
10
10
|
begin
|
11
11
|
"Create#{ m }".constantize.down
|
12
12
|
rescue
|
@@ -15,7 +15,6 @@ end
|
|
15
15
|
end
|
16
16
|
|
17
17
|
CreateMailboxer.up
|
18
|
-
CreateSocialStream.up
|
19
18
|
ActsAsTaggableOnMigration.up
|
20
19
|
|
21
20
|
require File.expand_path("../../dummy/db/seeds", __FILE__)
|
data/spec/support/migrations.rb
CHANGED
@@ -9,10 +9,6 @@ class MigrationFinder
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
# Social Stream Base
|
13
|
-
MigrationFinder.new 'social_stream-base',
|
14
|
-
['..', 'db', 'migrate', '20110610112023_create_social_stream']
|
15
|
-
|
16
12
|
# acts-as-taggable-on
|
17
13
|
MigrationFinder.new 'acts-as-taggable-on',
|
18
14
|
["generators", "acts_as_taggable_on", "migration", "templates", "active_record", "migration"]
|
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: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 2
|
10
|
+
version: 0.6.2
|
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-07-
|
19
|
+
date: 2011-07-06 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -989,6 +989,7 @@ files:
|
|
989
989
|
- app/views/invitation_mailer/send_invitation.text.erb
|
990
990
|
- app/views/invitations/_new.html.erb
|
991
991
|
- app/views/invitations/new.html.erb
|
992
|
+
- app/views/invitations/new.js.erb
|
992
993
|
- app/views/layouts/_account.html.erb
|
993
994
|
- app/views/layouts/_flash.html.erb
|
994
995
|
- app/views/layouts/_footer.html.erb
|
@@ -1062,15 +1063,8 @@ files:
|
|
1062
1063
|
- app/views/subjects/_contacts.html.erb
|
1063
1064
|
- app/views/subjects/_tabs.html.erb
|
1064
1065
|
- app/views/toolbar/_home.html.erb
|
1065
|
-
- app/views/toolbar/_home_menu.html.erb
|
1066
|
-
- app/views/toolbar/_home_menu_options.html.erb
|
1067
|
-
- app/views/toolbar/_home_menu_options_subjects.html.erb
|
1068
|
-
- app/views/toolbar/_invitations_menu.html.erb
|
1069
1066
|
- app/views/toolbar/_logo.html.erb
|
1070
|
-
- app/views/toolbar/_message_menu.html.erb
|
1071
|
-
- app/views/toolbar/_notifications_menu.html.erb
|
1072
1067
|
- app/views/toolbar/_profile.html.erb
|
1073
|
-
- app/views/toolbar/_profile_menu.html.erb
|
1074
1068
|
- app/views/toolbar/_profile_menu_basic_options.html.erb
|
1075
1069
|
- app/views/toolbar/_profile_menu_options.html.erb
|
1076
1070
|
- app/views/toolbar/_profile_menu_tie_options.html.erb
|
@@ -1087,6 +1081,7 @@ files:
|
|
1087
1081
|
- config/locales/en.yml
|
1088
1082
|
- config/routes.rb
|
1089
1083
|
- db/migrate/20110610112023_create_social_stream.rb
|
1084
|
+
- db/migrate/20110705103202_empty_ties_count.rb
|
1090
1085
|
- lib/acts_as_taggable_on/acts_as_taggable_on/dirty.rb
|
1091
1086
|
- lib/acts_as_taggable_on/social_stream.rb
|
1092
1087
|
- lib/generators/social_stream/base/install_generator.rb
|
@@ -1149,7 +1144,6 @@ files:
|
|
1149
1144
|
- spec/dummy/config/navigation.rb
|
1150
1145
|
- spec/dummy/config/relations.yml
|
1151
1146
|
- spec/dummy/config/routes.rb
|
1152
|
-
- spec/dummy/db/migrate/.gitkeep
|
1153
1147
|
- spec/dummy/db/schema.rb
|
1154
1148
|
- spec/dummy/db/seeds.rb
|
1155
1149
|
- spec/dummy/public/404.html
|
@@ -1,13 +0,0 @@
|
|
1
|
-
<% content_for :headers do %>
|
2
|
-
<%= stylesheet_link_tag "menu", :media => "screen, projection" %>
|
3
|
-
<%= javascript_include_tag 'menu' %>
|
4
|
-
<% end %>
|
5
|
-
|
6
|
-
<div id="menu_lateral">
|
7
|
-
<%= render :partial => "toolbar/home_menu_options" %>
|
8
|
-
<hr>
|
9
|
-
Testing SimpleNavigation<br>Please move along
|
10
|
-
<hr>
|
11
|
-
<%= yield(:toolbar_menu).empty? ? default_toolbar_menu : yield(:toolbar_menu)%>
|
12
|
-
</div>
|
13
|
-
|
@@ -1,41 +0,0 @@
|
|
1
|
-
<ul class="menu">
|
2
|
-
|
3
|
-
<%= menu_options[:notifications] || capture do %>
|
4
|
-
<%= render :partial =>'toolbar/notifications_menu'%>
|
5
|
-
<% end %>
|
6
|
-
|
7
|
-
|
8
|
-
<%= menu_options[:messages] || capture do %>
|
9
|
-
<%= render :partial =>'toolbar/message_menu'%>
|
10
|
-
<% end %>
|
11
|
-
|
12
|
-
<%= menu_options[:contacts] || capture do %>
|
13
|
-
<li>
|
14
|
-
<%= link_to( image_tag("btn/btn_friend.png", :class => "menu_icon")+t('contact.other'), '#', :id => "contacts_menu") %>
|
15
|
-
<ul>
|
16
|
-
<%= menu_options[:invitations] || capture do %>
|
17
|
-
<%= render :partial =>'toolbar/invitations_menu'%>
|
18
|
-
<% end %>
|
19
|
-
<% current_subject.relation_customs.sort.each do |r| %>
|
20
|
-
<li>
|
21
|
-
<%= link_to image_tag("btn/btn_friend.png", :class => "menu_icon") + r.name , contacts_path(:relation => r.id) %>
|
22
|
-
</li>
|
23
|
-
<% end %>
|
24
|
-
</ul>
|
25
|
-
</li>
|
26
|
-
<% end %>
|
27
|
-
|
28
|
-
<%= menu_options[:subjects] || capture do %>
|
29
|
-
<%= render :partial => 'toolbar/home_menu_options_subjects' %>
|
30
|
-
<% end %>
|
31
|
-
|
32
|
-
<% if SocialStream.activity_forms.include? :document %>
|
33
|
-
<%= menu_options[:uploads] || capture do %>
|
34
|
-
<%= render :partial =>'toolbar/uploads_menu'%>
|
35
|
-
<% end %>
|
36
|
-
<% end %>
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
</ul>
|
41
|
-
|
@@ -1,12 +0,0 @@
|
|
1
|
-
<%= menu_options[:groups] || capture do %>
|
2
|
-
<li>
|
3
|
-
<%= link_to( image_tag("btn/btn_group.png", :class => "menu_icon")+t('group.other'), '#', :id => "groups_menu") %>
|
4
|
-
<ul>
|
5
|
-
<li>
|
6
|
-
<%= link_to( image_tag("btn/btn_group.png", :class => "menu_icon")+t('group.new.action'), new_group_path('group' => { '_founder' => current_subject.slug })) %>
|
7
|
-
</li>
|
8
|
-
</ul>
|
9
|
-
</li>
|
10
|
-
|
11
|
-
<% end %>
|
12
|
-
|
@@ -1,17 +0,0 @@
|
|
1
|
-
<li>
|
2
|
-
<%= link_to( image_tag("btn/new.png", :class => "menu_icon")+t('message.other')+" (" + current_subject.mailbox.inbox(:unread => true).count.to_s + ")", '#', :id => "messages_menu") %>
|
3
|
-
<ul>
|
4
|
-
<li>
|
5
|
-
<%= link_to( image_tag("btn/message_new.png", :class => "menu_icon")+ t('message.new'), new_message_path) %>
|
6
|
-
</li>
|
7
|
-
<li>
|
8
|
-
<%= link_to( image_tag("btn/message_inbox.png", :class => "menu_icon")+t('message.inbox')+" (" + current_subject.mailbox.inbox(:unread => true).count.to_s + ")", conversations_path, :remote => true) %>
|
9
|
-
</li>
|
10
|
-
<li>
|
11
|
-
<%= link_to( image_tag("btn/message_sentbox.png", :class => "menu_icon")+t('message.sentbox'), conversations_path(:box => :sentbox), :remote => true) %>
|
12
|
-
</li>
|
13
|
-
<li>
|
14
|
-
<%= link_to( image_tag("btn/message_trash.png", :class => "menu_icon")+t('message.trash'), conversations_path(:box => :trash), :remote => true) %>
|
15
|
-
</li>
|
16
|
-
</ul>
|
17
|
-
</li>
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<% content_for :headers do %>
|
2
|
-
<%= stylesheet_link_tag "menu", :media => "screen, projection" %>
|
3
|
-
<%= javascript_include_tag 'menu' %>
|
4
|
-
<% end %>
|
5
|
-
|
6
|
-
<div id="menu_lateral">
|
7
|
-
<ul class="menu">
|
8
|
-
<% unless subject == current_subject %>
|
9
|
-
<%= render :partial => "toolbar/profile_menu_tie_options", :locals => { :subject => subject } %>
|
10
|
-
<% end %>
|
11
|
-
|
12
|
-
<%= render :partial => "toolbar/profile_menu_basic_options", :locals => { :subject => subject } %>
|
13
|
-
</ul>
|
14
|
-
</div>
|
15
|
-
<div class="space_center"></div>
|
File without changes
|