Class/Module Index [+]

Quicksearch

RSpec::ExampleGroups

@private

Namespace for the example group subclasses generated by top-level `describe`.

Public Class Methods

assign_const(group) click to toggle source
# File lib/rspec/core/example_group.rb, line 656
def self.assign_const(group)
  base_name   = base_name_for(group)
  const_scope = constant_scope_for(group)
  name        = disambiguate(base_name, const_scope)

  const_scope.const_set(name, group)
end
base_name_for(group) click to toggle source
# File lib/rspec/core/example_group.rb, line 670
def self.base_name_for(group)
  return "Anonymous" if group.description.empty?

  # convert to CamelCase
  name = ' ' + group.description
  name.gsub!(/[^0-9a-zA-Z]+([0-9a-zA-Z])/) { $1.upcase }

  name.lstrip!         # Remove leading whitespace
  name.gsub!(/\W/, '') # JRuby, RBX and others don't like non-ascii in const names

  # Ruby requires first const letter to be A-Z. Use `Nested`
  # as necessary to enforce that.
  name.gsub!(/\A([^A-Z]|\z)/, 'Nested\1')

  name
end
constant_scope_for(group) click to toggle source
# File lib/rspec/core/example_group.rb, line 664
def self.constant_scope_for(group)
  const_scope = group.superclass
  const_scope = self if const_scope == Core::ExampleGroup
  const_scope
end
disambiguate(name, const_scope) click to toggle source
# File lib/rspec/core/example_group.rb, line 687
def self.disambiguate(name, const_scope)
  return name unless const_defined_on?(const_scope, name)

  # Add a trailing number if needed to disambiguate from an existing constant.
  name << "_2"
  name.next! while const_defined_on?(const_scope, name)
  name
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.