social_stream 2.1.1 → 2.2.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 (188) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -2
  3. data/LICENSE +1 -1
  4. data/base/Rakefile +3 -17
  5. data/base/app/assets/images/flags/de.png +0 -0
  6. data/base/app/assets/images/flags/fr.png +0 -0
  7. data/base/app/assets/images/flags/hu.png +0 -0
  8. data/base/app/assets/images/flags/nl.png +0 -0
  9. data/base/app/assets/javascripts/social_stream/actor.js +34 -0
  10. data/base/app/assets/javascripts/social_stream/contact.js +40 -5
  11. data/base/app/assets/javascripts/social_stream/flash.js +6 -1
  12. data/base/app/assets/javascripts/social_stream/group.js +6 -5
  13. data/base/app/assets/javascripts/social_stream/relation_customs.js +0 -1
  14. data/base/app/assets/stylesheets/social_stream/base/adjust/layout/_adjust.css.sass +3 -0
  15. data/base/app/assets/stylesheets/social_stream/base/buttons/_buttons.scss.sass +0 -2
  16. data/base/app/assets/stylesheets/social_stream/base/contacts/_contacts.css.sass +1 -11
  17. data/base/app/assets/stylesheets/social_stream/base/contacts/layouts/_contacts.css.sass +1 -29
  18. data/base/app/assets/stylesheets/social_stream/base/layouts/_header.css.sass +0 -1
  19. data/base/app/assets/stylesheets/social_stream/base/mixins/_buttons.css.sass +5 -0
  20. data/base/app/assets/stylesheets/social_stream/base/mixins/_layout.css.sass +36 -7
  21. data/base/app/controllers/actors_controller.rb +25 -0
  22. data/base/app/controllers/contacts_controller.rb +38 -8
  23. data/base/app/controllers/groups_controller.rb +2 -21
  24. data/base/app/controllers/profiles_controller.rb +4 -0
  25. data/base/app/controllers/settings_controller.rb +12 -2
  26. data/base/app/controllers/users_controller.rb +0 -8
  27. data/base/app/helpers/contacts_helper.rb +8 -0
  28. data/base/app/models/activity.rb +19 -6
  29. data/base/app/models/actor.rb +49 -11
  30. data/base/app/models/contact.rb +12 -5
  31. data/base/app/models/group.rb +13 -11
  32. data/base/app/models/permission.rb +30 -0
  33. data/base/app/models/relation.rb +17 -7
  34. data/base/app/models/relation/custom.rb +2 -40
  35. data/base/app/models/relation/follow.rb +8 -2
  36. data/base/app/models/relation/owner.rb +10 -0
  37. data/base/app/models/relation/single.rb +7 -4
  38. data/base/app/models/site.rb +1 -1
  39. data/base/app/models/tie.rb +8 -4
  40. data/base/app/views/contacts/_add_button.html.erb +9 -0
  41. data/base/app/views/contacts/_button.html.erb +3 -3
  42. data/base/app/views/contacts/_button_multiple.html.erb +4 -0
  43. data/base/app/views/contacts/_button_simple.html.erb +17 -0
  44. data/base/app/views/contacts/_new_modal.html.erb +22 -0
  45. data/base/app/views/contacts/destroy.js.erb +5 -4
  46. data/base/app/views/contacts/update.js.erb +5 -4
  47. data/base/app/views/devise/confirmations/new.html.erb +14 -9
  48. data/base/app/views/frontpage/_presentation.html.erb +2 -2
  49. data/base/app/views/groups/_form.html.erb +20 -20
  50. data/base/app/views/groups/show.html.erb +5 -5
  51. data/base/app/views/layouts/_header_dropdown_menu.html.erb +3 -5
  52. data/base/app/views/layouts/_header_signed_in.erb +3 -3
  53. data/base/app/views/layouts/_logo_in.html.erb +1 -1
  54. data/base/app/views/layouts/application.html.erb +2 -0
  55. data/base/app/views/permissions/_list.html.erb +1 -1
  56. data/base/app/views/profiles/_avatar.html.erb +1 -5
  57. data/base/app/views/profiles/_avatar_edit.html.erb +5 -0
  58. data/base/app/views/profiles/_comunication-info.html.erb +2 -36
  59. data/base/app/views/profiles/_comunication-info_edit.html.erb +27 -0
  60. data/base/app/views/profiles/_edit_icon.html.erb +0 -1
  61. data/base/app/views/profiles/_experience.html.erb +1 -6
  62. data/base/app/views/profiles/_experience_edit.html.erb +5 -0
  63. data/base/app/views/profiles/_personal.html.erb +1 -39
  64. data/base/app/views/profiles/_personal_edit.html.erb +31 -0
  65. data/base/app/views/profiles/_profile_edit.html.erb +7 -0
  66. data/base/app/views/profiles/_tags.html.erb +1 -4
  67. data/base/app/views/profiles/_tags_edit.html.erb +4 -0
  68. data/base/app/views/profiles/edit.html.erb +24 -0
  69. data/base/app/views/settings/_notifications.html.erb +12 -4
  70. data/base/app/views/users/show.html.erb +5 -5
  71. data/base/config/locales/de.yml +654 -0
  72. data/base/config/locales/en.yml +20 -9
  73. data/base/config/locales/es.yml +151 -140
  74. data/base/config/locales/fr.yml +656 -0
  75. data/base/config/locales/hu.yml +653 -0
  76. data/base/config/locales/nl.yml +656 -0
  77. data/base/config/locales/pt.yml +250 -239
  78. data/base/config/locales/rails.de.yml +203 -0
  79. data/base/config/locales/rails.fr.yml +222 -0
  80. data/base/config/locales/rails.hu.yml +199 -0
  81. data/base/config/locales/rails.nl.yml +199 -0
  82. data/base/config/locales/zh.yml +214 -202
  83. data/base/config/routes.rb +22 -30
  84. data/base/db/migrate/20130708152633_set_group_owners.rb +19 -0
  85. data/base/db/migrate/20130723133530_actor_notification_settings.rb +10 -0
  86. data/base/lib/generators/social_stream/base/templates/initializer.rb +13 -7
  87. data/base/lib/rails/social_stream.rb +2 -0
  88. data/base/lib/social_stream/base.rb +27 -7
  89. data/base/lib/social_stream/base/ability.rb +3 -5
  90. data/base/lib/social_stream/base/autoload.rb +1 -0
  91. data/base/lib/social_stream/base/version.rb +1 -1
  92. data/base/lib/social_stream/controllers/authorship.rb +18 -0
  93. data/base/lib/social_stream/controllers/helpers.rb +18 -4
  94. data/base/lib/social_stream/controllers/objects.rb +2 -8
  95. data/base/lib/social_stream/controllers/subjects.rb +9 -2
  96. data/base/lib/social_stream/models/supertype.rb +2 -0
  97. data/base/lib/social_stream/population/activity_object.rb +6 -8
  98. data/base/lib/social_stream/routing/mapper.rb +52 -0
  99. data/base/social_stream-base.gemspec +4 -7
  100. data/base/spec/controllers/groups_controller_spec.rb +19 -8
  101. data/base/spec/controllers/posts_controller_spec.rb +114 -147
  102. data/base/spec/models/post_authorization_spec.rb +190 -204
  103. data/base/spec/models/post_spec.rb +17 -63
  104. data/base/vendor/assets/javascripts/bootstrap-multiselect.js +434 -127
  105. data/documents/Rakefile +1 -6
  106. data/documents/config/locales/de.yml +93 -0
  107. data/documents/config/locales/es.yml +2 -2
  108. data/documents/config/locales/fr.yml +93 -0
  109. data/documents/config/locales/hu.yml +93 -0
  110. data/documents/config/locales/nl.yml +93 -0
  111. data/documents/config/locales/zh.yml +4 -4
  112. data/documents/config/routes.rb +7 -9
  113. data/documents/lib/social_stream/documents/version.rb +1 -1
  114. data/documents/social_stream-documents.gemspec +4 -4
  115. data/events/Rakefile +1 -6
  116. data/events/config/locales/es.yml +3 -3
  117. data/events/config/locales/zh.yml +3 -3
  118. data/events/lib/social_stream/events/models/actor.rb +2 -1
  119. data/events/lib/social_stream/events/version.rb +1 -1
  120. data/events/social_stream-events.gemspec +1 -1
  121. data/lib/generators/social_stream/install_generator.rb +1 -0
  122. data/lib/social_stream.rb +1 -0
  123. data/lib/social_stream/version.rb +1 -1
  124. data/lib/tasks/i18n.rake +22 -2
  125. data/linkser/Rakefile +1 -6
  126. data/linkser/config/locales/de.yml +17 -0
  127. data/linkser/config/locales/es.yml +2 -2
  128. data/linkser/config/locales/fr.yml +17 -0
  129. data/linkser/config/locales/hu.yml +17 -0
  130. data/linkser/config/locales/nl.yml +17 -0
  131. data/linkser/config/locales/zh.yml +2 -2
  132. data/linkser/lib/social_stream/linkser/version.rb +1 -1
  133. data/linkser/social_stream-linkser.gemspec +1 -1
  134. data/oauth2_server/Rakefile +1 -6
  135. data/oauth2_server/app/assets/images/step_1.png +0 -0
  136. data/oauth2_server/app/assets/images/step_2.png +0 -0
  137. data/oauth2_server/app/assets/images/step_3.png +0 -0
  138. data/oauth2_server/app/assets/javascripts/social_stream/site_client.js +27 -0
  139. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/applications/layout/_applications-oauth2server.css.sass +0 -5
  140. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/create/layout/_create-oauth2server.css.sass +3 -5
  141. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/show/layout/_show-oauth2server.css.sass +8 -6
  142. data/oauth2_server/app/controllers/site/clients_controller.rb +17 -41
  143. data/oauth2_server/app/decorators/social_stream/base/relation_decorator.rb +2 -0
  144. data/oauth2_server/app/decorators/social_stream/base/user_decorator.rb +1 -20
  145. data/oauth2_server/app/models/relation/manager.rb +1 -10
  146. data/oauth2_server/app/models/site/client.rb +4 -2
  147. data/oauth2_server/app/views/site/clients/_destroy.html.erb +11 -0
  148. data/oauth2_server/app/views/site/clients/_edit.html.erb +9 -2
  149. data/oauth2_server/app/views/site/clients/_edit_step_2.html.erb +6 -6
  150. data/oauth2_server/app/views/site/clients/_edit_step_3.html.erb +8 -6
  151. data/oauth2_server/app/views/site/clients/_form.html.erb +11 -11
  152. data/oauth2_server/app/views/site/clients/_list.html.erb +23 -11
  153. data/oauth2_server/app/views/site/clients/edit.html.erb +1 -1
  154. data/oauth2_server/app/views/site/clients/index.html.erb +9 -40
  155. data/oauth2_server/app/views/site/clients/show.html.erb +66 -68
  156. data/oauth2_server/config/locales/en.yml +19 -0
  157. data/oauth2_server/config/locales/es.yml +23 -4
  158. data/oauth2_server/config/locales/zh.yml +32 -13
  159. data/oauth2_server/config/routes.rb +3 -1
  160. data/oauth2_server/lib/social_stream/oauth2_server.rb +4 -1
  161. data/oauth2_server/lib/social_stream/oauth2_server/ability.rb +1 -1
  162. data/oauth2_server/lib/social_stream/oauth2_server/models/user.rb +18 -0
  163. data/oauth2_server/lib/social_stream/oauth2_server/version.rb +1 -1
  164. data/oauth2_server/social_stream-oauth2_server.gemspec +1 -1
  165. data/oauth2_server/spec/controllers/site_clients_controller_authorization_spec.rb +7 -0
  166. data/ostatus/Rakefile +1 -6
  167. data/ostatus/config/locales/zh.yml +8 -8
  168. data/ostatus/lib/social_stream-ostatus.rb +3 -0
  169. data/ostatus/lib/social_stream/ostatus/version.rb +1 -1
  170. data/ostatus/social_stream-ostatus.gemspec +1 -1
  171. data/places/config/locales/es.yml +51 -51
  172. data/presence/config/locales/es.yml +48 -48
  173. data/presence/config/locales/zh.yml +48 -48
  174. data/presence/lib/social_stream/presence/version.rb +1 -1
  175. data/presence/social_stream-presence.gemspec +1 -1
  176. data/social_stream.gemspec +8 -7
  177. metadata +60 -29
  178. data/base/app/assets/javascripts/social_stream/follow.js +0 -28
  179. data/base/app/controllers/followers_controller.rb +0 -34
  180. data/base/app/helpers/followers_helper.rb +0 -5
  181. data/base/app/views/contacts/_link_follow.html.erb +0 -16
  182. data/base/app/views/followers/destroy.js.erb +0 -1
  183. data/base/app/views/followers/index.html.erb +0 -30
  184. data/base/app/views/followers/update.js.erb +0 -3
  185. data/base/app/views/frontpage/_characteristics.html.erb +0 -23
  186. data/base/lib/social_stream/routing/constraints/custom.rb +0 -11
  187. data/base/lib/social_stream/routing/constraints/follow.rb +0 -11
  188. data/base/spec/controllers/followers_controller_spec.rb +0 -37
@@ -7,31 +7,31 @@ Rails.application.routes.draw do
7
7
  match 'search' => 'search#index', :as => :search
8
8
 
9
9
  # Social Stream subjects configured in config/initializers/social_stream.rb
10
- SocialStream.subjects.each do |actor|
11
- resources actor.to_s.pluralize do
12
- resources :contacts
13
- resource :like
14
- resource :profile
15
- resources :activities
16
-
17
- # Nested Social Stream objects configured in config/initializers/social_stream.rb
18
- #
19
- # /users/demo/posts
20
- (SocialStream.objects - [ :actor ]).each do |object|
21
- resources object.to_s.pluralize do
22
- get 'search', :on => :collection
23
- end
10
+ route_subjects do
11
+ resources :contacts
12
+ resource :like
13
+ resource :profile
14
+ resources :activities
15
+
16
+ # Nested Social Stream objects configured in config/initializers/social_stream.rb
17
+ #
18
+ # /users/demo/posts
19
+ (SocialStream.objects - [ :actor ]).each do |object|
20
+ resources object.to_s.pluralize do
21
+ get 'search', :on => :collection
24
22
  end
23
+ end
25
24
 
26
- # Repository models are configured in config/initializers/social_stream.rb
27
- if SocialStream.repository_models.present?
28
- resource :repository do
29
- get 'search', on: :collection
30
- end
25
+ # Repository models are configured in config/initializers/social_stream.rb
26
+ if SocialStream.repository_models.present?
27
+ resource :repository do
28
+ get 'search', on: :collection
31
29
  end
32
30
  end
33
31
  end
34
32
 
33
+ resources :actors, only: [ :index ]
34
+
35
35
  # Get information about current_subject
36
36
  match 'user' => 'users#current', format: :json
37
37
 
@@ -62,19 +62,11 @@ Rails.application.routes.draw do
62
62
  end
63
63
  end
64
64
 
65
- constraints SocialStream::Routing::Constraints::Custom.new do
66
- namespace "relation" do
67
- resources :customs
68
- end
69
-
70
- resources :permissions
65
+ namespace "relation" do
66
+ resources :customs
71
67
  end
72
68
 
73
- constraints SocialStream::Routing::Constraints::Follow.new do
74
- match 'followings' => 'followers#index', :as => :followings, :defaults => { :direction => 'sent' }
75
- match 'followers' => 'followers#index', :as => :followers, :defaults => { :direction => 'received' }
76
- resources :followers
77
- end
69
+ resources :permissions
78
70
 
79
71
  resources :activity_actions
80
72
 
@@ -0,0 +1,19 @@
1
+ class SetGroupOwners < ActiveRecord::Migration
2
+ def up
3
+ o_id = ::Relation::Owner.instance.id
4
+
5
+ Group.all.each do |g|
6
+ highest_rel = g.relation_customs.sort.last
7
+
8
+ highest_rel.contacts.each do |c|
9
+ unless c.relation_ids.include? o_id
10
+ c.ties.create! relation_id: o_id
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ def down
17
+ ::Relation::Owner.instance.ties.destroy_all
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ class ActorNotificationSettings < ActiveRecord::Migration
2
+ def change
3
+ change_table :actors do |t|
4
+ t.string "notification_settings"
5
+ end
6
+
7
+ # rake db:populate does not work without this
8
+ Actor.reset_column_information
9
+ end
10
+ end
@@ -5,6 +5,10 @@ SocialStream.setup do |config|
5
5
  # Remember you must add an "actor_id" foreign key column to your migration!
6
6
  #
7
7
  # config.subjects = [:user, :group ]
8
+
9
+ # List of subjects that can be accessed by the client browser or the API
10
+ #
11
+ # config.routed_subjects = [:user, :group ]
8
12
 
9
13
  # Include devise modules in User. See devise documentation for details.
10
14
  # Others available are:
@@ -13,13 +17,6 @@ SocialStream.setup do |config|
13
17
  # :recoverable, :rememberable, :trackable,
14
18
  # :omniauthable, :token_authenticatable
15
19
 
16
- # Config the relation model of your network
17
- #
18
- # :custom - users define their own relation types, and post with privacy, like Google+
19
- # :follow - user just follow other users, like Twitter
20
- #
21
- # config.relation_model = :custom
22
-
23
20
  # Config the default relations that will be created and customized by actors
24
21
  # config.custom_relations = {
25
22
  # user: {
@@ -80,4 +77,13 @@ SocialStream.setup do |config|
80
77
 
81
78
  # Cleditor controls. It is used in new message editor, for example
82
79
  # config.cleditor_controls = "bold italic underline strikethrough subscript superscript | size style | bullets | image link unlink"
80
+
81
+ # Default notification email settings for new users
82
+ # config.default_notification_settings = {
83
+ # someone_adds_me_as_a_contact: true,
84
+ # someone_confirms_my_contact_request: true,
85
+ # someone_likes_my_post: true,
86
+ # someone_comments_on_my_post: true
87
+ # }
88
+
83
89
  end
@@ -21,3 +21,5 @@ class ActionDispatch::Http::UploadedFile
21
21
 
22
22
  alias_method_chain :initialize, :magic
23
23
  end
24
+
25
+ require 'social_stream/routing/mapper'
@@ -9,6 +9,8 @@ module SocialStream
9
9
  mattr_accessor :subjects
10
10
  @@subjects = [ :user, :group, :site ]
11
11
 
12
+ mattr_writer :routed_subjects
13
+
12
14
  mattr_accessor :devise_modules
13
15
  @@devise_modules = [ :database_authenticatable, :registerable, :recoverable,
14
16
  :rememberable, :trackable, :omniauthable, :token_authenticatable]
@@ -19,9 +21,6 @@ module SocialStream
19
21
  mattr_accessor :activity_forms
20
22
  @@activity_forms = []
21
23
 
22
- mattr_accessor :relation_model
23
- @@relation_model = :custom
24
-
25
24
  mattr_accessor :single_relations
26
25
  @@single_relations = [ :public, :follow, :reject ]
27
26
 
@@ -71,10 +70,10 @@ module SocialStream
71
70
  'site/current' => {}
72
71
  }
73
72
 
74
- mattr_accessor :list_relations
75
- @@list_relations = {
73
+ mattr_accessor :system_relations
74
+ @@system_relations = {
76
75
  user: [],
77
- group: []
76
+ group: [ :owner ]
78
77
  }
79
78
 
80
79
  mattr_accessor :available_permissions
@@ -115,12 +114,33 @@ module SocialStream
115
114
 
116
115
  mattr_accessor :cleditor_controls
117
116
  @@cleditor_controls = "bold italic underline strikethrough subscript superscript | size style | bullets | image link unlink"
118
-
117
+
118
+ mattr_accessor :default_notification_settings
119
+ @@default_notification_settings = {
120
+ someone_adds_me_as_a_contact: true,
121
+ someone_confirms_my_contact_request: true,
122
+ someone_likes_my_post: true,
123
+ someone_comments_on_my_post: true
124
+ }
125
+
119
126
  class << self
120
127
  def setup
121
128
  yield self
122
129
  end
123
130
 
131
+ # All the subjects that appear in routes and can be accessed
132
+ # through the browser / API
133
+ def routed_subjects
134
+ @@routed_subjects ||= subjects.dup
135
+ end
136
+
137
+ # An array of the keys that must be tried when searching for a
138
+ # profile subject
139
+ def profile_subject_keys
140
+ @profile_subject_keys ||=
141
+ routed_subjects.map{ |s| s.to_s.split('/').last }
142
+ end
143
+
124
144
  def objects
125
145
  @@objects.push(:actor) unless @@objects.include?(:actor)
126
146
  @@objects
@@ -81,11 +81,7 @@ module SocialStream
81
81
  g.author_id == Actor.normalize_id(subject)
82
82
  end
83
83
 
84
- can :update, Group do |g|
85
- g.represented_by?(subject)
86
- end
87
-
88
- can :destroy, Group do |g|
84
+ can [ :update, :destroy, :represent ], Group do |g|
89
85
  g.represented_by?(subject)
90
86
  end
91
87
 
@@ -97,6 +93,8 @@ module SocialStream
97
93
  end
98
94
 
99
95
  # Privacy
96
+ can :read, Relation::Owner
97
+
100
98
  can :manage, ::Relation::Custom do |r|
101
99
  subject.present? && (
102
100
  r.actor_id == subject.actor_id ||
@@ -14,6 +14,7 @@ module SocialStream
14
14
  autoload :TestHelpers, 'social_stream/test_helpers'
15
15
 
16
16
  module Controllers
17
+ autoload :Authorship, 'social_stream/controllers/authorship'
17
18
  autoload :MarkNotificationsRead, 'social_stream/controllers/mark_notifications_read'
18
19
  autoload :I18nIntegration, 'social_stream/controllers/i18n_integration'
19
20
  autoload :CancanDeviseIntegration, 'social_stream/controllers/cancan_devise_integration'
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "2.1.0".freeze
3
+ VERSION = "2.2.0".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,18 @@
1
+ module SocialStream
2
+ module Controllers
3
+ module Authorship
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before_filter :set_author_ids, only: [ :new, :create ]
8
+ end
9
+
10
+ private
11
+
12
+ def set_author_ids
13
+ resource_params.first[:author_id] = current_subject.try(:actor_id)
14
+ resource_params.first[:user_author_id] = current_user.try(:actor_id)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -17,7 +17,7 @@ module SocialStream
17
17
  # Post #=> in PostsController
18
18
  #
19
19
  def model_class
20
- controller_name.classify.constantize
20
+ self.name.sub(/Controller/, '').singularize.constantize
21
21
  end
22
22
  end
23
23
 
@@ -122,13 +122,27 @@ module SocialStream
122
122
  end
123
123
 
124
124
  def find_profile_subject
125
- SocialStream.subjects.each do |type|
125
+ SocialStream.profile_subject_keys.each do |type|
126
126
  id = params["#{ type }_id"]
127
127
 
128
128
  next if id.blank?
129
129
 
130
- subject_class = type.to_s.classify.constantize
131
-
130
+ subject_class =
131
+ begin
132
+ type.to_s.classify.constantize
133
+ rescue NameError => e
134
+ # Try with namespace
135
+ ns = params[:controller].split('/')
136
+ ns.pop
137
+
138
+ if ns.blank?
139
+ raise e
140
+ end
141
+
142
+ ns.push(type)
143
+ ns.join('/').classify.constantize
144
+ end
145
+
132
146
  return subject_class.find_by_slug! id
133
147
  end
134
148
 
@@ -17,9 +17,9 @@ module SocialStream
17
17
  extend ActiveSupport::Concern
18
18
 
19
19
  included do
20
- inherit_resources
20
+ include SocialStream::Controllers::Authorship
21
21
 
22
- before_filter :set_author_ids, :only => [ :new, :create, :update ]
22
+ inherit_resources
23
23
 
24
24
  before_filter :authenticate_user!, :only => [:new, :edit, :create, :update, :destroy]
25
25
 
@@ -75,12 +75,6 @@ module SocialStream
75
75
  resource.activity_object.increment!(:visit_count) if request.format == 'html'
76
76
  end
77
77
 
78
- def set_author_ids
79
- resource_params.first[:author_id] = current_subject.try(:actor_id)
80
- resource_params.first[:user_author_id] = current_user.try(:actor_id)
81
- resource_params.first[:owner_id] ||= current_subject.try(:actor_id)
82
- end
83
-
84
78
  def collection_variable_get
85
79
  instance_variable_get "@#{ controller_name }"
86
80
  end
@@ -4,15 +4,22 @@ module SocialStream
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- include SocialStream::Controllers::Helpers
8
-
9
7
  inherit_resources
8
+
9
+ protected
10
+
11
+ # Overwrite resource method to support slug
12
+ # See InheritedResources::BaseHelpers#resource
13
+ def method_for_find
14
+ :find_by_slug!
15
+ end
10
16
  end
11
17
 
12
18
  # Overwrite {SocialStream::Controllers::Helpers::InstanceMethods#profile_subject}
13
19
  def profile_subject
14
20
  self.class.model_class.find_by_slug(params[:id])
15
21
  end
22
+
16
23
  end
17
24
  end
18
25
  end
@@ -35,6 +35,8 @@ module SocialStream #:nodoc:
35
35
  case a
36
36
  when Integer
37
37
  a
38
+ when String
39
+ a.to_i
38
40
  when Array
39
41
  a.map{ |e| normalize_id(e) }
40
42
  else
@@ -13,16 +13,14 @@ module SocialStream
13
13
  populate klass, author, owner, relation_ids, &block
14
14
  end
15
15
 
16
- if SocialStream.relation_model == :custom
17
- ties = Tie.allowing('create', 'activity').all
18
- PowerLaw.new ties.sample(ties.count / 3) do |t|
16
+ ties = Tie.allowing('create', 'activity').all
17
+ PowerLaw.new ties.sample(ties.count / 3) do |t|
19
18
 
20
- author = t.receiver
21
- owner = t.sender
22
- relation_ids = Array(t.relation_id)
19
+ author = t.receiver
20
+ owner = t.sender
21
+ relation_ids = Array(t.relation_id)
23
22
 
24
- populate klass, author, owner, relation_ids, &block
25
- end
23
+ populate klass, author, owner, relation_ids, &block
26
24
  end
27
25
 
28
26
  end_time = Time.now
@@ -0,0 +1,52 @@
1
+ module SocialStream
2
+ module Routing
3
+ module Mapper
4
+
5
+ # Route subjects configured as SocialStream.routed_subjects in
6
+ # config/initializers/social_stream.rb
7
+ #
8
+ # It supports namespaces, so setting
9
+ #
10
+ # SocialStream.routed_subjects = [ ':site/clients' ]
11
+ #
12
+ # and using
13
+ #
14
+ # route_subjects do
15
+ # resources :posts
16
+ # end
17
+ #
18
+ # is equivalent to
19
+ #
20
+ # namespace :site
21
+ # resources :clients
22
+ # resources :posts
23
+ # end
24
+ # end
25
+ #
26
+ def route_subjects
27
+ SocialStream.routed_subjects.each do |name|
28
+ ns = name.to_s.split('/')
29
+ actor = ns.pop
30
+
31
+ rts = -> {
32
+ resources actor.pluralize do
33
+ yield
34
+ end
35
+ }
36
+
37
+ if ns.present?
38
+ ns.reverse.inject(rts) { |lmda, n|
39
+ proc do
40
+ namespace n, &lmda
41
+ end
42
+ }.call
43
+ else
44
+ rts.call
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ ActionDispatch::Routing::Mapper.send :include, SocialStream::Routing::Mapper