Sha256: 85f88bac8809ed39bb0dd82571419d1e040426f5827f3f6cba1d275a7554029b

Contents?: true

Size: 1.64 KB

Versions: 9

Compression:

Stored size: 1.64 KB

Contents

require 'set'

module Shoulda
  module Matchers
    module Integrations
      # @private
      class Configuration
        def self.apply(configuration, &block)
          new(configuration, &block).apply
        end

        def initialize(configuration, &block)
          @test_frameworks = Set.new
          @libraries = Set.new

          test_framework :missing_test_framework
          library :missing_library

          block.call(self)
        end

        def test_framework(name)
          clear_default_test_framework
          @test_frameworks << Integrations.find_test_framework!(name)
        end

        def library(name)
          @libraries << Integrations.find_library!(name)
        end

        def apply
          if no_test_frameworks_added? && no_libraries_added?
            raise ConfigurationError, <<EOT
shoulda-matchers is not configured correctly. You need to specify at least one
test framework and/or library. For example:

Shoulda::Matchers.configure do |config|
  config.integrate do |with|
    with.test_framework :rspec
    with.library :rails
  end
end
EOT
          end

          @test_frameworks.each do |test_framework|
            test_framework.include(Shoulda::Matchers::Independent)
            @libraries.each { |library| library.integrate_with(test_framework) }
          end
        end

        private

        def clear_default_test_framework
          @test_frameworks.select!(&:present?)
        end

        def no_test_frameworks_added?
          @test_frameworks.empty? || !@test_frameworks.any?(&:present?)
        end

        def no_libraries_added?
          @libraries.empty?
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
shoulda-matchers-4.0.1 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.1.3 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-4.0.0.rc1 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.1.2 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.1.1 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.1.0 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.0.1 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.0.0 lib/shoulda/matchers/integrations/configuration.rb
shoulda-matchers-3.0.0.rc1 lib/shoulda/matchers/integrations/configuration.rb