maeshimaの日記

メモ書きです

ruby

tapp

復習用エントリ。tapを使う頻度をもっと上げたいなと思った tappと書いてタププ - うんたらかんたら日記 tapp についてガツンと申し上げたい - ursmの日記

inf-ruby

使ってはすぐ存在を忘れてターミナルを使ってしまう…。C-c C-sでバッファが開く。 参考 inf-rubyメモ - odz buffer

capistrano_colors

gem install capistrano_colors だけで色が付くようになるのかなと思ってたけど違った(当たり前)。全部のプロジェクトの cap コマンドを色つけしたいので ~/.caprc を作って require 'capistrano_colors' としたら色が付きました 参考 stjernstrom/capistran…

Hash#fetch

キーに対応する値を返す。値がない場合はKeyError。デフォルト値をブロック中に指定できる。 hash = {} hash.fetch(:hoge) {'fuga'} #=> "fuga" hash.fetch(:hoge) #=> KeyError: key not found: :hoge 名前付き引数を使うようなときに使う。

メタプログラミングRuby 第5章

eval instance_evalやclass_evalも、evalと同じように文字列を引数にすることが出来る。 evalとセーフレベルと汚染の考えはワンセット。 Binding TOBLEVEL_BINDING トップレベルのスコープが束縛されている eval で実行時の束縛を指定できる。どっかで使えそ…

メタプログラミングRuby 4章

カレントクラス カレントクラスはカレントオブジェクト(self)とは別。Rubyのプログラムは常にカレントオブジェクトとカレントクラスを持っている。メソッドを定義したときに、そのメソッドはカレントクラスのインスタンスメソッドになる。 class MyClass def…

メタプログラミングRuby 第2章

似たようなメソッド群をどのようにリファクタリングするかという課題に対して、動的ディスパッチ&動的メソッドと method_missing の二つの手段で解決をはかる話。 ゴーストメソッド作成時の Object#respond_to? と Object#methods method_missing でゴース…

retry

retry 使ったことなかったけど、begin ~ rescue でとても使えそう!retry回数制限つきrescueの書き方のメモ - Hello, world! - s21g retry は、ループ以外に後述の rescue 節でも使えます。この場 合は、begin 式を始めからもう一度実行します。retry を使う…

cloneとdup

普通はdupでいいんじゃないかと思った オブジェクトのコピーについて - おもしろWEBサービス開発日記

メタプログラミングRubyのイディオム

メタプログラミングRubyでは、説明しやすくするために、各テクニックにそれぞれ名前を付けている。最初覚えるのは面倒だけど、覚えるとこれは必要な儀式だったんだなと思える。というわけでメモ。 動的ディスパッチ sendを使って動的にメソッドを利用するこ…

メタプログラミングRuby 1章

あるメソッドが定義されているかどうか調べる hoge.methods.grep /re/ のように、Enumerable#grep を使うと正規表現で調べられるので便利 オープンクラス 標準クラスにメソッド追加すると、既存のメソッドとかち合う危険性があるので、基本的にはよっぽどの…

gem which

インストールしているgemのパスを表示するコマンド 例 gem which rails 参考 requireされいているRubyスクリプトを見つけて編集する方法 - Hello, world! - s21g

html2hamlでerbファイルをhamlに変換するワンライナ

ruby -e 'Dir.glob("**/*.erb").each {|file| system %Q! html2haml #{file} #{file.sub("erb", "haml")}!}'

eval(statements, binding, file, line)

第二引数で束縛を指定できる 第三引数と第四引数で、エラー時のスタックトレースで表示するファイルと行数を指定できる

TOPLEVEL_BINDING

トップレベルのスコープの束縛が入っている組み込み定数。

irbのネスト

irbの中でirbを使う(ネストする)ことができる。このとき、コンテキストは引数に渡したオブジェクトのコンテキストに変わる。 ruby-1.9.2-p180 :001 > s = "hoge" => "hoge" ruby-1.9.2-p180 :002 > irb s ruby-1.9.2-p180 :002 > reverse => "egoh"

複数行の文字列

普通にダブルクォートで複数行の文字列を扱うことが出来る。普通複数行にまたがる文字列を使いたいときはヒアドキュメントを使う。 puts "hoge fuga" 実行結果 hoge fuga

rvm wrapper

rvm wrapperは指定した ruby と gemset でrubyを実行できるコマンドを生成する。passengerとかで使われてる。 rvm wrapper 1.9.2@hoge fuga とすると、1.9.2 で gemset hoge の状態で実行できるコマンドが生成される ./rvm/bin/fuga_ruby ./rvm/bin/fuga_irb…

load

loadの第二引数にtrueを指定すると、第一引数で指定したファイルの実行時に無名モジュールを作成して定数の衝突を避ける。 requireの違い require は同じファイルは一度だけしかロードしませんが、 load は無条件にロードします。また、require は拡張子 .rb…

Enumerableその1

メモ Enumerable#cycle object.to_a.cycle と同じ Enumerable#drop オブジェクトの最初の n 個を捨てた配列を返す。非破壊的。Enumerable#firstと対をなすメソッド ary = [1, 2, 3] ary.drop(2) #=> [3] ary #=> [1, 2, 3] Enumerable#drop_while ブロック内…

bundle install --local

rubygems.orgに接続せずに、vendor/cacheを使うオプション

正規表現の後方参照

なんかこんがらがるのでメモ 正規表現中で参照したい場合は\1,\2,\3... 正規表現後で参照したい場合は$1, $2, $3...

y

script/console中でyamlに変換してくれるメソッドらしい。script/console - うんたらかんたらRuby - Rubyist

__FILE__

__FILE__ - willnetの日記 - Rubyist

Dir.globとDir.[]

あとでもう一度復習する http://d.hatena.ne.jp/maeshima/20100304/1267696733

yamlで正規表現

YAMLで正規表現 - willnetの日記 - Rubyist

三角測量

自分のエントリ見て。三角測量って何だっけ?ってなったので元エントリ見直した。TDDでテストを先に書く→ちゃんと実装する前に、「明らかにこれは通るだろ」っていうコードを仮に書いてテストを実行してみることを三角測量と言う。Rspec入門メモ - maeshima…

Net::HTTPでbodyにデータを詰める時は

set_form_dataを使ってエンコードした文字列をセットすると良い [http://d.hatena.ne.jp/POCHI_BLACK/20100226:title=[Ruby] Net::HTTP - pochiのメモ帳]

Enumerable#each_slice

今まで知らなかった。これは便利!! (1..10).each_slice(3) {|a| p a} # outputs below [1, 2, 3] [4, 5, 6] [7, 8, 9] [10]

ruby-mode

正規表現中に"が入るとハイライトがおかしくなるのが嫌で、ひょっとしたらruby-modeを新しくしたらその辺り直ってるんじゃないかと思い入れてみた。EmacsWiki: Ruby Modeにあるようにsubversionのリポジトリをチェックアウトし、load-pathに入れた。でもダメ…