60
57
# Note that this will fail if the resource is not unique.
61
58
@catalog.add_resource(resource)
60
if resource.type.to_s.downcase != "class" && resource[:stage]
61
raise ArgumentError, "Only classes can set 'stage'; normal resources like #{resource} cannot change run stage"
64
# Add our container edge. If we're a class, then we get treated specially - we can
65
# control the stage that the class is applied in. Otherwise, we just
66
# get added to our parent container.
64
# Stages should not be inside of classes. They are always a
65
# top-level container, regardless of where they appear in the
67
67
return if resource.type.to_s.downcase == "stage"
69
# This adds a resource to the class it lexically appears in in the
69
71
if resource.type.to_s.downcase != "class"
70
raise ArgumentError, "Only classes can set 'stage'; normal resources like #{resource} cannot change run stage" if resource[:stage]
71
72
return @catalog.add_edge(scope.resource, resource)
74
unless stage = @catalog.resource(:stage, resource[:stage] || (scope && scope.resource && scope.resource[:stage]) || :main)
75
raise ArgumentError, "Could not find stage #{resource[:stage] || :main} specified by #{resource}"
78
resource[:stage] ||= stage.title unless stage.title == :main
79
@catalog.add_edge(stage, resource)
82
76
# Do we use nodes found in the code, vs. the external node sources?