class RSpec::Core::World

@api private

Internal container for global non-configuration data

Attributes

example_groups[R]

@private

filtered_examples[R]

@private

wants_to_quit[RW]

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

Public Class Methods

new(configuration=RSpec.configuration) click to toggle source
# File lib/rspec/core/world.rb, line 16
def initialize(configuration=RSpec.configuration)
  @configuration = configuration
  @example_groups = []
  @filtered_examples = Hash.new { |hash,group|
    hash[group] = begin
      examples = group.examples.dup
      examples = filter_manager.prune(examples)
      examples.uniq!
      examples
    end
  }
end

Public Instance Methods

announce_exclusion_filter(announcements) click to toggle source

@api private

Add exclusion filters to announcement message

# File lib/rspec/core/world.rb, line 167
def announce_exclusion_filter(announcements)
  unless exclusion_filter.empty?
    announcements << "exclude #{exclusion_filter.description}"
  end
end
announce_filters() click to toggle source

@api private

Notify reporter of filters

# File lib/rspec/core/world.rb, line 114
def announce_filters
  filter_announcements = []

  announce_inclusion_filter filter_announcements
  announce_exclusion_filter filter_announcements

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

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

  if example_count.zero?
    example_groups.clear
    if filter_manager.empty?
      reporter.message("No examples found.")
    elsif exclusion_filter.empty?
      message = everything_filtered_message
      if @configuration.run_all_when_everything_filtered?
        message << "; ignoring #{inclusion_filter.description}"
      end
      reporter.message(message)
    elsif inclusion_filter.empty?
      reporter.message(everything_filtered_message)
    end
  end
end
announce_inclusion_filter(announcements) click to toggle source

@api private

Add inclusion filters to announcement message

# File lib/rspec/core/world.rb, line 158
def announce_inclusion_filter(announcements)
  unless inclusion_filter.empty?
    announcements << "include #{inclusion_filter.description}"
  end
end
clear_remaining_example_groups() click to toggle source

@private Used internally to clear remaining groups when fail_fast is set

# File lib/rspec/core/world.rb, line 31
def clear_remaining_example_groups
  example_groups.clear
end
configure_group(group) click to toggle source

@private

# File lib/rspec/core/world.rb, line 85
def configure_group(group)
  @configuration.configure_group(group)
end
everything_filtered_message() click to toggle source

@private

# File lib/rspec/core/world.rb, line 151
def everything_filtered_message
  "\nAll examples were filtered out"
end
example_count(groups=example_groups) click to toggle source

@api private

Get count of examples to be run

# File lib/rspec/core/world.rb, line 92
def example_count(groups=example_groups)
  FlatMap.flat_map(groups) {|g| g.descendants}.
    inject(0) {|sum, g| sum + g.filtered_examples.size}
end
exclusion_filter() click to toggle source

@private

# File lib/rspec/core/world.rb, line 80
def exclusion_filter
  @configuration.exclusion_filter
end
filter_manager() click to toggle source

@private

# File lib/rspec/core/world.rb, line 57
def filter_manager
  @configuration.filter_manager
end
inclusion_filter() click to toggle source

@private

# File lib/rspec/core/world.rb, line 75
def inclusion_filter
  @configuration.inclusion_filter
end
ordered_example_groups() click to toggle source

@api private

Apply ordering strategy from configuration to example groups

# File lib/rspec/core/world.rb, line 43
def ordered_example_groups
  ordering_strategy = @configuration.ordering_registry.fetch(:global)
  ordering_strategy.order(@example_groups)
end
preceding_declaration_line(filter_line) click to toggle source

@api private

Find line number of previous declaration

# File lib/rspec/core/world.rb, line 100
def preceding_declaration_line(filter_line)
  declaration_line_numbers.sort.inject(nil) do |highest_prior_declaration_line, line|
    line <= filter_line ? line : highest_prior_declaration_line
  end
end
register(example_group) click to toggle source

@api private

Register an example group

# File lib/rspec/core/world.rb, line 64
def register(example_group)
  example_groups << example_group
  example_group
end
reporter() click to toggle source

@private

# File lib/rspec/core/world.rb, line 107
def reporter
  @configuration.reporter
end
reset() click to toggle source

@api private

Reset world to 'scratch' before running suite

# File lib/rspec/core/world.rb, line 51
def reset
  example_groups.clear
  @shared_example_group_registry = nil
end
shared_example_group_registry() click to toggle source

@private

# File lib/rspec/core/world.rb, line 70
def shared_example_group_registry
  @shared_example_group_registry ||= SharedExampleGroup::Registry.new
end
windows_os?() click to toggle source

@private

# File lib/rspec/core/world.rb, line 36
def windows_os?
  RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/
end

Private Instance Methods

declaration_line_numbers() click to toggle source
# File lib/rspec/core/world.rb, line 175
def declaration_line_numbers
  @line_numbers ||= example_groups.inject([]) do |lines, g|
    lines + g.declaration_line_numbers
  end
end