lib/inch/cli/command/options/base_list.rb
module Inch
module CLI
module Command
module Options
class BaseList < Base
include API::Options::Filter::DefaultAttributeValues
attribute :visibility, DEFAULT_VISIBILITY
attribute :namespaces
attribute :undocumented
attribute :depth
attribute :show_all, false
alias_method :show_all?, :show_all
def parse(args)
opts = OptionParser.new
opts.banner = usage
descriptions.each do |text|
opts.separator ' ' + text
end
set_options(opts)
parse_yardopts_options(opts, args)
parse_options(opts, args)
@paths = get_paths(args)
end
def set_options(opts)
list_options(opts)
common_options(opts)
yardopts_options(opts)
end
protected
# Sets all list related options for the current Options object
#
# @param opts [OptionParser]
# @return [void]
def list_options(opts)
opts.separator ''
opts.separator 'List options:'
opts.on('--all', 'Show all objects in the output') do
@show_all = true
end
opts.on('--only-namespaces',
'Only show namespaces (classes, modules)') do
@namespaces = :only
end
opts.on('--no-namespaces',
'Only show namespace children (methods, constants, ' \
'attributes)') do
@namespaces = :none
end
opts.on('--no-public', 'Do not show public objects') do
set_visibility :public, false
end
opts.on('--no-protected', 'Do not show protected objects') do
set_visibility :protected, false
end
opts.on('--private', 'Show private objects') do
set_visibility :private, true
end
opts.on('--only-undocumented', 'Only show undocumented objects') do
@undocumented = :only
end
opts.on('--no-undocumented', 'Only show documented objects') do
@undocumented = :none
end
opts.on('--depth [DEPTH]',
'Only show objects up to a given DEPTH ' \
'in the class tree') do |depth|
@depth = depth.to_i
end
end
# Sets the visibility of a given +kind+ of objects
#
# @example
# set_visibility :private, false
# set_visibility :protected, true
#
# @param kind [Symbol] +:public+, +:protected:, or +:private+
# @param true_or_false [Boolean]
# @return [void]
def set_visibility(kind, true_or_false)
@visibility ||= visibility.dup # initialize with attribute default
if true_or_false
@visibility.push(kind)
else
@visibility.delete(kind)
end
end
end
end
end
end
end