Module: RSpec::Core::SharedExampleGroup

Defined in:
lib/rspec/core/shared_example_group.rb

Instance Method Summary collapse

Instance Method Details

#share_as(name, &block) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/rspec/core/shared_example_group.rb', line 26

def share_as(name, &block)
  if Object.const_defined?(name)
    mod = Object.const_get(name)
    raise_name_error unless mod.created_from_caller(caller)
  end

  mod = Module.new do
    @shared_block = block
    @caller_line = caller.last

    def self.created_from_caller(other_caller)
      @caller_line == other_caller.last
    end

    def self.included(kls)
      kls.describe(&@shared_block)
      kls.children.first.[:shared_group_name] = name
    end
  end

  shared_const = Object.const_set(name, mod)
  RSpec.world.shared_example_groups[shared_const] = block
end

#shared_context(*args, &block) ⇒ Object Also known as: shared_examples, share_examples_for, shared_examples_for



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rspec/core/shared_example_group.rb', line 5

def shared_context(*args, &block)
  if String === args.first || Symbol === args.first
    name = args.shift
    ensure_shared_example_group_name_not_taken(name)
    RSpec.world.shared_example_groups[name] = block
  end

  unless args.empty?
    mod = Module.new
    (class << mod; self; end).send(:define_method, :extended) do |host|
      host.class_eval(&block)
    end
    RSpec.configuration.extend(mod, *args)
  else
  end
end