class HammerCLI::Output::Adapter::Abstract

Public Class Methods

new(context={}, formatters={}, filters = {}) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 9
def initialize(context={}, formatters={}, filters = {})
  context[:verbosity] ||= HammerCLI::V_VERBOSE
  @context = context
  @formatters = HammerCLI::Output::Formatters::FormatterLibrary.new(filter_formatters(formatters))
  @paginate_by_default = true
  @filters = filters
end

Protected Class Methods

data_for_field(field, record) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 55
def self.data_for_field(field, record)
  path = field.path

  path.inject(record) do |record, path_key|
    return nil unless record && record.is_a?(Hash)
    if record.key?(path_key.to_sym)
      record[path_key.to_sym]
    elsif record.key?(path_key.to_s)
      record[path_key.to_s]
    else
      HammerCLI::Output::DataMissing.new
    end
  end
end

Public Instance Methods

paginate_by_default?() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 17
def paginate_by_default?
  !!@paginate_by_default
end
print_collection(fields, collection) click to toggle source
print_error(msg, details=nil, msg_params={}) click to toggle source
print_message(msg, msg_params={}) click to toggle source
print_record(fields, record) click to toggle source
reset_context() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 45
def reset_context
  @context.delete(:fields)
end
tags() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 5
def tags
  []
end

Protected Instance Methods

classes_filter() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 88
def classes_filter
  return [] if @context[:show_ids]

  [Fields::Id]
end
data_for_field(field, record) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 70
def data_for_field(field, record)
  Abstract.data_for_field(field, record)
end
field_filters() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 79
def field_filters
  {
    classes_filter: classes_filter,
    sets_filter: sets_filter
  }.merge(@filters) do |_, old_filter, new_filter|
    old_filter + new_filter
  end
end
filter_fields(fields) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 51
def filter_fields(fields)
  HammerCLI::Output::FieldFilter.new(fields, field_filters)
end
output_stream() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 74
def output_stream
  return @context[:output_file] if @context.has_key?(:output_file)
  $stdout
end
sets_filter() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 94
def sets_filter
  @context[:fields] || ['DEFAULT']
end

Private Instance Methods

filter_formatters(formatters_map) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 100
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