base/app/models/actor.rb in social_stream-0.16.3 vs base/app/models/actor.rb in social_stream-0.17.0
- old
+ new
@@ -13,15 +13,17 @@
# application developer can define as many actor subtypes as required.
# Actor subtypes are added to +config/initializers/social_stream.rb+
#
#
class Actor < ActiveRecord::Base
- @subtypes_name = :subject
- include SocialStream::Models::Supertype
+ # Actor is a supertype of all subjects defined in SocialStream.subjects
+ supertype_of :subject
+
include SocialStream::Models::Object
- validates_presence_of :name, :subject_type
+ validates_presence_of :name, :message => ''
+ validates_presence_of :subject_type
acts_as_messageable
acts_as_url :name, :url_attribute => :slug
@@ -60,17 +62,17 @@
:uniq => true
has_many :relations,
:dependent => :destroy
- has_many :authored_objects,
- :class_name => "ActivityObject",
+ has_many :authored_channels,
+ :class_name => "Channel",
:foreign_key => :author_id,
:dependent => :destroy
- has_many :owned_objects,
- :class_name => "ActivityObject",
+ has_many :owned_channels,
+ :class_name => "Channel",
:foreign_key => :owner_id,
:dependent => :destroy
scope :alphabetic, order('actors.name')
@@ -160,23 +162,24 @@
return nil if !notify_by_email
#If actor has enabled the emails and has email
return "#{name} <#{email}>" if email.present?
#If actor is a Group, has enabled emails but no mail we return the highest_rank ones.
if (group = self.subject).is_a? Group
- relation = group.relation_customs.sort.first
- receivers = group.contact_actors(:direction => :sent, :relations => relation)
emails = Array.new
- receivers.each do |receiver|
- next unless Actor.normalize(receiver).subject_type.eql?("User")
+ group.relation_notifys.each do |relation|
+ receivers = group.contact_actors(:direction => :sent, :relations => relation)
+ receivers.each do |receiver|
+ next unless Actor.normalize(receiver).subject_type.eql?("User")
- receiver_emails = receiver.mailboxer_email(object)
- case receiver_emails
- when String
- emails << receiver_emails
- when Array
- receiver_emails.each do |receiver_email|
- emails << receiver_email
+ receiver_emails = receiver.mailboxer_email(object)
+ case receiver_emails
+ when String
+ emails << receiver_emails
+ when Array
+ receiver_emails.each do |receiver_email|
+ emails << receiver_email
+ end
end
end
end
return emails
end
@@ -193,9 +196,14 @@
end
# A given relation defined and managed by this actor
def relation_custom(name)
relation_customs.find_by_name(name)
+ end
+
+ # All {Relation relations} with the 'notify' permission
+ def relation_notifys
+ relations.joins(:relation_permissions => :permission).where('permissions.action' => 'notify')
end
# The {Relation::Public} for this {Actor}
def relation_public
Relation::Public.of(self)