From 312ae40401e058ab6e6fb803a80ebcf82d8f184d Mon Sep 17 00:00:00 2001 From: HAHWUL Date: Thu, 11 Jan 2024 00:05:07 +0900 Subject: [PATCH] Add only-* formats (#217) --- spec/unit_test/models/output_builder_spec.cr | 15 ++++++++++++++ src/models/noir.cr | 9 +++++++++ src/noir.cr | 2 +- src/output_builder/only-cookie.cr | 19 ++++++++++++++++++ src/output_builder/only-header.cr | 19 ++++++++++++++++++ src/output_builder/only-param.cr | 21 ++++++++++++++++++++ 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/output_builder/only-cookie.cr create mode 100644 src/output_builder/only-header.cr create mode 100644 src/output_builder/only-param.cr diff --git a/spec/unit_test/models/output_builder_spec.cr b/spec/unit_test/models/output_builder_spec.cr index 617c1315..69d994f3 100644 --- a/spec/unit_test/models/output_builder_spec.cr +++ b/spec/unit_test/models/output_builder_spec.cr @@ -46,4 +46,19 @@ describe "Initialize" do object = OutputBuilderOnlyUrl.new options object.output_file.should eq("output.json") end + + it "OutputBuilderOnlyParam" do + object = OutputBuilderOnlyParam.new options + object.output_file.should eq("output.json") + end + + it "OutputBuilderOnlyHeader" do + object = OutputBuilderOnlyHeader.new options + object.output_file.should eq("output.json") + end + + it "OutputBuilderOnlyCookie" do + object = OutputBuilderOnlyCookie.new options + object.output_file.should eq("output.json") + end end diff --git a/src/models/noir.cr b/src/models/noir.cr index b9e86bc2..d9628fe2 100644 --- a/src/models/noir.cr +++ b/src/models/noir.cr @@ -176,6 +176,15 @@ class NoirRunner when "only-url" builder = OutputBuilderOnlyUrl.new @options builder.print @endpoints + when "only-param" + builder = OutputBuilderOnlyParam.new @options + builder.print @endpoints + when "only-header" + builder = OutputBuilderOnlyHeader.new @options + builder.print @endpoints + when "only-cookie" + builder = OutputBuilderOnlyCookie.new @options + builder.print @endpoints else builder = OutputBuilderCommon.new @options builder.print @endpoints diff --git a/src/noir.cr b/src/noir.cr index a4d03237..47c6129f 100644 --- a/src/noir.cr +++ b/src/noir.cr @@ -20,7 +20,7 @@ OptionParser.parse do |parser| parser.separator "\n Output:".colorize(:blue) - parser.on "-f FORMAT", "--format json", "Set output format\n * plain json yaml markdown-table\n * curl httpie only-url\n * oas2 oas3" { |var| noir_options[:format] = var } + parser.on "-f FORMAT", "--format json", "Set output format\n * plain json yaml markdown-table\n * curl httpie oas2 oas3\n * only-url only-param only-header only-cookie" { |var| noir_options[:format] = var } parser.on "-o PATH", "--output out.txt", "Write result to file" { |var| noir_options[:output] = var } parser.on "--set-pvalue VALUE", "Specifies the value of the identified parameter" { |var| noir_options[:set_pvalue] = var } parser.on "--include-path", "Include file path in the plain result" do diff --git a/src/output_builder/only-cookie.cr b/src/output_builder/only-cookie.cr new file mode 100644 index 00000000..76ca42b4 --- /dev/null +++ b/src/output_builder/only-cookie.cr @@ -0,0 +1,19 @@ +require "../models/output_builder" +require "../models/endpoint" + +class OutputBuilderOnlyCookie < OutputBuilder + def print(endpoints : Array(Endpoint)) + cookies = [] of String + endpoints.each do |endpoint| + endpoint.params.each do |param| + if param.param_type == "cookie" + cookies << param.name + end + end + end + + cookies.uniq.each do |cookie| + puts cookie.colorize(:light_green).toggle(@is_color) + end + end +end diff --git a/src/output_builder/only-header.cr b/src/output_builder/only-header.cr new file mode 100644 index 00000000..d8eb97c8 --- /dev/null +++ b/src/output_builder/only-header.cr @@ -0,0 +1,19 @@ +require "../models/output_builder" +require "../models/endpoint" + +class OutputBuilderOnlyHeader < OutputBuilder + def print(endpoints : Array(Endpoint)) + headers = [] of String + endpoints.each do |endpoint| + endpoint.params.each do |param| + if param.param_type == "header" + headers << param.name + end + end + end + + headers.uniq.each do |header| + puts header.colorize(:light_green).toggle(@is_color) + end + end +end diff --git a/src/output_builder/only-param.cr b/src/output_builder/only-param.cr new file mode 100644 index 00000000..a6688765 --- /dev/null +++ b/src/output_builder/only-param.cr @@ -0,0 +1,21 @@ +require "../models/output_builder" +require "../models/endpoint" + +class OutputBuilderOnlyParam < OutputBuilder + def print(endpoints : Array(Endpoint)) + common_params = [] of String + targets = ["query", "json", "form"] + + endpoints.each do |endpoint| + endpoint.params.each do |param| + if targets.includes? param.param_type + common_params << param.name + end + end + end + + common_params.uniq.each do |common_param| + puts common_param.colorize(:light_green).toggle(@is_color) + end + end +end