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



108
109
110
# File 'lib/groupify/adapter/active_record/group_member.rb', line 108

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

#in_all_groups(*groups) ⇒ Object



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

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

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

#in_any_group(*groups) ⇒ Object



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

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

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

#in_group(group) ⇒ Object



112
113
114
115
116
# File 'lib/groupify/adapter/active_record/group_member.rb', line 112

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

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

#in_only_groups(*groups) ⇒ Object



136
137
138
139
140
141
142
143
144
# File 'lib/groupify/adapter/active_record/group_member.rb', line 136

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

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

#shares_any_group(other) ⇒ Object



146
147
148
# File 'lib/groupify/adapter/active_record/group_member.rb', line 146

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