sul-dlss/argo

View on GitHub
app/services/deep_compact_blank.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

# Recursively compact enumerables of blank values
class DeepCompactBlank
  def self.run(enumerable:)
    new(enumerable:).run
  end

  def initialize(enumerable:)
    @enumerable = enumerable
  end

  def run
    return enumerable unless enumerable.respond_to?(:compact_blank)

    enumerable
      .compact_blank
      .public_send(enumerable.is_a?(Hash) ? :transform_values : :map) { |value| self.class.run(enumerable: value) }
  end

  private

  attr_reader :enumerable
end