Sha256: 9b6a9945f1dda664f4eb24841bb346729fac43568c150aab8c77a52dd6dc0264

Contents?: true

Size: 1.54 KB

Versions: 30

Compression:

Stored size: 1.54 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 action_run(options)
      @children.run(options)
    end

    private

    def construct_resources
      block = self.class.definition_block

      context = Context.new(self, @attributes.merge(name: resource_name))
      context.instance_exec(&block)
      @children = context.children
    end

    class Context
      attr_reader :params
      attr_reader :children

      def initialize(definition, params, &block)
        @definition = definition
        @params = params
        @children = RecipeChildren.new
      end

      def respond_to_missing?(method, include_private = false)
        Resource.get_resource_class(method)
        true
      rescue NameError
        false
      end

      def method_missing(method, name, &block)
        klass = Resource.get_resource_class(method)
        resource = klass.new(@definition.recipe, name, &block)
        @children << resource
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
itamae-1.1.23 lib/itamae/definition.rb
itamae-1.1.22 lib/itamae/definition.rb
itamae-1.1.21 lib/itamae/definition.rb
itamae-1.1.20 lib/itamae/definition.rb
itamae-1.1.19 lib/itamae/definition.rb
itamae-1.1.18 lib/itamae/definition.rb
itamae-1.1.17 lib/itamae/definition.rb
itamae-1.1.16 lib/itamae/definition.rb
itamae-1.1.15 lib/itamae/definition.rb
itamae-1.1.14 lib/itamae/definition.rb
itamae-1.1.13 lib/itamae/definition.rb
itamae-1.1.12 lib/itamae/definition.rb
itamae-1.1.11 lib/itamae/definition.rb
itamae-1.1.10 lib/itamae/definition.rb
itamae-1.1.9 lib/itamae/definition.rb
itamae-1.1.8 lib/itamae/definition.rb
itamae-1.1.7 lib/itamae/definition.rb
itamae-1.1.5 lib/itamae/definition.rb
itamae-1.1.4 lib/itamae/definition.rb
itamae-1.1.3 lib/itamae/definition.rb