Sha256: 6c17e1965640b5ce5994c75377173c7f57277527a69433db01e8445022f1bea4

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

#
# This is, in fact, the main parlement class!
#
class Elt < ActiveRecord::Base
	usesguid

	acts_as_tree :order => "position is not null, position, created_on"

	has_one :mail, :dependent => true
	has_many :attachments, :dependent => true

	belongs_to :person

	has_and_belongs_to_many :subscribers,
		:class_name => "Person",
		:join_table => "subscribers"

	# for live_tree
	def name
		subject
	end

	# Just a quick method to get all subscribers as a simple list
	def all_recipients
		result = Array.new
		eltRecipient = self
		while eltRecipient
			result.concat eltRecipient.subscribers
			eltRecipient = eltRecipient.parent
		end
		logger.debug "all_recipients result: #{result.to_s}"
		return result
	end

	#
	# Receive this new elt as an email, sent through app/helpers/mailman.rb
	#
	def receive(mail)
		logger.info "Receive \"#{mail.subject}\""

		# TODO
		# Loop detection, will need more work
		mail1 = Mail.find_by_message(mail.message_id)
		# The to_s seems necessary
		mail2 = Mail.find_by_message(mail['X-Message-Id'].to_s) if mail['X-Message-Id']

		if not mail1 and not mail2
			self.mail = Mail.new if not self.mail
			self.mail.elt = self
			self.mail.receive(mail)
			self.id = mail['X-Leparlement-Elt-Id'].to_s if mail['X-Leparlement-Elt-Id']
			save
		else
			logger.info "Already received (id: #{mail.message_id})...\n"
		end
	end

	#
	# Save and publish this elt
	#
	def save
		super
		publish
		logger.info "\n"
	end

	private

	#
	# Mail the elt to all subscribers
	#
	def publish
		logger.info "Publish #{subject}"
		self.mail ||= Mail.new
		self.mail.elt = self
		self.mail.publish
		self.mail.save
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
parlement-0.4 app/models/elt.rb