Module: Groupify::Mongoid::Group::ClassMethods
- Defined in:
- lib/groupify/adapter/mongoid.rb
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
82 83 84 |
# File 'lib/groupify/adapter/mongoid.rb', line 82 def default_member_class @default_member_class ||= register(User) end |
#default_member_class=(klass) ⇒ Object
86 87 88 |
# File 'lib/groupify/adapter/mongoid.rb', line 86 def default_member_class=(klass) @default_member_class = klass end |
#has_members(name) ⇒ Object
Define which classes are members of this group
96 97 98 99 100 101 102 103 104 |
# File 'lib/groupify/adapter/mongoid.rb', line 96 def has_members(name) klass = name.to_s.classify.constantize register(klass) # Define specific members accessor, i.e. group.users define_method name.to_s.pluralize.underscore do klass.any_in(:group_ids => [self.id]) end end |
#member_classes ⇒ Object
Returns the member classes defined for this class, as well as for the super classes
91 92 93 |
# File 'lib/groupify/adapter/mongoid.rb', line 91 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.
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/groupify/adapter/mongoid.rb', line 107 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.any_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.any_in(:group_ids => [source_group.id]).update_all(:$set => {:"group_ids.$" => destination_group.id}) end source_group.delete end |
#with_member(member) ⇒ Object
78 79 80 |
# File 'lib/groupify/adapter/mongoid.rb', line 78 def with_member(member) criteria.for_ids(member.group_ids) end |