rails3でYAMLから読み込んだ値をグローバルな定数にする

config/api_key.ymlで認証キーを管理して、これをグローバルな定数として使い回したいとする。

consumer_secret : 'xxxxxxxx'
consumer_key    : 'xxxxxxxxxxxxxx'

railsは起動時にconfig/initializers/以下においたファイルをロードする。
よってconfig/initializer/constants.rb に以下のように書けばいい。

API_KEY = YAML.load_file("#{Rails.root}/config/api_key.yml")

あとはAPI_KEY['consumer_key']な感じで適当に呼び出せる。

Rails.rootのところをRAILS_ROOTとしていたのがハマりポイントでした。
rails3からの変更点のようです。今更気づいたのかって感じですけど。

Ruby on Rails 3.0 Release Notes — Ruby on Rails Guides

Railties now deprecates:

RAILS_ROOT in favor of Rails.root,
RAILS_ENV in favor of Rails.env, and
RAILS_DEFAULT_LOGGER in favor of Rails.logger.
PLUGIN/rails/tasks, and PLUGIN/tasks are no longer loaded all tasks now must be in PLUGIN/lib/tasks.

メソッド呼び出し時の::と->の違い

Package::Hogeというパッケージがあって、そこで定義されているhugaメソッドがあるとします。
これを呼び出すときに、

Package::Hoge::huga(@args) 

と書くのと、

Pakage::Hoge->huga(@args) 

と書くのでは動作が異なります。
同じだと思ってました。

なぜなら、

Pakage::Hoge->huga  

は、実は

Package::Hoge::huga(Package::Hoge, @args) 

を意味しているからです。

アロー演算子(->)を使った場合、メソッドの引数リストにクラス名が渡され、
クラスの継承関係を辿っていくことができます。これにより、
参照urlのように、パールのようなものでネコにニャーと泣かせることができます。
しばらく動物が嫌いになりそうです。

(続・初めてのPerl 11章)
perlboot - Perl オブジェクト指向導入編 【perldoc.jp】 http://perldoc.jp/docs/perl/5.10.0/perlboot.pod#Introducing32the32method32invocation32arrow

solarized,nocomplcache導入

カラースキーマ

solarizedSolarized
というカラースキーマがよさそうだったので導入しました。

タブ補完

neocomplcacheをインストールしてみた - yuitowest's blog
を参考にしながらnocomplcacheを導入。

括弧類を自動補完

vimを本格的にしようする環境がやってきたので、本腰いれてvimrcを整備することにしました。
eclipseのように括弧補完がやりたかったので以下の設定を入れた。

Vimで括弧/クォートを自動補完 - spiritlooseのはてなダイアリー http://d.hatena.ne.jp/spiritloose/20061113/1163401194

inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
vnoremap { "zdi{<C-R>z}<ESC>
vnoremap [ "zdi[<C-R>z]<ESC>
vnoremap ( "zdi(<C-R>z)<ESC>
vnoremap " "zdi"<C-R>z"<ESC>
vnoremap ' "zdi'<C-R>z'<ESC>

vnoremapについては、引用元の設定そのままだと私の環境では上手く動きませんでした。
が、^Vを削除したら動いたのでよしとする。

vnoremap " "zdi^V"<C-R>z^V"<ESC>
を
vnoremap " "zdi"<C-R>z"<ESC>
としたら動いた。

動的正規表現を使って任意の変数と文字列をマッチさせる

The GNU Awk User's Guide - 正規表現

動的正規表現を使う

`~'演算子や`!~'演算子の右辺に置くものは正規表現定数(スラッシュの間に置 かれた文字列)である必要はなく、任意の式を置くことができる。そのような式 は評価され、必要があれば文字列に変換される。評価され変換が行なわれた 結果は正規表現として扱われる。 このように演算が行われる正規表現は動的正規表現(dynamic regular expression)と呼ばれる。例を挙げよう。

BEGIN { identifier_regexp = "[A-Za-z_][A-Za-z_0-9]+" }
$0 ~ identifier_regexp { print }
これはidentifier_regexpawkでの変数名を表す正規表現をセ ットし、入力レコード中にこの正規表現にマッチするものがあるかをテストす るものである。

これを使えば任意の変数を含む行を抽出できる。

BEGIN{
   var="hoge"
}
$0~var{
   print $0
}
END{
}