Class: Kiba::Extend::Transforms::FilterRows::AnyFieldsPopulated

Inherits:
Object
  • Object
show all
Includes:
ActionArgumentable, Allable
Defined in:
lib/kiba/extend/transforms/filter_rows/any_fields_populated.rb

Overview

Keep or reject rows based on whether any of the given fields is populated. Blank strings and nils count as not populated.

Examples

Source data:

{a: 'a', b: 'b', c: 'c' },
{a: 'a', b: 'b', c: '' },
{a: '', b: nil, c: 'c' },
{a: '', b: 'b', c: 'c' },
{a: '', b: nil, c: nil },

Used in pipeline as:

transform FilterRows::AnyFieldsPopulated,
  action: :keep, fields: %i[a b]

Resulting data:

{a: 'a', b: 'b', c: 'c' },
{a: 'a', b: 'b', c: '' },
{a: '', b: 'b', c: 'c' }

Used in pipeline as:

transform FilterRows::AnyFieldsPopulated, action: :keep, fields: :all

Resulting data:

{a: 'a', b: 'b', c: 'c' },
{a: 'a', b: 'b', c: '' },
{a: '', b: nil, c: 'c' },
{a: '', b: 'b', c: 'c' }

Used in pipeline as:

transform FilterRows::AnyFieldsPopulated,
  action: :reject, fields: %i[a b]

Resulting data:

{a: '', b: nil, c: 'c' },
{a: '', b: nil, c: nil }

Since:

  • 2.9.0

Instance Method Summary collapse

Constructor Details

#initialize(action:, fields:, omit_from_all_fields: []) ⇒ AnyFieldsPopulated

Returns a new instance of AnyFieldsPopulated.

Parameters:

  • action (:keep, :reject)

    what to do with row matching criteria

  • fields (Array<Symbol>, :all)

    to check populated status in

  • 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

Since:

  • 2.9.0



76
77
78
79
80
81
# File 'lib/kiba/extend/transforms/filter_rows/any_fields_populated.rb', line 76

def initialize(action:, fields:, omit_from_all_fields: [])
  validate_action_argument(action)
  @action = action
  @fields = [fields].flatten
  @omit_from_all_fields = omit_from_all_fields
end

Instance Method Details

#process(row) ⇒ Object

Parameters:

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

Since:

  • 2.9.0



84
85
86
87
88
89
90
91
92
93
# File 'lib/kiba/extend/transforms/filter_rows/any_fields_populated.rb', line 84

def process(row)
  finalize_fields(row) unless fields_set

  case action
  when :keep
    row if any_populated?(row)
  when :reject
    row unless any_populated?(row)
  end
end