Module: Groupify::ActiveRecord::GroupMember::ClassMethods

Defined in:
lib/groupify/adapter/active_record/group_member.rb

Instance Method Summary collapse

Instance Method Details

#as(membership_type) ⇒ Object



99
100
101
# File 'lib/groupify/adapter/active_record/group_member.rb', line 99

def as(membership_type)
  joins(:group_memberships_as_member).where(group_memberships: { membership_type: membership_type })
end

#in_all_groups(*groups) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'lib/groupify/adapter/active_record/group_member.rb', line 116

def in_all_groups(*groups)
  groups = groups.flatten
  return none unless groups.present?

  joins(:group_memberships_as_member).
      group("#{quoted_table_name}.#{connection.quote_column_name('id')}").
      where(group_memberships: {group_id: groups.map(&:id)}).
      having("COUNT(#{reflect_on_association(:group_memberships_as_member).klass.quoted_table_name}.#{connection.quote_column_name('group_id')}) = ?", groups.count).
      distinct
end

#in_any_group(*groups) ⇒ Object



109
110
111
112
113
114
# File 'lib/groupify/adapter/active_record/group_member.rb', line 109

def in_any_group(*groups)
  groups = groups.flatten
  return none unless groups.present?

  joins(:group_memberships_as_member).where(group_memberships: { group_id: groups.map(&:id) }).distinct
end

#in_group(group) ⇒ Object



103
104
105
106
107
# File 'lib/groupify/adapter/active_record/group_member.rb', line 103

def in_group(group)
  return none unless group.present?

  joins(:group_memberships_as_member).where(group_memberships: { group_id: group.id }).distinct
end

#in_only_groups(*groups) ⇒ Object



127
128
129
130
131
132
133
134
135
# File 'lib/groupify/adapter/active_record/group_member.rb', line 127

def in_only_groups(*groups)
  groups = groups.flatten
  return none unless groups.present?

  joins(:group_memberships_as_member).
      group("#{quoted_table_name}.#{connection.quote_column_name('id')}").
      having("COUNT(DISTINCT #{reflect_on_association(:group_memberships_as_member).klass.quoted_table_name}.#{connection.quote_column_name('group_id')}) = ?", groups.count).
      distinct
end

#shares_any_group(other) ⇒ Object



137
138
139
# File 'lib/groupify/adapter/active_record/group_member.rb', line 137

def shares_any_group(other)
  in_any_group(other.groups)
end