Sha256: dfb27e517a53a56c6347ad72ce78418f5cb5b58c79c20821bd43588306faeb1e

Contents?: true

Size: 1.06 KB

Versions: 1

Compression:

Stored size: 1.06 KB

Contents

module Apress
  module Documentation
    module Dsl
      # Private: AbstractClass Базовы класс компилятора DSL
      #
      # задает DSL для настройки DSL (Xzibit style)
      class BaseCompiler
        # Public: Объект в который будут заполняться поля чере DSL
        attr_reader :target

        def initialize(target)
          @target = target
        end

        # Public: Основной метод, задает какие поля объект DSL-класса будет записивать в target
        def self.setters(*method_names)
          method_names.each do |name|
            send :define_method, name do |value|
              @target.send("#{name}=", value)
            end
          end
        end

        # Public: Осуществляет исполнение DSL и заполняет нужные поля в target
        def compile(fields, &block)
          @target.assign(fields)
          instance_eval(&block) if block_given?
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apress-documentation-0.4.0 lib/apress/documentation/dsl/compilers/base_compiler.rb