Sha256: 89688078a2e08523a563a804d94437958c51742ba6a0bfa0a0a9f5d03a324235

Contents?: true

Size: 1.31 KB

Versions: 4

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

require_relative "./condition_pack"
require_relative "./condition_creator"
require_relative "../logging/logger"

module Kanal
  module Core
    module Conditions
      # This class helps in condition pack creation
      # with the help of dsl
      class ConditionPackCreator
        include Logging::Logger

        TEMP_NAME = :temp_name

        def initialize(name)
          @name = name
          @conditions = []
        end

        def create(&block)
          instance_eval(&block)

          unless @name
            logger.fatal "Attempted to create condition pack without name"

            raise "Please provide condition pack name"
          end

          if @conditions.empty?
            logger.fatal "Attempted to create condition pack #{@name} without conditions provided"

            raise "Please provide conditions for condition pack #{@name}"
          end

          logger.info "Creating condition pack '#{@name}'"

          pack = ConditionPack.new(@name)

          @conditions.each do |c|
            pack.register_condition c
          end

          pack
        end

        def add_condition(name, &block)
          creator = ConditionCreator.new name
          condition = creator.create(&block)
          @conditions.append condition
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
kanal-0.5.1 lib/kanal/core/conditions/condition_pack_creator.rb
kanal-0.5.0 lib/kanal/core/conditions/condition_pack_creator.rb
kanal-0.4.3 lib/kanal/core/conditions/condition_pack_creator.rb
kanal-0.4.2 lib/kanal/core/conditions/condition_pack_creator.rb