5
6
7
8
9
10
11
12
13
14
15
16
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
|
# File 'lib/pcli/depends.rb', line 5
def self.on(*names, **kw_names)
Module.new do
class_methods = Module.new do
define_method :dependencies do
names + kw_names.values
end
end
define_singleton_method :included do |base|
base.extend class_methods
end
names.each do |name|
method_name = name.split('.').last
define_method(method_name) { @_dependencies[name] }
end
kw_names.each do |method_name, name|
define_method(method_name) { @_dependencies[name] }
end
define_method :initialize do |**args|
@_dependencies = self.class.dependencies.map { |n| [n, nil] }.to_h
args.each do |key, value|
key = key.to_s
raise "#{self.class.name} given invalid dependency \"#{key}\"" unless @_dependencies.key?(key)
@_dependencies[key] = value
end
@_dependencies.each_key do |n|
raise "#{self.class.name} missing dependency \"#{n}\"" unless args.key?(n.to_sym)
end
end
end
end
|