Sha256: 07e249e5c90b3f9110ad575e74f5a7a3d089b4a2d0c0c7aad74b0a8d4ba905b4

Contents?: true

Size: 1.87 KB

Versions: 3

Compression:

Stored size: 1.87 KB

Contents

#
# There are certain gloabl special groups, for example the `everyone` group, which contains
# all users.
#
# The global accessors for these groups, e.g. `Group.find_everyone_group` or 
# `Group.everyone` for short, are defined in this mixin.
#
# The mechanism used by this mixin is defined in `StructureableMixins::HasSpecialGroups`.
#
module GroupMixins::Everyone

  extend ActiveSupport::Concern

  included do
    # see, for example, http://stackoverflow.com/questions/5241527/splitting-a-class-into-multiple-files-in-ruby-on-rails
  end

  # Everyone Group
  # ==========================================================================================
  #
  # The 'root group', which is the highest in the group hierarchy.
  # Everyone is member of this group, even not registered users.
  #
  module ClassMethods
    def find_everyone_group
      find_special_group(:everyone)
    end
    
    def create_everyone_group
      create_special_group(:everyone)
    end

    def find_or_create_everyone_group
      find_or_create_special_group(:everyone)
    end
    
    def everyone
      find_or_create_everyone_group
    end
    
    def everyone!
      find_everyone_group || raise('special group :everyone does not exist.')
    end
  end
  
  
  # Members
  # ==========================================================================================
  
  # This method overrides the default association to emulate the bahaviour that really every
  # user is member of the :everyone group.
  #
  def members(reload = nil)
    if self.has_flag? :everyone
      User.where(true)
    else
      super(reload)
    end
  end
  
  # This method overrides the default association to emulate the bahaviour that really every
  # user is direct member of the :everyone group.
  #
  def direct_members(reload = nil)
    if self.has_flag? :everyone
      User.where(true)
    else
      super(reload)
    end
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
your_platform-1.0.1 app/models/group_mixins/everyone.rb
your_platform-1.0.0 app/models/group_mixins/everyone.rb
your_platform-0.0.2 app/models/group_mixins/everyone.rb