Sha256: c2016d333c6942d77a1489125510dca97f01cafb8becdeb2a1826d3a697c4675

Contents?: true

Size: 1.4 KB

Versions: 25

Compression:

Stored size: 1.4 KB

Contents

module RSpec
  module Core
    module SharedExampleGroup

      def share_examples_for(name, &block)
        ensure_shared_example_group_name_not_taken(name)
        RSpec.world.shared_example_groups[name] = block
      end

      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.metadata[:shared_group_name] = name
          end
        end

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

      alias :shared_examples_for :share_examples_for

    private

      def raise_name_error
        raise NameError, "The first argument (#{name}) to share_as must be a legal name for a constant not already in use."
      end

      def ensure_shared_example_group_name_not_taken(name)
        if RSpec.world.shared_example_groups.has_key?(name)
          raise ArgumentError.new("Shared example group '#{name}' already exists")
        end
      end

    end
  end
end

include RSpec::Core::SharedExampleGroup

Version data entries

25 entries across 25 versions & 3 rubygems

Version Path
vim-jar-0.1.2.0001 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
vim-jar-0.1.2 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
vim-jar-0.1.1 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
vim-jar-0.1.0 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
vim-jar-0.0.3 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
rspec-core-2.2.1 lib/rspec/core/shared_example_group.rb
vim-jar-0.0.2 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
vim-jar-0.0.1 bundler/ruby/1.8/gems/rspec-core-2.1.0/lib/rspec/core/shared_example_group.rb
rspec-core-2.2.0 lib/rspec/core/shared_example_group.rb
rspec-core-2.1.0 lib/rspec/core/shared_example_group.rb
rspec-core-2.0.1 lib/rspec/core/shared_example_group.rb
gemrage-1.0.0 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.4.1 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.4.0 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.3.2 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.3.1 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.3.0 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.2.0 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.1.2 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb
gemrage-0.1.1 vendor/ruby/1.8/gems/rspec-core-2.0.0/lib/rspec/core/shared_example_group.rb