Sha256: 97de56511e39ae69c256fe574db07a746e2fa44783cf216a6657c11b011cb024

Contents?: true

Size: 769 Bytes

Versions: 1

Compression:

Stored size: 769 Bytes

Contents

module AuthAssistant           
  module RoleStrategy
    module RolesMask

      def roles=(*roles)        
        self.roles_mask = (roles & available_roles).map { |r| calc_index(r) }.sum
      end

      def roles
        ROLES.reject { |r| ((roles_mask || 0) & calc_index(r)).zero? }
      end
      
      def role?(role)
        roles.include? role.to_s
      end      

      module ClassMethods
        def set_scope
          scope :with_role, lambda { |role| 
            where("roles_mask & #{calc_index(role.to_s)} > 0") 
          }
        end
      end
      
      def self.included(base)  
        base.extend(ClassMethods)
      end
      
      protected 
        def calc_index(r)
          2**available_roles.index(r)
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
auth-assistant-0.4.0 lib/auth_assistant/role_strategies/roles_mask.rb