Sha256: 72dd2478f8d4ccea7819d915d2a680ba114eea1bb3b972e34d61e732d71479df
Contents?: true
Size: 1.31 KB
Versions: 8
Compression:
Stored size: 1.31 KB
Contents
require 'itamae' module Itamae class Definition < Resource::Base class << self def create_class(name, params, &block) Class.new(self).tap do |klass| klass.definition_block = block klass.define_attribute :action, default: :run params.each_pair do |key, value| klass.define_attribute key.to_sym, type: Object, default: value end end end def definition_block=(block) @definition_block = block end def definition_block @definition_block end end def initialize(*args) super construct_resources end def run_action(options) @children.run(options) end private def construct_resources block = self.class.definition_block context = Context.new(@attributes.merge(name: resource_name)) context.instance_exec(&block) @children = context.children end class Context attr_reader :params attr_reader :children def initialize(params, &block) @params = params @children = RecipeChildren.new end def method_missing(method, name, &block) klass = Resource.get_resource_class(method) resource = klass.new(self, name, &block) @children << resource end end end end
Version data entries
8 entries across 8 versions & 1 rubygems