MetaMindのRuby Clientが無かったので作っちゃいました。

インストール&使い方

でインストールして、以下のようにして使います

certかprivate_keyどちらかのキーは必須。

苦労したところとか

MetaMindはファイルアップロード以外のAPIでもContent-Typeをmultipart/form-dataの指定をしなければならないのが面倒でした。

net/httpを利用するとなると簡単に対応できそうなライブラリがなかったので、以下のように手作り感のあるmultipart/form-dataで対応しました。Fileの方は間違ってるかも(素直にBase64とかにした方が良かったですかね)

Hashをクエリパラメータにする方法はActiveSupportのHash#to_queryを使うのがセオリーになっているっぽいですが、そのためだけにActiveSupportをインストールするのは微妙かな、と思ったのでcore_extのHashの特定部分だけ少し修正して使っています。オープンクラス便利だなー

HTTPリクエストのテストをする際のスタブはWebMockが使いやすいです

ただし、WebMockはmultipart/form-dataに対するbodyのアサーションは対応していないようで、アサーションをかけようとすると以下のエラーが発生します。

JWT生成のときにTime.nowを使っているため、テストコードではTimecopを利用。以下のように書くと、ブロック内のTime.now等の値が固定される。

JWT生成はjwtライブラリが楽です。MetamindのAPIの認証方式はOAuth2.0のJWT bearer token flowになので、そこで使っています。

Rubygemの作り方やgemspecの書き方は以下のサイトが詳しいです

あとはgem pushするときにmasterブランチにupstreamブランチを設定しておかないとエラーになるとか

その他参考URL