Method: Remi::Transform::DataFrameSieve#transform

Defined in:
lib/remi/transform.rb

#transform(row) ⇒ Object

Raises:

  • (ArgumentError)


671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
# File 'lib/remi/transform.rb', line 671

def transform(row)
  sieve_keys = @sieve_table.first.index.to_a
  sieve_result_key = sieve_keys.pop

  raise ArgumentError, "#{sieve_keys - row.source_keys} not found in row" unless (sieve_keys - row.source_keys).size == 0

  @sieve_table.each.find do |sieve_row|
    match_row = true
    sieve_keys.each do |sieve_key|
      match_value = if sieve_row[sieve_key].is_a?(Regexp)
                      !!sieve_row[sieve_key].match(row[sieve_key])
                    else
                      sieve_row[sieve_key] == row[sieve_key]
                    end

      match_row &&= sieve_row[sieve_key].nil? || match_value
    end
    match_row
  end[sieve_result_key]
end