social_stream-base 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/app/assets/images/arrow-end.png +0 -0
  2. data/app/assets/images/arrow-start.png +0 -0
  3. data/app/assets/images/arrow.png +0 -0
  4. data/app/assets/javascripts/layouts.js +0 -1
  5. data/app/assets/stylesheets/frontpage.css +2 -2
  6. data/app/assets/stylesheets/location.css +36 -0
  7. data/app/helpers/location_helper.rb +3 -5
  8. data/app/helpers/toolbar_helper.rb +5 -6
  9. data/app/views/avatars/index.html.erb +2 -2
  10. data/app/views/contacts/edit.html.erb +2 -2
  11. data/app/views/conversations/_show.html.erb +2 -2
  12. data/app/views/conversations/index.html.erb +1 -3
  13. data/app/views/devise/registrations/edit.html.erb +1 -1
  14. data/app/views/frontpage/_header.html.erb +1 -1
  15. data/app/views/home/index.html.erb +1 -2
  16. data/app/views/invitation_mailer/send_invitation.html.erb +1 -1
  17. data/app/views/invitation_mailer/send_invitation.text.erb +2 -2
  18. data/app/views/invitations/new.html.erb +1 -1
  19. data/app/views/layouts/_footer.html.erb +1 -1
  20. data/app/views/layouts/_header.erb +1 -1
  21. data/app/views/layouts/application.html.erb +1 -1
  22. data/app/views/layouts/frontpage.html.erb +1 -1
  23. data/app/views/location/_location_body.html.erb +18 -0
  24. data/app/views/message_mailer/new_message_email.html.erb +2 -2
  25. data/app/views/message_mailer/new_message_email.text.erb +1 -1
  26. data/app/views/message_mailer/reply_message_email.html.erb +2 -2
  27. data/app/views/message_mailer/reply_message_email.text.erb +1 -1
  28. data/app/views/messages/new.html.erb +2 -2
  29. data/app/views/profiles/edit.html.erb +6 -6
  30. data/app/views/profiles/show.html.erb +1 -2
  31. data/app/views/users/index.html.erb +1 -1
  32. data/app/views/users/show.html.erb +1 -2
  33. data/config/locales/en.yml +7 -6
  34. data/lib/social_stream-base.rb +4 -1
  35. data/lib/social_stream/base.rb +6 -0
  36. data/lib/social_stream/base/version.rb +1 -1
  37. data/lib/social_stream/toolbar_config/base.rb +87 -0
  38. data/lib/tasks/workers.rake +163 -0
  39. metadata +11 -5
  40. data/lib/social_stream/toolbar_config.rb +0 -99
Binary file
Binary file
Binary file
@@ -4,7 +4,6 @@
4
4
  //
5
5
  $(function() {
6
6
  jQuery('ul.sf-menu').superfish({
7
- delay: 2000, // one second delay on mouseout
8
7
  animation: {
9
8
  height: 'show'
10
9
  }, // fade-in and slide-down animation
@@ -19,8 +19,8 @@ span.find{ padding-right:5px;}
19
19
  #login{ padding-top: 5px;}
20
20
  .instructions{text-align: left; padding-bottom: 5px;}
21
21
  #remember{padding-left:22%; text-align: left;}
22
- #user_password_confirmation{vertical-align: 30%;}
23
- #user_password_confirmation_label {padding-top: 0;}
22
+ #welcome #user_password_confirmation{vertical-align: 30%;}
23
+ #welcome #user_password_confirmation_label {padding-top: 0;}
24
24
  #welcome{ margin: 50px auto 50px auto; width:330px; padding:20px; border: 4px solid #BDC7D8;
25
25
  background-color: white;-moz-border-radius: 20px;
26
26
  -webkit-border-radius: 20px; border-radius: 20px;}
@@ -0,0 +1,36 @@
1
+ #map_location .first{
2
+ background: transparent url("/assets/arrow-start.png") no-repeat top left;
3
+ display: inline-block;
4
+ height: 23px;
5
+ margin-left: 5px;
6
+ }
7
+ #map_location .first span{
8
+ margin-left:5px;
9
+ }
10
+ #map_location .last{
11
+ margin-left: 5px;
12
+ }
13
+ #map_location .last a{
14
+ font-size: inherit;
15
+ }
16
+ #map_location .mid{
17
+ background: transparent url("/assets/arrow.png") no-repeat top right;
18
+ }
19
+ #map_location .penultimate{
20
+ background: transparent url("/assets/arrow-end.png") no-repeat top right;
21
+ }
22
+ #map_location .mid, #map_location .penultimate{
23
+ color: white;
24
+ padding-left:5px;
25
+ padding-right: 12px;
26
+ }
27
+ #map_location .last, #map_location .mid, #map_location .penultimate{
28
+ display: inline-block;
29
+ font-size: 13px;
30
+ height: 23px;
31
+ line-height: 23px;
32
+ }
33
+ #map_location .mid a, #map_location .penultimate a{
34
+ color: inherit;
35
+ font-size: inherit;
36
+ }
@@ -16,15 +16,13 @@ module LocationHelper
16
16
  # partial => location/_location.html.erb
17
17
  #
18
18
  # Example:
19
- # Render a location with a two leves depth:
19
+ # Render a location with two leves depth:
20
20
  #
21
21
  # <%= location(link_to(leve1.name, level1.url),link_to(leve2.name, level2.url)) %>
22
22
  #
23
23
  def location(*stack)
24
- location_body = t('location.base')
25
- stack.collect {|level|
26
- location_body << t('location.separator') + level
27
- }
24
+
25
+ location_body = render :partial => "location/location_body", :locals=>{:stack => stack}
28
26
 
29
27
  location_div = capture do
30
28
  render :partial => "location/location", :locals=>{:location_body => location_body}
@@ -1,4 +1,7 @@
1
1
  module ToolbarHelper
2
+ # Configuration of toolbar items
3
+ include SocialStream::ToolbarConfig
4
+
2
5
  # Define the toolbar content for your view. There are two typical cases, depending on the value of
3
6
  # options[:profile]
4
7
  # * If present, render the profile menu for the {SocialStream::Models::Subject subject}
@@ -82,21 +85,17 @@ module ToolbarHelper
82
85
 
83
86
  #Prints the home toolbar menu.
84
87
  def home_toolbar_menu
85
- default_home_toolbar_menu
88
+ render_items home_toolbar_items
86
89
  end
87
90
 
88
91
  #Prints the home profile menu.
89
92
  def profile_toolbar_menu(subject=current_subject)
90
- default_profile_toolbar_menu(subject)
93
+ render_items profile_toolbar_items(subject)
91
94
  end
92
95
 
93
-
94
96
  #Renders array of navigation items with simple_navigation
95
97
  def render_items(items)
96
98
  menu = render_navigation :items => items
97
99
  return raw menu
98
100
  end
99
-
100
-
101
- include SocialStream::ToolbarConfig
102
101
  end
@@ -21,8 +21,8 @@
21
21
  <% end %>
22
22
 
23
23
  <%= location(
24
- link_to(image_tag("btn/btn_edit.png", :class => "menu_icon")+t('profile.one'), [current_subject,:profile]),
25
- link_to(image_tag("btn/edit.png", :class => "menu_icon")+t('avatar.other'), avatars_path)
24
+ link_to(t('menu.information'), [current_subject,:profile]),
25
+ link_to(t('avatar.other'), avatars_path)
26
26
  ) %>
27
27
 
28
28
  <%= render :partial => 'list' %>
@@ -1,6 +1,6 @@
1
1
  <% toolbar :profile => @contact.receiver_subject, :option => 'contacts' %>
2
2
 
3
- <% location link_to(image_tag("btn/btn_friend.png", :class => "menu_icon") +
4
- t("contact.#{ @contact.action }.title", :name => @contact.receiver.name), edit_contact_path(@contact.to_param)) %>
3
+ <% location link_to(t("contact.#{ @contact.action }.title", :name => @contact.receiver.name),
4
+ edit_contact_path(@contact.to_param)) %>
5
5
 
6
6
  <%= render :partial => 'form' %>
@@ -1,6 +1,6 @@
1
1
  <%= location(
2
- link_to(image_tag("btn/message_" + @box + ".png", :class => "menu_icon")+t('message.' + @box), conversations_path(:box => @box),:remote => true),
3
- link_to(image_tag("btn/message_conversation.png", :class => "menu_icon")+ truncate(@conversation.subject, :length => 45), conversation_path(@conversation.id,:box => @box,:page => params[:page]))
2
+ link_to(t('message.' + @box), conversations_path(:box => @box),:remote => true),
3
+ link_to(truncate(@conversation.subject, :length => 45), conversation_path(@conversation.id,:box => @box,:page => params[:page]))
4
4
  ) %>
5
5
 
6
6
  <br class="clearfloat" />
@@ -10,9 +10,7 @@
10
10
  $('.pagination a').attr('data-remote', 'true');
11
11
  <% end %>
12
12
 
13
- <%= location(
14
- link_to(image_tag("btn/message_" + @box + ".png", :class => "menu_icon")+t('message.' + @box), conversations_path(:box => @box),:remote => true)
15
- ) %>
13
+ <%= location(link_to(t('message.' + @box), conversations_path(:box => @box),:remote => true)) %>
16
14
 
17
15
  <% toolbar :option => :messages %>
18
16
 
@@ -1,6 +1,6 @@
1
1
  <% toolbar :profile => current_subject %>
2
2
 
3
- <%= location(image_tag("btn/btn_account.png", :class => "menu_icon")+t('account.one'),
3
+ <%= location(t('account.one'),
4
4
  link_to(t('account.edit'), edit_user_registration_path)
5
5
  ) %>
6
6
 
@@ -1,6 +1,6 @@
1
1
  <div id="headerFront">
2
2
  <div class="banner_top">
3
- <div id="logo"><%= link_to(image_tag('logo.png', :alt => t('socialstream')), '/'); %></div>
3
+ <div id="logo"><%= link_to(image_tag('logo.png', :alt => t('site.name')), '/'); %></div>
4
4
  <div class="div_login">
5
5
  <%= form_for User.new, :as => :user, :url => user_session_path do |f| -%>
6
6
  <span><%= f.label :email %></span>
@@ -2,8 +2,7 @@
2
2
  <% render :partial => 'sidebar' %>
3
3
  <% end %>
4
4
 
5
- <%= location(link_to(image_tag("btn/btn_home.png", :class => "btn_config")+t('home')+": "+
6
- content_tag(:span, ( sanitize current_subject.name), :class=>"name_group")))%>
5
+ <%= location(link_to(t('home')+": "+ truncate_name(sanitize current_subject.name)))%>
7
6
 
8
7
  <% toolbar %>
9
8
 
@@ -7,7 +7,7 @@
7
7
  <div>
8
8
  <div>
9
9
  <div style="padding: 10px 5px 5px 5px;">
10
- <span id="name" style="font-weight: bold;"><%= @sender.name %></span> has invited you to <%= link_to( t('socialstream'), new_user_registration_url)%>
10
+ <span id="name" style="font-weight: bold;"><%= @sender.name %></span> has invited you to <%= link_to( t('site.name'), new_user_registration_url)%>
11
11
  </div>
12
12
  <div style="position: static;padding: 5px; border: #2A3890 solid 2px; background-color: #E1EEF5; margin:10px; min-height: 125px; width: 500px;">
13
13
  <div style="float:left; margin-right:7px; border: thin solid #D4E4EA; background-color: white; max-height: 119px;">
@@ -1,4 +1,4 @@
1
- <%= @sender.name %> has invited you to <%= t('socialstream')%>: <%= new_user_registration_url%>
1
+ <%= @sender.name %> has invited you to <%= t('site.name')%>: <%= new_user_registration_url%>
2
2
 
3
3
  <% if @message.blank? %>
4
4
  <%= t('invitation.join_me')%>
@@ -17,4 +17,4 @@
17
17
 
18
18
  <%= t('frontpage.collaborate.default')%>:
19
19
  <%= t('frontpage.collaborate.sentence1') %>
20
- <%= t('frontpage.collaborate.sentence2') %>
20
+ <%= t('frontpage.collaborate.sentence2') %>
@@ -5,7 +5,7 @@
5
5
  <% end %>
6
6
 
7
7
  <%= location(
8
- link_to(image_tag("btn/btn_invitation.png", :class => "menu_icon")+t('invitation.other'), new_invitation_path)
8
+ link_to(t('invitation.other'), new_invitation_path)
9
9
  ) %>
10
10
 
11
11
  <%= render :partial => 'new' %>
@@ -7,7 +7,7 @@
7
7
  </div>
8
8
  <ul>
9
9
  <li>2011 © </li>
10
- <li id="trade_mark"><%= link_to t('socialstream'), 'http://social-stream.dit.upm.es/' %></li>
10
+ <li id="trade_mark"><%= link_to t('site.name'), 'http://social-stream.dit.upm.es/' %></li>
11
11
  </ul>
12
12
  </div>
13
13
  </div>
@@ -2,7 +2,7 @@
2
2
  <div class="banner_top banner_top_height">
3
3
  <div id="header_left">
4
4
  <div id="logo_txt">
5
- <%= link_to(image_tag('header-logo.png', :alt => t('socialstream')), root_path) %> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
5
+ <%= link_to(image_tag('header-logo.png', :alt => t('site.name')), root_path) %> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
6
6
  </div>
7
7
  <% if user_signed_in? %>
8
8
  <div class="menu_list menu_white" id="menu_home">
@@ -3,7 +3,7 @@
3
3
  <html lang="en">
4
4
  <head>
5
5
  <meta charset="utf-8">
6
- <title><%= yield(:title).empty? ? t('socialstream') : yield(:title)%></title>
6
+ <title><%= yield(:title).empty? ? t('site.name') : yield(:title)%></title>
7
7
  <meta name="keywords" content="<%= t('profile.tags.default') %><%= yield(:keywords) %>" >
8
8
  <meta name="description" content= "<%= yield(:description).empty? ? t('frontpage.main_title') : yield(:description) %>" >
9
9
 
@@ -3,7 +3,7 @@
3
3
  <html lang="en">
4
4
  <head>
5
5
  <meta charset="utf-8">
6
- <title><%= yield(:title).empty? ? t('socialstream') : yield(:title)%></title>
6
+ <title><%= yield(:title).empty? ? t('site.name') : yield(:title)%></title>
7
7
  <meta name="keywords" content="<%= yield(:keywords).empty? ? t('profile.tags.default') : yield(:keywords) %>" >
8
8
  <meta name="description" content= "<%= yield(:description).empty? ? "Home" : yield(:description) %>" >
9
9
  <%= stylesheet_link_tag "application" %>
@@ -0,0 +1,18 @@
1
+
2
+ <% aux='<div class="last">' + stack.last + '</div>' %>
3
+ <% if stack.count >1 %>
4
+ <% aux.insert(0, '<div class="penultimate">'+ stack.last(2).first + '</div>') %>
5
+ <% end %>
6
+
7
+ <% if stack.count >2 %>
8
+ <% stack.first(stack.count - 2).reverse.collect {|level|
9
+ aux.insert(0, '<div class="mid">'+ level + '</div>')
10
+ } %>
11
+ <% end %>
12
+
13
+ <% if stack.count ==1 %>
14
+ <% aux.insert(0, '<div class="first"><span class="penultimate">'+ t('location.base') + '</span></div>') %>
15
+ <% else %>
16
+ <% aux.insert(0, '<div class="first"><span class="mid">'+ t('location.base') + '</span></div>') %>
17
+ <% end%>
18
+ <%= raw aux %>
@@ -27,9 +27,9 @@
27
27
  </div>
28
28
  <div style="padding: 10px 5px 5px 5px;">
29
29
  <p>
30
- <%= link_to((t('message.look')+" at "+t('socialstream')), conversation_url(@message.conversation))%>
30
+ <%= link_to((t('message.look')+" at "+t('site.name')), conversation_url(@message.conversation))%>
31
31
  </p>
32
32
  </div>
33
33
  </div>
34
34
  </body>
35
- </html>
35
+ </html>
@@ -5,4 +5,4 @@
5
5
  <%= @message.body.html_safe? ? @message.body : strip_tags(@message.body) %>
6
6
  -----------------------------------------------
7
7
 
8
- <%=t('message.look')%> at <%= t('socialstream')%>: <%=conversation_url(@message.conversation)%>.
8
+ <%=t('message.look')%> at <%= t('site.name')%>: <%=conversation_url(@message.conversation)%>.
@@ -27,9 +27,9 @@
27
27
  </div>
28
28
  <div style="padding: 10px 5px 5px 5px;">
29
29
  <p>
30
- <%= link_to t('message.look'), conversation_url(@message.conversation)%> at <%= t('socialstream')%>
30
+ <%= link_to t('message.look'), conversation_url(@message.conversation)%> at <%= t('site.name')%>
31
31
  </p>
32
32
  </div>
33
33
  </div>
34
34
  </body>
35
- </html>
35
+ </html>
@@ -5,4 +5,4 @@
5
5
  "<%= @message.body.html_safe? ? @message.body : strip_tags(@message.body) %>"
6
6
  -----------------------------------------------
7
7
 
8
- <%=t('message.look')%> at <%= t('socialstream')%>: <%=conversation_url(@message.conversation)%>.
8
+ <%=t('message.look')%> at <%= t('site.name')%>: <%=conversation_url(@message.conversation)%>.
@@ -8,8 +8,8 @@
8
8
  <% toolbar :option => :messages %>
9
9
 
10
10
  <%= location(
11
- link_to(image_tag("btn/new.png", :class => "menu_icon")+t('message.other'), conversations_path,:remote => true),
12
- link_to(image_tag("btn/message_new.png", :class => "menu_icon")+ t('message.new'), new_message_path, :remote => true)
11
+ link_to(t('message.other'), conversations_path,:remote => true),
12
+ link_to(t('message.new'), new_message_path, :remote => true)
13
13
  ) %>
14
14
 
15
15
  <% content_for :javascript do %>
@@ -7,25 +7,25 @@
7
7
  <%if params[:section].present?
8
8
  case params[:section]
9
9
  when "about_me"
10
- level2 = link_to(image_tag("btn/edit.png", :class => "menu_icon")+t('profile.' + current_subject.class.to_s.downcase + '.info'),
10
+ level2 = link_to( t('profile.' + current_subject.class.to_s.downcase + '.info'),
11
11
  :controller => :profiles , :action => :edit, :section => "about_me")
12
12
  when "contact_info"
13
- level2 = link_to(image_tag("btn/edit.png", :class => "menu_icon")+t('profile.contact'),
13
+ level2 = link_to(t('profile.contact'),
14
14
  :controller => :profiles , :action => :edit, :section => "contact_info")
15
15
  when "my_experience"
16
- level2 = link_to(image_tag("btn/edit.png", :class => "menu_icon")+t('profile.' + current_subject.class.to_s.downcase + '.experience'),
16
+ level2 = link_to(t('profile.' + current_subject.class.to_s.downcase + '.experience'),
17
17
  :controller => :profiles , :action => :edit, :section => "my_experience")
18
18
  when "tags"
19
- level2 = link_to(image_tag("btn/edit.png", :class => "menu_icon")+t('profile.' + current_subject.class.to_s.downcase + '.tags'),
19
+ level2 = link_to(t('profile.' + current_subject.class.to_s.downcase + '.tags'),
20
20
  :controller => :profiles , :action => :edit, :section => "tags")
21
21
  end
22
22
  else
23
- level2 = link_to(image_tag("btn/edit.png", :class => "menu_icon")+t('profile.one'),
23
+ level2 = link_to(t('profile.one'),
24
24
  :controller => :profiles , :action => :edit)
25
25
  end %>
26
26
 
27
27
  <%= location(
28
- link_to(image_tag("btn/btn_edit.png", :class => "menu_icon")+t('menu.information'), [current_subject, :profile]),
28
+ link_to(t('menu.information'), [current_subject, :profile]),
29
29
  level2
30
30
  ) %>
31
31
  <div class="space_center"></div>
@@ -18,8 +18,7 @@
18
18
  <% toolbar :profile => @profile.subject %>
19
19
 
20
20
 
21
- <%= location(link_to(image_tag("btn/btn_edit.png", :class => "menu_icon")+t('menu.information'),
22
- [@profile.subject, :profile])) %>
21
+ <%= location(link_to(t('menu.information'), [@profile.subject, :profile])) %>
23
22
 
24
23
 
25
24
  <%= render :partial => "profile" %>
@@ -8,7 +8,7 @@
8
8
  <%= render :partial => "users/sidebar_index" %>
9
9
  <% end %>
10
10
 
11
- <%= location(image_tag("btn/btn_browse.png", :class=>"btn_config") + t('browse') +": "+
11
+ <%= location(t('browse') +": "+
12
12
  content_tag(:b ,content_tag(:span, t('user.other'), :id=>'name_group')) + ", "+
13
13
  link_to(t('group.by'),groups_path))%>
14
14
 
@@ -16,8 +16,7 @@
16
16
  <%= render :partial => 'sidebar_index' %>
17
17
  <% end %>
18
18
 
19
- <%= location(link_to(image_tag("btn/btn_profile.png", :class => "btn_config")+t('profile.one')+": "+
20
- content_tag(:span, ( truncate_name sanitize @user.name), :class=>"name_group")))%>
19
+ <%= location(link_to(t('profile.one')+": "+truncate_name(sanitize @user.name)))%>
21
20
 
22
21
  <% toolbar :profile => @user %>
23
22
 
@@ -152,7 +152,7 @@ en:
152
152
  participants: "Participants"
153
153
  groups: "Groups"
154
154
  tags: "Tags"
155
- main_title: "SocialStream is a core for building social network websites."
155
+ main_title: "Social Stream is a core for building social network websites."
156
156
  meet:
157
157
  default: "Meet"
158
158
  sentence1: "Meet interesting people and groups"
@@ -195,9 +195,9 @@ en:
195
195
  invitation:
196
196
  e-mails: "E-mail addresses"
197
197
  error: "Your request was unprocessable"
198
- invited: " has invited you to SocialStream!"
199
- join: "Invite other people to join SocialStream!"
200
- join_me: "Join me at SocialStream!"
198
+ invited: " has invited you to Social Stream!"
199
+ join: "Invite other people to join Social Stream!"
200
+ join_me: "Join me at Social Stream!"
201
201
  one: "Invitation"
202
202
  other: "Invitations"
203
203
  toolbar: "Invite"
@@ -371,7 +371,8 @@ en:
371
371
  sign_in: "Sign in"
372
372
  sign_out: "Sign out"
373
373
  sign_up: "Sign up"
374
- socialstream: "SocialStream"
374
+ site:
375
+ name: "Social Stream"
375
376
  subject:
376
377
  this_is_you: "This is you!"
377
378
  sure: "Are you sure?"
@@ -383,5 +384,5 @@ en:
383
384
  other: "Users"
384
385
  all: "All users"
385
386
  all_n: "All users (%{count})"
386
- welcome: "Welcome to SocialStream!"
387
+ welcome: "Welcome to Social Stream!"
387
388
 
@@ -45,7 +45,6 @@ module SocialStream
45
45
  autoload :Populate, 'social_stream/populate'
46
46
  autoload :Relations, 'social_stream/relations'
47
47
  autoload :TestHelpers, 'social_stream/test_helpers'
48
- autoload :ToolbarConfig, 'social_stream/toolbar_config'
49
48
 
50
49
  module Controllers
51
50
  autoload :Helpers, 'social_stream/controllers/helpers'
@@ -61,6 +60,10 @@ module SocialStream
61
60
  autoload :Controllers, 'social_stream/test_helpers/controllers'
62
61
  end
63
62
 
63
+ module ToolbarConfig
64
+ autoload :Base, 'social_stream/toolbar_config/base'
65
+ end
66
+
64
67
  mattr_accessor :subjects
65
68
  @@subjects = [ :user, :group ]
66
69
 
@@ -24,6 +24,12 @@ module SocialStream
24
24
  end
25
25
  end
26
26
 
27
+ initializer "social_stream-base.toolbar_config" do
28
+ SocialStream::ToolbarConfig.module_eval do
29
+ include SocialStream::ToolbarConfig::Base
30
+ end
31
+ end
32
+
27
33
  initializer "social_stream-base.avatars_for_rails" do
28
34
  AvatarsForRails.setup do |config|
29
35
  config.avatarable_model = :actor
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "0.9.6".freeze
3
+ VERSION = "0.9.7".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,87 @@
1
+ module SocialStream
2
+ module ToolbarConfig
3
+ module Base
4
+ # Base toolbar items
5
+ def home_toolbar_items
6
+ Array.new.tap do |items|
7
+ # Messages
8
+ items << {
9
+ :key => :messages,
10
+ :name => image_tag("btn/new.png")+t('message.other')+' (' + current_subject.mailbox.inbox(:unread => true).count.to_s + ')',
11
+ :url => "#",
12
+ :options => {:link => {:id => "messages_menu"}},
13
+ :items => [
14
+ { :key => :message_new,
15
+ :name => image_tag("btn/message_new.png")+ t('message.new'),
16
+ :url => new_message_path,
17
+ :options => {:link =>{:remote=> false}}},
18
+ { :key => :message_inbox,
19
+ :name => image_tag("btn/message_inbox.png")+t('message.inbox')+' (' + current_subject.mailbox.inbox(:unread => true).count.to_s + ')',
20
+ :url => conversations_path,
21
+ :options => {:link =>{:remote=> false}}},
22
+ { :key => :message_sentbox,
23
+ :name => image_tag("btn/message_sentbox.png")+t('message.sentbox'),
24
+ :url => conversations_path(:box => :sentbox),
25
+ :options => {:link =>{:remote=> false}}},
26
+ { :key => :message_trash,
27
+ :name => image_tag("btn/message_trash.png")+t('message.trash'),
28
+ :url => conversations_path(:box => :trash)}
29
+ ]
30
+ }
31
+
32
+ #Contacts
33
+ items << {
34
+ :key => :contacts,
35
+ :name => image_tag("btn/btn_friend.png")+t('contact.other'),
36
+ :url => "#",
37
+ :options => {:link => {:id => "contacts_menu"}},
38
+ :items => [
39
+ {:key => :invitations, :name => image_tag("btn/btn_friend.png")+t('contact.current'), :url => contacts_path},
40
+ {:key => :contacts_graph, :name => image_tag("btn/btn_friend.png")+t('contact.graph.one'), :url => ties_path},
41
+ {:key => :invitations, :name => image_tag("btn/btn_friend.png")+t('contact.pending.other'), :url => contacts_path(:pending=>true)},
42
+ {:key => :invitations, :name => image_tag("btn/btn_invitation.png")+t('invitation.toolbar'), :url => new_invitation_path}
43
+ ]
44
+ }
45
+ end
46
+ end
47
+
48
+ # Builds the default profile toolbar items
49
+ def profile_toolbar_items(subject = current_subject)
50
+ Array.new.tap do |items|
51
+ #Information button
52
+ items << {
53
+ :key => :subject_info,
54
+ :name => image_tag("btn/btn_edit.png")+t('menu.information'),
55
+ :url => [subject, :profile]
56
+ }
57
+
58
+ if subject != current_subject
59
+ #Like button
60
+ items << {
61
+ :key => :like_button,
62
+ :name => link_like_params(subject)[0],
63
+ :url => link_like_params(subject)[1],
64
+ :options => {:link => link_like_params(subject)[2]}
65
+ }
66
+
67
+ if user_signed_in?
68
+ #Relation button
69
+ items << {
70
+ :key => :subject_relation,
71
+ :name => image_tag("btn/btn_friend.png") + current_subject.contact_to!(subject).status,
72
+ :url => edit_contact_path(current_subject.contact_to!(subject))
73
+ }
74
+
75
+ #Send message button
76
+ items << {:key => :send_message,
77
+ :name => image_tag("btn/btn_send.png")+t('message.send'),
78
+ :url => new_message_path(:receiver => subject.slug)
79
+ }
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
@@ -0,0 +1,163 @@
1
+ # Rake task to launch multiple Resque workers in development/production with simple management included
2
+
3
+ require 'resque/tasks' # Require Resque tasks
4
+
5
+ namespace :workers do
6
+
7
+ # = $ rake workers:start
8
+ #
9
+ # Launch multiple Resque workers with the Rails environment loaded,
10
+ # so they have access to your models, etc.
11
+ #
12
+ # Each worker is being run in their own separate process (_not_ thread).
13
+ #
14
+ # On clean shutdown (SIGINT / Ctrl-C, SIGQUIT, SIGTERM), the task will clean
15
+ # after itself: kill its workers and delete PID files, when appropriate. It
16
+ # will deal fine with already dead workers.
17
+ #
18
+ #
19
+ # Default options like COUNT can and should be over-ridden when invoking, of course:
20
+ #
21
+ # $ rake workers:start COUNT=10 QUEUE=my_queue
22
+ #
23
+ #
24
+ # To daemonize, simply run with nohup:
25
+ #
26
+ # $ nohup rake workers:start > log/workers.log 2>&1 &
27
+ #
28
+ #
29
+ # You can and should set up your monitoring tool to watch for process with PID
30
+ # from `cat tmp/pids/resque/master.pid`.
31
+ #
32
+ # For proper monitoring of _individual_ workers, use provided examples for God or Monit:
33
+ # http://github.com/defunkt/resque/blob/master/examples/.
34
+ #
35
+ #
36
+ # A task for killing all workers on the machine (`rake workers:killall`) is also provided,
37
+ # for pruning orphaned workers etc.
38
+ #
39
+ desc "Run and manage group of Resque workers with some default options"
40
+ task :start => :environment do
41
+
42
+ # - CONFIGURATION ----
43
+ ENV['QUEUE'] ||= '*'
44
+ ENV['COUNT'] ||= '3'
45
+ # --------------------
46
+
47
+ def queue
48
+ ENV['QUEUE']
49
+ end
50
+
51
+ def count
52
+ ENV['COUNT']
53
+ end
54
+
55
+ def Process.exists?(pid)
56
+ kill(0, pid.to_i) rescue false
57
+ end
58
+
59
+ def pid_directory
60
+ @pid_directory ||= Rails.root.join('tmp', 'pids', "resque")
61
+ end
62
+
63
+ def pid_directory_for_group
64
+ @pid_directory_for_group ||= Rails.root.join('tmp', 'pids', "resque", queue)
65
+ end
66
+
67
+ def group_master_pid
68
+ File.read pid_directory.join("#{queue}.pid").to_s rescue nil
69
+ end
70
+
71
+ def group?
72
+ !group_master_pid || group_master_pid.to_s == Process.pid.to_s
73
+ end
74
+
75
+ def group_running?
76
+ Process.exists?(group_master_pid)
77
+ end
78
+
79
+ def kill_worker(pid)
80
+ Process.kill("QUIT", pid)
81
+ puts "Killed worker with PID #{pid}"
82
+ rescue Errno::ESRCH => e
83
+ puts " STALE worker with PID #{pid}"
84
+ end
85
+
86
+ def kill_workers
87
+ @pids.each { |pid| kill_worker(pid) }
88
+ end
89
+
90
+ def kill_workers_and_remove_pids_for_group
91
+ Dir.glob(pid_directory_for_group.join('worker_*.pid').to_s) do |pidfile|
92
+ begin
93
+ pid = pidfile[/(\d+)\.pid/, 1].to_i
94
+ kill_worker(pid)
95
+ ensure
96
+ FileUtils.rm pidfile, :force => true
97
+ end
98
+ end
99
+ if group_master_pid
100
+ FileUtils.rm pid_directory.join("#{queue}.pid").to_s
101
+ FileUtils.rm_rf pid_directory_for_group.to_s
102
+ end
103
+ end
104
+
105
+ def shutdown
106
+ puts "\n*** Exiting"
107
+ if group?
108
+ kill_workers_and_remove_pids_for_group
109
+ else
110
+ kill_workers
111
+ end
112
+ exit(0)
113
+ end
114
+
115
+ # Clean up after dead group from before -- and become one
116
+ unless group_running?
117
+ puts "--- Cleaning up after previous group (PID: #{group_master_pid})"
118
+ kill_workers_and_remove_pids_for_group
119
+ end
120
+
121
+ # Handle exit
122
+ trap('INT') { shutdown }
123
+ trap('QUIT') { shutdown }
124
+ trap('TERM') { shutdown }
125
+ trap('KILL') { shutdown }
126
+ trap('SIGKILL') { shutdown }
127
+
128
+ puts "=== Launching #{ENV['COUNT']} worker(s) on '#{ENV['QUEUE']}' queue(s) with PID #{Process.pid}"
129
+
130
+ # Launch workers in separate processes, saving their PIDs
131
+ @pids = []
132
+ ENV['COUNT'].to_i.times do
133
+ @pids << Process.fork { Rake::Task['resque:work'].invoke }
134
+ end
135
+
136
+ if group?
137
+ # Make sure we have directory for pids
138
+ FileUtils.mkdir_p pid_directory.to_s
139
+ FileUtils.mkdir_p pid_directory_for_group.to_s
140
+ # Create PID files for workers
141
+ File.open( pid_directory.join("#{queue}.pid").to_s, 'w' ) do |f| f.write Process.pid end
142
+ @pids.each do |pid|
143
+ File.open( pid_directory_for_group.join("worker_#{pid}.pid").to_s, 'w' ) { |f| f.write pid }
144
+ end
145
+ # Stay in foreground, if any of our workers dies, we'll get killed so Monit/God etc can come to the resq^Hcue
146
+ Process.wait
147
+ else
148
+ # Stay in foreground, if any of our workers dies, continue running
149
+ Process.waitall
150
+ end
151
+ end
152
+
153
+ desc "Kill ALL workers on this machine"
154
+ task :kilall do
155
+ require 'resque'
156
+ Resque::Worker.all.each do |worker|
157
+ puts "Shutting down worker #{worker}"
158
+ host, pid, queues = worker.id.split(':')
159
+ Process.kill("QUIT", pid.to_i)
160
+ end
161
+ end
162
+
163
+ 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: 55
4
+ hash: 53
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 6
10
- version: 0.9.6
9
+ - 7
10
+ version: 0.9.7
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-09-21 00:00:00 +02:00
19
+ date: 2011-09-23 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -470,6 +470,9 @@ files:
470
470
  - app/assets/images/HTML5_Semantics.png
471
471
  - app/assets/images/HTML5_Styling.png
472
472
  - app/assets/images/Jcrop.gif
473
+ - app/assets/images/arrow-end.png
474
+ - app/assets/images/arrow-start.png
475
+ - app/assets/images/arrow.png
473
476
  - app/assets/images/big-logo.png
474
477
  - app/assets/images/boxy/boxy-ne.png
475
478
  - app/assets/images/boxy/boxy-nw.png
@@ -651,6 +654,7 @@ files:
651
654
  - app/assets/stylesheets/images/ui-icons_888888_256x240.png
652
655
  - app/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png
653
656
  - app/assets/stylesheets/invitations.css
657
+ - app/assets/stylesheets/location.css
654
658
  - app/assets/stylesheets/menu.css
655
659
  - app/assets/stylesheets/messages.css
656
660
  - app/assets/stylesheets/profiles.css
@@ -806,6 +810,7 @@ files:
806
810
  - app/views/likes/create.js.erb
807
811
  - app/views/likes/destroy.js.erb
808
812
  - app/views/location/_location.html.erb
813
+ - app/views/location/_location_body.html.erb
809
814
  - app/views/message_mailer/new_message_email.html.erb
810
815
  - app/views/message_mailer/new_message_email.text.erb
811
816
  - app/views/message_mailer/reply_message_email.html.erb
@@ -918,9 +923,10 @@ files:
918
923
  - lib/social_stream/populate.rb
919
924
  - lib/social_stream/test_helpers.rb
920
925
  - lib/social_stream/test_helpers/controllers.rb
921
- - lib/social_stream/toolbar_config.rb
926
+ - lib/social_stream/toolbar_config/base.rb
922
927
  - lib/tasks/db/populate.rake
923
928
  - lib/tasks/resque.rake
929
+ - lib/tasks/workers.rake
924
930
  - social_stream-base.gemspec
925
931
  - spec/controllers/comments_controller_spec.rb
926
932
  - spec/controllers/contacts_controller_spec.rb
@@ -1,99 +0,0 @@
1
- module SocialStream
2
- module ToolbarConfig
3
- #Prints the default home toolbar menu
4
- def default_home_toolbar_menu
5
- items = Array.new
6
-
7
- #Messages
8
- items << {:key => :messages,
9
- :name => image_tag("btn/new.png")+t('message.other')+' (' + current_subject.mailbox.inbox(:unread => true).count.to_s + ')',
10
- :url => "#",
11
- :options => {:link => {:id => "messages_menu"}},
12
- :items => [
13
- {:key => :message_new, :name => image_tag("btn/message_new.png")+ t('message.new'), :url => new_message_path, :options => {:link =>{:remote=> false}}},
14
- {:key => :message_inbox, :name => image_tag("btn/message_inbox.png")+t('message.inbox')+' (' + current_subject.mailbox.inbox(:unread => true).count.to_s + ')',
15
- :url => conversations_path, :options => {:link =>{:remote=> false}}},
16
- {:key => :message_sentbox, :name => image_tag("btn/message_sentbox.png")+t('message.sentbox'), :url => conversations_path(:box => :sentbox), :options => {:link =>{:remote=> false}}},
17
- {:key => :message_trash, :name => image_tag("btn/message_trash.png")+t('message.trash'), :url => conversations_path(:box => :trash)}
18
- ]}
19
-
20
- #Documents if present
21
- if SocialStream.activity_forms.include? :document
22
- items << {:key => :resources,
23
- :name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t('resource.mine'),
24
- :url => "#",
25
- :options => {:link => {:id => "resources_menu"}},
26
- :items => [
27
- {:key => :resources_documents,:name => image_tag("btn/btn_document.png")+t('document.title'),:url => documents_path},
28
- {:key => :resources_pictures,:name => image_tag("btn/btn_gallery.png")+t('picture.title'),:url => pictures_path},
29
- {:key => :resources_videos,:name => image_tag("btn/btn_video.png")+t('video.title'),:url => videos_path},
30
- {:key => :resources_audios,:name => image_tag("btn/btn_audio.png")+t('audio.title'),:url => audios_path}
31
- ]}
32
- end
33
-
34
- #Contacts
35
- items << {:key => :contacts,
36
- :name => image_tag("btn/btn_friend.png")+t('contact.other'),
37
- :url => "#",
38
- :options => {:link => {:id => "contacts_menu"}},
39
- :items => [
40
- {:key => :invitations, :name => image_tag("btn/btn_friend.png")+t('contact.current'), :url => contacts_path},
41
- {:key => :contacts_graph, :name => image_tag("btn/btn_friend.png")+t('contact.graph.one'), :url => ties_path},
42
- {:key => :invitations, :name => image_tag("btn/btn_friend.png")+t('contact.pending.other'), :url => contacts_path(:pending=>true)},
43
- {:key => :invitations, :name => image_tag("btn/btn_invitation.png")+t('invitation.toolbar'), :url => new_invitation_path}
44
- ]}
45
-
46
- render_items items
47
- end
48
-
49
- #Prints the default profile toolbar menu
50
- def default_profile_toolbar_menu(subject = current_subject)
51
- items = Array.new
52
- #Information button
53
- items << {:key => :subject_info,
54
- :name => image_tag("btn/btn_edit.png")+t('menu.information'),
55
- :url => [subject, :profile]
56
- }
57
-
58
- if subject!=current_subject
59
- #Like button
60
- items << {:key => :like_button,
61
- :name => link_like_params(subject)[0],
62
- :url => link_like_params(subject)[1],
63
- :options => {:link => link_like_params(subject)[2]}}
64
-
65
- if user_signed_in?
66
- #Relation button
67
- items << {:key => :subject_relation,
68
- :name => image_tag("btn/btn_friend.png") + current_subject.contact_to!(subject).status,
69
- :url => edit_contact_path(current_subject.contact_to!(subject))
70
- }
71
- #Send message button
72
- items << {:key => :send_message,
73
- :name => image_tag("btn/btn_send.png")+t('message.send'),
74
- :url => new_message_path(:receiver => subject.slug)
75
- }
76
- end
77
- end
78
- #Documents if present
79
- if SocialStream.activity_forms.include? :document
80
- if subject == current_subject
81
- resources_label = t('resource.mine')
82
- else
83
- resources_label = t('resource.title')
84
- end
85
- items << {:key => :resources,
86
- :name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+resources_label,
87
- :url => "#",
88
- :options => {:link => {:id => "resources_menu"}},
89
- :items => [
90
- {:key => :resources_documents,:name => image_tag("btn/btn_document.png")+t('document.title'),:url => polymorphic_path([subject, Document.new])},
91
- {:key => :resources_pictures,:name => image_tag("btn/btn_gallery.png")+t('picture.title'),:url => polymorphic_path([subject, Picture.new])},
92
- {:key => :resources_videos,:name => image_tag("btn/btn_video.png")+t('video.title'),:url => polymorphic_path([subject, Video.new])},
93
- {:key => :resources_audios,:name => image_tag("btn/btn_audio.png")+t('audio.title'),:url => polymorphic_path([subject, Audio.new])}
94
- ]}
95
- end
96
- render_items items
97
- end
98
- end
99
- end