Sha256: 5f99c0722aaa1544140cafc9b5520cc8ba5dcd77552f033e2b09e06d3c313fb5
Contents?: true
Size: 978 Bytes
Versions: 5
Compression:
Stored size: 978 Bytes
Contents
# require 'troles/common/marshaller/generic' module Troles::Common module Marshaller class Bitmask < Generic attr_reader :role_subject, :valid_roles def initialize role_subject super end def read valid_roles.reject do |r| num = as_number(ds_field_value) ((num || 0) & calc_index(r)).zero? end end def write *roles roles = roles.uniq.compact return as_number(false) if roles.empty? roles.to_symbols.map { |r| calc_index(r) }.inject { |sum, bitvalue| sum + bitvalue } end protected def as_number value case value when TrueClass, FalseClass value ? 2 : 1 when Fixnum value else raise ArgumentError, "Cant be converted to a bit index, #{value}" end end def calc_index(r) 2**valid_roles.index(r) end end end end
Version data entries
5 entries across 5 versions & 1 rubygems