-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor(lib): Remove environment variable dependencies from lib.List() #118
Conversation
os.Exit(1) | ||
} | ||
|
||
fmt.Println(lines) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
linesのstdout出力は元々 lib.List()
内で行われていましたが、ライブラリとして利用する際はstdoutではなくstringを受け取って操作したいです。
そのため呼び出し側でstdout出力するようリファクタリングしました。
accessToken: accessToken, | ||
settingsGistID: settingsGistID, | ||
}, nil | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
既存のCLIとしてのユースケースをサポートする NewListFromCLI()
を用意しました。 今までと同様に環境変数やgit configから認証情報等を取得しListを返します。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほど。素朴に cmd/root.go にベタ書きすることを考えてましたが、ビジネスロジック(大げさ)は lib/ にあったほうが良さそうですね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getAccessToken()などはプライベートメソッドだったので、パッケージ外に公開するのはな......と考えこの形にしました 😄
ただ、逆にCLIからしか使われないロジックはcmdパッケージに寄せるのもありかも?とも思ったり 🤔 もしくはcli的なパッケージを切るのもありかもです(やりすぎかもですが)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あ、そうか。異なるパッケージからは呼べませんでしたね 😅
話逸れますが、C 言語の static 関数はそのファイル内からしか呼べなかったので、ファイル単位でパッケージ化できて、個人的には好きでした。
Go だとディレクトリを分けないといけないのがなあ...。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
おおー、そうなんですね、よさそうですね!RubyやJSだと逆に一度公開しちゃうとどこからでも呼べちゃうのがな...と思ってました 😅
log.Fatal(err) | ||
return "", err |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
log.Fatal()
は 内部的に os.Exit(1)
してしまうため、ライブラリとしてのユースケースでは困ってしまいます。
そのため単純にerrを返すよう修正しました。
if err = settings.Init(getGistID(), accessToken); err != nil { | ||
return err | ||
if err = settings.Init(l.settingsGistID, l.accessToken); err != nil { | ||
return "", err | ||
} | ||
format := NewFormat(ctx, client, settings, debug) | ||
|
||
parallelNum, err := getParallelNum() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NOTE: 将来的にはここや、タイムゾーンなども外部から注入できるようにしたいですが、必要に応じてPRを出すつもりです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます!
🚀 v4.2.7 |
Settings.Init()
andFormat.All()
#116ライブラリとしてのユースケースをサポートするために、各メソッドから環境変数やgit configへの依存を取り除いていきます。
今回は本丸の
lib.List()
の対応となります。Listをstructに変更しフィールドを外部から注入可能にしました。動作確認方法
以下の内容を確認しています。
make test-all
,make lint
が通ることmake dist
を実施し、./pkg/darwin_arm64/github-nippou
が問題なく動作すること