Sha256: 4736cd4f36a88b6081ab623b7cf2d4d4e10ed0e0ea3511bae0b7a1644af06e4b

Contents?: true

Size: 1.75 KB

Versions: 9

Compression:

Stored size: 1.75 KB

Contents

module HammerCLI::Output::Adapter

  class Abstract

    def tags
      []
    end

    def initialize(context={}, formatters={})
      @context = context
      @formatters = HammerCLI::Output::Formatters::FormatterLibrary.new(filter_formatters(formatters))
    end

    def print_message(msg, msg_params={})
      puts msg.format(msg_params)
    end

    def print_error(msg, details=nil, msg_params={})
      details = details.split("\n") if details.kind_of? String

      if details
        indent = "  "
        msg += ":\n"
        msg += indent + details.join("\n"+indent)
      end

      $stderr.puts msg.format(msg_params)
    end

    def print_record(fields, record)
      raise NotImplementedError
    end

    def print_collection(fields, collection)
      raise NotImplementedError
    end

    protected

    def field_filter
      HammerCLI::Output::FieldFilter.new
    end

    def self.data_for_field(field, record)
      path = field.path

      path.inject(record) do |record, path_key|
        if record && record.kind_of?(Hash) && record.has_key?(path_key.to_sym)
          record[path_key.to_sym]
        elsif record && record.kind_of?(Hash) && record.has_key?(path_key.to_s)
          record[path_key.to_s]
        else
          return nil
        end
      end
    end

    def data_for_field(field, record)
      Abstract.data_for_field(field, record)
    end

    private

    def filter_formatters(formatters_map)
      formatters_map ||= {}
      formatters_map.inject({}) do |map, (type, formatter_list)|
        # remove incompatible formatters
        filtered = formatter_list.select { |f| f.match?(tags) }
        # put serializers first
        map[type] = filtered.sort_by { |f| f.tags.include?(:flat) ? 0 : 1 }
        map
      end
    end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
hammer_cli-0.6.1 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.6.0 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.5.1 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.4.0 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.3.0 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.2.0 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.1.4 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.1.3 lib/hammer_cli/output/adapter/abstract.rb
hammer_cli-0.1.2 lib/hammer_cli/output/adapter/abstract.rb