module RSpec::ExampleGroups
@private
Namespace for the example group subclasses generated by top-level ‘describe`.
Public Class Methods
# File rspec-core/lib/rspec/core/example_group.rb, line 849 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
# File rspec-core/lib/rspec/core/example_group.rb, line 869 def self.base_name_for(group) return "Anonymous".dup if group.description.empty? # Convert to CamelCase. name = ' ' + group.description name.gsub!(/[^0-9a-zA-Z]+([0-9a-zA-Z])/) do match = ::Regexp.last_match[1] match.upcase! match end name.lstrip! # Remove leading whitespace name.gsub!(/\W/, ''.freeze) # 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'.freeze) name end
Also aliased as: _base_name_for
# File rspec-core/lib/rspec/core/example_group.rb, line 857 def self.constant_scope_for(group) const_scope = group.superclass const_scope = self if const_scope == ::RSpec::Core::ExampleGroup const_scope end
# File rspec-core/lib/rspec/core/example_group.rb, line 902 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
# File rspec-core/lib/rspec/core/example_group.rb, line 863 def self.remove_all_constants constants.each do |constant| __send__(:remove_const, constant) end end