Module: RSpec::Core::Metadata

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

Overview

Each ExampleGroup class and Example instance owns an instance of Metadata, which is Hash extended to support lazy evaluation of values associated with keys that may or may not be used by any example or group.

In addition to metadata that is used internally, this also stores user-supplied metadata, e.g.

RSpec.describe Something, :type => :ui do
  it "does something", :slow => true do
    # ...
  end
end

:type => :ui is stored in the Metadata owned by the example group, and :slow => true is stored in the Metadata owned by the example. These can then be used to select which examples are run using the --tag option on the command line, or several methods on Configuration used to filter a run (e.g. filter_run_including, filter_run_excluding, etc).

Class Method Summary collapse

Class Method Details

.relative_path(line) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns relative path to line.

Parameters:

  • line (String)

    current code line

Returns:

  • (String)

    relative path to line

44
45
46
47
48
49
50
51
52
53
# File 'lib/rspec/core/metadata.rb', line 44
def self.relative_path(line)
  line = line.sub(relative_path_regex, "\\1.\\2".freeze)
  line = line.sub(/\A([^:]+:\d+)$/, '\\1'.freeze)
  return nil if line == '-e:1'.freeze
  line
rescue SecurityError
  # :nocov: - SecurityError is no longer produced starting in ruby 2.7
  nil
  # :nocov:
end

.relative_path_regexvoid

Matches strings either at the beginning of the input or prefixed with a whitespace, containing the current path, either postfixed with the separator, or at the end of the string. Match groups are the character before and the character after the string if any.

http://rubular.com/r/fT0gmX6VJX http://rubular.com/r/duOrD4i3wb http://rubular.com/r/sbAMHFrOx1

36
37
38
# File 'lib/rspec/core/metadata.rb', line 36
def self.relative_path_regex
  @relative_path_regex ||= /(\A|\s)#{File.expand_path('.')}(#{File::SEPARATOR}|\s|\Z)/
end