blob: 4c288092fd871299bee7a597c7736e0c8ef8d8ef (
plain)
1
2
3
4
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
42
43
44
45
46
47
|
require 'set'
require_relative 'keyword'
module RCM
# To track recource dependencies
module ResourceDependencies
def initialize(...)
super(...)
@valid_resources = Set.new
ObjectSpace.each_object(Class).each do |klass|
@valid_resources << klass.to_s.sub('RCM::', '').downcase.to_sym if klass < Resource
end
end
class NoSuchResourceType < StandardError; end
def method_missing(method_name, *args)
raise NoSuchResourceType, "No such resource type: #{method_name}" unless @valid_resources.include?(method_name)
args.map { |arg| "#{method_name}('#{arg}')" }
end
def respond_to_missing? = true
def depends_on(*others)
@depends_on = {} if @depends_on.nil?
return @depends_on if others.empty?
others.flatten.each do |other|
info "Registered dependency on #{other}"
@depends_on[other] = {}
end
end
def depends_on?(*others)
return false if @depends_on.nil?
others.flatten.none? { |other| !@depends_on.key?(other) }
end
end
# A resource is something concrete to be managed, e.g. a file, or a CRON job.
class Resource < Keyword
include ResourceDependencies
end
end
|