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

Version Path
workato-connector-sdk-1.0.1 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.0.0 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.5.0 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.4.1 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.4.0 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.3.0 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.2.0 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.1.2 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.1.1 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-0.1.0 lib/workato/connector/sdk/summarize.rb