Sha256: b4aea16d238e2685d80d3f03d5b749d3dc1edd8e02ff40b515fce29b22683f3f
Contents?: true
Size: 1.69 KB
Versions: 10
Compression:
Stored size: 1.69 KB
Contents
# frozen_string_literal: true module Workato module Connector module Sdk class Summarize ARRAY_SUMMARIZATION_LIMIT = 100 STRING_SUMMARIZATION_LIMIT = 1024 def initialize(data:, paths:) @paths = paths @data = data end def call return data if paths.blank? summarized = data paths.each do |path| steps = path.split('.') if above_summarization_limit?(summarized.dig(*steps)) summarized = data.deep_dup if summarized.equal?(data) apply_summarization_limit(summarized, steps) end end summarized end private attr_reader :data, :paths def above_summarization_limit?(candidate) candidate.is_a?(::Array) && candidate.length > ARRAY_SUMMARIZATION_LIMIT || candidate.is_a?(::String) && candidate.length > STRING_SUMMARIZATION_LIMIT end def apply_summarization_limit(summarized, steps) container = if steps.length > 1 summarized.dig(*steps[0..-2]) else summarized end candidate = container[steps.last] case candidate when Array candidate[(ARRAY_SUMMARIZATION_LIMIT - 2)..-2] = "... #{candidate.length - ARRAY_SUMMARIZATION_LIMIT} items ..." when String candidate[(STRING_SUMMARIZATION_LIMIT - 1)..-1] = "... #{candidate.length - STRING_SUMMARIZATION_LIMIT} characters ..." else candidate end end end end end end
Version data entries
10 entries across 10 versions & 1 rubygems