Sha256: 9ba69c83fbe2d1e1645fbe4e3414d7e9ebcf4b04498b93700d5e5ad494f19299

Contents?: true

Size: 1.82 KB

Versions: 4

Compression:

Stored size: 1.82 KB

Contents

module UnitTests
  module ClassBuilder
    def self.parse_constant_name(name)
      namespace = Shoulda::Matchers::Util.deconstantize(name)
      qualified_namespace = (namespace.presence || 'Object').constantize
      name_without_namespace = name.to_s.demodulize
      [qualified_namespace, name_without_namespace]
    end

    def self.configure_example_group(example_group)
      example_group.include(self)

      example_group.after do
        teardown_defined_constants
      end
    end

    def define_module(module_name, &block)
      module_name = module_name.to_s.camelize

      namespace, name_without_namespace =
        ClassBuilder.parse_constant_name(module_name)

      if namespace.const_defined?(name_without_namespace, false)
        namespace.__send__(:remove_const, name_without_namespace)
      end

      eval <<-RUBY
        module #{namespace}::#{name_without_namespace}
        end
      RUBY

      namespace.const_get(name_without_namespace).tap do |constant|
        constant.unloadable

        if block
          constant.module_eval(&block)
        end
      end
    end

    def define_class(class_name, parent_class = Object, &block)
      class_name = class_name.to_s.camelize

      namespace, name_without_namespace =
        ClassBuilder.parse_constant_name(class_name)

      if namespace.const_defined?(name_without_namespace, false)
        namespace.__send__(:remove_const, name_without_namespace)
      end

      eval <<-RUBY
        class #{namespace}::#{name_without_namespace} < #{parent_class}
        end
      RUBY

      namespace.const_get(name_without_namespace).tap do |constant|
        constant.unloadable

        if block_given?
          constant.class_eval(&block)
        end
      end
    end

    private

    def teardown_defined_constants
      ActiveSupport::Dependencies.clear
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/shoulda-matchers-2.8.0/spec/support/unit/helpers/class_builder.rb
shoulda-matchers-2.8.0 spec/support/unit/helpers/class_builder.rb
shoulda-matchers-2.8.0.rc2 spec/support/unit/helpers/class_builder.rb
shoulda-matchers-2.8.0.rc1 spec/support/unit/helpers/class_builder.rb