Class: Discorb::Flag Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/discorb/flag.rb

Overview

This class is abstract.

Represents a flag.

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value) -> Flag

Note:

This is usually called by the subclass.

Initialize the flag.

Parameters:

  • value (Integer)

    The value of the flag.



20
21
22
23
24
25
26
# File 'lib/discorb/flag.rb', line 20

def initialize(value)
  @value = value
  @values = {}
  self.class.bits.each_with_index do |(bn, bv), _i|
    @values[bn] = value & (1 << bv) != 0
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, args = nil) -> Object



28
29
30
31
32
33
34
# File 'lib/discorb/flag.rb', line 28

def method_missing(name, args = nil)
  if @values.key?(name.to_s.delete_suffix("?").to_sym)
    @values[name.to_s.delete_suffix("?").to_sym]
  else
    super
  end
end

Class Attribute Details

.bits -> Hash{Integer => Symbol} (readonly)

Returns the bits of the flag.

Returns:

  • (Hash{Integer => Symbol})

    the bits of the flag.



97
98
99
# File 'lib/discorb/flag.rb', line 97

def bits
  @bits
end

Instance Attribute Details

#value -> Integer (readonly)

Returns the value of the flag.

Returns:

  • (Integer)

    the value of the flag.



12
13
14
# File 'lib/discorb/flag.rb', line 12

def value
  @value
end

#values -> Hash{Symbol => Boolean} (readonly)

Returns the values of the flag.

Returns:

  • (Hash{Symbol => Boolean})

    the values of the flag.



10
11
12
# File 'lib/discorb/flag.rb', line 10

def values
  @values
end

Class Method Details

.max_value -> Integer

Max value of the flag.

Returns:

  • (Integer)

    the max value of the flag.



104
105
106
# File 'lib/discorb/flag.rb', line 104

def max_value
  2 ** @bits.values.max - 1
end

Instance Method Details

#&(other) -> Discorb::Flag

Intersection of two flags.

Parameters:

Returns:



71
72
73
# File 'lib/discorb/flag.rb', line 71

def &(other)
  self.class.new(@value & other.value)
end

#-(other) -> Discorb::Flag

Subtraction of two flags.

Parameters:

Returns:



60
61
62
# File 'lib/discorb/flag.rb', line 60

def -(other)
  self.class.new(@value & (@value ^ other.value))
end

#^(other) -> Discorb::Flag

XOR of two flags.

Parameters:

Returns:



82
83
84
# File 'lib/discorb/flag.rb', line 82

def ^(other)
  self.class.new(@value ^ other.value)
end

#respond_to_missing?(sym, include_private) -> Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/discorb/flag.rb', line 36

def respond_to_missing?(sym, include_private)
  @values.key?(name.to_s.delete_suffix("?").to_sym) ? true : super
end

#|(other) -> Discorb::Flag Also known as: +

Union of two flags.

Parameters:

Returns:



47
48
49
# File 'lib/discorb/flag.rb', line 47

def |(other)
  self.class.new(@value | other.value)
end

#~@ -> Discorb::Flag

Negation of the flag.

Returns:



91
92
93
# File 'lib/discorb/flag.rb', line 91

def ~@
  self.class.new(~@value)
end