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

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

Returns:

  • (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?

  tags = tags.is_a?(Array) ? tags : [tags]

  container[id] = [element, Set.new(tags)]
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

#tagsObject



70
71
72
# File 'lib/toolcase/registry.rb', line 70

def tags
  container.values.flat_map { |_, tags| tags.to_a }.uniq
end