Sha256: 9de358119308b6b283d08d3fce31ec0941fefd22dbefcf1b8c3b56e03278a66d

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

require 'aktion_test/module/base'

module AktionTest
  class SpecHelper
    attr_reader :modules, :options
    attr_writer :scope

    class << self
      def build(&block)
        new.tap do |sh|
          if block_given?
            sh.instance_eval(&block)
            sh.compile!
          end
        end
      end
    end

    def initialize
      reset
    end

    def reset
      @modules = []
      @scope   = %w(AktionTest Module)
    end

    def use(*names)
      options = names.extract_options!
      return names.each {|name| use name} if names.many?

      name = names.first

      klass = case name
      when Class then name
      when /^::/ then name.constantize
      else "#{@scope.join('::')}::#{name}".constantize
      end

      unless klass.ancestors.include? AktionTest::Module::Base
        raise ArgumentError.new("#{klass.name} must inherit from AktionTest::Module::Base") 
      end

      modules << klass.new(self, options)
    end

    def scope(name='')
      return @scope if name.blank?
      raise ArgumentError.new("A block is required when applying a temporary scope") unless block_given?

      begin
        scope << name
        yield
      ensure
        scope.pop
      end
    end

    def compile!
      modules.each &:prepare
      modules.each &:configure
      modules.each &:cleanup
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aktion_test-0.3.1 lib/aktion_test/spec_helper.rb
aktion_test-0.3.0 lib/aktion_test/spec_helper.rb