Module: Groupify::ActiveRecord::Group::ClassMethods
- Defined in:
- lib/groupify/adapter/active_record.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
90 91 92 |
# File 'lib/groupify/adapter/active_record.rb', line 90 def default_member_class @default_member_class ||= (User rescue false) end |
#default_member_class=(klass) ⇒ Object
94 95 96 |
# File 'lib/groupify/adapter/active_record.rb', line 94 def default_member_class=(klass) @default_member_class = klass end |
#has_members(name) ⇒ Object
Define which classes are members of this group
104 105 106 107 |
# File 'lib/groupify/adapter/active_record.rb', line 104 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
99 100 101 |
# File 'lib/groupify/adapter/active_record.rb', line 99 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.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/groupify/adapter/active_record.rb', line 110 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
85 86 87 88 |
# File 'lib/groupify/adapter/active_record.rb', line 85 def with_member(member) #joins(:group_memberships).where(:group_memberships => {:member_id => member.id, :member_type => member.class.to_s}) member.groups end |