module Rspec::Core::SharedBehaviourKernelExtensions

def self.included(kls)

def self.included(kls)
  kls.module_eval(&@shared_block)
end

def share_as(name, &block)

def share_as(name, &block)
  if Object.const_defined?(name)
    puts "name was defined as #{name.inspect}"
    raise NameError, "The first argument (#{name}) to share_as must be a legal name for a constant not already in use."
  end
  
  mod = Module.new do
    @shared_block = block
    def self.included(kls)
      kls.module_eval(&@shared_block)
    end
  end
  shared_const = Object.const_set(name, mod)
  Rspec::Core.world.shared_behaviours[shared_const] = block
end

def share_examples_for(name, &block)

def share_examples_for(name, &block)
  Rspec::Core.world.shared_behaviours[name] = block
end