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に入れた。でもダメ…

__method__

実行しているメソッド名を返すメソッド。aliasしたメソッドの場合は元メソッドの名前を返す。 def foo __method__ end alias bar foo foo # => :foo bar # => :foo

末尾再帰最適化

名前だけ知ってて、実際どういうものか知らなかったけど、下記エントリを読んで大体理解できたと思う。再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! - hp12c Rubyの末尾再帰最適化を理解する - hp12c 末尾再帰とは 再帰的に実行するメソッドの…

Arrayその5

Array#transpose 二次元配列に対して使うメソッド。行と列を転置する。 a = [[1,2],[3,4],[5,6]] a.transpose # => [[1, 3, 5], [2, 4, 6]] 似たようなものに Enumerable#zip がある。これは配列の引数とって足してから行と列を転置するメソッド。 b = [1,2]…

Arrayその4

こうやって調べてみると知らないことやあやふやな理解だったところがたくさんあるなー Array#product 配列の要素と引数の要素の組み合わせを作り、配列の配列を作って返す。本よりも下記のページの方がわかりやすい。 product (Array) - Rubyリファレンス Ar…

Array その3

Array#count 引数を渡さなかった場合は要素の個数を返す。引数を渡した場合は、引数と等しい要素の個数を返す [1,2,2,3,3,3].count(2) #=> 2 またはブロックを評価した結果が真になる要素の個数を返す。 [1,2,2,3,3,3].count do |obj| obj > 2; end #=> 3 ど…

rvm.el

M-x rvm-use で、emacsで使うrubyのバージョンとgemsetを切り替えられる。デフォルトのgemsetは"global"で、空白にするとうまく切り替わらない。

xmpfilterをemacsで使う

gem install rcodetools でrcodetoolsいれる。gemに入ってるrcodetools.elをemacsのload-path上に配置。 (require 'rcodetools) とすると M-x xmp が使えるようになり、下記のようにRubyのコード上で実行すると # => としたところに実行結果が挿入されるよう…

Arrayのメソッドその2

Array.try_convert 1.9から。引数のオブジェクトをto_aryメソッドを使って配列に変換しようとする。変更できない場合は nil を返す。 Array#* 整数なら配列を整数個連結して返す String(またはto_strを持つメソッド)ならjoin(str)と等価 重複削除系 とか & …

Array.new

第一引数に要素の数を指定できる。第二引数にオブジェクトを指定すると、そのオブジェクトが第一引数の数格納された配列を返す。この場合、配列の全部の要素が同じオブジェクトを指すので、別々にしたい場合はブロックを使う。 a = Array.new(2, {}) #=> [{}…

drubyメモその二

drubyメモ - maeshimaの日記を見返して気になったところのメモ。三ヶ月も経つとずいぶん忘れてる>< DRbサーバ〜クライアント間で、引数を参照渡しってどうやってるんだろう? 深くは追いかけてないけど、本当の意味での「参照渡し」は別プロセス間では出来…

ruby-electricとyasnippetは相性悪い?

emacs23.2でruby-electrricを有効にすると、yasnippetのruby-mode用の定義が使えないみたい。

rvm package install

rvm用のディレクトリ($rvm_path/usr)にインストールするコマンド rvm package install openssl rvm package install readline # ...

twitter_oauthを使ってみる

The Ruby Toolbox Searchでtwitterで検索すると2位のtwitter_oauthのREADMEを見ながらtwitter で oauth 認証をしてみた。ダントツ1位の twitter gem もあったけどなんとなく。moomerman's twitter_oauth at master - GitHub unauthorized request example …

god

Ruby製のプロセス監視ツールGodについてのメモ。God - A Process Monitoring Framework in Rubyの内容を途中まで適当に意訳してるだけ。 インストール sudo gem install god 実行方法 # 普通に実行 sudo god -c /path/to/config.god # foreground で実行 sud…

drubyメモ

druby使う時のメモ。 drubyのサーバプロセスはスレッドなのでmutex的な処理が必要になってくる drubyの引数/戻り値はMarshall.dumpされたオブジェクト。値渡し。 相手の知らないクラスのインスタンスは送れない(厳密には送れるけどDRbUnknownとかいうオブジ…

ruby-openidはテスト時にfile格納で基本はmemcache

久しぶりにopenid_authenticationを使ったらDB store が無くなっていた。今はopen idの情報を一時的に格納しておくための方法が三パターンある。 file memory memcache memoryがデフォルトだけれど、単にhashに格納しているだけなのでマルチプロセスなサーバ…

Module.ancestors

こんな感じで継承関係を表示してくれて便利 ree-1.8.7-2010.02 > Array.ancestors => [Array, Enumerable, Object, Kernel]

Hash#inspect

key/valueの順番ってどうなるのかなーと思って調べました。どういうロジックで順番決めてるのかはよくわからないですが、基本的に中身が同じなら同じ出力になるみたいですね。ちなみに別プロセスでも同じ結果でした。 ree-1.8.7-2010.01 > {:b => "fuga", :a…

Builderで文字列をエスケープさせない方法

builderはデフォルトでhtmlエスケープ的なことをしてくれますが、エスケープしたくないときもあります。 xml = Builder::XmlMarkup.new :indent => 2 xml.root "<hoge></hoge>" xml.target! # => "<root>&lt;hoge&gt;&lt;/hoge&gt;</root>" そういうときは xml = Builder::XmlMarkup.ne…

rake

rakeファイルの書き方を必要そうなとこだけざっくり調べた。 タスク 引数の書式は下記の二通り 処理したいタスクの名前のString 処理したいタスク => 依存するタスクのハッシュ ブロック中の処理が実行される "default"のみ予約語。実行タスクが指定されない…