Module Spec::Example::ExampleGroupFactory::ClassMethods

  1. lib/spec/example/example_group_factory.rb

Public instance methods

[] (key)
[show source]
# File lib/spec/example/example_group_factory.rb, line 61
        def [](key)
          @example_group_types[key]
        end
assign_scope (scope, args)
[show source]
# File lib/spec/example/example_group_factory.rb, line 65
        def assign_scope(scope, args)
          args.last[:scope] = scope
        end
create_example_group (*args, &block)
[show source]
# File lib/spec/example/example_group_factory.rb, line 26
        def create_example_group(*args, &block)
          raise ArgumentError if args.empty?
          raise ArgumentError unless block
          Spec::Example::add_spec_path_to(args)
          superclass = determine_superclass(args.last)
          superclass.describe(*args, &block)
        end
default (example_group_class)

Sets the default ExampleGroup class

[show source]
# File lib/spec/example/example_group_factory.rb, line 53
        def default(example_group_class)
          Spec.__send__ :remove_const, :ExampleGroup if Spec.const_defined?(:ExampleGroup)
          Spec.const_set(:ExampleGroup, example_group_class)
          old = @example_group_types
          @example_group_types = Hash.new(example_group_class)
          @example_group_types.merge!(old) if old
        end
example_group_creation_listeners ()
[show source]
# File lib/spec/example/example_group_factory.rb, line 11
        def example_group_creation_listeners
          @example_group_creation_listeners ||= []
        end
register (key, example_group_class)

Registers an example group class klass with the symbol type. For example:

Spec::Example::ExampleGroupFactory.register(:farm, FarmExampleGroup)

With that you can append a hash with :type => :farm to the describe method and it will load an instance of FarmExampleGroup.

describe Pig, :type => :farm do
  ...

If you don’t use the hash explicitly, describe will implicitly use an instance of FarmExampleGroup for any file loaded from the ./spec/farm directory.

[show source]
# File lib/spec/example/example_group_factory.rb, line 48
        def register(key, example_group_class)
          @example_group_types[key.to_sym] = example_group_class
        end
register_example_group (klass)
[show source]
# File lib/spec/example/example_group_factory.rb, line 15
        def register_example_group(klass)
          example_group_creation_listeners.each do |listener|
            listener.register_example_group(klass)
          end
        end
reset ()
[show source]
# File lib/spec/example/example_group_factory.rb, line 6
        def reset
          @example_group_types = nil
          default(ExampleGroup)
        end

Protected instance methods

determine_superclass (opts)
[show source]
# File lib/spec/example/example_group_factory.rb, line 71
        def determine_superclass(opts)
          if type = opts[:type]
            self[type]
          elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.sort_by{|k| k.to_s.length}.reverse.join('|')})/
            self[$2 == '' ? nil : $2.to_sym]
          else
            self[nil]
          end
        end