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 36 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 49 def clear @fields = [] end
empty?()
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 53 def empty? @fields.empty? end
field_sets()
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 57 def field_sets nested_fields_sets(@fields).uniq.sort 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 30 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
sets_table()
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 61 def sets_table fields_col_size = max_label_length || _('Fields').size fields_col = normalize_column(fields_col_size, _('Fields'), centralize: true) fields_col += ' ' unless (fields_col_size - fields_col.size).zero? header_bits = [fields_col] hline_bits = ['-' * fields_col_size] field_sets.map do |set| header_bits << normalize_column(set.size, set) hline_bits << '-' * set.size end rows_bits = fields_row(@fields, field_sets, fields_col_size) line = "+-#{hline_bits.join('-+-')}-+\n" table = line table += "| #{header_bits.join(' | ')} |\n" table += line table += "#{rows_bits.join("\n")}\n" table += line table end
update_field_sets(set_names, field_ids)
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 22 def update_field_sets(set_names, field_ids) set_names = [set_names] unless set_names.is_a?(Array) field_ids = [field_ids] unless field_ids.is_a?(Array) field_ids.each do |field_id| find_field(field_id).sets = find_field(field_id).sets.concat(set_names).uniq end end
Private Instance Methods
field_index(field_id)
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 135 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
field_labels(fields, full_labels: false)
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 118 def field_labels(fields, full_labels: false) fields.each_with_object([]) do |field, labels| label = full_labels ? field.full_label : field.label next labels << label unless field.respond_to?(:fields) labels.concat(field_labels(field.fields, full_labels: full_labels)) end end
fields_row(fields, sets, fields_col_size)
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 103 def fields_row(fields, sets, fields_col_size) fields.each_with_object([]) do |field, rows| next rows << fields_row(field.fields, sets, fields_col_size) if field.respond_to?(:fields) row = [normalize_column(fields_col_size, field.full_label)] sets.each do |set| mark = field.sets.include?(set) ? 'x' : ' ' column = normalize_column(set.size, mark, centralize: true) column += ' ' unless (set.size - column.size).zero? row << column end rows << "| #{row.join(' | ')} |" end end
max_label_length()
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 83 def max_label_length field_labels(@fields, full_labels: true).map(&:size).max end
nested_fields_sets(fields)
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 127 def nested_fields_sets(fields) fields.map do |field| next field.sets unless field.respond_to?(:fields) nested_fields_sets(field.fields) end.flatten end
normalize_column(width, col, centralize: false)
click to toggle source
# File lib/hammer_cli/output/definition.rb, line 87 def normalize_column(width, col, centralize: false) padding = width - HammerCLI::Output::Utils.real_length(col) if padding >= 0 if centralize padding /= 2 col.prepend(' ' * padding) end col += (' ' * padding) else col, real_len = HammerCLI::Output::Utils.real_truncate(col, width - 3) col += '...' col += ' ' if real_len < (width - 3) end col end