Class: Crystalball::RSpec::Filtering
- Inherits:
-
Object
- Object
- Crystalball::RSpec::Filtering
- 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
-
#initialize(configuration) ⇒ Filtering
constructor
A new instance of Filtering.
- #remove_unecessary_filters_from_directories(directories) ⇒ Object
- #remove_unecessary_filters_from_files(files) ⇒ Object
- #remove_unnecessary_filters(files_or_directories) ⇒ Object
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
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.(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 |