Ruby on Railsの履歴
現在Javaでは、DIのように疎結合ということがひとつのキーワードとして扱われている。これに対し、Ruby on Railsは密結合のウェブフレームワークだという。
http://journal.mycom.co.jp/articles/2005/08/29/lldn/001.html
密結合なフレームワーク。
テスト
テストデータベースにスキーマをコピー
$ rake db:test:prepare
テスト実行する
$ ruby test/unit/person_test.rb
テスト実行する
$ ruby test/unit/person_test.rb
特定のメソッドのみテスト実行する
$ ruby test/unit/person_test.rb -n test_set_name
fixturesを使う
class PersonTest < ActiveSupport::TestCase def test_set_name person = persons(:one) end end
fixturesはテンプレートの記法と同じく動的に生成できる。
privateとprotected
privateの意味は、メソッドを関数形式でだけ呼び出せるようにし、 レシーバー形式では呼び出せないようにするという意味です。
class Foo
def test
print "hello\n"
end
private :test
end
レシーバ?コンテキストのことかな?ようするにprivateは定義内でしか呼び出せないということか。
protectedにするとレシーバーを指定できる。これは同じクラスであれば外からでも呼び出しが可能になることを意味する。
Rubyでは、C++やJavaのprivateと異なり、サブクラスからでもスーパークラスのprivateメソッドを呼ぶことができる。
Rubyにおけるprotectedとprivateの違いは、レシーバが付けられるかどうかであり、サブクラスから呼べるかどうかではない。
privateメソッドにはレシーバを付けられないので、同じクラスの別のインスタンスのprivateメソッドは呼べない。このような場合にprotectedを使用する。
arrayかどうかチェックする
obj.instance_of?(Array)
obj.class == "Array"
レイジーロード
validation.rbにこんなのがあった
# Returns the Errors object that holds all information about attribute error messages. def errors @errors ||= Errors.new(self) end
irb(main):029:0> class Moge irb(main):030:1> @@moge = nil irb(main):031:1> def self.get irb(main):032:2> @@moge ||= Moge.new irb(main):033:2> end irb(main):034:1> end => nil irb(main):035:0> Moge.get() => #<Moge:0x1003a3418> irb(main):036:0> Moge.get() => #<Moge:0x1003a3418>
なるほど、いいね。