Module: Toolcase::Registry
- Defined in:
- lib/toolcase/registry.rb
Overview
Registry mixin. Allows to convert a class into a registrable container. It can then be used to register strategies/handlers and use the class as an abstract factory.
Instance Method Summary collapse
- #[](id) ⇒ Object
- #clear(tag = nil) ⇒ Object
- #default(object = nil) ⇒ Object
- #find_by(tag = nil, &block) ⇒ Object
- #identifiers(tag = nil) ⇒ Object
- #include?(object, tag = nil) ⇒ Boolean
- #inherited(child) ⇒ Object
- #register(object = nil, id: default_id, tags: EMPTY, &block) ⇒ Object
- #registries(tag = nil) ⇒ Object
- #remove(value_or_id) ⇒ Object
- #replace(old, new_object) ⇒ Object
- #size(tag = nil) ⇒ Object
- #tags ⇒ Object
Instance Method Details
#[](id) ⇒ Object
27 28 29 |
# File 'lib/toolcase/registry.rb', line 27 def [](id) container.key?(id) ? container[id].first : default end |
#clear(tag = nil) ⇒ Object
56 57 58 |
# File 'lib/toolcase/registry.rb', line 56 def clear(tag = nil) subset(tag).each { |object| remove(object) } end |
#default(object = nil) ⇒ Object
22 23 24 25 |
# File 'lib/toolcase/registry.rb', line 22 def default(object = nil) @default = object unless object.nil? defined?(@default) ? @default : nil end |
#find_by(tag = nil, &block) ⇒ Object
31 32 33 |
# File 'lib/toolcase/registry.rb', line 31 def find_by(tag = nil, &block) subset(tag).find(-> { default }, &block) end |
#identifiers(tag = nil) ⇒ Object
74 75 76 |
# File 'lib/toolcase/registry.rb', line 74 def identifiers(tag = nil) entries_by_tag(tag).keys end |
#include?(object, tag = nil) ⇒ Boolean
35 36 37 |
# File 'lib/toolcase/registry.rb', line 35 def include?(object, tag = nil) subset(tag).include?(object) end |
#inherited(child) ⇒ Object
60 61 62 63 64 |
# File 'lib/toolcase/registry.rb', line 60 def inherited(child) super child.container.merge!(container) child.default(default) end |
#register(object = nil, id: default_id, tags: EMPTY, &block) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/toolcase/registry.rb', line 10 def register(object = nil, id: default_id, tags: EMPTY, &block) return if container.key?(id) element = nil element = object unless object.nil? element = block if block_given? = .is_a?(Array) ? : [] container[id] = [element, Set.new()] end |
#registries(tag = nil) ⇒ Object
66 67 68 |
# File 'lib/toolcase/registry.rb', line 66 def registries(tag = nil) subset(tag) end |
#remove(value_or_id) ⇒ Object
50 51 52 53 54 |
# File 'lib/toolcase/registry.rb', line 50 def remove(value_or_id) object_or_id(value_or_id) do |id| container.delete(id) end end |
#replace(old, new_object) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/toolcase/registry.rb', line 43 def replace(old, new_object) object_or_id(old) do |id| old_tuple = container[id] container[id] = [new_object, old_tuple.last] end end |
#size(tag = nil) ⇒ Object
39 40 41 |
# File 'lib/toolcase/registry.rb', line 39 def size(tag = nil) subset(tag).size end |
#tags ⇒ Object
70 71 72 |
# File 'lib/toolcase/registry.rb', line 70 def container.values.flat_map { |_, | .to_a }.uniq end |