ぼろぼろ平原

困った

るびまRubyist Hotlinks - インタビュイーの好きなメソッド・嫌いなメソッド一覧

Rubyist Magazine(るびま)には、著名なRubyistにインタビューを行うRubyist Hotlinksという企画がある。 Rubyist Hotlinksでは毎回「好きなメソッド、嫌いなメソッドはなんですか?」という質問がされるのでまとめた。

No. インタビューイ 好きなメソッド 嫌いなメソッド
第1回 まつもとゆきひろさん Kernel.#eval Kernel.#eval
第2回 前田修吾さん Enumerable#collect String#gsub!
第3回 かずひこさん Object#=== Kernel.#eval
第4回 ただただしさん みんなだいたい好き String#scan
第5回 増井俊之さん Array#eachEnumerable#collect、yield 特になし
第6回第7回 江渡浩一郎さん BasicObject#method_missing、Enumerable 特になし
第8回 田中哲さん Regexp#to_s ブロック付きメソッドの中でのretry *1
第9回 中田伸悦さん yycompile *2 特になし
第10回 わたなべひろふみさん Kernel.#p Object#initializeMutex#synchronize
第11回第12回 後藤謙太郎さん Kernel.#p Object#inspect *3
第11回第12回 後藤裕蔵さん Enumerable#inject 特になし
第13回 関将俊さん Enumerable#inject 特になし
第14回 角谷信太郎さん Object#extendModule#const_get Test::Unit::Assertions#assert_equal *4
第15回 artonさん Object#send 自分の理解できないもの
第16回 essaさん Enumerable#collect 特になし
第17回 青木峰郎さん String#slice(regexp, n) *5 Enumerable#find_all
第18回 立石孝彰さん Enumerable#inject Kernel.#eval
第19回 伊尾木将之さん Array#eachString#next String#+
第20回 石塚圭樹さん Module#module_eval Array#nitems *6
第21回 原信一郎さん Enumerable#map Enumerable#inject
第22回 nariさん GC#enable GC#disable
第23回 yharaさん Enumerable 特になし
第24回 okkezさん Enumerable#map Kernel.#set_trace_func
第25回 加藤勇也さん BasicObject#instance_eval BasicObject#instance_eval
第26回 cuzicさん Module#class_eval Kernel.#p
第27回 小波秀雄さん Enumerable#map Kernel.#printf
第28回 Yuguiさん BasicObject#instance_eval Math.sin! *7
第29回 松田明さん 言及なし 言及なし
第30回 遠藤侑介さん Array#packString#unpack Module#define_method
第31回 樽家昌也さん Thread.new ObjectSpace
第32回 卜部昌平さん Enumerable#lazy 特になし
第33回第34回 大場光一郎さん do 特になし
第33回第34回 大場寧子さん Enumerable#map Object#nil?
第35回 島田浩二さん 言及なし 言及なし

*1:Ruby 1.9で廃止。今はbeginとendの中でのみ使える

*2:MRIの関数

*3:これをデバッグする作業が嫌い

*4:テスティングフレームワーク周りはゴタゴタしていたのでRuby 2.2.0のリファレンス・マニュアルにこのメソッドはない。参考: Rubyのテスティングフレームワークの歴史(2014年版) - ククログ(2014-11-06)

*5:引数も重要

*6:Ruby 1.9で廃止。nilではない要素の数を返す

*7:昔はあったらしいが発見できなかった。CMath.#sin!なら今でもある。

RSpecで「while line = gets」をテストする方法

RSpecwhile line = getsのような標準入力のループをテストしたいとき。

Kernel.#getsARGFをレシーバとしたメソッドの省略形なので、ARGF.getsをモックにすれば良い。

テストしたいコード:

# 標準入力を行ごとに区切って配列にするメソッド
def foo
  ary = []
  while line = gets
    ary << line.chomp
  end
  ary
end

テストコード:

require "rspec"
require "stringio"
require_relative "foo"

describe "foo" do
  it "標準入力を行ごとに区切って配列にする" do
    inputs = StringIO.new("line1\nline2\n")
    allow(ARGF).to receive(:gets) { inputs.gets }
    expect(foo).to contain_exactly("line1", "line2")
  end
end

rbenvのインストールにはrbenv-installerを使おう(追記:使わない方がいい)

追記:2018-05-15

rbenv-installerは以前とは別物になりました。 もはやrbenv-installerを使うメリットはありません。

追記終わり。あとは古い内容。


rbenv-installerを使うとrbenvとプラグインを同時に導入できる。

ruby-buildなどを入れたりする必要がなくなる。

https://github.com/fesplugas/rbenv-installer

https://github.com/fesplugas/rbenv-installer

rbenv-installerを使ったrbenvのインストール

以下のコマンドでrbenv本体とruby-buildrbenv-default-gemsrbenv-gem-rehashrbenv-updateなどのプラグインが一発でインストールされる。

$ curl https://raw.githubusercontent.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash

以下のコードを~/.bash_profile~/.bashrcに追記してbashを再起動するとrbenvが使えるようになる。

# rbenv
export RBENV_ROOT="${HOME}/.rbenv"
if [ -d "${RBENV_ROOT}" ]; then
  epxport PATH="${RBENV_ROOT}/bin:${PATH}"
  eval "$(rbenv init -)"
fi

rbenv-installerで入るプラグイン一覧

個々の紹介はしないけどrbenv-installerを使うとこれらがすべて使えるようになる。

  • rbenv-bootstrap
  • rbenv-default-gems
  • rbenv-gem-rehash
  • rbenv-update
  • rbenv-use
  • rbenv-vars
  • rbenv-whatis
  • ruby-build