module AwsCftTools::TemplateSet::Closure
Closure-related functions for a TemplateSet
.
Public Instance Methods
closed_subset(templates)
click to toggle source
Provides the subset of the given templates that have no dependent templates outside the set.
@param templates [AwsCftTools::TemplateSet] @return [AwsCftTools::TemplateSet]
# File lib/aws_cft_tools/template_set/closure.rb, line 36 def closed_subset(templates) templates_for(@dependency_tree.closed_subset(templates.filenames)) end
closure(templates)
click to toggle source
Provides the given templates and any from the set that those templates depend on.
@param templates [Array<AwsCftTools::Template>] @return [AwsCftTools::TemplateSet]
# File lib/aws_cft_tools/template_set/closure.rb, line 15 def closure(templates) templates_for( calculate_closure(templates.filenames) { |template| @dependency_tree.dependencies_for(template) } ) end
filenames()
click to toggle source
Provides a list of filenames holding the source for the templates in a set.
@return [Array<String>]
# File lib/aws_cft_tools/template_set/closure.rb, line 26 def filenames map(&:filename).map(&:to_s) end
in_folder_order(folders)
click to toggle source
@param folders [Array<String>] @return [AwsCftTools::TemplateSet]
# File lib/aws_cft_tools/template_set/closure.rb, line 44 def in_folder_order(folders) proper_ordered_set, set = folders.reduce([clone, []]) do |memo, folder| set, proper_ordered_set = memo selected = closure(templates_in_folder(set, folder)) - proper_ordered_set [set - selected, proper_ordered_set | selected] end proper_ordered_set | set end
Private Instance Methods
calculate_closure(set, &block)
click to toggle source
# File lib/aws_cft_tools/template_set/closure.rb, line 60 def calculate_closure(set, &block) stack = set.clone stack += closure_step(stack.shift, set, &block) while stack.any? set end
closure_step(template, set) { |template| ... }
click to toggle source
# File lib/aws_cft_tools/template_set/closure.rb, line 67 def closure_step(template, set) [].tap do |stack| (yield(template) - set).each do |depedency| stack << depedency set.unshift(depedency) end end end
templates_in_folder(set, folder)
click to toggle source
# File lib/aws_cft_tools/template_set/closure.rb, line 56 def templates_in_folder(set, folder) set.select { |template| template.filename.to_s.start_with?(folder + '/') } end