Skip to content

Commit

Permalink
Fix bug scanning multiple rows matching a path.
Browse files Browse the repository at this point in the history
  • Loading branch information
bpvickers committed Feb 12, 2018
1 parent 50f66d9 commit 51dfcf8
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions lib/csv_decision/scan.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,25 +52,28 @@ def self.scan_accumulate(input:, decision:, input_hashes:)
data = input_hashes.data(decision: decision, path: path, input: input)
next if data == {}

result = scan(rows: Array(rows), input: data, final: result, decision: decision)
result = scan(rows: rows, input: data, final: result, decision: decision)
end

result
end
private_class_method :scan_accumulate

def self.scan(rows:, input:, final:, decision:)
# Note that +rows+ must be enclosed in an array for this method to work.
result = decision.index_scan_accumulate(scan_cols: input[:scan_cols],
hash: input[:hash],
index_rows: rows)
final = accumulate(final: final, result: result) if result
index_rows: [rows])

# Accumulate this potentially multi-row result into the final result.
final = accumulate(final: final, result: result) if result.present?

final
end
private_class_method :scan

def self.accumulate(final:, result:)
return result if final.empty?
return result if final == {}

final.each_pair { |key, value| final[key] = Array(value) + Array(result[key]) }
final
Expand Down

0 comments on commit 51dfcf8

Please sign in to comment.