17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/cskit/registry.rb', line 17
def create(family, plural_family)
Module.new do
define_method :"register_#{family}" do |config|
register(family, config[:id], config[family].new(config))
end
define_method :"get_#{family}" do |id|
get(family, id)
end
define_method :"#{plural_family}" do
all(family)
end
define_method :"#{family}_available?" do |id|
available?(family, id)
end
private
def register(family, key, obj)
(registry[family.to_sym] ||= {})[key.to_sym] = obj
end
def get(family, key)
registry[family.to_sym][key.to_sym] || get_for_family(family, key)
end
def all(family)
registry.fetch(family, [])
end
def get_for_family(family, type)
found = registry[family.to_sym].find do |key, obj|
obj.config[:type] == type
end
found.last if found
end
def available?(family, key)
!!registry[family.to_sym][key.to_sym] rescue false
end
end
end
|