Class: RSpec::Core::World Private

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/core/world.rb

Overview

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

Internal container for global non-configuration data.

Defined Under Namespace

Modules: Null

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration = RSpec.configuration) ⇒ World

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 a new instance of World



19
20
21
22
23
24
25
26
27
# File 'lib/rspec/core/world.rb', line 19

def initialize(configuration=RSpec.configuration)
  @configuration = configuration
  configuration.world = self
  @example_groups = []
  @example_group_counts_by_spec_file = Hash.new(0)
  @filtered_examples = Hash.new do |hash, group|
    hash[group] = filter_manager.prune(group.examples)
  end
end

Instance Attribute Details

#example_groupsObject (readonly)

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.



8
9
10
# File 'lib/rspec/core/world.rb', line 8

def example_groups
  @example_groups
end

#filtered_examplesObject (readonly)

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.



8
9
10
# File 'lib/rspec/core/world.rb', line 8

def filtered_examples
  @filtered_examples
end

#non_example_failureObject

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.

Used internally to signal that a failure outside of an example has occurred, and that therefore the exit status should indicate the run failed.



17
18
19
# File 'lib/rspec/core/world.rb', line 17

def non_example_failure
  @non_example_failure
end

#wants_to_quitObject

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.

Used internally to determine what to do when a SIGINT is received.



11
12
13
# File 'lib/rspec/core/world.rb', line 11

def wants_to_quit
  @wants_to_quit
end

Instance Method Details

#all_example_groupsObject

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.



94
95
96
# File 'lib/rspec/core/world.rb', line 94

def all_example_groups
  FlatMap.flat_map(example_groups) { |g| g.descendants }
end

#all_examplesObject

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.



99
100
101
# File 'lib/rspec/core/world.rb', line 99

def all_examples
  FlatMap.flat_map(all_example_groups) { |g| g.examples }
end

#announce_exclusion_filter(announcements) ⇒ Object

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.

Add exclusion filters to announcement message.



203
204
205
206
207
# File 'lib/rspec/core/world.rb', line 203

def announce_exclusion_filter(announcements)
  return if exclusion_filter.empty?

  announcements << "exclude #{exclusion_filter.description}"
end

#announce_filtersObject

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.

Notify reporter of filters.



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/rspec/core/world.rb', line 150

def announce_filters
  fail_if_config_and_cli_options_invalid
  filter_announcements = []

  announce_inclusion_filter filter_announcements
  announce_exclusion_filter filter_announcements

  unless filter_manager.empty?
    if filter_announcements.length == 1
      report_filter_message("Run options: #{filter_announcements[0]}")
    else
      report_filter_message("Run options:\n  #{filter_announcements.join("\n  ")}")
    end
  end

  if @configuration.run_all_when_everything_filtered? && example_count.zero? && !@configuration.only_failures?
    report_filter_message("#{everything_filtered_message}; ignoring #{inclusion_filter.description}")
    filtered_examples.clear
    inclusion_filter.clear
  end

  return unless example_count.zero?

  example_groups.clear
  if filter_manager.empty?
    report_filter_message("No examples found.")
  elsif exclusion_filter.empty? || inclusion_filter.empty?
    report_filter_message(everything_filtered_message)
  end
end

#announce_inclusion_filter(announcements) ⇒ Object

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.

Add inclusion filters to announcement message.



194
195
196
197
198
# File 'lib/rspec/core/world.rb', line 194

def announce_inclusion_filter(announcements)
  return if inclusion_filter.empty?

  announcements << "include #{inclusion_filter.description}"
end

#everything_filtered_messageObject

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.



187
188
189
# File 'lib/rspec/core/world.rb', line 187

def everything_filtered_message
  "\nAll examples were filtered out"
end

#example_count(groups = example_groups) ⇒ Object

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.

Get count of examples to be run.



88
89
90
91
# File 'lib/rspec/core/world.rb', line 88

def example_count(groups=example_groups)
  FlatMap.flat_map(groups) { |g| g.descendants }.
    inject(0) { |a, e| a + e.filtered_examples.size }
end

#exclusion_filterObject

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.



81
82
83
# File 'lib/rspec/core/world.rb', line 81

def exclusion_filter
  @configuration.exclusion_filter
end

#filter_managerObject

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.



48
49
50
# File 'lib/rspec/core/world.rb', line 48

def filter_manager
  @configuration.filter_manager
end

#inclusion_filterObject

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.



76
77
78
# File 'lib/rspec/core/world.rb', line 76

def inclusion_filter
  @configuration.inclusion_filter
end

#num_example_groups_defined_in(file) ⇒ Object

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.



66
67
68
# File 'lib/rspec/core/world.rb', line 66

def num_example_groups_defined_in(file)
  @example_group_counts_by_spec_file[file]
end

#ordered_example_groupsObject

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.

Apply ordering strategy from configuration to example groups.



32
33
34
35
# File 'lib/rspec/core/world.rb', line 32

def ordered_example_groups
  ordering_strategy = @configuration.ordering_registry.fetch(:global)
  ordering_strategy.order(@example_groups)
end

#preceding_declaration_line(absolute_file_name, filter_line) ⇒ Object

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.

Find line number of previous declaration.



119
120
121
122
123
124
125
# File 'lib/rspec/core/world.rb', line 119

def preceding_declaration_line(absolute_file_name, filter_line)
  line_numbers = descending_declaration_line_numbers_by_file.fetch(absolute_file_name) do
    return nil
  end

  line_numbers.find { |num| num <= filter_line }
end

#record(example_group) ⇒ Object

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.

Records an example group.



60
61
62
63
# File 'lib/rspec/core/world.rb', line 60

def record(example_group)
  @configuration.on_example_group_definition_callbacks.each { |block| block.call(example_group) }
  @example_group_counts_by_spec_file[example_group.[:absolute_file_path]] += 1
end

#registered_example_group_filesObject

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.



53
54
55
# File 'lib/rspec/core/world.rb', line 53

def registered_example_group_files
  @example_group_counts_by_spec_file.keys
end

#report_filter_message(message) ⇒ Object

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.



182
183
184
# File 'lib/rspec/core/world.rb', line 182

def report_filter_message(message)
  reporter.message(message) unless @configuration.silence_filter_announcements?
end

#reporterObject

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.



128
129
130
# File 'lib/rspec/core/world.rb', line 128

def reporter
  @configuration.reporter
end

#resetObject

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.

Reset world to 'scratch' before running suite.



40
41
42
43
44
45
# File 'lib/rspec/core/world.rb', line 40

def reset
  RSpec::ExampleGroups.remove_all_constants
  example_groups.clear
  @sources_by_path.clear if defined?(@sources_by_path)
  @syntax_highlighter = nil
end

#shared_example_group_registryObject

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.



71
72
73
# File 'lib/rspec/core/world.rb', line 71

def shared_example_group_registry
  @shared_example_group_registry ||= SharedExampleGroup::Registry.new
end

#source_from_file(path) ⇒ Object

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.



133
134
135
136
137
138
139
140
# File 'lib/rspec/core/world.rb', line 133

def source_from_file(path)
  unless defined?(@sources_by_path)
    RSpec::Support.require_rspec_support 'source'
    @sources_by_path = {}
  end

  @sources_by_path[path] ||= Support::Source.from_file(path)
end

#syntax_highlighterObject

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.



143
144
145
# File 'lib/rspec/core/world.rb', line 143

def syntax_highlighter
  @syntax_highlighter ||= Formatters::SyntaxHighlighter.new(@configuration)
end

#traverse_example_group_trees_until(&block) ⇒ Object

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.

Traverses the tree of each top level group. For each it yields the group, then the children, recursively. Halts the traversal of a branch of the tree as soon as the passed block returns true. Note that siblings groups and their sub-trees will continue to be explored. This is intended to make it easy to find the top-most group that satisfies some condition.



110
111
112
113
114
# File 'lib/rspec/core/world.rb', line 110

def traverse_example_group_trees_until(&block)
  example_groups.each do |group|
    group.traverse_tree_until(&block)
  end
end