Class: Kiba::Extend::Transforms::Delete::EmptyFieldValues

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

Overview

Note:

Only useful for multi-valued fields

Deletes any empty values from the field. Supports usenull = true to treat the value of Kiba::Extend.nullvalue as empty

Examples

Assuming Kiba::Extend.nullvalue = %NULLVALUE%, and input table:

| data             |
|------------------|
| abc;;;d e f      |
| ;;abc            |
| def;;;;          |
| ;;;;;            |
| ;;;%NULLVALUE%;; |
|                  |
| nil              |

Used in pipeline as:

transform Delete::EmptyFieldValues, fields: [:data], sep: ';'

Results in:

| data        |
|-------------|
| abc;d e f   |
| abc         |
| def         |
|             |
| %NULLVALUE% |
|             |
| nil         |

Used in pipeline as:

transform Delete::EmptyFieldValues, fields: [:data], sep: ';',
  usenull: true

Results in:

| data      |
|-----------|
| abc;d e f |
| abc       |
| def       |
|           |
|           |
|           |
| nil       |

Instance Method Summary collapse

Constructor Details

#initialize(fields:, sep: nil, delim: nil, usenull: false, omit_from_all_fields: []) ⇒ EmptyFieldValues

Note:

sep will be removed in a future version. DO NOT USE

Returns a new instance of EmptyFieldValues.

Parameters:

  • fields (Array<Symbol>, Symbol) —

    field(s) to delete from

  • sep (String) (defaults to: nil) —

    DEPRECATED; DO NOT USE

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

    on which to split multivalued fields. Defaults to Kiba::Extend.delim if not provided.

  • usenull (Boolean) (defaults to: false) —

    whether to treat Kiba::Extend.nullvalue string as an empty value

  • omit_from_all_fields (Array<Symbol>) (defaults to: []) —

    fields to omit from inclusion in “all” fields; does nothing if individual field values are passed in



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/kiba/extend/transforms/delete/empty_field_values.rb', line 82

def initialize(fields:, sep: nil, delim: nil, usenull: false,
  omit_from_all_fields: [])
  @fields = [fields].flatten
  @usenull = usenull
  @omit_from_all_fields = omit_from_all_fields
  if sep && delim
    msg = "Do not use both `sep` and `delim`. Prefer `delim`"
    puts Kiba::Extend.warn(msg)
  elsif sep
    msg = "The `sep` keyword is being deprecated in a future "\
      "version. Change it to `delim` in your ETL code."
    puts Kiba::Extend.warn(msg)
    @delim = sep
  else
    @delim = delim || Kiba::Extend.delim
  end
end

Instance Method Details

#process(row) ⇒ Object

Parameters:

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


102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/kiba/extend/transforms/delete/empty_field_values.rb', line 102

def process(row)
  finalize_fields(row) unless fields_set

  fields.each do |field|
    val = row[field]
    next if val.blank?

    row[field] = val.split(delim)
      .compact
      .reject { |str| Helpers.empty?(str, usenull) }
      .join(delim)
  end
  row
end