module Groupify::ActiveRecord::Group::ClassMethods
Public Instance Methods
default_member_class()
click to toggle source
# File lib/groupify/adapter/active_record/group.rb, line 57 def default_member_class @default_member_class ||= (User rescue false) end
default_member_class=(klass)
click to toggle source
# File lib/groupify/adapter/active_record/group.rb, line 61 def default_member_class=(klass) @default_member_class = klass end
has_members(*names)
click to toggle source
Define which classes are members of this group
# File lib/groupify/adapter/active_record/group.rb, line 71 def has_members(*names) Array.wrap(names.flatten).each do |name| klass = name.to_s.classify.constantize register(klass) end end
member_classes()
click to toggle source
Returns the member classes defined for this class, as well as for the super classes
# File lib/groupify/adapter/active_record/group.rb, line 66 def member_classes (@member_klasses ||= Set.new).merge(superclass.method_defined?(:member_classes) ? superclass.member_classes : []) end
merge!(source_group, destination_group)
click to toggle source
Merge two groups. The members of the source become members of the destination, and the source is destroyed.
# File lib/groupify/adapter/active_record/group.rb, line 79 def merge!(source_group, destination_group) # Ensure that all the members of the source can be members of the destination invalid_member_classes = (source_group.member_classes - destination_group.member_classes) invalid_member_classes.each do |klass| if klass.joins(:group_memberships_as_member).where(:group_memberships => {:group_id => source_group.id}).count > 0 raise ArgumentError.new("#{source_group.class} has members that cannot belong to #{destination_group.class}") end end source_group.transaction do source_group.group_memberships_as_group.update_all(:group_id => destination_group.id) source_group.destroy end end
with_member(member)
click to toggle source
# File lib/groupify/adapter/active_record/group.rb, line 52 def with_member(member) #joins(:group_memberships).where(:group_memberships => {:member_id => member.id, :member_type => member.class.to_s}) member.groups end
Protected Instance Methods
associate_member_class(member_klass)
click to toggle source
# File lib/groupify/adapter/active_record/group.rb, line 138 def associate_member_class(member_klass) define_member_association(member_klass) if member_klass == default_member_class define_member_association(member_klass, :members) end end
define_member_association(member_klass, association_name = nil)
click to toggle source
# File lib/groupify/adapter/active_record/group.rb, line 146 def define_member_association(member_klass, association_name = nil) association_name ||= member_klass.model_name.plural.to_sym source_type = member_klass.base_class has_many association_name, ->{ distinct }, through: :group_memberships_as_group, source: :member, source_type: source_type.to_s, extend: MemberAssociationExtensions end
register(member_klass)
click to toggle source
# File lib/groupify/adapter/active_record/group.rb, line 96 def register(member_klass) (@member_klasses ||= Set.new) << member_klass associate_member_class(member_klass) member_klass end