class SimplyGenius::Atmos::Template
Constants
- TEMPLATES_ACTIONS_FILE
- TEMPLATES_SPEC_FILE
Attributes
context[R]
directory[R]
name[R]
source[R]
Public Class Methods
new(name, directory, source, context: {})
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 15 def initialize(name, directory, source, context: {}) @name = name @directory = directory @source = source @context = context @context = SettingsHash.new(@context) unless @context.kind_of?(SettingsHash) end
Public Instance Methods
actions()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 48 def actions @actions ||= (File.exist?(actions_path) ? File.read(actions_path) : "") end
actions_path()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 44 def actions_path File.join(directory, TEMPLATES_ACTIONS_FILE) end
config()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 56 def config @config ||= begin data = File.read(config_path) SettingsHash.new(YAML.load(data) || {}) end end
config_path()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 52 def config_path File.join(directory, TEMPLATES_SPEC_FILE) end
context_path()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 31 def context_path name.gsub('-', '_').gsub('/', '.') end
dependencies()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 69 def dependencies @dependencies ||= begin deps = Array(config[:dependent_templates]) deps.collect do |d| if d.kind_of?(String) tmpl = SourcePath.find_template(d) elsif d.kind_of?(Hash) raise ArgumentError.new("Template must be named with name key: #{tmpl}") unless d[:name] tmpl = SourcePath.find_template(d[:name]) tmpl.context.merge!(d[:context]) if d[:context] else raise TypeError.new("Invalid template structure: #{d}") end tmpl end end end
dup()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 88 def dup dependencies Marshal.load(Marshal.dump(self)) end
optional()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 63 def optional result = config[:optional] || {} raise TypeError.new("Template config item :optional must be a hash: #{result.inspect}") unless result.is_a?(Hash) result end
scoped_context()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 35 def scoped_context result = context.notation_get(context_path) if result.nil? context.notation_put(context_path, SettingsHash.new, additive: false) result = context.notation_get(context_path) end result end
to_h()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 27 def to_h SettingsHash.new({name: name, source: source.to_h, context: context}) end
to_s()
click to toggle source
# File lib/simplygenius/atmos/template.rb, line 23 def to_s "#{name}" end
walk_dependencies(seen=Set.new)
click to toggle source
depth first iteration of dependencies
# File lib/simplygenius/atmos/template.rb, line 94 def walk_dependencies(seen=Set.new) Enumerator.new do |yielder| if seen.include?(name) seen << name raise ArgumentError.new("Circular template dependency: #{seen.to_a.join(" => ")}") end seen << name dependencies.each do |dep| dep = dep.dup dep.context.merge!(context) dep.walk_dependencies(seen.dup).each do |d| yielder << d end end yielder << dup end end