Sha256: 7c23e7edd9dcc8dd825ec13667729c36b7a3e1616f29a03f2e518eead7d70e8a

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

module Qor
  module Dsl
    class Config
      attr_accessor :__node, :__name, :__parent, :__children, :__options, :__block

      def initialize type, node=nil
        self.__name = type
        self.__node = node
      end

      def node(type, options={}, &blk)
        child = Qor::Dsl::Config.new(type)
        child.instance_eval(&blk) if block_given?
        __add_child(type, options, child)

        self
      end

      def __children
        @__children ||= {}
      end

      def __add_child(type, options, child)
        child.__parent  = self
        child.__options = options
        self.__children[type.to_sym] = child

        method_defination = <<-DOC
          def #{type}(name=nil, *data, &blk)
            config = __children['#{type}'.to_sym]
            node = Qor::Dsl::Node.new(name)
            node.add_config(config)
            node.data = *data
            node.block = blk
            node.config.instance_eval(&blk) if block_given? && (config.__children.size > 0)
            __node.add_child(node)
          end
        DOC

        self.instance_eval method_defination
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
qor_dsl-0.0.5 lib/qor_dsl/config.rb