social_stream 0.26.2 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/base/app/assets/images/btn/public.png +0 -0
  2. data/base/app/assets/images/btn/restricted.png +0 -0
  3. data/base/app/assets/javascripts/social_stream.timeline.js +2 -0
  4. data/base/app/assets/javascripts/social_stream.wall.js.erb +10 -1
  5. data/base/app/assets/stylesheets/activities.css.scss.erb +13 -2
  6. data/base/app/assets/stylesheets/base.css.scss +1 -1
  7. data/base/app/controllers/audience_controller.rb +16 -0
  8. data/base/app/models/activity.rb +111 -39
  9. data/base/app/models/activity_object.rb +1 -9
  10. data/base/app/models/actor.rb +42 -53
  11. data/base/app/models/contact.rb +0 -21
  12. data/base/app/models/tie.rb +1 -1
  13. data/base/app/views/activities/_new.html.erb +2 -2
  14. data/base/app/views/activities/_options.html.erb +7 -1
  15. data/base/app/views/audience/_list.html.erb +8 -0
  16. data/base/app/views/audience/index.js.erb +1 -0
  17. data/base/config/locales/en.yml +1 -0
  18. data/base/config/locales/es.yml +1 -0
  19. data/base/config/routes.rb +2 -0
  20. data/base/db/migrate/20120526171311_remove_activity_channels.rb +35 -0
  21. data/base/lib/social_stream-base.rb +0 -1
  22. data/base/lib/social_stream/ability/base.rb +3 -1
  23. data/base/lib/social_stream/base/engine.rb +0 -1
  24. data/base/lib/social_stream/base/version.rb +1 -1
  25. data/base/lib/tasks/db/populate.rake +6 -4
  26. data/base/spec/controllers/audience_controller_spec.rb +40 -0
  27. data/base/spec/controllers/comments_controller_spec.rb +3 -3
  28. data/base/spec/factories/activity.rb +12 -6
  29. data/base/spec/models/tie_spec.rb +7 -4
  30. data/documents/lib/social_stream/documents/version.rb +1 -1
  31. data/documents/social_stream-documents.gemspec +1 -1
  32. data/events/app/assets/stylesheets/events.css.scss +3 -8
  33. data/events/app/views/events/_event.html.erb +5 -2
  34. data/events/config/locales/en.yml +1 -0
  35. data/events/config/locales/es.yml +1 -0
  36. data/events/lib/social_stream/events/version.rb +1 -1
  37. data/events/social_stream-events.gemspec +1 -1
  38. data/lib/social_stream/version.rb +1 -1
  39. data/linkser/lib/social_stream/linkser/version.rb +1 -1
  40. data/linkser/social_stream-linkser.gemspec +1 -1
  41. data/presence/lib/social_stream/presence/version.rb +1 -1
  42. data/presence/social_stream-presence.gemspec +1 -1
  43. data/social_stream.gemspec +5 -5
  44. metadata +19 -15
  45. data/base/app/assets/images/btn/btn_security.png +0 -0
  46. data/base/app/models/channel.rb +0 -64
  47. data/base/lib/social_stream/models/channeled.rb +0 -56
@@ -164,27 +164,6 @@ class Contact < ActiveRecord::Base
164
164
  end
165
165
  end
166
166
 
167
- # The related {Channel} to this {Contact}.
168
- #
169
- # If the sender of this {Contact} is a user, the {Channel} is defined. If it is
170
- # other kind of {SocialStream::Models::Subject}, the {Channel#user_author} must
171
- # be provided.
172
- def channel(user = nil)
173
- user_id =
174
- if sender.subject_type == "User"
175
- sender_id
176
- elsif user.present? && Actor.normalize(user).subject_type == "User"
177
- Actor.normalize_id(user)
178
- else
179
- raise "Invalid channel user_author: #{ user.inspect }"
180
- end
181
-
182
- Channel.
183
- find_or_create_by_author_id_and_user_author_id_and_owner_id sender_id,
184
- user_id,
185
- receiver_id
186
- end
187
-
188
167
  private
189
168
 
190
169
  def build_user_author
@@ -146,7 +146,7 @@ class Tie < ActiveRecord::Base
146
146
  Activity.create! :author => contact.sender,
147
147
  :user_author => contact.user_author,
148
148
  :owner => contact.receiver,
149
- :relation_ids => contact.relation_ids,
149
+ :relation_ids => contact.receiver.activity_relation_ids,
150
150
  :activity_verb => ActivityVerb[contact.verb]
151
151
  end
152
152
 
@@ -21,7 +21,7 @@
21
21
  <%= javascript_tag do %>
22
22
  var relation_public = <%= Relation::Public.instance.id %>;
23
23
  var public_selected = false;
24
- var relation_options = <%= escape_javascript(current_subject.activity_relations(receiver).sort.map{ |r| r.id }.to_json) %>;
24
+ var relation_options = <%= escape_javascript(current_subject.activity_relations_for(receiver).sort.map{ |r| r.id }.to_json) %>;
25
25
  var relation_public_pos = 0;
26
26
  for(id in relation_options){
27
27
  if(relation_options[id]==relation_public){
@@ -32,7 +32,7 @@
32
32
  }
33
33
  //For security with check "var default_security_width = '100px';" in activities.js.erb
34
34
  <% end %>
35
- <%= select_tag :relation_ids, options_for_select(current_subject.activity_relations(receiver).sort.map{ |r| [ r.name, r.id ] }), :id => 'security', :multiple => true, :title => t("activity.privacy.myself.contacts.#{ receiver.class.to_s.underscore }") %>
35
+ <%= select_tag :relation_ids, options_for_select(current_subject.activity_relations_for(receiver).sort.map{ |r| [ r.name, r.id ] }), :id => 'security', :multiple => true, :title => t("activity.privacy.myself.contacts.#{ receiver.class.to_s.underscore }") %>
36
36
  <% else %>
37
37
  <div id="security_chzn" class="chzn-container chzn-container-multi">
38
38
  <ul class="chzn-choices">
@@ -8,11 +8,17 @@
8
8
 
9
9
  <% if user_signed_in? %>
10
10
  ·
11
- <%= link_to activity.audience_in_words(current_subject, :details => :summary),
11
+ <%= link_to image_tag("btn/#{ activity.public? ? 'public' : 'restricted' }.png", :class => 'menu_icon') + activity.audience_in_words(current_subject, :details => :summary),
12
12
  'javascript:;',
13
13
  :class => 'activity_audience_summary' %>
14
14
  <div class="activity_audience">
15
15
  <%= activity.audience_in_words(current_subject) %>
16
+ <% unless activity.public? %>
17
+ ·
18
+ <%= link_to t('activity.audience.show'), audience_path(:activity_id => activity.id), :remote => true %>
19
+ <div class="activity-audience-list-<%= activity.id %>">
20
+ </div>
21
+ <% end %>
16
22
  </div>
17
23
  <% end %>
18
24
 
@@ -0,0 +1,8 @@
1
+ <% @activity.audience.each do |a| %>
2
+ <div class="audience_logo">
3
+ <%= link_to image_tag(a.logo.url(:contact),
4
+ :alt => a.name),
5
+ a.subject,
6
+ :title => a.name %>
7
+ </div>
8
+ <% end %>
@@ -0,0 +1 @@
1
+ $('.activity-audience-list-<%= @activity.id %>').html('<%= j render(:partial => 'list') %>');
@@ -38,6 +38,7 @@ en:
38
38
  public:
39
39
  summary: "Public"
40
40
  full: "Shared with all the Internet"
41
+ show: "Mostrar"
41
42
  visible:
42
43
  summary: "Restricted"
43
44
  full: "Shared with %{audience}"
@@ -38,6 +38,7 @@ es:
38
38
  public:
39
39
  summary: "Público"
40
40
  full: "Accesible por toda Internet"
41
+ show: "Show"
41
42
  visible:
42
43
  summary: "Restringido"
43
44
  full: "Compartido con %{audience}"
@@ -86,6 +86,8 @@ Rails.application.routes.draw do
86
86
  resources :activities do
87
87
  resource :like
88
88
  end
89
+
90
+ get 'audience/index', :as => :audience
89
91
 
90
92
  match 'cheesecake' => 'cheesecake#index', :as => :cheesecake
91
93
  match 'update_cheesecake' => 'cheesecake#update', :as => :update_cheesecake
@@ -0,0 +1,35 @@
1
+ class RemoveActivityChannels < ActiveRecord::Migration
2
+ class Channel < ActiveRecord::Base; end
3
+
4
+ def up
5
+ change_table :activities do |t|
6
+ t.references :author
7
+ t.references :user_author
8
+ t.references :owner
9
+ end
10
+
11
+ Activity.record_timestamps = false
12
+ Activity.reset_column_information
13
+
14
+ Activity.all.each do |a|
15
+ c = Channel.find a.channel_id
16
+ %w{ author_id user_author_id owner_id }.each do |m|
17
+ a.__send__ "#{ m }=", c.__send__(m) # a.author_id = c.author_id
18
+ end
19
+ a.save!
20
+ end
21
+
22
+ Activity.record_timestamps = true
23
+
24
+ remove_foreign_key :activities, :name => 'index_activities_on_channel_id'
25
+ remove_column :activities, :channel_id
26
+
27
+ Activity.reset_column_information
28
+
29
+ drop_table :channels
30
+ end
31
+
32
+ def down
33
+ raise ActiveRecord::IrreversibleMigration
34
+ end
35
+ end
@@ -19,7 +19,6 @@ module SocialStream
19
19
  end
20
20
 
21
21
  module Models
22
- autoload :Channeled, 'social_stream/models/channeled'
23
22
  autoload :Object, 'social_stream/models/object'
24
23
  autoload :Subject, 'social_stream/models/subject'
25
24
  autoload :Subtype, 'social_stream/models/subtype'
@@ -58,7 +58,9 @@ module SocialStream
58
58
  end
59
59
 
60
60
  can :read, Activity do |a|
61
- a.allow?(subject, 'read')
61
+ a.public? ||
62
+ subject.present? &&
63
+ a.audience.include?(subject.actor)
62
64
  end
63
65
 
64
66
  can :update, Activity do |a|
@@ -20,7 +20,6 @@ module SocialStream
20
20
 
21
21
  initializer "social_stream-base.model.supertypes" do
22
22
  ActiveSupport.on_load(:active_record) do
23
- include SocialStream::Models::Channeled::ActiveRecord
24
23
  include SocialStream::Models::Subtype::ActiveRecord
25
24
  include SocialStream::Models::Supertype::ActiveRecord
26
25
  end
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "0.20.2".freeze
3
+ VERSION = "0.21.0".freeze
4
4
  end
5
5
  end
@@ -112,14 +112,16 @@ namespace :db do
112
112
  ties_start = Time.now
113
113
 
114
114
  @available_actors.each do |a|
115
- actors = @available_actors.dup - Array(a)
116
- relations = a.relation_customs + Array.wrap(Relation::Reject.instance)
117
- break if actors.size==0
115
+ actors = @available_actors.dup
116
+ actors.delete(a)
117
+
118
+ relations = a.relation_customs + [ Relation::Reject.instance ]
119
+
118
120
  Forgery::Basic.number(:at_most => actors.size).times do
119
121
  actor = actors.delete_at((rand * actors.size).to_i)
120
122
  contact = a.contact_to!(actor)
121
123
  contact.user_author = a.user_author if a.subject_type != "User"
122
- contact.relation_ids = Array(Forgery::Extensions::Array.new(relations).random.id) unless a==actor
124
+ contact.relation_ids = [ Forgery::Extensions::Array.new(relations).random.id ]
123
125
  end
124
126
  end
125
127
 
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe AudienceController do
4
+ include SocialStream::TestHelpers
5
+ include SocialStream::TestHelpers::Controllers
6
+
7
+ render_views
8
+
9
+ context "with activity" do
10
+ before :all do
11
+ @activity = Factory(:activity)
12
+ end
13
+
14
+ it "should not be redered to public" do
15
+ get :index, :activity_id => @activity.id, :format => :js
16
+
17
+ response.should redirect_to(:new_user_session)
18
+ end
19
+
20
+ it "should not be rendered to anyone" do
21
+ sign_in Factory(:user)
22
+
23
+ begin
24
+ get :index, :activity_id => @activity.id, :format => :js
25
+
26
+ assert false
27
+ rescue CanCan::AccessDenied
28
+ assert true
29
+ end
30
+ end
31
+
32
+ it "should not be rendered to author" do
33
+ sign_in @activity.author_subject
34
+
35
+ get :index, :activity_id => @activity.id, :format => :js
36
+
37
+ response.should be_success
38
+ end
39
+ end
40
+ end
@@ -13,7 +13,7 @@ describe CommentsController do
13
13
 
14
14
  describe "comment from user" do
15
15
  before do
16
- activity = Factory(:self_activity, :channel => @user.self_channel)
16
+ activity = Factory(:self_activity, :author => @user.actor)
17
17
 
18
18
  model_attributes[:author_id] = @user.actor_id
19
19
  model_attributes[:owner_id] = @user.actor_id
@@ -38,7 +38,7 @@ describe CommentsController do
38
38
  describe "comment to friend" do
39
39
  before do
40
40
  f = Factory(:friend, :contact => Factory(:contact, :receiver => @user.actor)).sender
41
- activity = Factory(:self_activity, :channel => f.contact_to!(f).channel)
41
+ activity = Factory(:self_activity, :author => f)
42
42
 
43
43
  model_attributes[:author_id] = @user.actor_id
44
44
  model_attributes[:owner_id] = f.id
@@ -52,7 +52,7 @@ describe CommentsController do
52
52
  describe "post to acquaintance" do
53
53
  before do
54
54
  a = Factory(:acquaintance, :contact => Factory(:contact, :receiver => @user.actor)).sender
55
- activity = Factory(:self_activity, :channel => a.self_channel)
55
+ activity = Factory(:self_activity, :author => a)
56
56
 
57
57
  model_attributes[:author_id] = @user.actor_id
58
58
  model_attributes[:owner_id] = a.id
@@ -23,9 +23,11 @@ end
23
23
  ## End of helpers
24
24
 
25
25
  Factory.define :activity do |a|
26
- a.channel { Factory(:friend).contact.channel }
26
+ a.author { Factory(:user).actor }
27
+ a.user_author { |b| b.author }
28
+ a.owner { |b| Factory(:friend, :contact => Factory(:contact, :receiver => b.author)).sender }
27
29
  a.activity_verb { ActivityVerb["post"] }
28
- a.relation_ids { |b| Array(b.sender.relation_custom('friend').id) }
30
+ a.relation_ids { |b| [ b.owner.relation_custom('friend').id ] }
29
31
  a.activity_object_ids { |b|
30
32
  # Create post
31
33
  post = Factory(:post,
@@ -40,8 +42,10 @@ Factory.define :activity do |a|
40
42
  end
41
43
 
42
44
  Factory.define :self_activity, :parent => :activity do |a|
43
- a.channel { Factory(:self_contact).channel }
44
- a.relation_ids { |b| Array(b.sender.relation_custom('friend').id) }
45
+ a.author { Factory(:user).actor }
46
+ a.user_author { |b| b.author }
47
+ a.owner { |b| b.author }
48
+ a.relation_ids { |b| [ b.author.relation_custom('friend').id ] }
45
49
  a.activity_object_ids { |b|
46
50
  # Create post
47
51
  post = Factory(:post,
@@ -63,10 +67,12 @@ end
63
67
 
64
68
  Factory.define :like_activity, :class => 'Activity' do |a|
65
69
  a.association :parent, :factory => :activity
66
- a.channel { |b| Factory(:friend, :sender => b.parent.sender).receiver.contact_to!(b.parent.sender).channel }
70
+ a.author { |b| Factory(:friend, :sender => b.parent.owner).receiver }
71
+ a.user_author { |b| b.author }
72
+ a.owner { |b| b.parent.owner }
67
73
  a.activity_verb { ActivityVerb["like"] }
68
74
  a.relation_ids { |b| b.parent.relation_ids }
69
- a.after_build{ |b| b.activity_object_ids = b.parent.activity_object_ids }
75
+ a.after_build { |b| b.activity_object_ids = b.parent.activity_object_ids }
70
76
  end
71
77
 
72
78
 
@@ -41,8 +41,9 @@ describe Tie do
41
41
  end
42
42
 
43
43
  it "should create activity with follow verb" do
44
- @tie.contact.channel.activities.should be_present
45
- @tie.contact.channel.activities.first.verb.should eq('follow')
44
+ activity = Activity.authored_by(@tie.sender).owned_by(@tie.receiver).first
45
+ activity.should be_present
46
+ activity.verb.should eq('follow')
46
47
  end
47
48
 
48
49
  context "reciprocal" do
@@ -51,8 +52,10 @@ describe Tie do
51
52
  end
52
53
 
53
54
  it "should create activity with make-friend verb" do
54
- @reciprocal.contact.channel.activities.should be_present
55
- @reciprocal.contact.channel.activities.first.verb.should eq('make-friend')
55
+ activity = Activity.authored_by(@reciprocal.sender).owned_by(@reciprocal.receiver).first
56
+
57
+ activity.should be_present
58
+ activity.verb.should eq('make-friend')
56
59
  end
57
60
  end
58
61
 
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Documents
3
- VERSION = "0.14.1".freeze
3
+ VERSION = "0.15.0".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 0.20.1')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.21.0')
16
16
  s.add_runtime_dependency('paperclip-ffmpeg', '~> 0.7.0')
17
17
  s.add_runtime_dependency('paperclip','= 2.4.5')
18
18
  s.add_runtime_dependency('delayed_paperclip','2.4.5.1')
@@ -14,20 +14,15 @@
14
14
  float: left;
15
15
  font-weight: bold;
16
16
  text-align: center;
17
- vertical-align: middle;
18
- padding: 10px;
19
- width: 40px;
17
+ width: 45px;
20
18
  }
21
19
 
22
-
23
20
  a.event_date {
24
21
  color: $details-color;
25
22
  }
26
23
 
27
24
  div.event_date {
28
- margin-left: 5px;
29
- margin-right: 7px;
30
- width: 64px;
25
+ margin-top: 25px;
31
26
  }
32
27
 
33
28
  .event_day {
@@ -60,7 +55,7 @@ div.event_date {
60
55
  .event_poster {
61
56
  width: 80px;
62
57
  height: 113px;
63
- margin-right: 10px;
58
+ margin-left: 5px;
64
59
  float: left;
65
60
  position: relative;
66
61
  }
@@ -1,8 +1,11 @@
1
1
  <%= div_for event do %>
2
2
 
3
- <%= render :partial => "events/event_date", :locals => { :event => event } %>
3
+ <div class="timeline-130">
4
+ <%= render :partial => "events/event_date", :locals => { :event => event } %>
4
5
 
5
- <%= render :partial => "events/event_poster", :locals => { :event => event } %>
6
+ <%= render :partial => "events/event_poster", :locals => { :event => event } %>
7
+
8
+ </div>
6
9
 
7
10
  <%= render :partial => "events/event_details", :locals => { :event => event } %>
8
11
  <% end %>
@@ -27,6 +27,7 @@ en:
27
27
  unfollow: "Unfollow"
28
28
  calendar: "Calendar"
29
29
  confirm_delete: "Delete event?"
30
+ name: "event"
30
31
  new:
31
32
  title: "New event"
32
33
  one: "an event"
@@ -28,6 +28,7 @@ es:
28
28
  unfollow: "Desapuntar"
29
29
  calendar: "Calendario"
30
30
  confirm_delete: "¿Borrar evento?"
31
+ name: "evento"
31
32
  new:
32
33
  title: "Nuevo evento"
33
34
  one: "un evento"
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Events
3
- VERSION = "0.12.1".freeze
3
+ VERSION = "0.13.0".freeze
4
4
  end
5
5
  end