module RSpec::Core::MetadataFilter
Contains metadata filtering logic. This has been extracted from the metadata classes because it operates ON a metadata hash but does not manage any of the state in the hash. We’re moving towards having metadata be a raw hash (not a custom subclass), so externalizing this filtering logic helps us move in that direction.
Public Class Methods
@private
# File rspec-core/lib/rspec/core/metadata_filter.rb, line 11 def apply?(predicate, filters, metadata) filters.__send__(predicate) { |k, v| filter_applies?(k, v, metadata) } end
@private
# File rspec-core/lib/rspec/core/metadata_filter.rb, line 16 def filter_applies?(key, filter_value, metadata) silence_metadata_example_group_deprecations do return location_filter_applies?(filter_value, metadata) if key == :locations return id_filter_applies?(filter_value, metadata) if key == :ids return filters_apply?(key, filter_value, metadata) if Hash === filter_value meta_value = metadata.fetch(key) { return false } return true if TrueClass === filter_value && meta_value return proc_filter_applies?(key, filter_value, metadata) if Proc === filter_value return filter_applies_to_any_value?(key, filter_value, metadata) if Array === meta_value filter_value === meta_value || filter_value.to_s == meta_value.to_s end end
@private
# File rspec-core/lib/rspec/core/metadata_filter.rb, line 33 def silence_metadata_example_group_deprecations RSpec::Support.thread_local_data[:silence_metadata_example_group_deprecations] = true yield ensure RSpec::Support.thread_local_data.delete(:silence_metadata_example_group_deprecations) end