module Groupify::Mongoid::MemberScopedAs::ClassMethods

Public Instance Methods

as(membership_type) click to toggle source
# File lib/groupify/adapter/mongoid/member_scoped_as.rb, line 8
def as(membership_type)
  group_ids = criteria.selector["group_ids"]
  named_groups = criteria.selector["named_groups"]
  criteria = self.criteria

  # If filtering by groups or named groups, merge into the group membership criteria
  if group_ids || named_groups
    elem_match = {as: membership_type}

    if group_ids
      elem_match.merge!(group_ids: group_ids)
    end

    if named_groups
      elem_match.merge!(named_groups: named_groups)
    end

    criteria = where(:group_memberships.elem_match => elem_match)
    criteria.selector.delete("group_ids")
    criteria.selector.delete("named_groups")
  else
    criteria = where(:"group_memberships.as" => membership_type)
  end

  criteria
end