diaspora/app/models/message.rb
cmrd Senya a2ce47fae5 Remove parent author signature for relayables from the DB
since it is considered redundant
2015-12-16 22:00:35 +03:00

81 lines
1.9 KiB
Ruby

class NotVisibleError < RuntimeError; end
class Message < ActiveRecord::Base
include Diaspora::Federated::Base
include Diaspora::Guid
include Diaspora::Relayable
xml_attr :text
xml_attr :created_at
xml_reader :diaspora_handle
xml_reader :conversation_guid
belongs_to :author, :class_name => 'Person'
belongs_to :conversation, :touch => true
delegate :name, to: :author, prefix: true
validates :text, :presence => true
validate :participant_of_parent_conversation
after_create do # don't use 'after_commit' here since there is a call to 'save!'
# inside, which would cause an infinite recursion
#sign comment as commenter
self.author_signature = self.sign_with_key(self.author.owner.encryption_key) if self.author.owner
self.save!
self
end
def diaspora_handle
self.author.diaspora_handle
end
def diaspora_handle= nh
self.author = Person.find_or_fetch_by_identifier(nh)
end
def conversation_guid
self.conversation.guid
end
def conversation_guid= guid
if cnv = Conversation.find_by_guid(guid)
self.conversation_id = cnv.id
end
end
def parent_class
Conversation
end
def parent
self.conversation
end
def parent= parent
self.conversation = parent
end
def increase_unread(user)
if vis = ConversationVisibility.where(:conversation_id => self.conversation_id, :person_id => user.person.id).first
vis.unread += 1
vis.save
end
end
def notification_type(user, person)
Notifications::PrivateMessage unless user.person == person
end
def message
@message ||= Diaspora::MessageRenderer.new text
end
private
def participant_of_parent_conversation
if self.parent && !self.parent.participants.include?(self.author)
errors[:base] << "Author is not participating in the conversation"
else
true
end
end
end