概要
チェインで記述しているコードを一行ごとに評価して、結果を表示してくれる Gem。
例えばこんなコードがあったら
(1..10).map {|i| i * 2 }
.select {|i| i % 5 == 0 }
.map(&:odd?)
こうなる
(1..10).map {|i| i * 2 } # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
.select {|i| i % 5 == 0 } # => [10, 20]
.map(&:odd?) # => [false, false]
途中でバグを埋め込んでないか確認するのに便利そう。
Vim, Emacs, Atom, Sublime, TextMate と色々なエディタに組み込めるようなので、Sublime に入れてみる。
入れてみる
まずは、install する
gem install seeing_is_believing
なんか変なの表示された
Fetching: seeing_is_believing-3.1.1.gem (100%)
.7
. .M
. . .N
M. ..O
=. .. .M
N . . .N
O.. . . O
MN:. . M
OM...N
N .OM .NM8MMMMMM
O ..N ...MM=:Z7?Z7??MMMMIMMOM8N
M...O ,MMMMMMMMMM$$:=ZZ$~:$?7ZMMMMM8?M
.N . M MMI$7:==?:77MMMM7$O~+~ZO~~I=7ZMMMM
O$...N M=$ZZI=MMM7ZZI=?MMZ+:$I?8Z~?ZO~=ZIMM
.MN ...O M~?Z==ZZZ=MM$$=$ZZMMO=~~?$=$Z~~OO+=MM
OM ...,M DAAAAAAAAAAAAAAAAAAAAAAAM=Z=+OOI=+ZO$O+MM
NOM.. . N DAAAAAAAAAAAAM?:DAAAAAAAAAAAAM$ZZ?$+IZ7+8?M8
NOM.....O DAAAAAAAAM:....DAAAAAAAAAAAAAAM78OI+D=78=$MM
NO.. ...MN DAAAAAAAM.......DAAAAAAAAAAAAAM,MMMO7?I8Z7OM
MN.... ..O DAAAAAM.........DAAAAAAAAAAAAM..~MM?NMM7O8MM
NOM.. ..MN DAAM............DAAAAAAAAAAM.......MM7.MMM
NOM.. .. .OM M................DAAAAAAAM...........MM:M
NOM. .. ..NO M...................~DAAM..............I,,M
NOM.. .. .MN MM...ZMMMMMM.............................=MM
NOM. . ... O M..MMMNMMMMMMMMZ..........................$MI
NOM8.. .. .MM MZMMMMMMMMMMMMMMM.........M~...............MM
NOM .. . . NOM M........................8M$................MM
NOMO. . . . . M.MMMMMMMMMMMMNMMMMNMMMMMM..................MM,
NOMM8. . M:MM MM......................................MM
. .MMMM MMMM.............7ZMM..................MM
.MNOM MMMMMMMMMMMMMMMMMMM....................OMM
H MMMMMMMMMMMMMMMMM.......,..............MM
MMMMMMMMMMMM=.........MM..............MMN
:MMMM................M.......M......MMM
MMM..............MN.....:7.......MMM .MMMMMM
Seeing MMMM.........M...M.....M.........MMMM......MM
M..MMM.......M...M....=I........MM.........M
is M..MMMM.....M....M....M.....MMM:..........MM
MM..M MMM...M...MM...M....MMM.............M,
Believing .M..MM MMMMMM...M....M...................MM
..MMMMMMMM..M M..MMM...MM...OM..............MN..MM
M.............M MMM..MM...MMMMMMM.............M..+MM
:MM7....M..IMM D ..M?M...MM M...........MM..MM,
.M..M.. ... gM+...M NM........MMM..MM
.MM+gZMM.....M MMMMMMMMMM....M
MI..8MM,....MM .MMM..M..M
MMM...MMMM..MI ..OMMM..OMM..MM
M...MD....M M M.....NMM..MM..M
MMMM.....M ..M .M:...M....M....M
MM MMMM......MMMI
Successfully installed seeing_is_believing-3.1.1
Parsing documentation for seeing_is_believing-3.1.1
Installing ri documentation for seeing_is_believing-3.1.1
Done installing documentation for seeing_is_believing after 0 seconds
1 gem installed
RSpec の Progress Bar をカスタマイズするで AA の辛さを知ったから、尊敬するな...
install が終わったら Sublime の Package 管理のディレクトリに移動して、
sublime-text-2-and-3-seeing-is-believing を SeeingIsBelieving という名前で clone してくる
cd ~/Library/Application\ Support/Sublime\ Text\ 3/Packages
git clone git@github.com:JoshCheek/sublime-text-2-and-3-seeing-is-believing.git SeeingIsBelieving
最後に、setting を自分の環境に合わせて書き換える。
私の場合、rbenv を使っているので ruby_command
はそのまま、Ruby の version は 2.3.0 なので RBENV_VERSION
を書き換える。
{
"ruby_command": "~/.rbenv/shims/ruby",
...
"environment_variables": {
"RBENV_VERSION": "2.3.0",
"LANG": "UTF-8"
},
...
準備完了!!
使ってみる
Sublime で以下のコードを書いて
(1..10).map {|i| i * 2 }
.select {|i| i % 5 == 0 }
.map(&:odd?)
⌥ + ⌘ + B
!
(1..10).map {|i| i * 2 } # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
.select {|i| i % 5 == 0 } # => [10, 20]
.map(&:odd?) # => [false, false]
おー!
もっとわけわからないコードを書いてみると
(1..10).map {|i|
a = i * 2
b = i * 3
a + b
}.select {|i|
n = (i + 4) * 3 - 4
n % i == 1
}.map(&:odd?)
⌥ + ⌘ + B
!
(1..10).map {|i| # => 1..10
a = i * 2 # => 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
b = i * 3 # => 3, 6, 9, 12, 15, 18, 21, 24, 27, 30
a + b # => 5, 10, 15, 20, 25, 30, 35, 40, 45, 50
}.select {|i| # => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
n = (i + 4) * 3 - 4 # => 23, 38, 53, 68, 83, 98, 113, 128, 143, 158
n % i == 1 # => false, false, false, false, false, false, false, false, false, false
}.map(&:odd?) # => []
おー!!
途中にバグがあった場合はエラーを表示してくれます。
(1..10).map {|i| # => 1..10
{i: i} # => {:i=>1}, {:i=>2}, {:i=>3}, {:i=>4}, {:i=>5}, {:i=>6}, {:i=>7}, {:i=>8}, {:i=>9}, {:i=>10}
}.select {|i| # => [{:i=>1}, {:i=>2}, {:i=>3}, {:i=>4}, {:i=>5}, {:i=>6}, {:i=>7}, {:i=>8}, {:i=>9}, {:i=>10}]
n = (i + 4) * 3 - 4 # ~> NoMethodError: undefined method `+' for {:i=>1}:Hash
n % i == 1
}.map(&:odd?)
# ~> NoMethodError
# ~> undefined method `+' for {:i=>1}:Hash
# ~>
# ~> path/to/hoge.rb:5:in `block in <main>'
# ~> path/to/hoge.rb:4:in `select'
# ~> path/to/hoge.rb:4:in `<main>'
おー!!!
表示した値は ⌥ + ⌘ + V
で非表示にできます。
たまに途中で Debug したいときとか tapp を使って途中結果を表示させたりしていたんですが、これで一発でわかりますね。便利!