# File lib/hammer_cli/output/adapter/csv.rb, line 26 def self.create_cells(field_wrappers, data, formatters) results = [] field_wrappers.each do |field_wrapper| field = field_wrapper.field if field.is_a? Fields::Collection results = results + expand_collection(field, data, formatters) elsif field.is_a?(Fields::ContainerField) results = results + expand_container(field, data, formatters) else results << Cell.new(field_wrapper, data, formatters) end end return results end
# File lib/hammer_cli/output/adapter/csv.rb, line 54 def self.headers(cells, context) cells.map(&:field_wrapper).select { |fw| ! fw.is_id? || context[:show_ids] }.map(&:display_name) end
# File lib/hammer_cli/output/adapter/csv.rb, line 20 def initialize(field_wrapper, data, formatters) @field_wrapper = field_wrapper @data = data @formatters = formatters end
# File lib/hammer_cli/output/adapter/csv.rb, line 47 def self.values(headers, cells) headers.map do |header| cell = cells.find { |cell| cell.in_column?(header) } cell ? cell.formatted_value : '' end end
# File lib/hammer_cli/output/adapter/csv.rb, line 85 def self.data_for_field(field, data) HammerCLI::Output::Adapter::CSValues.data_for_field(field, data) end
# File lib/hammer_cli/output/adapter/csv.rb, line 65 def self.expand_collection(field, data, formatters) results = [] collection_data = data_for_field(field, data) || [] collection_data.each_with_index do |child_data, i| field.fields.each do |child_field| child_field_wrapper = FieldWrapper.new(child_field) child_field_wrapper.append_prefix(field.label) child_field_wrapper.append_suffix((i + 1).to_s) results << Cell.new(child_field_wrapper, collection_data[i] || {}, formatters) end end results end
# File lib/hammer_cli/output/adapter/csv.rb, line 79 def self.expand_container(field, data, formatters) child_fields = FieldWrapper.wrap(field.fields) child_fields.each{ |child| child.append_prefix(field.label) } create_cells(child_fields, data_for_field(field, data), formatters) end
# File lib/hammer_cli/output/adapter/csv.rb, line 41 def formatted_value WrapperFormatter.new( @formatters.formatter_for_type(@field_wrapper.field.class), @field_wrapper.field.parameters).format(value) end
# File lib/hammer_cli/output/adapter/csv.rb, line 59 def in_column?(header) self.field_wrapper.display_name == header end
# File lib/hammer_cli/output/adapter/csv.rb, line 89 def value Cell.data_for_field(@field_wrapper.field, data) end