Module: Groupify::ActiveRecord::Group::ClassMethods
- Defined in:
- lib/groupify/adapter/active_record/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
53 54 55 |
# File 'lib/groupify/adapter/active_record/group.rb', line 53 def default_member_class @default_member_class ||= (User rescue false) end |
#default_member_class=(klass) ⇒ Object
57 58 59 |
# File 'lib/groupify/adapter/active_record/group.rb', line 57 def default_member_class=(klass) @default_member_class = klass end |
#has_members(name) ⇒ Object
Define which classes are members of this group
67 68 69 70 |
# File 'lib/groupify/adapter/active_record/group.rb', line 67 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
62 63 64 |
# File 'lib/groupify/adapter/active_record/group.rb', line 62 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.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/groupify/adapter/active_record/group.rb', line 73 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).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.update_all(:group_id => destination_group.id) source_group.destroy end end |
#with_member(member) ⇒ Object
48 49 50 51 |
# File 'lib/groupify/adapter/active_record/group.rb', line 48 def with_member(member) #joins(:group_memberships).where(:group_memberships => {:member_id => member.id, :member_type => member.class.to_s}) member.groups end |