diff options
Diffstat (limited to 'app/models/conference_invitee.rb')
-rw-r--r-- | app/models/conference_invitee.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/app/models/conference_invitee.rb b/app/models/conference_invitee.rb new file mode 100644 index 0000000..7de20de --- /dev/null +++ b/app/models/conference_invitee.rb @@ -0,0 +1,39 @@ +class ConferenceInvitee < ActiveRecord::Base + attr_accessible :pin, :speaker, :moderator, :phone_number, :phone_number_attributes + + belongs_to :conference + belongs_to :phone_book_entry + has_one :phone_number, :as => :phone_numberable, :dependent => :destroy + accepts_nested_attributes_for :phone_number + + validates_presence_of :conference_id + validates_presence_of :conference + validates_presence_of :phone_number + validates_numericality_of :pin, :only_integer => true, + :greater_than => 0, + :allow_nil => true, + :allow_blank => true + validates_length_of :pin, :minimum => MINIMUM_PIN_LENGTH, + :allow_nil => true, + :allow_blank => true + + validates_inclusion_of :speaker, :in => [true, false] + validates_inclusion_of :moderator, :in => [true, false] + + validate :uniqueness_of_phone_number_in_the_parent_conference + validates_uniqueness_of :phone_book_entry_id, :scope => :conference_id, :allow_nil => true + + def to_s + "ID #{self.id}" + end + + private + + def uniqueness_of_phone_number_in_the_parent_conference + if self.conference.conference_invitees.where('id != ?', self.id).count > 0 && + self.conference.conference_invitees.where('id != ?', self.id).map{|x| x.phone_number.number}. + include?(self.phone_number.number) + errors.add(:base, 'Phone number is not unique within the conference.') + end + end +end |