social_stream 0.26.2 → 0.27.0

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.
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