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.



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

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

Returns the value of the flag.



32
33
34
35
36
37
38
# File 'lib/discorb/flag.rb', line 32

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.



109
110
111
# File 'lib/discorb/flag.rb', line 109

def bits
  @bits
end

Instance Attribute Details

#value -> Integer (readonly)

Returns the value of the flag.

Returns:

  • (Integer)

    the value of the flag.



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

def value
  @value
end

#values -> Hash{Symbol => Boolean} (readonly) Also known as: to_h

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

.from_keys(*keys) -> Object

Initialize a new flag with keys.



123
124
125
# File 'lib/discorb/flag.rb', line 123

def from_keys(*keys)
  new(keys.sum { |k| 1 << @bits[k] })
end

.max_value -> Integer

Max value of the flag.

Returns:

  • (Integer)

    the max value of the flag.



116
117
118
# File 'lib/discorb/flag.rb', line 116

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

Instance Method Details

#&(other) -> Discorb::Flag

Intersection of two flags.

Parameters:

Returns:



75
76
77
# File 'lib/discorb/flag.rb', line 75

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

#-(other) -> Discorb::Flag

Subtraction of two flags.

Parameters:

Returns:



64
65
66
# File 'lib/discorb/flag.rb', line 64

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

#^(other) -> Discorb::Flag

XOR of two flags.

Parameters:

Returns:



86
87
88
# File 'lib/discorb/flag.rb', line 86

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

#inspect -> Object



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

def inspect
  "#<#{self.class}: #{@value}>"
end

#respond_to_missing?(sym, include_private) -> Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/discorb/flag.rb', line 40

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

#to_i -> Object



99
100
101
# File 'lib/discorb/flag.rb', line 99

def to_i
  @value
end

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

Union of two flags.

Parameters:

Returns:



51
52
53
# File 'lib/discorb/flag.rb', line 51

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

#~ -> Discorb::Flag

Negation of the flag.

Returns:



95
96
97
# File 'lib/discorb/flag.rb', line 95

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