Sha256: 429821a51779403b9f7bd91432e3810103eef66b3c498cc3322d9d105be4577f

Contents?: true

Size: 1.91 KB

Versions: 16

Compression:

Stored size: 1.91 KB

Contents

module Devtools
  class Project
    class Initializer

      # Requires all shared specs in a project's spec_helper
      # Also installs a configurable unit test timeout
      class Rspec < self
        include Concord.new(:project)

        # Call initializer for project
        #
        # @param [Project] project
        #
        # @return [self]
        #
        # @api private
        def self.call(project)
          new(project).__send__(:call)
          self
        end

      private

        # Setup RSpec for project
        #
        # @return [self]
        #
        # @api private
        def call
          require_shared_spec_files
          enable_unit_test_timeout
        end

        # Timeout unit tests that take longer than configured amount of time
        #
        # @param [Numeric] timeout
        #
        # @return [undefined]
        #
        # @raise [Timeout::Error]
        #   raised when the times are outside the timeout
        #
        # @api private
        #
        def enable_unit_test_timeout
          timeout = project.devtools.unit_test_timeout
          RSpec.configuration.around(file_path: UNIT_TEST_PATH_REGEXP) do |example|
            Timeout.timeout(timeout, &example)
          end
        end

        # Trigger the require of shared spec files
        #
        # @return [undefined]
        #
        # @api private
        #
        def require_shared_spec_files
          require_files(SHARED_SPEC_PATH)
          require_files(project.spec_root)
        end

        # Require files with pattern
        #
        # @param [Pathname] dir
        #   the directory containing the files to require
        #
        # @return [self]
        #
        # @api private
        def require_files(dir)
          Dir.glob(dir.join(SHARED_SPEC_PATTERN)).each(&Kernel.method(:require))
        end

      end # class Rspec
    end # class Initializer
  end # class Project
end # module Devtools

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
devtools-0.1.19 lib/devtools/project/initializer/rspec.rb
devtools-0.1.18 lib/devtools/project/initializer/rspec.rb
devtools-0.1.16 lib/devtools/project/initializer/rspec.rb
devtools-0.1.15 lib/devtools/project/initializer/rspec.rb
devtools-0.1.14 lib/devtools/project/initializer/rspec.rb
devtools-0.1.13 lib/devtools/project/initializer/rspec.rb
devtools-0.1.12 lib/devtools/project/initializer/rspec.rb
devtools-0.1.11 lib/devtools/project/initializer/rspec.rb
devtools-0.1.10 lib/devtools/project/initializer/rspec.rb
devtools-0.1.9 lib/devtools/project/initializer/rspec.rb
devtools-0.1.8 lib/devtools/project/initializer/rspec.rb
devtools-0.1.7 lib/devtools/project/initializer/rspec.rb
devtools-0.1.6 lib/devtools/project/initializer/rspec.rb
devtools-0.1.5 lib/devtools/project/initializer/rspec.rb
devtools-0.1.4 lib/devtools/project/initializer/rspec.rb
devtools-0.1.3 lib/devtools/project/initializer/rspec.rb