module SimpleGroup::Group

Public Class Methods

included(base) click to toggle source
# File lib/simple_group/group.rb, line 3
def self.included(base)
  base.class_eval do
    has_many :combinations, class_name: 'SimpleGroup::Combination', as: :group, dependent: :destroy, inverse_of: :group do
      def group_items
        includes(:group_item).map(&:group_item)
      end
    end
  end
end

Public Instance Methods

add(model) click to toggle source
# File lib/simple_group/group.rb, line 22
def add(model)
  raise SimpleGroup::GroupNotAllowError unless model.class.groupable?
  SimpleGroup::Combination.new(group: self, group_item: model).save
end
count() click to toggle source
# File lib/simple_group/group.rb, line 46
def count
  self.combinations.count
end
exclude?(model) click to toggle source
# File lib/simple_group/group.rb, line 18
def exclude?(model)
  !include?(model)
end
for_type(klass) click to toggle source
# File lib/simple_group/group.rb, line 42
def for_type(klass)
  self.combinations.for_type(klass)
end
group_items() click to toggle source
# File lib/simple_group/group.rb, line 6
def group_items
  includes(:group_item).map(&:group_item)
end
include?(model) click to toggle source
# File lib/simple_group/group.rb, line 13
def include?(model)
  raise SimpleGroup::GroupNotAllowError unless model.class.groupable?
  SimpleGroup::Combination.exists?(group: self, group_item: model)
end
remove(model) click to toggle source
# File lib/simple_group/group.rb, line 27
def remove(model)
  raise_error unless model.class.groupable?
  group = SimpleGroup::Combination.where(
      group_type: self.class.name,
      group_id: self,
      group_item_type: model.class.name,
      group_item_id: model
  ).first
  if group.present?
    group.destroy
  else
    false
  end
end