Class: Crystalball::RSpec::Filtering

Inherits:
Object
  • Object
show all
Defined in:
lib/crystalball/rspec/filtering.rb

Overview

This class is meant to remove the example filtering options for example_groups when a prediction contains a file path and the same file example id.

For example, if a prediction contains ‘./spec/foo_spec.rb ./spec/foo_spec.rb`, only `./spec/foo_spec.rb` would run, because of the way RSpec filters are designed.

Therefore, we need to manually remove the filters from such example_groups.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ Filtering

Returns a new instance of Filtering.



21
22
23
# File 'lib/crystalball/rspec/filtering.rb', line 21

def initialize(configuration)
  @configuration = configuration
end

Class Method Details

.remove_unnecessary_filters(config, paths) ⇒ Object

Parameters:

  • config (RSpec::Core::Configuration)
  • paths (Array<String>)


17
18
19
# File 'lib/crystalball/rspec/filtering.rb', line 17

def self.remove_unnecessary_filters(config, paths)
  new(config).remove_unnecessary_filters(paths)
end

Instance Method Details

#remove_unecessary_filters_from_directories(directories) ⇒ Object



31
32
33
34
35
36
# File 'lib/crystalball/rspec/filtering.rb', line 31

def remove_unecessary_filters_from_directories(directories)
  directories.each do |dir|
    files = configuration.__send__(:gather_directories, dir)
    remove_unecessary_filters_from_files(files)
  end
end

#remove_unecessary_filters_from_files(files) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/crystalball/rspec/filtering.rb', line 38

def remove_unecessary_filters_from_files(files)
  files.select { |f| ::RSpec::Core::Example.parse_id(f).last.nil? }.each do |file|
    next remove_unecessary_filters(fd) if File.directory?(file)

    path = ::RSpec::Core::Metadata.relative_path(File.expand_path(file))
    configuration.filter_manager.inclusions[:ids]&.delete(path)
  end
end

#remove_unnecessary_filters(files_or_directories) ⇒ Object



25
26
27
28
29
# File 'lib/crystalball/rspec/filtering.rb', line 25

def remove_unnecessary_filters(files_or_directories)
  directories, files = files_or_directories.partition { |f| File.directory?(f) }
  remove_unecessary_filters_from_files(files)
  remove_unecessary_filters_from_directories(directories)
end