Sha256: 463fe040911c1b9acee982e9655a447455ab0faae17ca45b7f9d87a043f26e75

Contents?: true

Size: 1.73 KB

Versions: 3

Compression:

Stored size: 1.73 KB

Contents

module Spec
  module Example
    class ExampleGroupFactory
      class << self
        def reset
          @example_group_types = nil
          default(ExampleGroup)
        end

        # Registers an example group class +klass+ with the symbol
        # +type+. For example:
        #
        #   Spec::Example::ExampleGroupFactory.register(:farm, Spec::Farm::Example::FarmExampleGroup)
        #
        # This will cause Main#describe from a file living in
        # <tt>spec/farm</tt> to create example group instances of type
        # Spec::Farm::Example::FarmExampleGroup.
        def register(id, example_group_class)
          @example_group_types[id] = example_group_class
        end

        # Sets the default ExampleGroup class
        def default(example_group_class)
          old = @example_group_types
          @example_group_types = Hash.new(example_group_class)
          @example_group_types.merge(old) if old
        end

        def get(id=nil)
          if @example_group_types.values.include?(id)
            id
          else
            @example_group_types[id]
          end
        end

        def create_example_group(*args, &block)
          opts = Hash === args.last ? args.last : {}
          if opts[:shared]
            SharedExampleGroup.new(*args, &block)
          else
            superclass = determine_superclass(opts)
            superclass.describe(*args, &block)
          end
        end

        protected

        def determine_superclass(opts)
          id = if opts[:type]
            opts[:type]
          elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.join('|')})/
            $2 == '' ? nil : $2.to_sym
          end
          get(id)
        end

      end
      self.reset
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
picolena-0.1.6 rails_plugins/rspec/lib/spec/example/example_group_factory.rb
picolena-0.1.7 rails_plugins/rspec/lib/spec/example/example_group_factory.rb
picolena-0.1.8 rails_plugins/rspec/lib/spec/example/example_group_factory.rb