blog.sowatchasayin

Rails etc.

今日のSVNお便利コマンド

マイグレーションが通らないんで、気に入らない文字列を含むのをを消した。
grep "文字列" db/migrate -rl |xargs svn rm

消しすぎて戻すのが大変なので、なんとか工夫してみた。
svn st db/migrate/|grep D|sed -e "s/D//"|xargs svn revert

必要な変更が消えたり、戻ったりしないよう、気をつけてつかってね。

メールもrspec on Railsしちゃおう

できるぞ~。

送るメールはファイルを直接読みました。
before do
  raw_email = File.read(RAILS_ROOT + '/どこか/test.eml')
  @mail = TMail::Mail.parse(raw_email)
  @mail.to = "アドレス"
end 

受信はコンソールからやる時と同じ。
to_sでTmailのメールオブジェクトから生メールに戻してあげて。
UserMailer.receive(@mail.to_s)

何を送ったかも~ わかるよ~♪
describe "送ったら" do
  it "送った個数が増えるはず!" do 
  lambda{
    #ここで送る
  }.should change(sent, :count).by(1)
end 
sent.first.bodyで本文見れます。

例によって受け売りです。
RSpec: Testing Mail Delivery (simple)

bash to rush

Rubyっぽいbash。まじですか。
Rush
rush is a replacement for the unix shell (bash, zsh, etc) which uses pure Ruby syntax.

確かに、BashのUI(interfaceなのは間違いないよね)はたまにヒドイ。Rubyにしたくなる気持ちはわかる。
しかし、、、これはやっぱりきもい。
myproj.ls
myproj['app/models/my_model.rb'].vi
まさかのリモートアクセスもできます。

ここで知りました。
Blink #1 - The first in a series of Link-Blogging posts

知らなんだ

render :partialって毎回書くのうっとうしいなー。と思っていたところでした。
基本、パーシャルしかレンダーしないっす。

What's New in Edge Rails: render Stops Being High-Maintenance

2.3からは
render @article

なんとすまーとな。

最新のRailsでrestful_authenticationを使う苦労に苛まれる初秋の一日でした。

2.3.4でrestful_authenticationのspecが通らない。この子たちのせいだった。

Rspecが新しいとダメな所がありました。下記のパッチみたいに直せばOKでした(update for rspec > 1.1.12らしい)。
http://github.com/dchelimsky/restful-authentication/commit/ad92c6cb52500c37ef81e30ac4e79adffc2f4d39

formatted_* routesが無くなった。これで通るっす。
- formatted_user_path(:id => '1', :format => 'xml').should == "/users/1.xml"
- formatted_user_path(:id => '1', :format => 'json').should == "/users/1.json"
+ user_path(:id => '1', :format => 'xml').should == "/users/1.xml"
+ user_path(:id => '1', :format => 'json').should == "/users/1.json"

いきさつ
What's New in Edge Rails: No More Formatted Routes
Add optional :format argument to named routes

XSS怖い、全部マークアップ外す。

XSS怖いですね。
Webのセキュリティ努力のゴールにあるのは「絶望」のみ

ということで遊びで作ってるRailsアプリもちゃんと対策しようと思いました。

で、Safe ERBを入れようとすると。。。
mongrelだと使えない。わざわざWebrickを使うのもメンドウなんです。

探してみたらお便利プラグインありました。
入れただけで、勝手にマークアップをはずします。何もしないでOK。すばらしい。
TechCrunchで挙がっていた例のこいつ
'<script>alert('y0');</script>'

が、こう
'alert('y0');'

なります。

設定すれば一部のカラムだけ除外とかもできるみたいです。リッチなテキストにしたくなったら、そうします。
xss_terminate

ここで見つけました。
Auto-escaping HTML with Rails

AJAXなアクションでflashがついてこない

僕はRailsのflashが好きです。理由はありません。

しかし、こいつ、Ajaxのアクションに対してはうまく動作してくれない。
普通のhttpだとページ遷移すると消えてくれるのですが、どうやらxhrだとそこの片付けをしてくれません。何ということだ…。

なので、下記を参考にがんばって非同期に更新できるようにしました。
Rails Flash with Ajax
flashの部分をpartialに切り出して、毎回page.replace_htmlしてあげる戦略です。

書いてある通りにやろうとしたらダメだった。
ヘルパーにちゃんとpageオブジェクトを渡してあげる。

module ApplicationHelper
~~~~~
def reload_flash(page)
page.replace_html 'flash', :partial => 'layouts/flash'
flash.discard
end
~~~~
end


ちなみにビューのremote_form_forでupdate_pageしようとしたらダメだった。
コントローラを通る前のflashパーシャルをrenderしても、flashに何も入ってないから意味ないし。

Author

Fujimura Daisuke
http://fujimuradaisuke.com

Labels