Sha256: 592b7f63f2d28f68130355f31b067bc127994ac284d9740ed7541280af1dc473

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

require 'csv'
if CSV.const_defined? :Reader
  # Ruby 1.8 compatible
  require 'fastercsv'
  Object.send(:remove_const, :CSV)
  CSV = FasterCSV
else
  # CSV is now FasterCSV in ruby 1.9
end

module HammerCLI::Output::Adapter

  class CSValues < Abstract

    def tags
      [:flat]
    end

    def print_record(fields, record)
      print_collection(fields, [record].flatten(1))
    end

    def print_collection(fields, collection)
      csv_string = generate do |csv|
        # labels
        csv << fields.select{ |f| !(f.class <= Fields::Id) || @context[:show_ids] }.map { |f| f.label }
        # data
        collection.each do |d|
          csv << fields.inject([]) do |row, f|
            unless f.class <= Fields::Id && !@context[:show_ids]
              value = data_for_field(f, d)
              formatter = @formatters.formatter_for_type(f.class)
              row << ((formatter ? formatter.format(value) : value) || '')
            end
            row
          end
        end
      end
      puts csv_string
    end

    def print_message(msg, msg_params={})
      csv_string = generate do |csv|
        id = msg_params["id"] || msg_params[:id]
        name = msg_params["name"] || msg_params[:name]

        labels = [_("Message")]
        data = [msg.format(msg_params)]

        if id
          labels << _("Id")
          data << id
        end

        if name
          labels << _("Name")
          data << name
        end

        csv << labels
        csv << data
      end
      puts csv_string
    end

    private

    def generate(&block)
      CSV.generate(
        :col_sep => @context[:csv_separator] || ',',
        :encoding => 'utf-8',
        &block
      )
    end

  end

  HammerCLI::Output::Output.register_adapter(:csv, CSValues)

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hammer_cli-0.1.1 lib/hammer_cli/output/adapter/csv.rb
hammer_cli-0.1.0 lib/hammer_cli/output/adapter/csv.rb