Sha256: 37c7dc202523a85b9e02d9f8ccb764b4a50623fd7b4a51e22e584587f23bccab

Contents?: true

Size: 936 Bytes

Versions: 8

Compression:

Stored size: 936 Bytes

Contents

module Approvals
  class Filter
    attr_reader :filters

    def initialize(filters)
      @filters = filters
      @placeholder = {}
    end

    def apply hash_or_array
      if @filters.any?
        censored(hash_or_array)
      else
        hash_or_array
      end
    end

    def censored value, key=nil
      case value
      when Array
        value.map { |item| censored(item) }
      when Hash
        Hash[value.map { |key, value| [key, censored(value, key)] }]
      else
        if value.nil?
          nil
        elsif key && placeholder_for(key)
          "<#{placeholder_for(key)}>"
        else
          value
        end
      end
    end

    def placeholder_for key
      return @placeholder[key] if @placeholder.key? key

      applicable_filters = filters.select do |placeholder, pattern|
        pattern && key.match(pattern)
      end

      @placeholder[key] = applicable_filters.keys.last
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
approvals-0.0.20 lib/approvals/filter.rb
approvals-0.0.19 lib/approvals/filter.rb
approvals-0.0.18 lib/approvals/filter.rb
approvals-0.0.17 lib/approvals/filter.rb
approvals-0.0.16 lib/approvals/filter.rb
approvals-0.0.15 lib/approvals/filter.rb
approvals-0.0.14 lib/approvals/filter.rb
approvals-0.0.13 lib/approvals/filter.rb