lib/unipept/formatters.rb in unipept-0.5.7 vs lib/unipept/formatters.rb in unipept-0.6.1
- old
+ new
@@ -48,43 +48,53 @@
class CSVFormatter < Formatter
require 'csv'
register :csv
- def header(data, fasta_mapper = nil)
+ def header(data, fasta_input = nil)
CSV.generate do |csv|
first = data.first
if first.kind_of? Array
first = first.first
end
- if fasta_mapper
+ if fasta_input
csv << (['fasta_header'] + first.keys).map(&:to_s) if first
else
csv << first.keys.map(&:to_s) if first
end
end
end
- def format(data, fasta_mapper = nil)
+ def format(data, fasta_input = nil)
CSV.generate do |csv|
- data.each do |o|
- if o.kind_of? Array
- o.each do |h|
- if fasta_mapper
- extra_key = [fasta_mapper[h.values.first]]
- csv << (extra_key + h.values).map { |v| v == "" ? nil : v }
- else
- csv << h.values.map { |v| v == "" ? nil : v }
+
+ if fasta_input
+ # Process the output from {key1: value1, key2: value2, ...}
+ # to {value => {key1: value1, key2: value2, ...}}
+ data_dict = {}
+ data.each do |d|
+ data_dict[d.values.first.to_s] ||= []
+ data_dict[d.values.first.to_s] << d
+ end
+
+ # Iterate over the input
+ fasta_input.each do |input_pair|
+ fasta_header, id = input_pair
+
+ # Retrieve the corresponding API result (if any)
+ unless data_dict[id].nil?
+ data_dict[id].each do |r|
+ csv << ([fasta_header] + r.values).map { |v| v == "" ? nil : v }
end
end
- else
- if fasta_mapper
- extra_key = [fasta_mapper[o.values.first]]
- csv << (extra_key + o.values).map { |v| v == "" ? nil : v }
- else
- csv << o.values.map { |v| v == "" ? nil : v }
- end
end
+
+ else
+
+ data.each do |o|
+ csv << o.values.map { |v| v == "" ? nil : v }
+ end
+
end
end
end
end