Class: Groupify::ActiveRecord::NamedGroupCollection

Inherits:
Set
  • Object
show all
Defined in:
lib/groupify/adapter/active_record/named_group_collection.rb

Instance Method Summary collapse

Constructor Details

#initialize(member) ⇒ NamedGroupCollection

Returns a new instance of NamedGroupCollection.



5
6
7
8
9
10
# File 'lib/groupify/adapter/active_record/named_group_collection.rb', line 5

def initialize(member)
  @member = member
  @named_group_memberships = member.group_memberships.named
  @group_names = @named_group_memberships.pluck(:group_name).map(&:to_sym)
  super(@group_names)
end

Instance Method Details

#add(named_group, opts = {}) ⇒ Object Also known as: push, <<



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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.build(group_name: named_group, membership_type: nil)
  else
    @member.transaction do
      @member.group_memberships.where(group_name: named_group, membership_type: nil).first_or_create!
    end
  end

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

  super(named_group)
end

#as(membership_type) ⇒ Object

Criteria to filter by membership type



80
81
82
# 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

#clearObject Also known as: delete_all, destroy_all



71
72
73
74
# File 'lib/groupify/adapter/active_record/named_group_collection.rb', line 71

def clear
  @named_group_memberships.delete_all
  super
end

#delete(*args) ⇒ Object



57
58
59
60
61
62
# 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

#destroy(*args) ⇒ Object



64
65
66
67
68
69
# 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

#include?(named_group, opts = {}) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
# 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) ⇒ Object Also known as: concat



38
39
40
41
42
43
44
# 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