Sha256: dec76ba0b330e2920085953e994eea65eb1d0467598e31b2fc051f5f8c19bb68

Contents?: true

Size: 945 Bytes

Versions: 3

Compression:

Stored size: 945 Bytes

Contents

module Blueprints
  # Class for actual blueprints. Allows building itself by executing block passed against current context.
  class Plan < Buildable
    # Initializes blueprint by name and block
    def initialize(name, &block)
      super(name)
      @block = block
    end

    # Builds plan and adds it to executed plan hash. Setups instance variable with same name as plan if it is not defined yet.
    def build_plan
      surface_errors do
        if @block
          @result = Namespace.root.context.instance_eval(&@block)
          Namespace.root.add_variable(path, @result)
        end
      end unless Namespace.root.executed_plans.include?(path)
      Namespace.root.executed_plans << path
      @result
    end

    private

    def surface_errors
      yield
    rescue StandardError => error
      puts "\n=> There was an error building scenario '#{@name}'", error.inspect, '', error.backtrace
      raise error
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
blueprints-0.4.2 lib/blueprints/plan.rb
blueprints-0.4.1 lib/blueprints/plan.rb
blueprints-0.4.0 lib/blueprints/plan.rb