diff --git a/app/cmd/doc.go b/app/cmd/doc.go new file mode 100644 index 0000000000000000000000000000000000000000..797eb39509c13fd7e33288317e8d313e309d4d95 --- /dev/null +++ b/app/cmd/doc.go @@ -0,0 +1,57 @@ +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" + "github.com/spf13/cobra/doc" + "path" + "path/filepath" + "strings" + "time" +) + +func init() { + rootCmd.AddCommand(docCmd) +} + +const ( + gendocFrontmatterTemplate = `--- +date: %s +title: "%s" +anchor: %s +url: %s +--- +` +) + +var docCmd = &cobra.Command{ + Use: "doc", + Short: "Genereate document", + Long: `Genereate document`, + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.Help() + return + } + + now := time.Now().Format(time.RFC3339) + prepender := func(filename string) string { + name := filepath.Base(filename) + base := strings.TrimSuffix(name, path.Ext(name)) + url := "/commands/" + strings.ToLower(base) + "/" + return fmt.Sprintf(gendocFrontmatterTemplate, now, strings.Replace(base, "_", " ", -1), base, url) + } + + linkHandler := func(name string) string { + base := strings.TrimSuffix(name, path.Ext(name)) + return "/commands/" + strings.ToLower(base) + "/" + } + + outputDir := args[0] + + err := doc.GenMarkdownTreeCustom(rootCmd, outputDir, prepender, linkHandler) + if err != nil { + cmd.PrintErr(err) + } + }, +} diff --git a/app/cmd/doc_test.go b/app/cmd/doc_test.go new file mode 100644 index 0000000000000000000000000000000000000000..6f62df916a2bfbcdae560c5c4b4ced6207867290 --- /dev/null +++ b/app/cmd/doc_test.go @@ -0,0 +1,61 @@ +package cmd + +import ( + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "github.com/spf13/cobra" + "bytes" + "os" + "io/ioutil" + "path/filepath" +) + +var _ = Describe("doc command test", func() { + var ( + ctrl *gomock.Controller + ) + + BeforeEach(func() { + ctrl = gomock.NewController(GinkgoT()) + config = nil + }) + + AfterEach(func() { + config = nil + ctrl.Finish() + }) + + Context("basic test", func() { + It("lack of arguments", func() { + buf := new(bytes.Buffer) + rootCmd.SetOutput(buf) + + docCmd.SetHelpFunc(func(cmd *cobra.Command, _ []string) { + cmd.Print("help") + }) + + rootCmd.SetArgs([]string{"doc"}) + _, err := rootCmd.ExecuteC() + Expect(err).To(BeNil()) + Expect(buf.String()).To(Equal("help")) + }) + + It("should success", func(){ + buf := new(bytes.Buffer) + rootCmd.SetOutput(buf) + + tmpdir, err := ioutil.TempDir("", "test-gen-cmd-tree") + Expect(err).To(BeNil()) + defer os.RemoveAll(tmpdir) + + rootCmd.SetArgs([]string{"doc", tmpdir}) + _, err = rootCmd.ExecuteC() + Expect(err).To(BeNil()) + Expect(buf.String()).To(Equal("")) + + _, err = os.Stat(filepath.Join(tmpdir, "jcli_doc.md")) + Expect(err).To(BeNil()) + }) + }) +}) diff --git a/go.sum b/go.sum index df4871509e8588866e8cdd4bd6b133fabcc2db9d..089a1a653b953cc8cf2d8a6c08c8e32dc418705b 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,7 @@ github.com/atotto/clipboard v0.1.2/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -55,6 +56,7 @@ github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=