Sha256: e833c7fa1418e8d4c6264301035dc8d8b741b150499d726d4c8e7007f3b749ff

Contents?: true

Size: 1.37 KB

Versions: 8

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

#
# Copyright (c) 2020-present, Blue Marble Payroll, LLC
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
#

module Burner
  module Library
    module Collection
      # Take an array of objects and call #values on each object.
      # If include_keys is true (it is false by default), then call #keys on the first
      # object and inject that as a "header" object.
      #
      # Expected Payload[register] input: array of objects.
      # Payload[register] output: An array of arrays.
      class Values < JobWithRegister
        attr_reader :include_keys

        def initialize(include_keys: false, name: '', register: DEFAULT_REGISTER)
          super(name: name, register: register)

          @include_keys = include_keys || false

          freeze
        end

        def perform(_output, payload)
          payload[register] = array(payload[register])
          keys = include_keys ? [keys(payload[register].first)] : []
          values = payload[register].map { |object| values(object) }
          payload[register] = keys + values
        end

        private

        def keys(object)
          object.respond_to?(:keys) ? object.keys : []
        end

        def values(object)
          object.respond_to?(:values) ? object.values : []
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
burner-1.12.0 lib/burner/library/collection/values.rb
burner-1.11.0 lib/burner/library/collection/values.rb
burner-1.10.0 lib/burner/library/collection/values.rb
burner-1.9.0 lib/burner/library/collection/values.rb
burner-1.9.0.pre.alpha lib/burner/library/collection/values.rb
burner-1.8.0 lib/burner/library/collection/values.rb
burner-1.7.0 lib/burner/library/collection/values.rb
burner-1.7.0.pre.alpha lib/burner/library/collection/values.rb