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?(filters, metadata)
  filters.all? { |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)
  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