Sha256: 9c021bf3841ae33669421ae931b0ce496add171ddeb5ce5de75edb23573baef6

Contents?: true

Size: 1.27 KB

Versions: 4

Compression:

Stored size: 1.27 KB

Contents

# @author Kristian Mandrup
#
# Many role storage for storing roles as an Integer bitmask on the role subject
#
# @note all methods potentially operate directly on values in the data store
#
module Troles::Storage
  class BitMany < BaseMany
    # constructor
    # @param [Object] the role subject
    def initialize role_subject
      super
    end

    # display the roles as a list of symbols
    # see Troles::Marshaller::Bitmask    
    # @return [Array<Symbol>] roles list
    def display_roles
      return [] if !ds_field_value?
      bitmask.read
    end

    def ds_field_value?
      ds_field_value == 0
    end
  
    # saves the roles for the role subject in the data store
    # see Troles::Marshaller::Bitmask
    # @param [Array<Symbol>] roles list        
    def set_roles *roles
      roles = roles.to_symbols_uniq
      return clear! if roles.empty?      
      set_ds_field bitmask.write(roles.to_symbols)
    end  

    # Clears the role state of the role subject 
    def clear!
      set_ds_field 0
    end
  
    # Sets role to default state    
    def set_default_role!
      clear!
    end            

    protected

    def bitmask
      @bitmask ||= bitmask_class.new role_subject
    end
    
    def bitmask_class
      Troles::Common::Marshaller::Bitmask
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
troles-0.6.0 lib/troles/storage/bit_many.rb
troles-0.5.2 lib/troles/storage/bit_many.rb
troles-0.5.1 lib/troles/storage/bit_many.rb
troles-0.5.0 lib/troles/storage/bit_many.rb