Class: Discorb::PermissionOverwrite
- Inherits:
-
Object
- Object
- Discorb::PermissionOverwrite
- Defined in:
- lib/discorb/permission.rb
Overview
Represents a permission per channel.
Class Method Summary collapse
-
.from_hash(hash) -> Discorb::PermissionOverwrite
Initializes a permission overwrite from a hash.
Instance Method Summary collapse
-
#+(other) -> Discorb::PermissionOverwrite
Union of the permission overwrites.
-
#[](field) -> true, ...
Returns whether overwrite of the given field.
-
#[]=(key, bool) -> Object
Sets the given field to the given value.
- #allow -> Object (also: #+@)
- #allow_value -> Object
- #deny -> Object (also: #-@)
- #deny_value -> Object
- #inspect -> Object
-
#method_missing(method, bool = nil) -> Object
Returns the value of the flag.
- #respond_to_missing?(method, _arg) -> Boolean
-
#to_hash -> Hash
Converts the permission overwrite to a hash.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, bool = nil) -> Object
Returns the value of the flag.
260 261 262 263 264 265 266 267 268 269 |
# File 'lib/discorb/permission.rb', line 260 def method_missing(method, bool = nil) if self.class.bits.key?(method) self[method] elsif self.class.bits.key?(method.to_s.delete_suffix("=").to_sym) key = method.to_s.delete_suffix("=").to_sym self[key] = bool else super end end |
Class Method Details
.from_hash(hash) -> Discorb::PermissionOverwrite
Initializes a permission overwrite from a hash.
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/discorb/permission.rb', line 286 def from_hash(hash) allow = 0 deny = 0 hash .filter do |k, v| self.class.bits.keys.include?(k) && [true, false].include?(v) end .each do |k, v| if v allow += self.class.bits[k] else deny += self.class.bits[k] end end new(allow, deny) end |
Instance Method Details
#+(other) -> Discorb::PermissionOverwrite
Union of the permission overwrites.
210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/discorb/permission.rb', line 210 def +(other) result = to_hash self.class.bits.each_key do |field| next if other[field].nil? result[field] = ( other[field] || raise(KeyError, "field #{field} not found in #{other.inspect}") ) end self.class.from_hash(result) end |
#[](field) -> true, ...
Returns whether overwrite of the given field.
229 230 231 232 233 234 235 |
# File 'lib/discorb/permission.rb', line 229 def [](field) if @allow & self.class.bits[field] != 0 true elsif @deny & self.class.bits[field] != 0 false end end |
#[]=(key, bool) -> Object
Sets the given field to the given value.
243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/discorb/permission.rb', line 243 def []=(key, bool) case bool when true @allow |= self.class.bits[key] @deny &= ~self.class.bits[key] when false @allow &= ~self.class.bits[key] @deny |= self.class.bits[key] else @allow &= ~self.class.bits[key] @deny &= ~self.class.bits[key] end end |
#allow -> Object Also known as: +@
157 158 159 160 161 |
# File 'lib/discorb/permission.rb', line 157 def allow self.class.bits.keys.filter do |field| @allow & self.class.bits[field] != 0 end end |
#allow_value -> Object
173 174 175 |
# File 'lib/discorb/permission.rb', line 173 def allow_value @allow end |
#deny -> Object Also known as: -@
165 166 167 168 169 |
# File 'lib/discorb/permission.rb', line 165 def deny self.class.bits.keys.filter do |field| @deny & self.class.bits[field] != 0 end end |
#deny_value -> Object
177 178 179 |
# File 'lib/discorb/permission.rb', line 177 def deny_value @deny end |
#inspect -> Object
181 182 183 |
# File 'lib/discorb/permission.rb', line 181 def inspect "#<#{self.class} allow=#{allow} deny=#{deny}>" end |
#respond_to_missing?(method, _arg) -> Boolean
271 272 273 |
# File 'lib/discorb/permission.rb', line 271 def respond_to_missing?(method, _arg) self.class.bits.key?(method.to_s.delete_suffix("=").to_sym) ? true : super end |
#to_hash -> Hash
Converts the permission overwrite to a hash.
190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/discorb/permission.rb', line 190 def to_hash self.class.bits.keys.to_h do |field| [ field, if @allow & self.class.bits[field] != 0 true elsif @deny & self.class.bits[field] != 0 false end ] end end |