Class: Discorb::Flag Abstract
- Inherits:
-
Object
- Object
- Discorb::Flag
- Defined in:
- lib/discorb/flag.rb
Overview
Represents a flag.
Direct Known Subclasses
Application::Flag, Message::Flag, Permission, Presence::Activity::Flag, SystemChannelFlag, User::Flag
Class Attribute Summary collapse
-
.bits ⇒ Hash{Integer => Symbol}
readonly
The bits of the flag.
Instance Attribute Summary collapse
-
#value ⇒ Integer
readonly
The value of the flag.
-
#values ⇒ Hash{Symbol => Boolean}
(also: #to_h)
readonly
The values of the flag.
Class Method Summary collapse
-
.from_keys(*keys) ⇒ Object
Initialize a new flag with keys.
-
.max_value ⇒ Integer
Max value of the flag.
Instance Method Summary collapse
-
#&(other) ⇒ Discorb::Flag
Intersection of two flags.
-
#-(other) ⇒ Discorb::Flag
Subtraction of two flags.
-
#^(other) ⇒ Discorb::Flag
XOR of two flags.
-
#initialize(value) ⇒ Flag
constructor
Initialize the flag.
- #inspect ⇒ Object
-
#method_missing(name, *_args, **_kwargs) ⇒ Object
Returns the value of the flag.
- #respond_to_missing?(sym, include_private) ⇒ Boolean
- #to_i ⇒ Object
-
#|(other) ⇒ Discorb::Flag
(also: #+)
Union of two flags.
-
#~ ⇒ Discorb::Flag
Negation of the flag.
Constructor Details
#initialize(value) ⇒ Flag
This is usually called by the subclass.
Initialize the flag.
21 22 23 24 25 |
# File 'lib/discorb/flag.rb', line 21 def initialize(value) @value = value @values = {} self.class.bits.each { |bn, bv| @values[bn] = value & (1 << bv) != 0 } end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *_args, **_kwargs) ⇒ Object
Returns the value of the flag.
30 31 32 33 34 35 36 |
# File 'lib/discorb/flag.rb', line 30 def method_missing(name, *_args, **_kwargs) 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.
107 108 109 |
# File 'lib/discorb/flag.rb', line 107 def bits @bits end |
Instance Attribute Details
#value ⇒ Integer (readonly)
Returns 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.
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.
121 122 123 |
# File 'lib/discorb/flag.rb', line 121 def from_keys(*keys) new(keys.sum { |k| 1 << @bits[k] }) end |
.max_value ⇒ Integer
Max value of the flag.
114 115 116 |
# File 'lib/discorb/flag.rb', line 114 def max_value (2**@bits.values.max) - 1 end |
Instance Method Details
#&(other) ⇒ Discorb::Flag
Intersection of two flags.
73 74 75 |
# File 'lib/discorb/flag.rb', line 73 def &(other) self.class.new(@value & other.value) end |
#-(other) ⇒ Discorb::Flag
Subtraction of two flags.
62 63 64 |
# File 'lib/discorb/flag.rb', line 62 def -(other) self.class.new(@value & (@value ^ other.value)) end |
#^(other) ⇒ Discorb::Flag
XOR of two flags.
84 85 86 |
# File 'lib/discorb/flag.rb', line 84 def ^(other) self.class.new(@value ^ other.value) end |
#inspect ⇒ Object
101 102 103 |
# File 'lib/discorb/flag.rb', line 101 def inspect "#<#{self.class}: #{@value}>" end |
#respond_to_missing?(sym, include_private) ⇒ Boolean
38 39 40 |
# File 'lib/discorb/flag.rb', line 38 def respond_to_missing?(sym, include_private) @values.key?(name.to_s.delete_suffix("?").to_sym) ? true : super end |
#to_i ⇒ Object
97 98 99 |
# File 'lib/discorb/flag.rb', line 97 def to_i @value end |
#|(other) ⇒ Discorb::Flag Also known as: +
Union of two flags.
49 50 51 |
# File 'lib/discorb/flag.rb', line 49 def |(other) self.class.new(@value | other.value) end |
#~ ⇒ Discorb::Flag
Negation of the flag.
93 94 95 |
# File 'lib/discorb/flag.rb', line 93 def ~ self.class.new(~@value) end |