social_stream-base 0.6.2 → 0.6.3
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/assets/javascripts/jquery.validate.js +9 -1
- data/app/assets/stylesheets/menu.css +1 -1
- data/app/helpers/contacts_helper.rb +10 -8
- data/app/helpers/toolbar_helper.rb +21 -6
- data/app/mailers/invitation_mailer.rb +1 -1
- data/app/models/actor.rb +1 -1
- data/app/models/contact.rb +2 -0
- data/app/views/comments/_new.html.erb +2 -0
- data/app/views/invitation_mailer/send_invitation.html.erb +28 -11
- data/app/views/invitations/_new.html.erb +1 -1
- data/app/views/toolbar/_home.html.erb +0 -4
- data/app/views/toolbar/_profile.html.erb +3 -15
- data/lib/social_stream/base/version.rb +1 -1
- data/social_stream-base.gemspec +1 -1
- data/spec/controllers/comments_controller_spec.rb +11 -0
- data/spec/models/actor_spec.rb +9 -0
- metadata +6 -9
- data/app/views/toolbar/_profile_menu_basic_options.html.erb +0 -5
- data/app/views/toolbar/_profile_menu_options.html.erb +0 -10
- data/app/views/toolbar/_profile_menu_tie_options.html.erb +0 -26
@@ -14,7 +14,7 @@
|
|
14
14
|
*/
|
15
15
|
|
16
16
|
/*
|
17
|
-
* This have been modified: added telephone number validation
|
17
|
+
* This have been modified: added telephone number and emails validation
|
18
18
|
*/
|
19
19
|
|
20
20
|
(function($) {
|
@@ -242,6 +242,7 @@ $.extend($.validator, {
|
|
242
242
|
required: " This field is required.",
|
243
243
|
remote: " Please fix this field.",
|
244
244
|
email: " Please enter a valid email address.",
|
245
|
+
emails: " Please enter valid email addresses.",
|
245
246
|
url: " Please enter a valid URL.",
|
246
247
|
date: " Please enter a valid date.",
|
247
248
|
dateISO: " Please enter a valid date (ISO).",
|
@@ -717,6 +718,8 @@ $.extend($.validator, {
|
|
717
718
|
classRuleSettings: {
|
718
719
|
required: {required: true},
|
719
720
|
email: {email: true},
|
721
|
+
//ADDED
|
722
|
+
emails: {emails: true},
|
720
723
|
url: {url: true},
|
721
724
|
date: {date: true},
|
722
725
|
dateISO: {dateISO: true},
|
@@ -972,6 +975,11 @@ $.extend($.validator, {
|
|
972
975
|
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
|
973
976
|
return this.optional(element) || /^((([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])))\.?$/i.test(value);
|
974
977
|
},
|
978
|
+
//ADDED
|
979
|
+
emails: function(value, element) {
|
980
|
+
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
|
981
|
+
return this.optional(element) || /^((, *)*((([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])))\.?)+$/i.test(value);
|
982
|
+
},
|
975
983
|
|
976
984
|
// http://docs.jquery.com/Plugins/Validation/Methods/url
|
977
985
|
url: function(value, element) {
|
@@ -8,7 +8,7 @@
|
|
8
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
10
|
.toolbar_menu li ul li a:hover { background: #DEEFF8; border-left: 5px #2A3890 solid; padding-left: 15px;}
|
11
|
-
|
11
|
+
.toolbar_menu img { vertical-align: middle; padding-bottom: 3px; padding-right: 3px; padding-left: 3px; display: inline-block;}
|
12
12
|
/*
|
13
13
|
div.panel { border: 1px #2A3890 solid; padding: 5px; margin-top: 0px;}
|
14
14
|
ul.menu li ul li a:hover, ul.menu ul.menu li ul li a:hover { background: #DEEFF8; border-left: 5px #2A3890 solid;
|
@@ -7,16 +7,18 @@ module ContactsHelper
|
|
7
7
|
# to create new ties to actor
|
8
8
|
def contact_to(a)
|
9
9
|
if user_signed_in?
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
edit_contact_path(current_subject.contact_to!(a)),
|
15
|
-
:title => t("contact.new.title",
|
16
|
-
:name => a.name)
|
17
|
-
end
|
10
|
+
link_to contact_status(a),
|
11
|
+
edit_contact_path(current_subject.contact_to!(a)),
|
12
|
+
:title => t("contact.new.title",
|
13
|
+
:name => a.name)
|
18
14
|
else
|
19
15
|
link_to t("contact.new.link"), new_user_session_path
|
20
16
|
end
|
21
17
|
end
|
18
|
+
|
19
|
+
def contact_status(a)
|
20
|
+
current_subject.ties_to?(a) ?
|
21
|
+
current_subject.ties_to(a).map(&:relation_name).join(", ") :
|
22
|
+
t("contact.new.link")
|
23
|
+
end
|
22
24
|
end
|
@@ -39,10 +39,6 @@ module ToolbarHelper
|
|
39
39
|
# <% toolbar :profile => @group, :option => :contacts %>
|
40
40
|
#
|
41
41
|
def toolbar(options = {}, &block)
|
42
|
-
old_toolbar(options,&block)
|
43
|
-
end
|
44
|
-
|
45
|
-
def old_toolbar(options = {}, &block)
|
46
42
|
if options[:option] && block_given?
|
47
43
|
menu_options[options[:option]] = capture(&block)
|
48
44
|
end
|
@@ -85,7 +81,7 @@ module ToolbarHelper
|
|
85
81
|
end
|
86
82
|
|
87
83
|
def default_toolbar_menu
|
88
|
-
|
84
|
+
home_toolbar_menu
|
89
85
|
end
|
90
86
|
|
91
87
|
def home_toolbar_menu
|
@@ -147,15 +143,34 @@ module ToolbarHelper
|
|
147
143
|
return render_items items
|
148
144
|
end
|
149
145
|
|
150
|
-
def profile_toolbar_menu(subject=current_subject)
|
146
|
+
def profile_toolbar_menu(subject = current_subject)
|
151
147
|
items = Array.new
|
152
148
|
|
153
149
|
if subject!=current_subject
|
150
|
+
#Like button
|
154
151
|
items << {:key => :like_button,
|
155
152
|
:name => link_like_params(subject)[0],
|
156
153
|
:url => link_like_params(subject)[1],
|
157
154
|
:options => {:link => link_like_params(subject)[2]}}
|
155
|
+
|
156
|
+
if user_signed_in?
|
157
|
+
#Relation button
|
158
|
+
items << {:key => :subject_relation,
|
159
|
+
:name => image_tag("btn/btn_friend.png") + contact_status(subject),
|
160
|
+
:url => edit_contact_path(current_subject.contact_to!(subject))
|
161
|
+
}
|
162
|
+
#Send message button
|
163
|
+
items << {:key => :send_message,
|
164
|
+
:name => image_tag("btn/btn_send.png")+t('message.send'),
|
165
|
+
:url => new_message_path(:receiver => subject.slug)
|
166
|
+
}
|
167
|
+
end
|
158
168
|
end
|
169
|
+
#Information button
|
170
|
+
items << {:key => :subject_info,
|
171
|
+
:name => image_tag("btn/btn_edit.png")+t('menu.information'),
|
172
|
+
:url => [subject, :profile]
|
173
|
+
}
|
159
174
|
return render_items items
|
160
175
|
end
|
161
176
|
|
data/app/models/actor.rb
CHANGED
@@ -369,7 +369,7 @@ class Actor < ActiveRecord::Base
|
|
369
369
|
|
370
370
|
# Build a new {Contact} from each that has not inverse
|
371
371
|
def pending_contacts
|
372
|
-
received_contacts.pending.all.map do |c|
|
372
|
+
received_contacts.not_reflexive.pending.all.map do |c|
|
373
373
|
c.inverse ||
|
374
374
|
c.receiver.contact_to!(c.sender)
|
375
375
|
end
|
data/app/models/contact.rb
CHANGED
@@ -50,6 +50,8 @@ class Contact < ActiveRecord::Base
|
|
50
50
|
|
51
51
|
scope :active, where(arel_table[:ties_count].gt(0))
|
52
52
|
|
53
|
+
scope :not_reflexive, where(arel_table[:sender_id].not_eq(arel_table[:receiver_id]))
|
54
|
+
|
53
55
|
validates_presence_of :sender_id, :receiver_id
|
54
56
|
validates_uniqueness_of :sender_id, :scope => :receiver_id
|
55
57
|
validates_uniqueness_of :receiver_id, :scope => :sender_id
|
@@ -7,6 +7,8 @@
|
|
7
7
|
),
|
8
8
|
:html => { :class => "new_comment", :id => "new_comment"+dom_id(activity) },
|
9
9
|
:remote => true do |f| %>
|
10
|
+
|
11
|
+
<%= f.hidden_field :_contact_id %>
|
10
12
|
<%= f.hidden_field :_activity_parent_id %>
|
11
13
|
|
12
14
|
<%= f.text_field :text, :class =>"input_new_comments" , :id => "comment_text_"+dom_id(activity) %>
|
@@ -1,38 +1,55 @@
|
|
1
1
|
<div>
|
2
|
-
<div
|
3
|
-
<
|
2
|
+
<div>
|
3
|
+
<span id="name" style="font-weight: bold;"><%= @sender.name %></span> has invited you to <%= link_to( t('socialstream'), new_user_registration_url)%>
|
4
|
+
<br/>
|
5
|
+
<table width="50%" style="border-style: solid; border-color: #2A3890; margin:10px; border-width: 2px;">
|
6
|
+
<tr>
|
7
|
+
<td><img src="http://<%= ActionMailer::Base.default_url_options[:host] +@sender.logo.url(:profile)%>" alt="<%=@sender.name%>"></td>
|
8
|
+
<td>"<%= @message%>"</td>
|
9
|
+
</tr>
|
10
|
+
</table>
|
4
11
|
</div>
|
5
12
|
<div>
|
6
13
|
<div>
|
7
|
-
<%= t('frontpage.share.default')
|
14
|
+
<%= t('frontpage.share.default')%>:
|
8
15
|
</div>
|
9
16
|
<div>
|
10
17
|
<ul>
|
11
|
-
<li
|
12
|
-
|
18
|
+
<li>
|
19
|
+
<%= t('frontpage.share.sentence1') %>
|
20
|
+
</li>
|
21
|
+
<li>
|
22
|
+
<%= t('frontpage.share.sentence2') %>
|
23
|
+
</li>
|
13
24
|
</ul>
|
14
25
|
</div>
|
15
26
|
</div>
|
16
|
-
|
27
|
+
|
17
28
|
<div>
|
18
29
|
<div>
|
19
|
-
<%= t('frontpage.meet.default')
|
30
|
+
<%= t('frontpage.meet.default')%>:
|
20
31
|
</div>
|
21
32
|
<div>
|
22
33
|
<ul>
|
23
|
-
<li
|
34
|
+
<li>
|
35
|
+
<%= t('frontpage.meet.sentence1') %>
|
36
|
+
</li>
|
24
37
|
</ul>
|
25
38
|
</div>
|
26
39
|
</div>
|
27
40
|
|
28
41
|
<div>
|
29
42
|
<div>
|
30
|
-
<%= t('frontpage.collaborate.default')
|
43
|
+
<%= t('frontpage.collaborate.default')%>:
|
31
44
|
</div>
|
32
45
|
<div>
|
33
46
|
<ul>
|
34
|
-
<li
|
35
|
-
|
47
|
+
<li>
|
48
|
+
<%= t('frontpage.collaborate.sentence1') %>
|
49
|
+
</li>
|
50
|
+
<li>
|
51
|
+
<%= t('frontpage.collaborate.sentence2') %>
|
52
|
+
</li>
|
36
53
|
</ul>
|
37
54
|
</div>
|
38
55
|
</div>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% content_for :headers do %>
|
2
|
-
|
3
|
-
|
2
|
+
<%= stylesheet_link_tag "menu", :media => "screen, projection" %>
|
3
|
+
<%= javascript_include_tag 'menu' %>
|
4
4
|
<% end %>
|
5
5
|
|
6
6
|
<%= render :partial => 'toolbar/logo', :locals => { :subject => subject } %>
|
@@ -9,19 +9,7 @@
|
|
9
9
|
</div>
|
10
10
|
|
11
11
|
<div id="menu_lateral" class="toolbar_menu">
|
12
|
-
|
13
|
-
<% unless subject == current_subject %>
|
14
|
-
<%= render :partial => "toolbar/profile_menu_tie_options", :locals => { :subject => subject } %>
|
15
|
-
<% end %>
|
16
|
-
|
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) %>
|
12
|
+
<%= yield(:toolbar_menu).empty? ? profile_toolbar_menu(subject) : yield(:toolbar_menu) %>
|
25
13
|
</div>
|
26
14
|
|
27
15
|
<div class="block space_center">
|
data/social_stream-base.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
# Slug generation
|
24
24
|
s.add_runtime_dependency('stringex', '~> 1.2.0')
|
25
25
|
# Avatar attachments
|
26
|
-
s.add_runtime_dependency('avatars_for_rails', '~> 0.1.
|
26
|
+
s.add_runtime_dependency('avatars_for_rails', '~> 0.1.3')
|
27
27
|
# jQuery
|
28
28
|
s.add_runtime_dependency('jquery-rails', '~> 1.0.9')
|
29
29
|
# Authorization
|
@@ -21,6 +21,17 @@ describe CommentsController do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it_should_behave_like "Allow Creating"
|
24
|
+
|
25
|
+
it "should create with js" do
|
26
|
+
count = model_count
|
27
|
+
post :create, attributes.merge(:format => :js)
|
28
|
+
|
29
|
+
resource = assigns(model_sym)
|
30
|
+
|
31
|
+
model_count.should eq(count + 1)
|
32
|
+
resource.should be_valid
|
33
|
+
response.should be_success
|
34
|
+
end
|
24
35
|
end
|
25
36
|
|
26
37
|
describe "comment to friend" do
|
data/spec/models/actor_spec.rb
CHANGED
@@ -16,4 +16,13 @@ describe Actor do
|
|
16
16
|
it "should generate relations" do
|
17
17
|
assert Factory(:actor).relation_customs.present?
|
18
18
|
end
|
19
|
+
|
20
|
+
context 'pending contacts' do
|
21
|
+
it 'should not include self' do
|
22
|
+
a = Factory(:actor)
|
23
|
+
c = a.contact_to!(a)
|
24
|
+
|
25
|
+
a.pending_contacts.should_not include(c)
|
26
|
+
end
|
27
|
+
end
|
19
28
|
end
|
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: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- GING - DIT - UPM
|
@@ -107,12 +107,12 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
hash:
|
110
|
+
hash: 29
|
111
111
|
segments:
|
112
112
|
- 0
|
113
113
|
- 1
|
114
|
-
-
|
115
|
-
version: 0.1.
|
114
|
+
- 3
|
115
|
+
version: 0.1.3
|
116
116
|
type: :runtime
|
117
117
|
version_requirements: *id006
|
118
118
|
- !ruby/object:Gem::Dependency
|
@@ -1065,9 +1065,6 @@ files:
|
|
1065
1065
|
- app/views/toolbar/_home.html.erb
|
1066
1066
|
- app/views/toolbar/_logo.html.erb
|
1067
1067
|
- app/views/toolbar/_profile.html.erb
|
1068
|
-
- app/views/toolbar/_profile_menu_basic_options.html.erb
|
1069
|
-
- app/views/toolbar/_profile_menu_options.html.erb
|
1070
|
-
- app/views/toolbar/_profile_menu_tie_options.html.erb
|
1071
1068
|
- app/views/users/_groups.html.erb
|
1072
1069
|
- app/views/users/_index.html.erb
|
1073
1070
|
- app/views/users/_sidebar_index.html.erb
|
@@ -1,10 +0,0 @@
|
|
1
|
-
<%= menu_options[:profile] || capture do %>
|
2
|
-
<li>
|
3
|
-
<%= link_to( image_tag("btn/btn_edit.png", :class => "menu_icon")+t('menu.information'), [subject, :profile]) %>
|
4
|
-
</li>
|
5
|
-
<% end %>
|
6
|
-
|
7
|
-
<%= menu_options[:uploads] || capture do %>
|
8
|
-
<%= render :partial =>'toolbar/home_menu_uploads'%>
|
9
|
-
<% end %>
|
10
|
-
|
@@ -1,26 +0,0 @@
|
|
1
|
-
<%= menu_options[:like] || capture do %>
|
2
|
-
<li>
|
3
|
-
<div class="verb_like" id="like_<%= dom_id(subject) %>">
|
4
|
-
<%= link_like(subject)%>
|
5
|
-
</div>
|
6
|
-
</li>
|
7
|
-
<% end %>
|
8
|
-
|
9
|
-
<%= menu_options[:contacts] || capture do %>
|
10
|
-
<!-- TODO: create helper -->
|
11
|
-
<% if user_signed_in? %>
|
12
|
-
<li >
|
13
|
-
<%= link_to image_tag("btn/btn_friend.png", :class => "menu_icon") +
|
14
|
-
current_subject.ties_to(subject).map(&:relation_name).join(", "),
|
15
|
-
edit_contact_path(current_subject.contact_to!(subject)) %>
|
16
|
-
</li>
|
17
|
-
<% end %>
|
18
|
-
<% end %>
|
19
|
-
|
20
|
-
<%= menu_options[:messages] || capture do %>
|
21
|
-
<% if user_signed_in? %>
|
22
|
-
<li >
|
23
|
-
<%= link_to(image_tag("btn/btn_send.png", :class => "menu_icon")+t('message.send'), new_message_path(:receiver => subject.slug)) %>
|
24
|
-
</li>
|
25
|
-
<% end %>
|
26
|
-
<% end %>
|