Sha256: 470d3d54967fcc6f2e87857f968029fdaa91a4716919dd174372fedb792851a0
Contents?: true
Size: 1.86 KB
Versions: 2
Compression:
Stored size: 1.86 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. # require_relative 'transform/attribute' require_relative 'transform/attribute_renderer' module Burner class Jobs module Collection # Iterate over all objects and return a new set of transformed objects. Under the hood # this uses the Realize library: https://github.com/bluemarblepayroll/realize # Expected Payload#value input: array of objects. # Payload#value output: An array of objects. class Transform < Job BLANK = '' attr_reader :attribute_renderers, :exclusive, :resolver def initialize(name:, attributes: [], exclusive: false, separator: BLANK) super(name: name) @resolver = Objectable.resolver(separator: separator) @exclusive = exclusive || false @attribute_renderers = Attribute.array(attributes) .map { |a| AttributeRenderer.new(a, resolver) } freeze end def perform(output, payload) payload.value = (payload.value || []).map { |row| transform(row, payload.time) } attr_count = attribute_renderers.length row_count = payload.value.length output.detail("Transformed #{attr_count} attributes(s) for #{row_count} row(s)") nil end private def transform(row, time) outgoing_row = exclusive ? {} : row attribute_renderers.each_with_object(outgoing_row) do |attribute_renderer, memo| value = attribute_renderer.transform(row, time) resolver.set(memo, attribute_renderer.key, value) end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
burner-1.0.0.pre.alpha.5 | lib/burner/jobs/collection/transform.rb |
burner-1.0.0.pre.alpha.4 | lib/burner/jobs/collection/transform.rb |