class ReindeerETL::Transforms::ResponseStatus

Swap out old error codes with REP_CODE, add new columns with error codes

Constants

ERROR_CODES
NO_CODE
REP_CODE

What to replace a code with if one is found

REP_COL_PREFIX

Public Class Methods

new(opts={}) click to toggle source
# File lib/reindeer-etl/transforms/response_status.rb, line 12
def initialize opts={}
    @except_cols = (opts[:except] || []).to_set
end

Public Instance Methods

process(row) click to toggle source
# File lib/reindeer-etl/transforms/response_status.rb, line 16
def process(row)
    row_keys = row.keys.to_set
    unless @except_cols.subset? row_keys
        x_cols = (@except_cols - row_keys).to_a
        raise ReindeerETL::Errors::RecordInvalid.new("Missing except keys: #{x_cols}")
    end
    oldrow = row.dup
    (row_keys - @except_cols).each do |k|
        new_col = "#{REP_COL_PREFIX}#{k.gsub('_','')}" 
        if row_keys.include? new_col 
            raise ReindeerETL::Errors::RecordInvalid.new("Column #{new_col} already exists")
        end
        val = row[k]
        if _has_code?(val)
            row[k] = REP_CODE
            ecode = val.to_s
        else
            ecode = NO_CODE
        end
        row[new_col] = "E#{ecode}E"
    end

    row
end

Private Instance Methods

_has_code?(val) click to toggle source
# File lib/reindeer-etl/transforms/response_status.rb, line 42
def _has_code? val
    ERROR_CODES.include?(val.to_s)
end