social_stream-base 0.11.2 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.rdoc +1 -1
- data/app/assets/stylesheets/header.css.scss +9 -7
- data/app/controllers/groups_controller.rb +3 -4
- data/app/controllers/settings_controller.rb +14 -3
- data/app/controllers/users_controller.rb +3 -4
- data/app/helpers/permissions_helper.rb +2 -1
- data/app/models/activity_object.rb +29 -28
- data/app/models/actor.rb +27 -19
- data/app/models/channel.rb +48 -0
- data/app/views/contacts/_pendings.html.erb +1 -1
- data/app/views/devise/registrations/_edit_user.html.erb +0 -25
- data/app/views/devise/registrations/edit.html.erb +1 -0
- data/app/views/layouts/_footer.html.erb +1 -1
- data/app/views/layouts/_header_dropdown_menu_sessions.html.erb +5 -2
- data/app/views/settings/_language.html.erb +32 -0
- data/app/views/settings/_notifications.html.erb +1 -1
- data/config/locales/en.yml +5 -0
- data/config/locales/es.yml +7 -0
- data/db/migrate/20120103103125_add_channels.rb +88 -0
- data/db/migrate/20120109081509_update_notify_permissions.rb +15 -0
- data/lib/social_stream/base/engine.rb +10 -2
- data/lib/social_stream/base/version.rb +1 -1
- data/lib/social_stream/controllers/i18n_integration.rb +29 -0
- data/lib/social_stream/controllers/subjects.rb +19 -0
- data/lib/social_stream/models/object.rb +12 -26
- data/lib/social_stream/models/subject.rb +2 -24
- data/lib/social_stream/models/subtype.rb +80 -0
- data/lib/social_stream/models/supertype.rb +16 -3
- data/lib/social_stream/views/settings/base.rb +5 -0
- data/lib/social_stream-base.rb +7 -4
- data/lib/tasks/db/populate.rake +1 -0
- data/spec/controllers/settings_controller_spec.rb +1 -1
- data/spec/spec_helper.rb +3 -0
- metadata +67 -61
- data/spec/dummy/app/helpers/application_helper.rb +0 -2
@@ -0,0 +1,29 @@
|
|
1
|
+
module SocialStream
|
2
|
+
module Controllers
|
3
|
+
# Common methods added to ApplicationController
|
4
|
+
module I18nIntegration
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
before_filter :set_locale
|
9
|
+
end
|
10
|
+
|
11
|
+
module InstanceMethods
|
12
|
+
# Set locale as per params, user preference or default
|
13
|
+
def set_locale
|
14
|
+
I18n.locale = params[:locale] || user_preferred_locale || extract_locale_from_accept_language_header || I18n.default_locale
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def extract_locale_from_accept_language_header
|
19
|
+
return nil if request.env['HTTP_ACCEPT_LANGUAGE'].nil?
|
20
|
+
(request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).map{|l| l.to_sym} & I18n.available_locales).first
|
21
|
+
end
|
22
|
+
|
23
|
+
def user_preferred_locale
|
24
|
+
current_user.language if user_signed_in?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SocialStream
|
2
|
+
module Controllers
|
3
|
+
module Subjects
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
inherit_resources
|
8
|
+
end
|
9
|
+
|
10
|
+
module InstanceMethods
|
11
|
+
# Overwrite {SocialStream::Controllers::Helpers::InstanceMethods#profile_subject}
|
12
|
+
def profile_subject
|
13
|
+
!resource.new? && resource || current_subject
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -10,12 +10,11 @@ module SocialStream
|
|
10
10
|
attr_writer :_relation_ids
|
11
11
|
attr_accessor :_activity_parent_id
|
12
12
|
|
13
|
-
|
14
|
-
:
|
15
|
-
:autosave => true,
|
16
|
-
:dependent => :destroy
|
13
|
+
subtype_of :activity_object,
|
14
|
+
:build => { :object_type => to_s }
|
17
15
|
|
18
|
-
|
16
|
+
has_one :channel, :through => :activity_object
|
17
|
+
has_many :activity_object_activities, :through => :activity_object
|
19
18
|
|
20
19
|
# before_create :create_activity_object_with_type
|
21
20
|
|
@@ -23,31 +22,18 @@ module SocialStream
|
|
23
22
|
validates_presence_of :author_id, :owner_id, :user_author_id
|
24
23
|
|
25
24
|
after_create :create_post_activity
|
26
|
-
|
25
|
+
# Disable update activity for now
|
26
|
+
# It usually appears repeated in the wall and provides no useful information
|
27
|
+
#after_update :create_update_activity
|
27
28
|
end
|
29
|
+
|
30
|
+
scope :authored_by, lambda { |subject|
|
31
|
+
joins(:activity_object).
|
32
|
+
merge(ActivityObject.authored_by(subject))
|
33
|
+
}
|
28
34
|
end
|
29
35
|
|
30
36
|
module InstanceMethods
|
31
|
-
def activity_object!
|
32
|
-
activity_object || build_activity_object(:object_type => self.class.to_s)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Delegate missing methods to {ActivityObject}, if they exist there
|
36
|
-
def method_missing(method, *args, &block)
|
37
|
-
super
|
38
|
-
rescue NameError => object_error
|
39
|
-
# These methods must be raised to avoid loops (the :activity_object association calls here again)
|
40
|
-
exceptions = [ :_activity_object_id ]
|
41
|
-
raise object_error if exceptions.include?(method)
|
42
|
-
|
43
|
-
activity_object!.__send__ method, *args, &block
|
44
|
-
end
|
45
|
-
|
46
|
-
# {ActivityObject} handles some methods
|
47
|
-
def respond_to? *args
|
48
|
-
super || activity_object!.respond_to?(*args)
|
49
|
-
end
|
50
|
-
|
51
37
|
# Was the author represented with this {SocialStream::Models::Object object} was created?
|
52
38
|
def represented_author?
|
53
39
|
author_id == user_author_id
|
@@ -21,10 +21,8 @@ module SocialStream
|
|
21
21
|
extend ActiveSupport::Concern
|
22
22
|
|
23
23
|
included do
|
24
|
-
|
25
|
-
:
|
26
|
-
:autosave => true,
|
27
|
-
:dependent => :destroy
|
24
|
+
subtype_of :actor,
|
25
|
+
:build => { :subject_type => to_s }
|
28
26
|
|
29
27
|
has_one :profile, :through => :actor
|
30
28
|
|
@@ -78,29 +76,9 @@ module SocialStream
|
|
78
76
|
end
|
79
77
|
|
80
78
|
module InstanceMethods
|
81
|
-
def actor!
|
82
|
-
actor || build_actor(:subject_type => self.class.to_s)
|
83
|
-
end
|
84
|
-
|
85
79
|
def to_param
|
86
80
|
slug
|
87
81
|
end
|
88
|
-
|
89
|
-
# Delegate missing methods to {Actor}, if they exist there
|
90
|
-
def method_missing(method, *args, &block)
|
91
|
-
super
|
92
|
-
rescue NameError => subject_error
|
93
|
-
# These methods must be raised to avoid loops (the :actor association calls here again)
|
94
|
-
exceptions = [ :_actor_id ]
|
95
|
-
raise subject_error if exceptions.include?(method)
|
96
|
-
|
97
|
-
actor!.__send__ method, *args, &block
|
98
|
-
end
|
99
|
-
|
100
|
-
# {Actor} handles some methods
|
101
|
-
def respond_to? *args
|
102
|
-
super || actor!.respond_to?(*args)
|
103
|
-
end
|
104
82
|
end
|
105
83
|
|
106
84
|
module ClassMethods
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module SocialStream #:nodoc:
|
4
|
+
module Models
|
5
|
+
# Common methods for models that have a {SocialStream::Models::Supertype}
|
6
|
+
module Subtype
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
class << self
|
11
|
+
attr_reader :supertype_name, :supertype_options
|
12
|
+
end
|
13
|
+
|
14
|
+
belongs_to supertype_name, {
|
15
|
+
:validate => true,
|
16
|
+
:autosave => true,
|
17
|
+
:dependent => :destroy
|
18
|
+
}.merge(supertype_options[:belongs] || {})
|
19
|
+
|
20
|
+
class_eval <<-EOS
|
21
|
+
def #{ supertype_name }! # def actor!
|
22
|
+
#{ supertype_name } || # actor ||
|
23
|
+
# FIXME: ruby1.9 remove .inspect
|
24
|
+
build_#{ supertype_name }(#{ supertype_options[:build].inspect }) # build_actor(:subject_type => "User")
|
25
|
+
end # end
|
26
|
+
|
27
|
+
EOS
|
28
|
+
|
29
|
+
alias_method :supertype!, "#{ supertype_name }!"
|
30
|
+
|
31
|
+
before_validation :supertype!
|
32
|
+
end
|
33
|
+
|
34
|
+
module ClassMethods
|
35
|
+
def supertype_foreign_key
|
36
|
+
"#{ supertype_name }_id"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module InstanceMethods
|
41
|
+
# Delegate missing methods to supertype, if they exist there
|
42
|
+
def method_missing(method, *args, &block)
|
43
|
+
super
|
44
|
+
rescue NameError => subtype_error
|
45
|
+
# These methods must be raised to avoid loops
|
46
|
+
# (the @supertype_name association (i.e. :actor) calls here again)
|
47
|
+
exceptions = [ "_#{ self.class.supertype_foreign_key }".to_sym ] # [ :_actor_id ]
|
48
|
+
raise subtype_error if exceptions.include?(method)
|
49
|
+
|
50
|
+
begin
|
51
|
+
supertype!.__send__ method, *args, &block
|
52
|
+
# We rescue supertype's NameErrors so methods not defined are raised from
|
53
|
+
# the subtype. Example: user.foo should raise "foo is not defined in user"
|
54
|
+
# and not "in actor"
|
55
|
+
rescue NameError => supertype_error
|
56
|
+
raise subtype_error
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# {SocialStream::Models::Supertype} handles some methods
|
61
|
+
def respond_to? *args
|
62
|
+
super || supertype!.respond_to?(*args)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
module ActiveRecord
|
67
|
+
extend ActiveSupport::Concern
|
68
|
+
|
69
|
+
module ClassMethods
|
70
|
+
# This class is a subtype. Its supertype class is name
|
71
|
+
def subtype_of name, options = {}
|
72
|
+
@supertype_name = name
|
73
|
+
@supertype_options = options
|
74
|
+
include SocialStream::Models::Subtype
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -2,9 +2,10 @@ require 'active_support/concern'
|
|
2
2
|
|
3
3
|
module SocialStream #:nodoc:
|
4
4
|
module Models
|
5
|
-
# Common methods for models
|
6
|
-
#
|
7
|
-
# *
|
5
|
+
# Common methods for models having many {SocialStream::Models::Subtype subtypes}.
|
6
|
+
# Currently, there are two {SocialStream::Models::Supertype supertypes}:
|
7
|
+
# * {Actor}: participates in the social network and has {Tie Ties} with other actors. Its subtypes are {SocialStream::Models::Subject subjects}, such as {User} or {Group}
|
8
|
+
# * {ActivityObject}: created and managed by {Actor Actors} in {Activity Activities}. Its subtypes are {SocialStream::Models::Object objects}, like {Post} or {Comment}
|
8
9
|
module Supertype
|
9
10
|
extend ActiveSupport::Concern
|
10
11
|
|
@@ -32,6 +33,18 @@ module SocialStream #:nodoc:
|
|
32
33
|
end # end
|
33
34
|
end
|
34
35
|
end
|
36
|
+
|
37
|
+
module ActiveRecord
|
38
|
+
extend ActiveSupport::Concern
|
39
|
+
|
40
|
+
module ClassMethods
|
41
|
+
# This class is a supertype. Subtype classes are known as name
|
42
|
+
def supertype_of name
|
43
|
+
@subtypes_name = name
|
44
|
+
include SocialStream::Models::Supertype
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
35
48
|
end
|
36
49
|
end
|
37
50
|
end
|
data/lib/social_stream-base.rb
CHANGED
@@ -10,15 +10,18 @@ module SocialStream
|
|
10
10
|
autoload :TestHelpers, 'social_stream/test_helpers'
|
11
11
|
|
12
12
|
module Controllers
|
13
|
+
autoload :I18nIntegration, 'social_stream/controllers/i18n_integration'
|
13
14
|
autoload :CancanDeviseIntegration, 'social_stream/controllers/cancan_devise_integration'
|
14
|
-
autoload :Helpers,
|
15
|
-
autoload :Objects,
|
15
|
+
autoload :Helpers, 'social_stream/controllers/helpers'
|
16
|
+
autoload :Objects, 'social_stream/controllers/objects'
|
17
|
+
autoload :Subjects, 'social_stream/controllers/subjects'
|
16
18
|
end
|
17
19
|
|
18
20
|
module Models
|
19
|
-
autoload :Supertype, 'social_stream/models/supertype'
|
20
|
-
autoload :Subject, 'social_stream/models/subject'
|
21
21
|
autoload :Object, 'social_stream/models/object'
|
22
|
+
autoload :Subject, 'social_stream/models/subject'
|
23
|
+
autoload :Subtype, 'social_stream/models/subtype'
|
24
|
+
autoload :Supertype, 'social_stream/models/supertype'
|
22
25
|
end
|
23
26
|
|
24
27
|
module Views
|
data/lib/tasks/db/populate.rake
CHANGED
data/spec/spec_helper.rb
CHANGED