Modify an existing command

Modification of output fields

Each command (as well as each field) might have its own output definition. You can modify the output definition of existing command or a specific field of that command by following output definition interface:

HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
  # Appends fields to the end.
  # Where:
  #   fields is one or more existing fields
  #   block is block of code with new fields
  definition.append(fields) do
    label
    field
    collection
  end
  # Inserts one or more fields.
  # Where:
  #   :mode is one of [:before, :after, :replace]
  #   :id is field's id or key. Field's label can be used if field does not
  # have id
  #   fields is one or more existing fields
  #   block is block of code with new fields
  definition.insert(:mode, :id, fields) do
    label
    field
    collection
  end
  # Returns output definition of the command or field specified with path.
  # Where:
  #   path is an Array of field's :key or/and :id or/and 'label'
  definition.at(path)
  # Returns field from current output definition.
  definition.find_field(:id)
  # Finds and adds fields to a set (creates a new one if the set doesn't exist).
  # Where:
  #   sets is an Array of String with set names
  #   fields is an Array of field's :key or/and :id or/and 'label'
  definition.update_field_sets(sets, fields)
  # Deletes all fields from current output definition.
  definition.clear
end

Examples

# Append some fields to the end
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                     definition.at(_('Collection Field Label'))
                                               .append do
                                                 field :value3, _('Value 3')
                                               end
                                    end
# Change field's label
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                      definition.at(:path)
                                      .find_field(:id).label = _('New label')
                                    end
# Update fields in a field set
# Adds fields with :field_id and 'My field' to 'SET' set
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                      definition.at(:path)
                                      .update_field_sets('SET', [:field_id, 'My field'])
                                    end
# Expand a field with new definition
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                      definition.at([_('some'), :path])
                                      .insert(:replace, :not_container_field_id) do
                                        field nil, _('Label with new fields'), Fields::Label, id: :now_container_field_id do
                                        field :new_field1, _('New field 1')
                                        field :new_field2, _('New field 2')
                                        end
                                      end
                                    end
# Insert a new field after specific field
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                     definition.at([_('some'), :path])
                                     .insert(:after, :other_field_id, [Fields::Field.new(label: _('My field'), id: :my_field_id)])
                                    end
# Insert a new field before specific field
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                      definition.insert(:before, :other_field_id,
                                        Fields::Field.new(label: _('My field'), id: :my_field_id))
                                    end
# Remove field
HammerCLIForeman::Host::InfoCommand.extend_output_definition do |definition|
                                      definition.insert(:replace, :field_id) do; end
                                    end