class HammerCLI::Output::Definition

Attributes

fields[RW]

Public Class Methods

new() click to toggle source
# File lib/hammer_cli/output/definition.rb, line 5
def initialize
  @fields = []
end

Public Instance Methods

append(fields = nil, &block) click to toggle source
# File lib/hammer_cli/output/definition.rb, line 9
def append(fields = nil, &block)
  fields = [fields].compact unless fields.is_a?(Array)
  @fields += fields
  return @fields unless block_given?
  dsl = Dsl.new
  dsl.build(&block)
  @fields += dsl.fields
end
at(path = []) click to toggle source
# File lib/hammer_cli/output/definition.rb, line 28
def at(path = [])
  path = [path] unless path.is_a? Array
  return self if path.empty?

  field = find_field(path[0])

  unless field.respond_to?(:output_definition)
    raise ArgumentError, "Field #{path[0]} doesn't have nested output definition"
  end

  field.output_definition.at(path[1..-1])
end
clear() click to toggle source
# File lib/hammer_cli/output/definition.rb, line 41
def clear
  @fields = []
end
empty?() click to toggle source
# File lib/hammer_cli/output/definition.rb, line 45
def empty?
  @fields.empty?
end
find_field(field_id) click to toggle source
# File lib/hammer_cli/output/definition.rb, line 18
def find_field(field_id)
  @fields[field_index(field_id)]
end
insert(mode, field_id, fields = nil, &block) click to toggle source
# File lib/hammer_cli/output/definition.rb, line 22
def insert(mode, field_id, fields = nil, &block)
  definition = self.class.new
  definition.append(fields, &block)
  HammerCLI.insert_relative(@fields, mode, field_index(field_id), *definition.fields)
end

Private Instance Methods

field_index(field_id) click to toggle source
# File lib/hammer_cli/output/definition.rb, line 51
def field_index(field_id)
  index = @fields.find_index do |f|
    f.match_id?(field_id)
  end
  raise ArgumentError, "Field #{field_id} not found" if index.nil?
  index
end