class Groupify::ActiveRecord::NamedGroupCollection

Public Class Methods

new(member) click to toggle source
Calls superclass method
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 5
def initialize(member)
  @member = member
  @named_group_memberships = member.group_memberships_as_member.named
  @group_names = @named_group_memberships.pluck(:group_name).map(&:to_sym)
  super(@group_names)
end

Public Instance Methods

<<(named_group, opts={})
Alias for: add
add(named_group, opts={}) click to toggle source
Calls superclass method
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 12
def add(named_group, opts={})
  named_group = named_group.to_sym
  membership_type = opts[:as]

  if @member.new_record?
    @member.group_memberships_as_member.build(group_name: named_group, membership_type: nil)
  else
    @member.transaction do
      @member.group_memberships_as_member.where(group_name: named_group, membership_type: nil).first_or_create!
    end
  end

  if membership_type
    if @member.new_record?
      @member.group_memberships_as_member.build(group_name: named_group, membership_type: membership_type)
    else
      @member.group_memberships_as_member.where(group_name: named_group, membership_type: membership_type).first_or_create!
    end
  end

  super(named_group)
end
Also aliased as: push, <<
as(membership_type) click to toggle source

Criteria to filter by membership type

# File lib/groupify/adapter/active_record/named_group_collection.rb, line 80
def as(membership_type)
  @named_group_memberships.as(membership_type).pluck(:group_name).map(&:to_sym)
end
clear() click to toggle source
Calls superclass method
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 71
def clear
  @named_group_memberships.delete_all
  super
end
Also aliased as: delete_all, destroy_all
concat(*args)
Alias for: merge
delete(*args) click to toggle source
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 57
def delete(*args)
  opts = args.extract_options!
  named_groups = args.flatten.compact

  remove(named_groups, :delete_all, opts)
end
delete_all()
Alias for: clear
destroy(*args) click to toggle source
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 64
def destroy(*args)
  opts = args.extract_options!
  named_groups = args.flatten.compact

  remove(named_groups, :destroy_all, opts)
end
destroy_all()
Alias for: clear
include?(named_group, opts={}) click to toggle source
Calls superclass method
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 48
def include?(named_group, opts={})
  named_group = named_group.to_sym
  if opts[:as]
    as(opts[:as]).include?(named_group)
  else
    super(named_group)
  end
end
merge(*args) click to toggle source
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 38
def merge(*args)
  opts = args.extract_options!
  named_groups = args.flatten
  named_groups.each do |named_group|
    add(named_group, opts)
  end
end
Also aliased as: concat
push(named_group, opts={})
Alias for: add

Protected Instance Methods

remove(named_groups, method, opts) click to toggle source
# File lib/groupify/adapter/active_record/named_group_collection.rb, line 86
def remove(named_groups, method, opts)
  if named_groups.present?
    scope = @named_group_memberships.where(group_name: named_groups)

    if opts[:as]
      scope = scope.where(membership_type: opts[:as])
    end

    scope.send(method)

    unless opts[:as]
      named_groups.each do |named_group|
        @hash.delete(named_group)
      end
    end
  end
end