Module: Groupify::Mongoid::Group::ClassMethods
- Defined in:
- lib/groupify/adapter/mongoid/group.rb
Defined Under Namespace
Modules: MemberAssociationExtensions
Instance Method Summary collapse
- #default_member_class ⇒ Object
- #default_member_class=(klass) ⇒ Object
-
#has_members(name) ⇒ Object
Define which classes are members of this group.
-
#member_classes ⇒ Object
Returns the member classes defined for this class, as well as for the super classes.
-
#merge!(source_group, destination_group) ⇒ Object
Merge two groups.
- #with_member(member) ⇒ Object
Instance Method Details
#default_member_class ⇒ Object
54 55 56 |
# File 'lib/groupify/adapter/mongoid/group.rb', line 54 def default_member_class @default_member_class ||= User rescue false end |
#default_member_class=(klass) ⇒ Object
58 59 60 |
# File 'lib/groupify/adapter/mongoid/group.rb', line 58 def default_member_class=(klass) @default_member_class = klass end |
#has_members(name) ⇒ Object
Define which classes are members of this group
68 69 70 71 |
# File 'lib/groupify/adapter/mongoid/group.rb', line 68 def has_members(name) klass = name.to_s.classify.constantize register(klass) end |
#member_classes ⇒ Object
Returns the member classes defined for this class, as well as for the super classes
63 64 65 |
# File 'lib/groupify/adapter/mongoid/group.rb', line 63 def member_classes (@member_klasses ||= Set.new).merge(superclass.method_defined?(:member_classes) ? superclass.member_classes : []) end |
#merge!(source_group, destination_group) ⇒ Object
Merge two groups. The members of the source become members of the destination, and the source is destroyed.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/groupify/adapter/mongoid/group.rb', line 74 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.in(group_ids: [source_group.id]).count > 0 raise ArgumentError.new("#{source_group.class} has members that cannot belong to #{destination_group.class}") end end source_group.member_classes.each do |klass| klass.in(group_ids: [source_group.id]).update_all(:$set => {:"group_ids.$" => destination_group.id}) if klass.relations['group_memberships'] if ::Mongoid::VERSION > "4" klass.in(:"group_memberships.group_ids" => [source_group.id]).add_to_set(:"group_memberships.$.group_ids" => destination_group.id) klass.in(:"group_memberships.group_ids" => [source_group.id]).pull(:"group_memberships.$.group_ids" => source_group.id) else klass.in(:"group_memberships.group_ids" => [source_group.id]).add_to_set(:"group_memberships.$.group_ids", destination_group.id) klass.in(:"group_memberships.group_ids" => [source_group.id]).pull(:"group_memberships.$.group_ids", source_group.id) end end end source_group.delete end |
#with_member(member) ⇒ Object
50 51 52 |
# File 'lib/groupify/adapter/mongoid/group.rb', line 50 def with_member(member) member.groups end |