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

http://www.ruby-lang.org/ja/man/html/FAQ_A5E1A5BDA5C3A5C9.html#a5.2e5.20private.a4.c8protected.a4.ce.b0.e3.a4.a4.a4.ac.ca.ac.a4.ab.a4.ea.a4.de.a4.bb.a4.f3


レシーバ?コンテキストのことかな?ようするにprivateは定義内でしか呼び出せないということか。

protectedにするとレシーバーを指定できる。これは同じクラスであれば外からでも呼び出しが可能になることを意味する。

Rubyでは、C++やJavaのprivateと異なり、サブクラスからでもスーパークラスのprivateメソッドを呼ぶことができる。
Rubyにおけるprotectedとprivateの違いは、レシーバが付けられるかどうかであり、サブクラスから呼べるかどうかではない。
privateメソッドにはレシーバを付けられないので、同じクラスの別のインスタンスのprivateメソッドは呼べない。このような場合にprotectedを使用する。


Ruby 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>

なるほど、いいね。

メモ

  • MでもVでもCでもない、CakePHPでいうコンポーネント的なのはどこに定義すればいいだろう?