blob: c9098d4fe7c69e69a5a8108c0e7b6dab9d0dc8b9 (
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
# Only to have the resourcename[id] syntax available in the DSL
class SyntaxSugar
def initialize(name) = @name = name
def [](other) = "#{@name}['#{other}']"
end
class NoSuchResourceType < StandardError; end
def method_missing(method_name)
raise NoSuchResourceType, "No such resource type: #{method_name}" unless @valid_resources.include?(method_name)
SyntaxSugar.new(method_name)
end
def respond_to_missing? = true
def depends_on(*others)
@dependencies = {} if @dependencies.nil?
others.each do |other|
info "Registered dependency on #{other}"
@dependencies[other] = {}
end
end
def dependencies = @dependencies.nil ? [] : @dependencies
end
# A resource is something concrete to be managed, e.g. a file, or a CRON job.
class Resource < Keyword
include ResourceDependencies
end
end
|