class HammerCLI::Output::Adapter::TreeStructure

Public Class Methods

new(context={}, formatters={}) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 4
def initialize(context={}, formatters={})
  super
  @paginate_by_default = false
end

Public Instance Methods

prepare_collection(fields, collection) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 15
def prepare_collection(fields, collection)
  collection.map do |element|
    render_fields(fields, element)
  end
end
prepare_message(msg, msg_params = {}) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 21
def prepare_message(msg, msg_params = {})
  data = {
    capitalize(:message) => msg.format(msg_params)
  }
  return data if msg_params.nil?

  id = msg_params['id'] || msg_params[:id]
  name = msg_params['name'] || msg_params[:name]

  data[capitalize(:id)] = id unless id.nil?
  data[capitalize(:name)] = name unless name.nil?
  data
end
tags() click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 9
def tags
  [
    :data
  ]
end

Protected Instance Methods

capitalize(string) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 101
def capitalize(string)
  capitalization = @context[:capitalization]
  return string if capitalization.nil?
  string.send(@context[:capitalization]) unless string.nil?
end
field_filter() click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 37
def field_filter
  filtered = []
  filtered << Fields::Id unless @context[:show_ids]
  HammerCLI::Output::FieldFilter.new(filtered)
end
map_data(data) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 86
def map_data(data)
  if data.any? { |d| d.key?(nil) }
    data.map! { |d| d.values.first }
  end
  data
end
numbered_data(data) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 93
def numbered_data(data)
  i = 0
  data.inject({}) do |hash, value|
    i += 1
    hash.merge(i => value)
  end
end
render_data(field, data) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 73
def render_data(field, data)
  data = data.map! { |d| d.transform_keys { |key| capitalize(key) } if d.is_a?(Hash) }
  if field.is_a?(Fields::Collection)
    if field.parameters[:numbered]
      numbered_data(data)
    else
      data
    end
  else
    data.first
  end
end
render_field(field, data) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 53
def render_field(field, data)
  if field.is_a? Fields::ContainerField
    data = [data] unless data.is_a? Array
    fields_data = data.map do |d|
      render_fields(field.fields, d)
    end
    render_data(field, map_data(fields_data))
  else
    formatter = @formatters.formatter_for_type(field.class)
    parameters = field.parameters
    parameters[:context] = @context
    if formatter
      data = formatter.format(data, field.parameters)
    end

    return data unless data.is_a?(Hash)
    data.transform_keys { |key| capitalize(key) }
  end
end
render_fields(fields, data) click to toggle source
# File lib/hammer_cli/output/adapter/tree_structure.rb, line 43
def render_fields(fields, data)
  fields = field_filter.filter(fields)
  fields = displayable_fields(fields, data)
  fields.reduce({}) do |hash, field|
    field_data = data_for_field(field, data)
    next unless field.display?(field_data)
    hash.update(capitalize(field.label) => render_field(field, field_data))
  end
end