Class: Kiba::Extend::Transforms::Merge::IncrementingField

Inherits:
Object
  • Object
show all
Defined in:
lib/kiba/extend/transforms/merge/incrementing_field.rb

Overview

Note:

This transform runs in memory, so for very large sources, it may take a long time or fail.

Merges numeric incrementing value into target field

Examples:

With defaults

# Used in pipeline as:
# transform Merge::IncrementingField, target: :inc
xform = Merge::IncrementingField.new(target: :inc)

input = [
  {foo: "a"},
  {foo: "b"},
  {foo: "c"},
  {foo: "d"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
  .map{ |row| row }
expected = [
  {foo: "a", inc: 1},
  {foo: "b", inc: 2},
  {foo: "c", inc: 3},
  {foo: "d", inc: 4}
]
expect(result).to eq(expected)

With custom start_val and increment_size

# Used in pipeline as:
# transform Merge::IncrementingField, target: :inc,
#   start_val: 10, increment_size: 5
xform = Merge::IncrementingField.new(target: :inc,
  start_val: 10, increment_size: 5)

input = [
  {foo: "a"},
  {foo: "b"},
  {foo: "c"},
  {foo: "d"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
  .map{ |row| row }
expected = [
  {foo: "a", inc: 10},
  {foo: "b", inc: 15},
  {foo: "c", inc: 20},
  {foo: "d", inc: 25}
]
expect(result).to eq(expected)

Instance Method Summary collapse

Constructor Details

#initialize(target:, start_val: 1, increment_size: 1) ⇒ IncrementingField

Returns a new instance of IncrementingField.

Parameters:

  • target (Symbol)

    target field in which to enter incrementing value

  • start_val (Integer) (defaults to: 1)
  • increment_size (Integer) (defaults to: 1)


60
61
62
63
64
65
# File 'lib/kiba/extend/transforms/merge/incrementing_field.rb', line 60

def initialize(target:, start_val: 1, increment_size: 1)
  @target = target
  @counter = start_val
  @increment_size = increment_size
  @rows = []
end

Instance Method Details

#closeObject



73
74
75
76
77
78
79
# File 'lib/kiba/extend/transforms/merge/incrementing_field.rb', line 73

def close
  rows.each do |row|
    row[target] = counter
    @counter += increment_size
    yield row
  end
end

#process(row) ⇒ Object

Parameters:

  • row (Hash{ Symbol => String, nil })


68
69
70
71
# File 'lib/kiba/extend/transforms/merge/incrementing_field.rb', line 68

def process(row)
  rows << row
  nil
end