Module: Membership

Extended by:
ActiveSupport::Concern
Included in:
Challenge, Need, PeerReview, Program, Project, Proposal, Space, Workgroup
Defined in:
app/models/concerns/membership.rb

Instance Method Summary collapse

Instance Method Details

#adminsObject



10
11
12
# File 'app/models/concerns/membership.rb', line 10

def admins
  User.with_role(:admin, self)
end

#all_owners_admins_membersObject



36
37
38
39
40
41
42
43
44
# File 'app/models/concerns/membership.rb', line 36

def all_owners_admins_members
  owners
    .or(admins)
    .or(members)
    .active
    .except(:select)
    .select('DISTINCT ON (users.id) users.*, roles.name AS role')
    .order(Arel.sql("users.id, roles.name='owner' DESC, roles.name='admin' DESC, roles.name='member' DESC"))
end

#has_privacy?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'app/models/concerns/membership.rb', line 76

def has_privacy?
  self.has_attribute?(:is_private)
end

#membersObject



14
15
16
# File 'app/models/concerns/membership.rb', line 14

def members
  User.with_role(:member, self)
end

#members_countObject



46
47
48
# File 'app/models/concerns/membership.rb', line 46

def members_count
  all_owners_admins_members.active.size
end

#ownersObject



6
7
8
# File 'app/models/concerns/membership.rb', line 6

def owners
  User.with_role(:owner, self)
end

#pending_membersObject



24
25
26
# File 'app/models/concerns/membership.rb', line 24

def pending_members
  User.with_role(:pending, self)
end

#user_is_member?(user) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
21
22
# File 'app/models/concerns/membership.rb', line 18

def user_is_member?(user)
  user.has_role?(:member, self) ||
    user.has_role?(:admin, self) ||
    user.has_role?(:owner, self)
end

#usersObject



28
29
30
31
32
33
34
# File 'app/models/concerns/membership.rb', line 28

def users
  User
    .with_any_role({ name: :owner, resource: self },
                   { name: :admin, resource: self },
                   { name: :member, resource: self },
                   { name: :pending, resource: self })
end

#users_smObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/models/concerns/membership.rb', line 50

def users_sm
  # Should return the first 6 members of a object ranked by their roles in the project
  # Owners first, then admins, then members.

  # NOTE:
  # feels bad that with_any_role returns an array and not a chainable ActiveRecord query object
  User
    .with_any_role({ name: :owner, resource: self },
                   { name: :admin,  resource: self },
                   { name: :member, resource: self })
    .uniq
    .first(6)
    .map do |user|
    {
      id: user.id,
      first_name: user.first_name,
      last_name: user.last_name,
      short_bio: user.short_bio,
      owner: user.has_role?(:owner, self),
      admin: user.has_role?(:admin, self),
      member: user.has_role?(:member, self),
      logo_url: user.logo_url_sm
    }
  end
end