Sha256: 72c0c3d953c4f6533bf39d45b4bbde534158be83b1b87e9097604595227d1acb

Contents?: true

Size: 1.74 KB

Versions: 14

Compression:

Stored size: 1.74 KB

Contents

# typed: true
# 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
        attr_reader :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

      private_constant :Summarize
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
workato-connector-sdk-1.3.14 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.13 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.12 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.11 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.10 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.9 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.8 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.7 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.6 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.5 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.4 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.3 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.2 lib/workato/connector/sdk/summarize.rb
workato-connector-sdk-1.3.1 lib/workato/connector/sdk/summarize.rb