# frozen_string_literal: true
#
# Copyright (c) 2021-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# ronin-core is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ronin-core is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ronin-core. If not, see .
#
require 'ronin/core/params/types'
require 'command_kit/printing/tables'
module Ronin
module Core
module CLI
module Printing
#
# Handles printing {Core::Params::Mixin params} defined on a class.
#
module Params
include CommandKit::Printing::Tables
# The params table header.
PARAM_TABLE_HEADER = %w[Name Type Required Default Description]
#
# Prints the params defined in the given class.
#
# @param [Class] klass
# The class which contains the params.
#
def print_params(klass)
return if klass.params.empty?
rows = []
klass.params.each do |name,param|
param_type = param.type.class.name.split('::').last
required = if param.required? then 'Yes'
else 'No'
end
default = param.default_value
description = param.desc
rows << [name, param_type, required, default, description]
end
puts "Params:"
puts
indent do
print_table(rows,header: PARAM_TABLE_HEADER, border: :line)
end
puts
end
#
# Returns a placeholder usage value for the given param.
#
# @param [Core::Params::Param] param
# The param.
#
# @return [String]
# The placeholder usage value.
#
# @note
# This method is primarily used to help build example commands
# that accept certain params.
#
# @since 0.2.0
#
def param_usage(param)
case param.type
when Core::Params::Types::Boolean then 'BOOL'
when Core::Params::Types::Integer then 'NUM'
when Core::Params::Types::Float then 'FLOAT'
when Core::Params::Types::Regexp then '/REGEX/'
when Core::Params::Types::URI then 'URL'
else
param.name.upcase
end
end
end
end
end
end
end