Class: Flt::Support::FlagValues

Inherits:
Object
  • Object
show all
Defined in:
lib/flt/support.rb

Overview

This class assigns bit-values to a set of symbols so they can be used as flags and stored as an integer.

fv = FlagValues.new(:flag1, :flag2, :flag3)
puts fv[:flag3]
fv.each{|f,v| puts "#{f} -> #{v}"}

Defined Under Namespace

Classes: InvalidFlagError, InvalidFlagTypeError

Instance Method Summary collapse

Constructor Details

#initialize(*flags) ⇒ FlagValues

The flag symbols must be passed; values are assign in increasing order.

fv = FlagValues.new(:flag1, :flag2, :flag3)
puts fv[:flag3]


21
22
23
24
25
26
27
28
29
# File 'lib/flt/support.rb', line 21

def initialize(*flags)
  @flags = {}
  value = 1
  flags.each do |flag|
    raise InvalidFlagType,"Flags must be defined as symbols or classes; invalid flag: #{flag.inspect}" unless flag.kind_of?(Symbol) || flag.instance_of?(Class)
    @flags[flag] = value
    value <<= 1
  end
end

Instance Method Details

#[](flag) ⇒ Object

Get the bit-value of a flag

Raises:



32
33
34
35
36
# File 'lib/flt/support.rb', line 32

def [](flag)
  v = @flags[flag]
  raise InvalidFlagError, "Invalid flag: #{flag}" unless v
  v
end

#all_flags_valueObject



51
52
53
# File 'lib/flt/support.rb', line 51

def all_flags_value
  (1 << size) - 1
end

#each(&blk) ⇒ Object

Return each flag and its bit-value



39
40
41
42
43
44
45
# File 'lib/flt/support.rb', line 39

def each(&blk)
  if blk.arity==2
    @flags.to_a.sort_by{|f,v|v}.each(&blk)
  else
    @flags.to_a.sort_by{|f,v|v}.map{|f,v|f}.each(&blk)
  end
end

#sizeObject



47
48
49
# File 'lib/flt/support.rb', line 47

def size
  @flags.size
end