class HammerCLI::Output::Adapter::Abstract

Public Class Methods

data_for_field(field, record) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 57
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
new(context={}, formatters={}, filters = {}) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 15
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

Public Instance Methods

features() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 9
def features
  return %i[] if tags.empty?

  tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) }
end
paginate_by_default?() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 23
def paginate_by_default?
  !!@paginate_by_default
end
print_collection(fields, collection, options = {}) 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
tags() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 5
def tags
  %i[]
end

Protected Instance Methods

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

  [Fields::Id]
end
context_for_fields() click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 100
def context_for_fields
  {
    show_ids: @context[:show_ids]
  }
end
data_for_field(field, record) click to toggle source
# File lib/hammer_cli/output/adapter/abstract.rb, line 72
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 81
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 53
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 76
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 96
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 108
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?(features) }
    # put serializers first
    map[type] = filtered.sort_by { |f| f.required_features.include?(:serialized) ? 0 : 1 }
    map
  end
end