Class: Kiba::Extend::Transforms::Delete::FieldValueConditional

Inherits:
Object
  • Object
show all
Includes:
BooleanLambdaParamable
Defined in:
lib/kiba/extend/transforms/delete/field_value_conditional.rb

Overview

Delete a field value if the arbitrary Lambda passed in evaluates to true

Examples:

Without delim

xform = Delete::FieldValueConditional.new(
  fields: %i[a b],
  lambda: ->(val, row) { row[:c] == val }
)

input = [
  {a: nil, b: "", c: "c"},
  {a: "c", b: "b", c: "c"},
  {a: "a|c", b: "c", c: "c"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
  .map{ |row| row }
expected = [
  {a: nil, b: nil, c: "c"},
  {a: nil, b: "b", c: "c"},
  {a: "a|c", b: nil, c: "c"}
]
expect(result).to eq(expected)

With delim

xform = Delete::FieldValueConditional.new(
  fields: %i[a b],
  lambda: ->(val, row) { row[:c] == val },
  delim: "|"
)

input = [
  {a: nil, b: "", c: "c"},
  {a: "c", b: "b", c: "c"},
  {a: "a|c", b: "c", c: "c"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
  .map{ |row| row }
expected = [
  {a: nil, b: nil, c: "c"},
  {a: nil, b: "b", c: "c"},
  {a: "a", b: nil, c: "c"}
]
expect(result).to eq(expected)

Instance Method Summary collapse

Methods included from BooleanLambdaParamable

included, #lambda_tested, #test_lambda

Constructor Details

#initialize(fields:, lambda:, delim: nil) ⇒ FieldValueConditional

Returns a new instance of FieldValueConditional.

Parameters:

  • fields (Array<Symbol>, Symbol)

    field(s) to delete from

  • lambda (Lambda)

    with one parameter for row to be passed in through. The Lambda must take val and row positional arguments and evaulate to/return TrueClass or FalseClass

  • delim (nil, String) (defaults to: nil)

    if provided, turns on multivalue mode; each whole field value is split into values, each of which is sent as val to the lambda



61
62
63
64
65
66
# File 'lib/kiba/extend/transforms/delete/field_value_conditional.rb', line 61

def initialize(fields:, lambda:, delim: nil)
  @fields = [fields].flatten
  @lambda = lambda
  @multival = delim ? true : false
  @delim = delim || Kiba::Extend.delim
end

Instance Method Details

#process(row) ⇒ Object

Parameters:

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

Raises:



72
73
74
75
76
77
# File 'lib/kiba/extend/transforms/delete/field_value_conditional.rb', line 72

def process(row)
  test_lambda(["foo", row]) unless lambda_tested

  fields.each { |field| row[field] = delete_from_field(row, field) }
  row
end