Class: Discorb::Flag Abstract
- Inherits:
-
Object
- Object
- Discorb::Flag
- Defined in:
- lib/discorb/flag.rb
Overview
This class is abstract.
Represents a flag.
Direct Known Subclasses
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}
readonly
The values of the flag.
Class Method Summary collapse
-
.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.
- #method_missing(name, args = nil) -> Object
- #respond_to_missing?(sym, include_private) -> Boolean
-
#|(other) -> Discorb::Flag
(also: #+)
Union of two flags.
-
#~@ -> Discorb::Flag
Negation of the flag.
Constructor Details
#initialize(value) -> Flag
Note:
This is usually called by the subclass.
Initialize 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.
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.
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.
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.
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.
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.
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.
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
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.
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.
91 92 93 |
# File 'lib/discorb/flag.rb', line 91 def ~@ self.class.new(~@value) end |