module RuboCop::Cop::RSpec::AggregateExamples::MetadataHelpers

@internal

Support methods for example metadata.
Examples with similar metadata are grouped.

Depending on the configuration, `aggregate_failures` metadata
is added to aggregated examples.

Private Instance Methods

add_aggregate_failures_metadata?() click to toggle source
# File lib/test_prof/cops/rspec/aggregate_examples/metadata_helpers.rb, line 60
def add_aggregate_failures_metadata?
  cop_config.fetch("AddAggregateFailuresMetadata", false)
end
example_metadata(example) click to toggle source
# File lib/test_prof/cops/rspec/aggregate_examples/metadata_helpers.rb, line 42
def example_metadata(example)
  example.send_node.arguments
end
metadata_for_aggregated_example(metadata) click to toggle source
# File lib/test_prof/cops/rspec/aggregate_examples/metadata_helpers.rb, line 16
def metadata_for_aggregated_example(metadata)
  metadata_to_add = metadata.compact.map(&:source)
  if add_aggregate_failures_metadata?
    metadata_to_add.unshift(":aggregate_failures")
  end
  if metadata_to_add.any?
    "(#{metadata_to_add.join(", ")})"
  else
    ""
  end
end
metadata_pairs_without_aggegate_failures(metadata) click to toggle source
# File lib/test_prof/cops/rspec/aggregate_examples/metadata_helpers.rb, line 52
def metadata_pairs_without_aggegate_failures(metadata)
  map = metadata.find(&:hash_type?)
  pairs = map&.pairs || []
  pairs.reject do |pair|
    pair.key.value == :aggregate_failures && pair.value.true_type?
  end
end
metadata_symbols_without_aggregate_failures(metadata) click to toggle source
# File lib/test_prof/cops/rspec/aggregate_examples/metadata_helpers.rb, line 46
def metadata_symbols_without_aggregate_failures(metadata)
  metadata
    .select(&:sym_type?)
    .reject { |item| item.value == :aggregate_failures }
end
metadata_without_aggregate_failures(example) click to toggle source

Used to group examples for aggregation. `aggregate_failures` and `aggregate_failures: true` metadata are not taken in consideration, as it is dynamically set basing on cofiguration. If `aggregate_failures: false` is set on the example, it's preserved and is treated as regular metadata.

# File lib/test_prof/cops/rspec/aggregate_examples/metadata_helpers.rb, line 33
def metadata_without_aggregate_failures(example)
  metadata = example_metadata(example) || []

  symbols = metadata_symbols_without_aggregate_failures(metadata)
  pairs = metadata_pairs_without_aggegate_failures(metadata)

  [*symbols, pairs].flatten.compact
end