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