Sprankelprachtig aan/afmeldsysteem

group.rb 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # A Group contains Members, which can organize and participate in Activities.
  2. # Some of the Members may be group leaders, with the ability to see all
  3. # information and add or remove members from the group.
  4. class Group < ApplicationRecord
  5. # @!attribute name
  6. # @return [String]
  7. # the name of the group. Must be unique across all groups.
  8. has_many :members,
  9. dependent: :destroy
  10. has_many :people, through: :members
  11. has_many :activities,
  12. dependent: :destroy
  13. has_many :default_subgroups,
  14. dependent: :destroy
  15. validates :name,
  16. presence: true,
  17. uniqueness: {
  18. case_sensitive: false
  19. }
  20. # @return [Array<Member>] the members in the group who are also group leaders.
  21. def leaders
  22. self.members.includes(:person).where(is_leader: true)
  23. end
  24. # @return [Array<Activity>] the activities that haven't started yet.
  25. def future_activities
  26. self.activities.where('start > ?', DateTime.now)
  27. end
  28. # Determine whether the passed person is a member of the group.
  29. def is_member?(person)
  30. Member.exists?(
  31. person: person,
  32. group: self
  33. ) || person.is_admin?
  34. end
  35. # Determine whether the passed person is a group leader.
  36. def is_leader?(person)
  37. Member.exists?(
  38. person: person,
  39. group: self,
  40. is_leader: true
  41. ) || person.is_admin?
  42. end
  43. end