Class: Discorb::Dictionary
- Inherits:
-
Object
- Object
- Discorb::Dictionary
- Defined in:
- lib/discorb/dictionary.rb
Overview
Extended hash class. This is used for storing pair of ID and object.
Instance Attribute Summary collapse
-
#limit ⇒ Integer
The maximum number of items in the dictionary.
Instance Method Summary collapse
-
#get(index) ⇒ Object?
(also: #[])
Get an item from the dictionary.
-
#has?(id) ⇒ Boolean
Checks if the dictionary has an ID.
-
#initialize(hash = {}, limit: nil, sort: false) ⇒ Dictionary
constructor
Initialize a new Dictionary.
- #inspect ⇒ Object
-
#merge(other) ⇒ Object
Merges another dictionary into this one.
-
#method_missing(name) ⇒ Object
Send a message to the array of values.
-
#register(id, body) ⇒ self
(also: #[]=)
Registers a new item in the dictionary.
-
#remove(id) ⇒ Object
(also: #delete)
Removes an item from the dictionary.
- #respond_to_missing?(name) ⇒ Boolean
-
#to_h ⇒ Object
Convert the dictionary to a hash.
-
#values ⇒ Array
Returns the values of the dictionary.
Constructor Details
#initialize(hash = {}, limit: nil, sort: false) ⇒ Dictionary
Initialize a new Dictionary.
18 19 20 21 22 23 |
# File 'lib/discorb/dictionary.rb', line 18 def initialize(hash = {}, limit: nil, sort: false) @cache = hash.transform_keys(&:to_s) @limit = limit @sort = sort @cache = @cache.sort_by(&@sort).to_h if @sort end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name) ⇒ Object
Send a message to the array of values.
112 113 114 115 116 117 118 |
# File 'lib/discorb/dictionary.rb', line 112 def method_missing(name, ...) if values.respond_to?(name) values.send(name, ...) else super end end |
Instance Attribute Details
#limit ⇒ Integer
Returns The maximum number of items in the dictionary.
9 10 11 |
# File 'lib/discorb/dictionary.rb', line 9 def limit @limit end |
Instance Method Details
#get(index) ⇒ Object? Also known as: []
Get an item from the dictionary.
73 74 75 76 77 78 79 80 |
# File 'lib/discorb/dictionary.rb', line 73 def get(id) res = @cache[id.to_s] if res.nil? && id.is_a?(Integer) && id < @cache.length @cache.values[id] else res end end |
#has?(id) ⇒ Boolean
Checks if the dictionary has an ID.
105 106 107 |
# File 'lib/discorb/dictionary.rb', line 105 def has?(id) !self[id].nil? end |
#inspect ⇒ Object
131 132 133 |
# File 'lib/discorb/dictionary.rb', line 131 def inspect "#<#{self.class} #{values.length} items>" end |
#merge(other) ⇒ Object
Merges another dictionary into this one.
45 46 47 |
# File 'lib/discorb/dictionary.rb', line 45 def merge(other) @cache.merge!(other.to_h) end |
#register(id, body) ⇒ self Also known as: []=
Registers a new item in the dictionary.
33 34 35 36 37 38 |
# File 'lib/discorb/dictionary.rb', line 33 def register(id, body) @cache[id.to_s] = body @cache = @cache.sort_by(&@sort).to_h if @sort @cache.delete(@cache.keys[0]) if !@limit.nil? && @cache.size > @limit self end |
#remove(id) ⇒ Object Also known as: delete
Removes an item from the dictionary.
54 55 56 |
# File 'lib/discorb/dictionary.rb', line 54 def remove(id) @cache.delete(id.to_s) end |
#respond_to_missing?(name) ⇒ Boolean
120 121 122 123 124 125 126 |
# File 'lib/discorb/dictionary.rb', line 120 def respond_to_missing?(name, ...) if values.respond_to?(name) true else super end end |
#to_h ⇒ Object
Convert the dictionary to a hash.
85 86 87 |
# File 'lib/discorb/dictionary.rb', line 85 def to_h @cache end |
#values ⇒ Array
Returns the values of the dictionary.
94 95 96 |
# File 'lib/discorb/dictionary.rb', line 94 def values @cache.values end |