Sha256: 1338d9170e8a7e9f9ffb1fa46dee6a55dc4f051e04a7270f8f72e782b0b7bbd6

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

module Rohbau
  module Minitest
    module Exclude

      class SpecNuker
        def initialize(description_name, description_caller)
          spec_class = find_spec_class(description_caller)
          @description_caller   = description_caller
          @description_name     = description_name
          @description_classes  = spec_class.children
        end

        def nuke!(it_desc)
          it_method_name = find_it_method(it_desc)

          if it_method_name.nil?
            inspected_method = "\"#{@description_caller}\"##{it_desc.inspect}"
            msg = "Method #{inspected_method} is not defined"
            return warn(msg)
          end

          description_class.send :undef_method, it_method_name
        end

        private

        def find_spec_class(description_class)
          description_class.superclass
        end

        def find_it_method(it_desc)
          description_class.instance_methods.detect do |instance_method|
            instance_method =~ %r{test_[0-9]+_#{it_desc}}
          end
        end

        def description_class
          @description_classes.detect do |description_class|
            description_class.name == @description_name
          end
        end

      end

    end
  end
end

module MiniTest::Spec::DSL


  # only single nesting in one describe block is supported
  # for now
  def exclude(it_desc, reason = "")
    Rohbau::Minitest::Exclude::SpecNuker.new(self.name, self).nuke!(it_desc)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rohbau-0.1.0 lib/rohbau/minitest/exclude.rb