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
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.
110 111 112 113 114 115 116 |
# File 'lib/discorb/dictionary.rb', line 110 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.
71 72 73 74 75 76 77 78 |
# File 'lib/discorb/dictionary.rb', line 71 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.
103 104 105 |
# File 'lib/discorb/dictionary.rb', line 103 def has?(id) !self[id].nil? end |
#inspect -> Object
129 130 131 |
# File 'lib/discorb/dictionary.rb', line 129 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 body end |
#remove(id) -> Object
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
118 119 120 121 122 123 124 |
# File 'lib/discorb/dictionary.rb', line 118 def respond_to_missing?(name, ...) if values.respond_to?(name) true else super end end |
#to_h -> Object
Convert the dictionary to a hash.
83 84 85 |
# File 'lib/discorb/dictionary.rb', line 83 def to_h @cache end |
#values -> Array
Returns the values of the dictionary.
92 93 94 |
# File 'lib/discorb/dictionary.rb', line 92 def values @cache.values end |