この記事は Okinawa.rb Advent Calendar 2017 4日目の記事です。
自分は思いついたアイデアをすぐ gem にするようにしているのですが、今年は結構作った気がしたのでそれを紹介したいと思います。
spellcheck
主に技術系の単語にフォーカスしたスペルチェッカー、スペルミス候補を全部 Hash データで管理していてそれを増やすのが面倒になって放置。
サンプル (aplication
がタイポしている
hello world. I create aplication now. good bye
$ spellcheck example.md
+----------+--------------------------+------------+-------------+ | Location | Text | Pattern | Expected | +----------+--------------------------+------------+-------------+ | 2 | I create aplication now. | aplication | application | +----------+--------------------------+------------+-------------+ result: 1 typo found.
typogen
英語の typo を生成するコマンド。
前に qiita で紹介したことがあるので詳しくはこちら。
https://qiita.com/siman/items/e3c8dfb72e37142b0b86
spellcheck
の辞書データを作っていた時に、typo したときの単語一覧を手入力するのが面倒になった作成した。
$ typogen install
nstall istall intall insall instll instal nistall isntall intsall insatll instlal instale
ripper_tree
ruby の Ripper.sexp
の表示を tree コマンド風で表示させる。
$ rtree -e "1+2*3"
:program └──── :binary ├──── :@int ["1"] 1:0 ├──── :+ └──── :binary ├──── :@int ["2"] 1:2 ├──── :* └──── :@int ["3"] 1:4
今年作った gem の中では一番使っている。
tspec
TracePoint を使って Ruby で型チェックが出来るようにした gem。
require 'tspec' def echo(str) puts str end.receive(str: String) echo('hello world') #=> ok echo(123) #=> TSpec::ArgumentTypeError
require 'tspec' def echo(val) puts val end.receive(val: [String, Float]) echo('hello') #=> ok echo(3.14) #=> ok echo(123) #=> TSpec::ArgumentTypeError
ただ、挙動がちょっと怪しいので自分でも使うのをためらっている。
jt
JSON を tree コマンドっぽく表示させる gem
https://qiita.com/siman/items/a59a7ac80fba3e71ed38
rrpn
逆ポーランド記法の計算機と変換器
https://qiita.com/siman/items/d72854c4c4aaaf452868
rpn
の名前空間ほしかったけど取られていた。(残念
hrm
ヒューマンリソースマシーンに出てくる命令を実装したもの。メモリの初期状態を設定するコードは実装していないかも。
ヒューマンリソースマシンは完全クリアした(ドヤァ
rodir
Ruby のオブジェクト継承ツリーをディレクトリっぽく扱うもの
$ rodir Ruby@2.4.0 /BasicObject$ ls <M> #<Module:0x007fb11a911388> <M> Kernel Ruby@2.4.0 /BasicObject$ cd Kernel Ruby@2.4.0 /BasicObject/Kernel$ ls <C> Object Ruby@2.4.0 /BasicObject/Kernel$ cd Object Ruby@2.4.0 /BasicObject/Kernel/Object$ pwd BasicObject/Kernel/Object
実際に触ってみて 5分で飽きた。
open_class_alarm
オープンクラスに警告を出す gem
https://qiita.com/siman/items/cbc7b85ff45eb5fc58d5
いらない
proc_source
Proc オブジェクトのソースを表示する。
https://qiita.com/siman/items/9ad676cbb4f8afbd15ac
a = -> { 'hi' } puts a.proc_source
-> { 'hi' }
lier
?
で終わるメソッドの返り値を全て逆にする
https://qiita.com/siman/items/475d355fe22e34659149
エイプリルフールネタで作った。テストするときに rspec が壊れてやばかった。(Refinements で影響範囲を限定させた
rtg
Ruby で作ったタイピングゲーム
自分のコンソールの画面に合わせた配色にしたので、場合によっては文字が見づらいかも。
keyevent
keyevent を取得する gem。(Windows では試していない)
require "keyevent" while input = getkey break if input == "Q" p input end
rtg を作っていた時に分離できそうだったので分離した。
まとめ
結構 gem を作ってた。(使ってるとは言ってない