lib/codeowners/cli.rb in codeowners-0.0.1 vs lib/codeowners/cli.rb in codeowners-0.0.2

- old
+ new

@@ -53,20 +53,46 @@ private_constant :DEFAULT_BASE_DIRECTORY DEFAULT_CODEOWNERS_PATH = ::File.join(".github", "CODEOWNERS").freeze private_constant :DEFAULT_CODEOWNERS_PATH - desc "List code contributors for a file" + FORMAT_MAPPING = { "string" => "to_s", "csv" => "to_csv" }.freeze + private_constant :FORMAT_MAPPING - argument :file, required: true, desc: "File to check" + FORMAT_VALUES = FORMAT_MAPPING.keys.freeze + private_constant :FORMAT_VALUES + DEFAULT_FORMAT = FORMAT_VALUES.first + private_constant :DEFAULT_FORMAT + + DEFAULT_DEBUG = false + private_constant :DEFAULT_DEBUG + + desc "List code contributors for a file (or a pattern)" + + argument :file, required: true, desc: "File (or pattern) to check" + option :base_directory, type: :string, default: DEFAULT_BASE_DIRECTORY, desc: "Base directory" + option :format, type: :string, default: DEFAULT_FORMAT, values: FORMAT_VALUES, desc: "Output format" + option :debug, type: :boolean, default: DEFAULT_DEBUG, desc: "Print debug information to stdout" - def call(file:, base_directory:, **) - result = Codeowners::ListContributors.new(base_directory).call(file) + example [ + "path/to/file.rb # file", + "'path/to/**/*.rb' # pattern" + ] + + def call(file:, base_directory:, format:, debug:, **) + result = Codeowners::ListContributors.new(base_directory).call(file, debug) exit(1) unless result.successful? - out.puts result.to_s + out.puts output(result, format) + end + + private + + def output(result, format) + method_name = FORMAT_MAPPING.fetch(format) + result.public_send(method_name.to_sym) end end register "version", Version, aliases: ["v", "-v", "--version"] register "list", List