必要に迫られて Ruby のスクリプトを作ったら、汎用化できたので
Gem にしてみました。

gist_updater | RubyGems.org | your community gem host

何ができるか?

このような YAML ファイルを用意し、gist_updater コマンドを実行する
と、ローカルの .emacs.d/init.el によって
https://gist.github.com/masutaka/8177244 がアップデートされます。

-
  - 8177244
  - .emacs.d/init.el

Gist は差分がなくても、更新するとリビジョンが増えてしまいますが、
gist_updater は差分がなければアップデートしません。

複数の Gist をアップデート対象にすることも出来ますし、1つの Gist
の複数ファイルにも対応しています。YAML なのでコメントも書けますね。

-
  # https://gist.github.com/masutaka/8177244
  - 8177244
  - .emacs.d/init.el
-
  # https://gist.github.com/masutaka/f7ce8b3c71e995c20e48
  - f7ce8b3c71e995c20e48
  - circle.yml
  - tasks/pushover.rake

ライブラリとして使うことも出来ます。詳しくは GitHub の README.md
をご覧ください。

なぜ作ったか?

私はいわゆる dotfiles を GitHub に置いていますが、諸般の事情により
それは private repository です。ただ、たまに人に見せたいことがある
ので、一部のファイルを Gist に置いています。

~/.emacs.d/init.el
~/.zshenv
~/.zshrc
~/bin/my-brew-bundle

https://masutaka.net からリンクを張っています。

今まではまめに手動で Gist を更新していましたが、さすがに時間のムダ
だと思ったので、gist_updater を作りました。

現在は GitHub に push すると CircleCI が走り、必要に応じて Gist が
自動アップデートされます。

雑感とか

タイミングよく『オブジェクト指向設計実践ガイド 』を読んだ
[2016-09-22-1] 直後で良かったです。単一責任のクラスや DI などを意
識して設計しました。ただしテストはありません(キリッ

rubocop 先生にはだいぶ助けられました。長いメソッドは設計が間違って
いる啓示だと思い、メソッドやクラスを分けて短くしました。でもまだ全
然だと思う…。

学びがあった gem でした。

追記(2016-10-08):
全クラスのテストを追加しました。 意識して普段と違うテストにしたけど、
これで良いのだろうか…。