From a1727491e1984aa82de8db1136504b04a6af0e13 Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 12:35:42 +0900 Subject: [PATCH 1/8] =?UTF-8?q?itemsPushCmd=20=E3=82=92=E5=AE=9A=E7=BE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/qiita/flags.go | 9 +++++++++ cmd/qiita/items.go | 9 +++++++++ cmd/qiita/root.go | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/cmd/qiita/flags.go b/cmd/qiita/flags.go index 5c7aa6e..18a05cf 100644 --- a/cmd/qiita/flags.go +++ b/cmd/qiita/flags.go @@ -168,6 +168,15 @@ var ( } ) +// items push +var ( + // --write + flagItemsPushWrite = &flags.Bool{Flag: &flags.Flag{ + Name: "write", + Description: "write information about the pushed item to a file", + }} +) + // items pull var ( // --out diff --git a/cmd/qiita/items.go b/cmd/qiita/items.go index 44967df..7ab7511 100644 --- a/cmd/qiita/items.go +++ b/cmd/qiita/items.go @@ -177,6 +177,15 @@ var itemsNewCmd = &cobra.Command{ }, } +var itemsPushCmd = &cobra.Command{ + Use: "push [files]", + Short: "Upload items", + Long: "Upload items.", + RunE: func(cmd *cobra.Command, args []string) error { + return nil + }, +} + var itemsPullCmd = &cobra.Command{ Use: "pull [ids]", Short: "Download items", diff --git a/cmd/qiita/root.go b/cmd/qiita/root.go index b703566..1e4546f 100644 --- a/cmd/qiita/root.go +++ b/cmd/qiita/root.go @@ -124,6 +124,11 @@ func init() { flagItemsNewPrivate, // --private }.AddTo(itemsNewCmd) + /* items push */ + flags.Flags{ + flagItemsPushWrite, // --write + }.AddTo(itemsPushCmd) + /* items pull */ flags.Flags{ flagItemsPullOut, // --out From 5284ffcd326d17f415046f0037a72a22177e5d65 Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:10:01 +0900 Subject: [PATCH 2/8] =?UTF-8?q?push=20=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/qiita/items.go | 13 ++++++++++ cmd/qiita/root.go | 1 + internal/cli/items.go | 55 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) diff --git a/cmd/qiita/items.go b/cmd/qiita/items.go index 7ab7511..1ab6e6e 100644 --- a/cmd/qiita/items.go +++ b/cmd/qiita/items.go @@ -181,7 +181,20 @@ var itemsPushCmd = &cobra.Command{ Use: "push [files]", Short: "Upload items", Long: "Upload items.", + Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { + c, err := newCLI(cmd, nil) + if err != nil { + return err + } + + if err := c.ItemsPush(&cli.ItemsPushParameters{ + Args: args, + FlagWrite: flagItemsPushWrite, // --write + }); err != nil { + return err + } + return nil }, } diff --git a/cmd/qiita/root.go b/cmd/qiita/root.go index 1e4546f..072cd67 100644 --- a/cmd/qiita/root.go +++ b/cmd/qiita/root.go @@ -55,6 +55,7 @@ func init() { itemsUpdateCmd, // items update itemsDeleteCmd, // items delete itemsNewCmd, // items new + itemsPushCmd, // items push itemsPullCmd, // items pull ) diff --git a/internal/cli/items.go b/internal/cli/items.go index f3639e6..abcda69 100644 --- a/internal/cli/items.go +++ b/internal/cli/items.go @@ -271,6 +271,61 @@ func (c *CLI) ItemsNew(params *ItemsNewParameters) error { return nil } +type ItemsPushParameters struct { + Args []string + FlagWrite *flags.Bool // --write +} + +func (c *CLI) ItemsPush(params *ItemsPushParameters) error { + fmt.Fprintln(c.writer, "Pushing...") + + for _, filename := range params.Args { + md, fm, err := c.readMarkdown(filename) + if err != nil { + return err + } + + if fm.ID == nil { + // create + p := &qiita.CreateItemParameters{ + Title: fm.Title, + Tags: fm.QiitaTags(), + Body: &md, + Private: fm.Private, + } + item, err := c.client.CreateItem(p) + if err != nil { + return err + } + if *params.FlagWrite.Get(c.command, true) { + if err := c.writeMarkdown(filename, item); err != nil { + return err + } + } + } else { + // update + p := &qiita.UpdateItemParameters{ + Title: fm.Title, + Tags: fm.QiitaTags(), + Body: &md, + Private: fm.Private, + } + item, err := c.client.UpdateItem(*fm.ID, p) + if err != nil { + return err + } + if *params.FlagWrite.Get(c.command, true) { + if err := c.writeMarkdown(filename, item); err != nil { + return err + } + } + } + } + + fmt.Fprintln(c.writer, "Pushed.") + return nil +} + type ItemsPullParameters struct { Args []string FlagAll *flags.Bool // --all From 111c8fe4b29f757d8b50e54acd1dc9eb89a412c4 Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:13:43 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?= =?UTF-8?q?=E3=82=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/cli/items.go | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/internal/cli/items.go b/internal/cli/items.go index abcda69..92825d8 100644 --- a/internal/cli/items.go +++ b/internal/cli/items.go @@ -277,14 +277,14 @@ type ItemsPushParameters struct { } func (c *CLI) ItemsPush(params *ItemsPushParameters) error { - fmt.Fprintln(c.writer, "Pushing...") - for _, filename := range params.Args { md, fm, err := c.readMarkdown(filename) if err != nil { return err } + fmt.Fprintf(c.writer, "Pushing... %s\n", filename) + var item qiita.Item if fm.ID == nil { // create p := &qiita.CreateItemParameters{ @@ -293,15 +293,11 @@ func (c *CLI) ItemsPush(params *ItemsPushParameters) error { Body: &md, Private: fm.Private, } - item, err := c.client.CreateItem(p) + var err error + item, err = c.client.CreateItem(p) if err != nil { return err } - if *params.FlagWrite.Get(c.command, true) { - if err := c.writeMarkdown(filename, item); err != nil { - return err - } - } } else { // update p := &qiita.UpdateItemParameters{ @@ -310,19 +306,21 @@ func (c *CLI) ItemsPush(params *ItemsPushParameters) error { Body: &md, Private: fm.Private, } - item, err := c.client.UpdateItem(*fm.ID, p) + var err error + item, err = c.client.UpdateItem(*fm.ID, p) if err != nil { return err } - if *params.FlagWrite.Get(c.command, true) { - if err := c.writeMarkdown(filename, item); err != nil { - return err - } + } + fmt.Fprintln(c.writer, "Pushed.") + + if *params.FlagWrite.Get(c.command, true) { + if err := c.writeMarkdown(filename, item); err != nil { + return err } } } - fmt.Fprintln(c.writer, "Pushed.") return nil } From 6967d5888f259dfc05b2e86893825d7895cb0fca Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:16:37 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/cli/items.go | 2 +- internal/qiita/models.go | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/cli/items.go b/internal/cli/items.go index 92825d8..5d775c8 100644 --- a/internal/cli/items.go +++ b/internal/cli/items.go @@ -312,7 +312,7 @@ func (c *CLI) ItemsPush(params *ItemsPushParameters) error { return err } } - fmt.Fprintln(c.writer, "Pushed.") + fmt.Fprintf(c.writer, "Pushed: %s\n", item.URL()) if *params.FlagWrite.Get(c.command, true) { if err := c.writeMarkdown(filename, item); err != nil { diff --git a/internal/qiita/models.go b/internal/qiita/models.go index 2720817..cd6dd0c 100644 --- a/internal/qiita/models.go +++ b/internal/qiita/models.go @@ -36,6 +36,10 @@ func (item Item) ID() string { return item["id"].(string) } +func (item Item) URL() string { + return item["url"].(string) +} + func (item Item) Title() string { return item["title"].(string) } From 661ff5d401e167cbfab80024c9130e11e8d5298b Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:20:23 +0900 Subject: [PATCH 5/8] =?UTF-8?q?items=20create,=20items=20update=20?= =?UTF-8?q?=E3=81=AE=20--file,=20--write=20=E3=83=95=E3=83=A9=E3=82=B0?= =?UTF-8?q?=E3=82=92=E5=BB=83=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/qiita/flags.go | 24 ----------- cmd/qiita/items.go | 4 -- cmd/qiita/root.go | 4 -- internal/cli/items.go | 95 +++++-------------------------------------- 4 files changed, 10 insertions(+), 117 deletions(-) diff --git a/cmd/qiita/flags.go b/cmd/qiita/flags.go index 18a05cf..ed5da65 100644 --- a/cmd/qiita/flags.go +++ b/cmd/qiita/flags.go @@ -65,18 +65,6 @@ var ( // items create var ( - // --file - flagItemsCreateFile = &flags.String{Flag: &flags.Flag{ - Name: "file", - Description: "create an item from a file", - }} - - // --write - flagItemsCreateWrite = &flags.Bool{Flag: &flags.Flag{ - Name: "write", - Description: "write information about the created item to a file", - }} - // --title flagItemsCreateTitle = &flags.String{Flag: &flags.Flag{ Name: "title", @@ -110,18 +98,6 @@ var ( // items update var ( - // --file - flagItemsUpdateFile = &flags.String{Flag: &flags.Flag{ - Name: "file", - Description: "update an item from a file", - }} - - // --write - flagItemsUpdateWrite = &flags.Bool{Flag: &flags.Flag{ - Name: "write", - Description: "write information about the updated item to a file", - }} - // --title flagItemsUpdateTitle = &flags.String{Flag: &flags.Flag{ Name: "title", diff --git a/cmd/qiita/items.go b/cmd/qiita/items.go index 1ab6e6e..59cd189 100644 --- a/cmd/qiita/items.go +++ b/cmd/qiita/items.go @@ -90,8 +90,6 @@ var itemsCreateCmd = &cobra.Command{ } if err := c.ItemsCreate(&cli.ItemsCreateParameters{ - FlagFile: flagItemsCreateFile, // --file - FlagWrite: flagItemsCreateWrite, // --write FlagTitle: flagItemsCreateTitle, // --title FlagBody: flagItemsCreateBody, // --body FlagTags: flagItemsCreateTags, // --tags @@ -118,8 +116,6 @@ var itemsUpdateCmd = &cobra.Command{ if err := c.ItemsUpdate(&cli.ItemsUpdateParameters{ Args: args, - FlagFile: flagItemsUpdateFile, // --file - FlagWrite: flagItemsUpdateWrite, // --write FlagTitle: flagItemsUpdateTitle, // --title FlagTags: flagItemsUpdateTags, // --tags FlagBody: flagItemsUpdateBody, // --body diff --git a/cmd/qiita/root.go b/cmd/qiita/root.go index 072cd67..5938b28 100644 --- a/cmd/qiita/root.go +++ b/cmd/qiita/root.go @@ -97,8 +97,6 @@ func init() { flags.Flags{ flagFormat, // --format flagItemsColumns, // --columns - flagItemsCreateFile, // --file - flagItemsCreateWrite, // --write flagItemsCreateTitle, // --title flagItemsCreateTags, // --tags flagItemsCreateBody, // --body @@ -110,8 +108,6 @@ func init() { flags.Flags{ flagFormat, // --format flagItemsColumns, // --columns - flagItemsUpdateFile, // --file - flagItemsUpdateWrite, // --write flagItemsUpdateTitle, // --title flagItemsUpdateTags, // --tags flagItemsUpdateBody, // --body diff --git a/internal/cli/items.go b/internal/cli/items.go index 5d775c8..325125a 100644 --- a/internal/cli/items.go +++ b/internal/cli/items.go @@ -79,8 +79,6 @@ func (c *CLI) ItemsGet(params *ItemsGetParameters) error { } type ItemsCreateParameters struct { - FlagFile *flags.String // --file - FlagWrite *flags.Bool // --write FlagTitle *flags.String // --title FlagTags *flags.StringSlice // --tags FlagBody *flags.String // --body @@ -90,54 +88,21 @@ type ItemsCreateParameters struct { // $ qiita items create func (c *CLI) ItemsCreate(params *ItemsCreateParameters) error { - if params.FlagWrite.Changed(c.command) && !params.FlagFile.Changed(c.command) { - return ErrWriteWithoutFile - } - file := params.FlagFile.Get(c.command, false) - - p := &qiita.CreateItemParameters{} - - if file != nil { - md, fm, err := c.readMarkdown(*file) - if err != nil { - return err - } - if fm.ID != nil { - return ErrCreateWithID - } - p.Title = fm.Title - p.Tags = fm.QiitaTags() - p.Body = &md - p.Private = fm.Private - } - - if params.FlagTitle.Changed(c.command) { - p.Title = params.FlagTitle.Get(c.command, true) + p := &qiita.CreateItemParameters{ + Title: params.FlagTitle.Get(c.command, false), + Body: params.FlagBody.Get(c.command, false), + Private: params.FlagPrivate.Get(c.command, false), + Tweet: params.FlagTweet.Get(c.command, false), } if params.FlagTags.Changed(c.command) { p.Tags = util.Ptr(qiita.TagsFromStrings(*params.FlagTags.Get(c.command, true))) } - if params.FlagBody.Changed(c.command) { - p.Body = params.FlagBody.Get(c.command, true) - } - if params.FlagPrivate.Changed(c.command) { - p.Private = params.FlagPrivate.Get(c.command, true) - } - if params.FlagTweet.Changed(c.command) { - p.Tweet = params.FlagTweet.Get(c.command, true) - } item, err := c.client.CreateItem(p) if err != nil { return err } - if *params.FlagWrite.Get(c.command, true) { - if err := c.writeMarkdown(*file, item); err != nil { - return err - } - } - if err := c.printer.Print(c.writer, item); err != nil { return err } @@ -147,8 +112,6 @@ func (c *CLI) ItemsCreate(params *ItemsCreateParameters) error { type ItemsUpdateParameters struct { Args []string - FlagFile *flags.String // --file - FlagWrite *flags.Bool // --write FlagTitle *flags.String // --title FlagTags *flags.StringSlice // --tags FlagBody *flags.String // --body @@ -156,59 +119,21 @@ type ItemsUpdateParameters struct { } func (c *CLI) ItemsUpdate(params *ItemsUpdateParameters) error { - if params.FlagWrite.Changed(c.command) && !params.FlagFile.Changed(c.command) { - return ErrWriteWithoutFile - } - file := params.FlagFile.Get(c.command, false) - - var id string - p := &qiita.UpdateItemParameters{} - - if file != nil { - md, fm, err := c.readMarkdown(*file) - if err != nil { - return err - } - if fm.ID != nil { - id = *fm.ID - } - p.Title = fm.Title - p.Tags = fm.QiitaTags() - p.Body = &md - p.Private = fm.Private - } - - if len(params.Args) > 0 { - id = params.Args[0] - } - if id == "" { - return ErrIDRequired - } - - if params.FlagTitle.Changed(c.command) { - p.Title = params.FlagTitle.Get(c.command, true) + id := params.Args[0] + p := &qiita.UpdateItemParameters{ + Title: params.FlagTitle.Get(c.command, false), + Body: params.FlagBody.Get(c.command, false), + Private: params.FlagPrivate.Get(c.command, false), } if params.FlagTags.Changed(c.command) { p.Tags = util.Ptr(qiita.TagsFromStrings(*params.FlagTags.Get(c.command, true))) } - if params.FlagBody.Changed(c.command) { - p.Body = params.FlagBody.Get(c.command, true) - } - if params.FlagPrivate.Changed(c.command) { - p.Private = params.FlagPrivate.Get(c.command, true) - } item, err := c.client.UpdateItem(id, p) if err != nil { return err } - if *params.FlagWrite.Get(c.command, true) { - if err := c.writeMarkdown(*file, item); err != nil { - return err - } - } - if err := c.printer.Print(c.writer, item); err != nil { return err } From 3d97a9d7d4981d23c88c99bfaa36ab693c1985c6 Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:22:16 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/usage/create_edit_delete/README.md | 4 ++-- docs/usage/file/README.md | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/usage/create_edit_delete/README.md b/docs/usage/create_edit_delete/README.md index 156ccea..e8d6ad0 100644 --- a/docs/usage/create_edit_delete/README.md +++ b/docs/usage/create_edit_delete/README.md @@ -9,7 +9,7 @@ ## 記事を作成 > **Note** -> マークダウンファイルから記事を作成することもできます。 +> `push` コマンドを使用してマークダウンファイルから記事を作成することもできます。 > 詳しくは「[マークダウンファイルで記事を管理する](./file.md)」をご参照ください。 `qiita items create` で記事を作成することができます。 @@ -38,7 +38,7 @@ $ qiita items create --help ## 記事を更新 > **Note** -> マークダウンファイルから記事を更新することもできます。 +> `push` コマンドを使用してマークダウンファイルから記事を更新することもできます。 > 詳しくは「[マークダウンファイルで記事を管理する](./file.md)」をご参照ください。 `qiita items update` で記事を更新することができます。 diff --git a/docs/usage/file/README.md b/docs/usage/file/README.md index 34fa2e4..b164581 100644 --- a/docs/usage/file/README.md +++ b/docs/usage/file/README.md @@ -40,13 +40,11 @@ private: true これはテスト投稿です。 ``` -最後に `qiita items create` を次のように実行すると記事を作成することができます。 +最後に `qiita items push` を次のように実行すると記事を作成することができます。 `--write` フラグを指定すると ID などのメタ情報がファイルに書き込まれます。 ```sh -$ qiita items create \ - --file ./test.md \ - --write +$ qiita items push ./test.md --write ``` 実際に [Qiita](https://qiita.com) で記事が作成されていることが確認できます。 @@ -83,12 +81,10 @@ private: true 更新されたボディ ``` -最後に `qiita items update` を次のように実行すると記事を更新することができます。 +最後に `qiita items push` を次のように実行すると記事を更新することができます。 ```sh -$ qiita items update \ - --file ./test.md \ - --write +$ qiita items update ./test.md --write ``` 実際に [Qiita](https://qiita.com) で記事が更新されていることが確認できます。 From a9bd85a9dc1a731a02c493996e7d21c9fbc1adc4 Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:25:02 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/usage/create_edit_delete/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/create_edit_delete/README.md b/docs/usage/create_edit_delete/README.md index e8d6ad0..631b4fd 100644 --- a/docs/usage/create_edit_delete/README.md +++ b/docs/usage/create_edit_delete/README.md @@ -10,7 +10,7 @@ > **Note** > `push` コマンドを使用してマークダウンファイルから記事を作成することもできます。 -> 詳しくは「[マークダウンファイルで記事を管理する](./file.md)」をご参照ください。 +> 詳しくは「[マークダウンファイルで記事を管理する](../file/README.md)」をご参照ください。 `qiita items create` で記事を作成することができます。 @@ -39,7 +39,7 @@ $ qiita items create --help > **Note** > `push` コマンドを使用してマークダウンファイルから記事を更新することもできます。 -> 詳しくは「[マークダウンファイルで記事を管理する](./file.md)」をご参照ください。 +> 詳しくは「[マークダウンファイルで記事を管理する](../file/README.md)」をご参照ください。 `qiita items update` で記事を更新することができます。 From c6cc2b6f9b461e517b4da709079e07d0ddf00fdf Mon Sep 17 00:00:00 2001 From: koki-develop Date: Mon, 24 Apr 2023 20:27:33 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=E4=B8=80=E9=83=A8=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/usage/file/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/file/README.md b/docs/usage/file/README.md index b164581..c11f532 100644 --- a/docs/usage/file/README.md +++ b/docs/usage/file/README.md @@ -84,7 +84,7 @@ private: true 最後に `qiita items push` を次のように実行すると記事を更新することができます。 ```sh -$ qiita items update ./test.md --write +$ qiita items push ./test.md --write ``` 実際に [Qiita](https://qiita.com) で記事が更新されていることが確認できます。 @@ -101,4 +101,4 @@ $ qiita items pull --all --out ./items ``` すると全ての自分の記事が `./items/<記事のタイトル>.md` という名前でマークダウン形式で保存されます。 -その後は `qiita items update` などを使用して記事をマークダウンファイルで管理することができます。 +その後は `qiita items push` を使用して記事をマークダウンファイルで管理 / 更新することができます。