Sha256: 66f9aca4db636cf2266b2763edaa9b85cea7c3c08d0221ba30516776bdff3e3c

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

require 'singleton'

module AktionTest
  class SpecHelper
    include Singleton

    attr_reader :modules, :options, :scope

    class << self
      def load(*names, &block)
        options = names.extract_options!

        if names.any?
          load_constants(names)

          unless options.nil? || options.empty?
            names.each do |name|
              instance.options.merge! name => options
            end
          end

          instance.modules.each do |mod|
            include mod
          end
        end

        self.instance_eval(&block) if block_given?
      end

      def within(scope, &block)
        instance.scope << scope.to_s
        yield
        instance.scope.pop
      end

    private

      def load_constants(modules)
        modules.each do |mod|
          module_name = "#{instance.scope.join('::')}::#{mod}"
          begin
            module_const = module_name.constantize
            instance.modules << module_const
          rescue NameError
            puts "Unknown module #{mod}."
          end
        end
      end
    end

    def initialize
      reset
    end

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

    def loaded?(name)
      eval "defined? AktionTest::Module::#{name}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aktion_test-0.2.1 lib/aktion_test/spec_helper.rb