class Rspec::Core::World

def all_apply?(conditions)

def all_apply?(conditions)
  lambda {|example| example.metadata.all_apply?(conditions)}
end

def all_example_groups

def all_example_groups
  @example_groups.each { |g| g.examples_to_run.replace(g.examples) }
end

def apply_exclusion_filters(examples, conditions={})

def apply_exclusion_filters(examples, conditions={})
  examples.reject &all_apply?(conditions)
end

def apply_inclusion_filters(examples, conditions={})

def apply_inclusion_filters(examples, conditions={})
  examples.select &all_apply?(conditions)
end

def declaration_line_numbers

def declaration_line_numbers
  @line_numbers ||= example_groups.inject([]) do |lines, g|
    lines + g.declaration_line_numbers
  end
end

def example_groups_to_run

def example_groups_to_run
  @example_groups_to_run ||= begin
    if inclusion_filter || exclusion_filter
      if Rspec.configuration.run_all_when_everything_filtered? && filtered_example_groups.empty?
        Rspec.configuration.puts "No examples were matched by #{inclusion_filter.inspect}, running all"
        all_example_groups
      else
        Rspec.configuration.puts "Run filtered using #{inclusion_filter.inspect}"          
        filtered_example_groups
      end
    else
      all_example_groups
    end      
  end
end

def exclusion_filter

def exclusion_filter
  Rspec.configuration.exclusion_filter
end

def filtered_example_groups

def filtered_example_groups
  @filtered_example_groups ||= example_groups.select do |example_group|
    examples = example_group.examples
    examples = apply_exclusion_filters(examples, exclusion_filter) if exclusion_filter
    examples = apply_inclusion_filters(examples, inclusion_filter) if inclusion_filter
    examples.uniq!
    example_group.examples_to_run.replace(examples)
    !examples.empty?
  end
end

def inclusion_filter

def inclusion_filter
  Rspec.configuration.filter
end

def initialize

def initialize
  @example_groups = []
end

def preceding_example_or_group_line(filter_line)

def preceding_example_or_group_line(filter_line) 
  declaration_line_numbers.inject(nil) do |highest_prior_declaration_line, line|
    line <= filter_line ? line : highest_prior_declaration_line
  end
end

def shared_example_groups

def shared_example_groups
  @shared_example_groups ||= {}
end

def total_examples_to_run

def total_examples_to_run
  @total_examples_to_run ||= example_groups_to_run.inject(0) { |sum, g| sum += g.examples_to_run.size }
end