Class: Kiba::Extend::Transforms::Fcar::Helpers::SumCollatedOccurrences

Inherits:
Object
  • Object
show all
Includes:
SingleWarnable
Defined in:
lib/kiba/extend/transforms/fcar/helpers/sum_collated_occurrences.rb

Overview

Splits on delim, converts to numbers, replaces with sum of numbers

If any value has anything other than digits, returns original value and puts a warning.

Examples:

With defaults

# Used in pipeline as:
# transform Fcar::Helpers::SumCollatedOccurrences

xform = Fcar::Helpers::SumCollatedOccurrences.new
input = [
  {occurrences: "5"},
  {occurrences: "5////5"},
  {occurrences: "alpha"}
]
result = input.map{ |row| xform.process(row) }
expected = [
  {occurrences: 5},
  {occurrences: 10},
  {occurrences: "alpha"}
]
expect(result).to eq(expected)

Instance Method Summary collapse

Methods included from SingleWarnable

single_warnings

Constructor Details

#initialize(field: :occurrences, delim: "////") ⇒ SumCollatedOccurrences

Returns a new instance of SumCollatedOccurrences.

Parameters:

  • field (Symbol) (defaults to: :occurrences)
  • delim (String) (defaults to: "////")


35
36
37
38
39
# File 'lib/kiba/extend/transforms/fcar/helpers/sum_collated_occurrences.rb', line 35

def initialize(field: :occurrences, delim: "////")
  @field = field
  @delim = delim
  setup_single_warning
end

Instance Method Details

#process(row) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/kiba/extend/transforms/fcar/helpers/sum_collated_occurrences.rb', line 41

def process(row)
  fieldval = row[field]
  return row if fieldval.blank?

  vals = fieldval.split(delim)

  if valid?(vals)
    row[field] = vals.map(&:to_i).sum
  else
    add_single_warning(
      "#{self.class.name}: Non-numeric value(s) in #{field}"
    )
  end

  row
end