Class: Kiba::Extend::Transforms::Prepend::ToFieldValue

Inherits:
Object
  • Object
show all
Includes:
MultivalPlusDelimDeprecatable
Defined in:
lib/kiba/extend/transforms/prepend/to_field_value.rb

Overview

Adds the specified value to the specified field

If target field value is blank, it is left blank

Examples:

Treated as single value (default)

# Used in pipeline as:
# transform Prepend::ToFieldValue, field: :name, value: 'aka: '

xform = Prepend::ToFieldValue.new(field: :name, value: 'aka: ')
input = [
    {name: 'Weddy'},
    {name: 'Kernel|Zipper'},
    {name: nil},
    {name: ''}
  ]
result = input.map{ |row| xform.process(row) }
expected = [
    {name: 'aka: Weddy'},
    {name: 'aka: Kernel|Zipper'},
    {name: nil},
    {name: ''}
  ]
expect(result).to eq(expected)

Treated as multivalue

# Used in pipeline as:
# transform Prepend::ToFieldValue, field: :name, value: 'aka: ',
#   multival: true, delim: '|'

xform = Prepend::ToFieldValue.new(field: :name, value: 'aka: ',
  multival: true, delim: '|')
input = [
    {name: 'Weddy'},
    {name: 'Kernel|Zipper'},
    {name: nil},
    {name: ''}
  ]
result = input.map{ |row| xform.process(row) }
expected = [
    {name: 'aka: Weddy'},
    {name: 'aka: Kernel|aka: Zipper'},
    {name: nil},
    {name: ''}
  ]
expect(result).to eq(expected)

Instance Method Summary collapse

Methods included from MultivalPlusDelimDeprecatable

#set_multival

Constructor Details

#initialize(field:, value:, multival: omitted = true, delim: nil) ⇒ ToFieldValue

Returns a new instance of ToFieldValue.

Parameters:

  • field (Symbol)

    The field to prepend to

  • value (String)

    The value to be prepended

  • multival (Boolean) (defaults to: omitted = true)

    Whether prepend to multiple values

  • delim (String) (defaults to: nil)

    for splitting value if multival



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/kiba/extend/transforms/prepend/to_field_value.rb', line 59

def initialize(field:, value:, multival: omitted = true,
  delim: nil)
  @field = field
  @value = value
  @multival = set_multival(multival, omitted, self)
  if delim.nil?
    msg = "If you are expecting Kiba::Extend.delim to be used as "\
      "default delimiter, please pass the `delim` explicitly. In "\
      "a future release of kiba-extend, the `delim` value will "\
      "no longer default to Kiba::Extend.delim."
    warn("#{Kiba::Extend.warning_label}:\n"\
       "  #{self.class}: #{msg}")
  end
  @delim = delim || Kiba::Extend.delim
end

Instance Method Details

#process(row) ⇒ Object

Parameters:

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


76
77
78
79
80
81
82
83
84
85
# File 'lib/kiba/extend/transforms/prepend/to_field_value.rb', line 76

def process(row)
  fieldval = row.fetch(field, nil)
  return row if fieldval.blank?

  fieldvals = multival ? fieldval.split(delim) : [fieldval]
  row[field] = fieldvals.map do |fieldval|
    "#{value}#{fieldval}"
  end.join(delim)
  row
end