social_stream 0.25.2 → 0.26.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 (77) hide show
  1. data/base/app/assets/javascripts/social_stream.follow.js +23 -0
  2. data/base/app/assets/javascripts/social_stream.wall.js.erb +3 -3
  3. data/base/app/controllers/search_controller.rb +30 -16
  4. data/base/app/helpers/location_helper.rb +1 -44
  5. data/base/app/helpers/search_helper.rb +7 -7
  6. data/base/app/models/activity.rb +0 -21
  7. data/base/app/models/activity_action.rb +8 -0
  8. data/base/app/models/activity_object.rb +55 -25
  9. data/base/app/models/activity_object_audience.rb +8 -0
  10. data/base/app/models/actor.rb +9 -0
  11. data/base/app/models/comment.rb +1 -3
  12. data/base/app/models/group.rb +3 -0
  13. data/base/app/models/post.rb +1 -3
  14. data/base/app/models/relation.rb +5 -0
  15. data/base/app/models/relation/follow.rb +6 -7
  16. data/base/app/models/relation/public.rb +5 -0
  17. data/base/app/models/relation/single.rb +11 -1
  18. data/base/app/views/activities/_new.html.erb +1 -1
  19. data/base/app/views/contacts/_link_follow.html.erb +8 -4
  20. data/base/app/views/followers/update.js.erb +2 -0
  21. data/base/app/views/layouts/_search.html.erb +2 -2
  22. data/base/app/views/search/_extended_search.html.erb +17 -17
  23. data/base/app/views/search/_form.html.erb +4 -4
  24. data/base/app/views/search/_header_search.html.erb +2 -2
  25. data/base/app/views/search/index.html.erb +1 -1
  26. data/base/app/views/search/index.js.erb +4 -4
  27. data/base/db/migrate/20120403175913_create_activity_object_audiences.rb +34 -0
  28. data/base/db/migrate/20120411132550_add_visit_count_to_activity_object.rb +9 -0
  29. data/base/db/migrate/20120411151413_relation_public_permissions.rb +8 -0
  30. data/base/lib/generators/social_stream/base/templates/initializer.rb +3 -0
  31. data/base/lib/social_stream-base.rb +2 -1
  32. data/base/lib/social_stream/ability/base.rb +14 -8
  33. data/base/lib/social_stream/base/dependencies.rb +1 -0
  34. data/base/lib/social_stream/base/thinking-sphinx.rb +18 -0
  35. data/base/lib/social_stream/base/version.rb +1 -1
  36. data/base/lib/social_stream/controllers/objects.rb +6 -0
  37. data/base/lib/social_stream/test_helpers/controllers.rb +1 -1
  38. data/base/lib/social_stream/views/location.rb +48 -0
  39. data/base/lib/tasks/db/populate.rake +1 -1
  40. data/base/lib/thinking-sphinx/social_stream.rb +3 -0
  41. data/base/spec/controllers/groups_controller_spec.rb +6 -6
  42. data/base/spec/controllers/posts_controller_spec.rb +6 -6
  43. data/base/spec/controllers/users_controller_spec.rb +4 -4
  44. data/base/spec/dummy/config/initializers/social_stream.rb +3 -0
  45. data/base/spec/factories/activity.rb +24 -1
  46. data/base/spec/factories/post.rb +1 -1
  47. data/base/spec/models/activity_authorization_spec.rb +1 -1
  48. data/base/spec/models/post_spec.rb +0 -4
  49. data/base/spec/models/relation_follow_spec.rb +8 -0
  50. data/documents/app/controllers/documents_controller.rb +1 -1
  51. data/documents/app/models/audio.rb +2 -5
  52. data/documents/app/models/document.rb +5 -8
  53. data/documents/app/models/picture.rb +2 -5
  54. data/documents/app/models/video.rb +6 -8
  55. data/documents/app/views/audios/_audio_processing.html.erb +3 -1
  56. data/documents/app/views/documents/_document.html.erb +12 -3
  57. data/documents/app/views/pictures/_picture.html.erb +2 -2
  58. data/documents/app/views/videos/_video_processed.html.erb +2 -2
  59. data/documents/app/views/videos/_video_processing.html.erb +3 -1
  60. data/documents/config/locales/en.yml +2 -5
  61. data/documents/config/locales/es.yml +2 -5
  62. data/documents/lib/social_stream/documents/version.rb +1 -1
  63. data/documents/lib/tasks/db/populate_documents.rake +1 -1
  64. data/documents/social_stream-documents.gemspec +1 -1
  65. data/documents/spec/factories/document.rb +2 -2
  66. data/documents/spec/factories/picture.rb +2 -2
  67. data/events/lib/social_stream/events/version.rb +1 -1
  68. data/events/social_stream-events.gemspec +1 -1
  69. data/lib/social_stream/version.rb +1 -1
  70. data/linkser/app/models/link.rb +2 -4
  71. data/linkser/lib/social_stream/linkser/version.rb +1 -1
  72. data/linkser/lib/tasks/db/populate_links.rake +35 -0
  73. data/linkser/social_stream-linkser.gemspec +1 -1
  74. data/presence/lib/social_stream/presence/version.rb +1 -1
  75. data/presence/social_stream-presence.gemspec +1 -1
  76. data/social_stream.gemspec +5 -5
  77. metadata +41 -31
@@ -176,7 +176,7 @@ namespace :db do
176
176
  :author_id => author.id,
177
177
  :owner_id => owner.id,
178
178
  :user_author_id => user_author.id,
179
- :_relation_ids => Array(t.relation_id)
179
+ :relation_ids => Array(t.relation_id)
180
180
 
181
181
  p.post_activity.update_attributes(:created_at => p.created_at,
182
182
  :updated_at => p.updated_at)
@@ -0,0 +1,3 @@
1
+ require 'social_stream/base/thinking-sphinx'
2
+
3
+ ThinkingSphinx::Index::Builder.send :include, SocialStream::Base::ThinkingSphinx::Index::Builder
@@ -170,16 +170,16 @@ describe GroupsController do
170
170
 
171
171
  it "should allow creating" do
172
172
  count = Group.count
173
- post :create, :group => { :name => "Test" }
173
+ post :create, :group => { :name => "Test new group" }
174
174
 
175
- group = assigns(:group)
175
+ new_group = assigns(:group)
176
176
 
177
- group.should be_valid
177
+ new_group.should be_valid
178
178
  Group.count.should eq(count + 1)
179
- assigns(:current_subject).should eq(group)
179
+ assigns(:current_subject).should eq(new_group)
180
180
  response.should redirect_to(:home)
181
- @user.receivers.should include(group.actor)
182
- @group.receivers.should include(group.actor)
181
+ @user.senders.should include(new_group.actor)
182
+ @group.senders.should include(new_group.actor)
183
183
  end
184
184
  end
185
185
  end
@@ -53,7 +53,7 @@ describe PostsController do
53
53
  @current_model = Factory(:post, :author_id => @user.actor_id,
54
54
  :owner_id => @user.actor_id,
55
55
  :user_author_id => @user.actor_id,
56
- :_relation_ids => Array(relation.id))
56
+ :relation_ids => Array(relation.id))
57
57
  end
58
58
 
59
59
  it_should_behave_like "Allow Creating"
@@ -78,7 +78,7 @@ describe PostsController do
78
78
  @current_model = Factory(:post, :author_id => @user.actor_id,
79
79
  :owner_id => @user.actor_id,
80
80
  :user_author_id => @user.actor_id,
81
- :_relation_ids => Array(relation.id))
81
+ :relation_ids => Array(relation.id))
82
82
  end
83
83
 
84
84
  it_should_behave_like "Allow Creating"
@@ -149,7 +149,7 @@ describe PostsController do
149
149
  @current_model = Factory(:post, :author_id => contact.sender.id,
150
150
  :owner_id => contact.receiver.id,
151
151
  :user_author_id => contact.sender.id,
152
- :_relation_ids => Array(relation.id))
152
+ :relation_ids => Array(relation.id))
153
153
  end
154
154
 
155
155
  it_should_behave_like "Allow Creating"
@@ -170,7 +170,7 @@ describe PostsController do
170
170
  @current_model = Factory(:post, :author_id => contact.sender.id,
171
171
  :owner_id => contact.receiver.id,
172
172
  :user_author_id => contact.sender.id,
173
- :_relation_ids => Array(relation.id))
173
+ :relation_ids => Array(relation.id))
174
174
  end
175
175
 
176
176
  it_should_behave_like "Allow Creating"
@@ -186,7 +186,7 @@ describe PostsController do
186
186
  @current_model = Factory(:post, :author_id => contact.sender.id,
187
187
  :owner_id => contact.receiver.id,
188
188
  :user_author_id => contact.sender.id,
189
- :_relation_ids => Array(relation.id))
189
+ :relation_ids => Array(relation.id))
190
190
  end
191
191
 
192
192
  it_should_behave_like "Allow Creating"
@@ -202,7 +202,7 @@ describe PostsController do
202
202
  @current_model = Factory(:post, :author_id => contact.sender.id,
203
203
  :owner_id => contact.receiver.id,
204
204
  :user_author_id => contact.sender.id,
205
- :_relation_ids => Array(relation.id))
205
+ :relation_ids => Array(relation.id))
206
206
  end
207
207
 
208
208
  it_should_behave_like "Allow Creating"
@@ -74,10 +74,10 @@ describe UsersController do
74
74
  it "should render other's page with activity" do
75
75
  tie = Factory(:friend, :receiver => @user.actor)
76
76
  friend = tie.sender
77
- Factory(:post, :author_id => tie.sender.id,
78
- :owner_id => tie.receiver.id,
79
- :user_author_id => tie.sender.id,
80
- :_relation_ids => Array(tie.relation_id))
77
+ Factory(:post, :author_id => @user.actor_id,
78
+ :owner_id => friend.id,
79
+ :user_author_id => @user.actor_id,
80
+ :relation_ids => Array(tie.relation_id))
81
81
 
82
82
  get :show, :id => friend.to_param
83
83
 
@@ -41,3 +41,6 @@ SocialStream.setup do |config|
41
41
  # Cleditor controls. It is used in new message editor, for example
42
42
  # config.cleditor_controls = "bold italic underline strikethrough subscript superscript | size style | bullets | image link unlink"
43
43
  end
44
+
45
+ # You can customize toolbar, sidebar and location bar from here
46
+ # See https://github.com/ging/social_stream/wiki/How-to-customize-the-toolbar,-sidebar-and-location
@@ -26,12 +26,35 @@ Factory.define :activity do |a|
26
26
  a.channel { Factory(:friend).contact.channel }
27
27
  a.activity_verb { ActivityVerb["post"] }
28
28
  a.relation_ids { |b| Array(b.sender.relation_custom('friend').id) }
29
- a.activity_object_ids { Array(Factory(:post_spec_helper).activity_object_spec_helper.id) }
29
+ a.activity_object_ids { |b|
30
+ # Create post
31
+ post = Factory(:post,
32
+ :author_id => b.author_id,
33
+ :owner_id => b.owner_id,
34
+ :user_author => b.user_author_id)
35
+
36
+ post.activities.delete_all
37
+
38
+ [post.activity_object_id]
39
+ }
30
40
  end
31
41
 
32
42
  Factory.define :self_activity, :parent => :activity do |a|
33
43
  a.channel { Factory(:self_contact).channel }
34
44
  a.relation_ids { |b| Array(b.sender.relation_custom('friend').id) }
45
+ a.activity_object_ids { |b|
46
+ # Create post
47
+ post = Factory(:post,
48
+ :author_id => b.author_id,
49
+ :owner_id => b.owner_id,
50
+ :user_author => b.user_author_id,
51
+ :relation_ids => b.relation_ids)
52
+
53
+ post.activities.delete_all
54
+
55
+ [post.activity_object_id]
56
+ }
57
+
35
58
  end
36
59
 
37
60
  Factory.define :public_activity, :parent => :activity do |a|
@@ -7,7 +7,7 @@ end
7
7
 
8
8
  Factory.define :public_post, :parent => :post do |p|
9
9
  p.owner_id { |q| q.author_id }
10
- p._relation_ids { |q| Array(Relation::Public.instance.id) }
10
+ p.relation_ids { |q| Array(Relation::Public.instance.id) }
11
11
  end
12
12
 
13
13
  Factory.define :self_post, :parent => :post do |p|
@@ -6,7 +6,7 @@ module ActivityTestHelper
6
6
  :author_id => contact.sender.id,
7
7
  :owner_id => contact.receiver.id,
8
8
  :user_author_id => contact.sender.id,
9
- :_relation_ids => Array(Relation.normalize_id(relations))).post_activity
9
+ :relation_ids => Array(Relation.normalize_id(relations))).post_activity
10
10
  end
11
11
 
12
12
  def create_ability_accessed_by(subject)
@@ -53,8 +53,6 @@ describe Post do
53
53
  :owner_id => tie.sender.id,
54
54
  :user_author_id => tie.receiver.id
55
55
 
56
- assert post.build_post_activity.allow? tie.receiver_subject, 'create'
57
-
58
56
  ability = Ability.new(tie.receiver_subject)
59
57
 
60
58
  ability.should be_able_to(:create, post)
@@ -88,8 +86,6 @@ describe Post do
88
86
  :owner_id => tie.sender.id,
89
87
  :user_author_id => tie.receiver.id
90
88
 
91
- assert post.build_post_activity.allow? tie.receiver_subject, 'create'
92
-
93
89
  ability = Ability.new(tie.receiver_subject)
94
90
 
95
91
  ability.should be_able_to(:create, post)
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Relation::Follow do
4
+ it "should have permissions" do
5
+ Relation::Follow.instance.permissions.should include(Permission.find_or_create_by_action_and_object('follow', nil))
6
+ end
7
+ end
8
+
@@ -10,7 +10,7 @@ class DocumentsController < ApplicationController
10
10
 
11
11
  def index
12
12
  super do |format|
13
- format.json { render :json => collection.map{|a| a.activity_objects.first.document.to_json} }
13
+ format.json { render :json => collection.map{|a| a.activity_objects.first.document} }
14
14
  if params[:no_layout].present?
15
15
  format.html { render :action => :index, :layout => false }
16
16
  else
@@ -8,12 +8,9 @@ class Audio < Document
8
8
  process_in_background :file
9
9
 
10
10
  define_index do
11
- indexes activity_object.title
11
+ activity_object_index
12
+
12
13
  indexes file_file_name, :as => :file_name
13
- indexes activity_object.description
14
- indexes activity_object.tags.name, :as => :tags
15
-
16
- has created_at
17
14
  end
18
15
 
19
16
  # Thumbnail file
@@ -15,14 +15,11 @@ class Document < ActiveRecord::Base
15
15
  end
16
16
 
17
17
  define_index do
18
- indexes activity_object.title
18
+ activity_object_index
19
+
19
20
  indexes file_file_name, :as => :file_name
20
- indexes activity_object.description
21
- indexes activity_object.tags.name, :as => :tags
22
21
 
23
22
  where "type IS NULL"
24
-
25
- has created_at
26
23
  end
27
24
 
28
25
  class << self
@@ -70,13 +67,13 @@ class Document < ActiveRecord::Base
70
67
  end
71
68
 
72
69
  # JSON, generic version for most documents
73
- def to_json me=self
74
- {:id => activity_object_id,
70
+ def as_json(options = nil)
71
+ {:id => id,
75
72
  :title => title,
76
73
  :description => description,
77
74
  :author => author.name,
78
75
  :src => file.to_s
79
- }.to_json
76
+ }
80
77
  end
81
78
 
82
79
  protected
@@ -10,12 +10,9 @@ class Picture < Document
10
10
  }
11
11
 
12
12
  define_index do
13
- indexes activity_object.title
13
+ activity_object_index
14
+
14
15
  indexes file_file_name, :as => :file_name
15
- indexes activity_object.description
16
- indexes activity_object.tags.name, :as => :tags
17
-
18
- has created_at
19
16
  end
20
17
 
21
18
  # Thumbnail file
@@ -1,6 +1,7 @@
1
1
  class Video < Document
2
2
  has_attached_file :file,
3
3
  :url => '/:class/:id.:extension',
4
+ :default_url => 'missing_:style.png',
4
5
  :path => ':rails_root/documents/:class/:id_partition/:style',
5
6
  :styles => {
6
7
  :webm => {:format => 'webm'},
@@ -15,12 +16,9 @@ class Video < Document
15
16
  process_in_background :file
16
17
 
17
18
  define_index do
18
- indexes activity_object.title
19
+ activity_object_index
20
+
19
21
  indexes file_file_name, :as => :file_name
20
- indexes activity_object.description
21
- indexes activity_object.tags.name, :as => :tags
22
-
23
- has created_at
24
22
  end
25
23
 
26
24
  # Thumbnail file
@@ -29,8 +27,8 @@ class Video < Document
29
27
  end
30
28
 
31
29
  # JSON, special edition for video files
32
- def to_json me=self
33
- {:id => activity_object_id,
30
+ def as_json(options = nil)
31
+ {:id => id,
34
32
  :title => title,
35
33
  :description => description,
36
34
  :author => author.name,
@@ -39,7 +37,7 @@ class Video < Document
39
37
  { :type => Mime::MP4.to_s, :src => file(:mp4).to_s },
40
38
  { :type => Mime::FLV.to_s, :src => file(:flv).to_s }
41
39
  ]
42
- }.to_json
40
+ }
43
41
  end
44
42
 
45
43
  end
@@ -2,6 +2,8 @@
2
2
  <%= thumb_for(audio, 16) %>
3
3
  </div>
4
4
  <div class="attachment_text">
5
- <%= t('audio.msg') %><%= "\""+audio.title+"\"" %>
5
+ <div class="title">
6
+ <%= audio.title %>
7
+ </div>
6
8
  <div class="processing_text"><%= t('audio.processing')%></div>
7
9
  </div>
@@ -7,9 +7,18 @@
7
7
  </div>
8
8
 
9
9
  <div class="attachment_text">
10
- <%= t('document.msg') %><%= link_to "\""+document.title+"\"",
11
- document,
12
- :class => "attachment_text_link" %>
10
+ <div class="title">
11
+ <%= document.title %>
12
+ </div>
13
+
14
+ <%= simple_format auto_link(document.description) %>
15
+
16
+ <%= link_to t('details.msg'),
17
+ document_path(document),
18
+ :alt => t('details.msg'),
19
+ :type => document.type,
20
+ :path => document_path(document),
21
+ :class => "attachment_text_link document_link" %>
13
22
  </div>
14
23
 
15
24
  <% end %>
@@ -15,9 +15,9 @@
15
15
 
16
16
  <%= simple_format auto_link(picture.description) %>
17
17
 
18
- <%= link_to t('picture.msg'),
18
+ <%= link_to t('details.msg'),
19
19
  picture_path(picture),
20
- :alt => t('picture.msg'),
20
+ :alt => t('details.msg'),
21
21
  :type => picture.type,
22
22
  :path => document_path(picture),
23
23
  :class => "attachment_text_link picture_link" %>
@@ -10,9 +10,9 @@
10
10
 
11
11
  <%= simple_format auto_link(video.description) %>
12
12
 
13
- <%= link_to t('video.msg'),
13
+ <%= link_to t('details.msg'),
14
14
  video,
15
- :alt => t('picture.msg'),
15
+ :alt => t('details.msg'),
16
16
  :type => video.type,
17
17
  :path => document_path(video),
18
18
  :class => "attachment_text_link video_link" %>
@@ -2,6 +2,8 @@
2
2
  <%= thumb_for(video, 16) %>
3
3
  </div>
4
4
  <div class="attachment_text">
5
- <%= t('video.msg') %><%= "\""+video.title+"\"" %>
5
+ <div class="title">
6
+ <%= video.title %>
7
+ </div>
6
8
  <div class="processing_text"><%= t('video.processing')%></div>
7
9
  </div>
@@ -7,7 +7,6 @@ en:
7
7
  confirm_delete: "Delete audio?"
8
8
  title: "Audios"
9
9
  mine: "My audios"
10
- msg: "Uploaded an audio:"
11
10
  name: "audio"
12
11
  not_mine: "Audios"
13
12
  one: "an audio"
@@ -15,6 +14,8 @@ en:
15
14
  title:
16
15
  one: "Audio"
17
16
  other: "Audios"
17
+ details:
18
+ msg: "See details..."
18
19
  document:
19
20
  actions:
20
21
  delete: "Delete"
@@ -36,7 +37,6 @@ en:
36
37
  title:
37
38
  title: "Title"
38
39
  mine: "My files"
39
- msg: "Uploaded a file:"
40
40
  name: "file"
41
41
  not_mine: "Files"
42
42
  one: "a file"
@@ -47,7 +47,6 @@ en:
47
47
  picture:
48
48
  confirm_delete: "Delete picture?"
49
49
  mine: "My pictures"
50
- msg: "See details..."
51
50
  name: "picture"
52
51
  not_mine: "Pictures"
53
52
  one: "a picture"
@@ -65,12 +64,10 @@ en:
65
64
  confirm_delete: "Delete resource?"
66
65
  title: "Resources"
67
66
  mine: "My resources"
68
- msg: "Uploaded a resource:"
69
67
  not_mine: "Resources"
70
68
  video:
71
69
  confirm_delete: "Delete video?"
72
70
  mine: "My videos"
73
- msg: "See details..."
74
71
  name: "video"
75
72
  not_mine: "Videos"
76
73
  one: "a video"
@@ -6,7 +6,6 @@ es:
6
6
  audio:
7
7
  confirm_delete: "¿Borrar audios?"
8
8
  mine: "Mis audios"
9
- msg: "Subió un audio:"
10
9
  name: "archivo de audio"
11
10
  not_mine: "Audios"
12
11
  one: "un archivo de audio"
@@ -14,6 +13,8 @@ es:
14
13
  title:
15
14
  one: "Audio"
16
15
  other: "Audios"
16
+ details:
17
+ msg: "Ver detalles..."
17
18
  document:
18
19
  actions:
19
20
  delete: "Borrar"
@@ -35,7 +36,6 @@ es:
35
36
  title:
36
37
  title: "Título"
37
38
  mine: "Mis ficheros"
38
- msg: "Subió un fichero:"
39
39
  name: "fichero"
40
40
  not_mine: "Ficheros"
41
41
  one: "un fichero"
@@ -46,7 +46,6 @@ es:
46
46
  picture:
47
47
  confirm_delete: "¿Borrar imagen?"
48
48
  mine: "Mis imágenes"
49
- msg: "Ver detalles..."
50
49
  name: "imagen"
51
50
  not_mine: "Imágenes"
52
51
  one: "una imagen"
@@ -64,12 +63,10 @@ es:
64
63
  confirm_delete: "¿Borrar recursos?"
65
64
  title: "Recursos"
66
65
  mine: "Mis recursos"
67
- msg: "Subió un recurso:"
68
66
  not_mine: "Recursos"
69
67
  video:
70
68
  confirm_delete: "¿Borrar vídeo?"
71
69
  mine: "Mis vídeos"
72
- msg: "Ver detalles..."
73
70
  name: "vídeo"
74
71
  not_mine: "Vídeos"
75
72
  one: "un vídeo"