Rails3 対応 MongoDB ORM、Mongoid 詳解―エクステンション

FABRICATION

Paul Eliott さんの Fabrication Gem は、オブジェクト生成ライブラリです。Mongoid を最初からサポートしており、テストの簡便のために、オブジェクトを生成する素敵な構文を提供しています。

Fabricator(:person) do
  title "Grand Poobah"
  addresses(:count => 2) do |address, i|
    Fabricate(:address, :streeet => "#{i} Bond St.")
  end
end

MONGOID-RSPEC

Evan Sagge さんの mongoid-rspec は、Mongoid 用の RSpec のマッチャーを提供します。マッチャーには、関連、オプション、バリデーション、フィールドが含まれます。

describe Person do
  it { should reference_one :account }
  it { should reference_many :posts }
  it { should be_referenced_in :organization }

  it { should validate_presence_of(:name) }

  it { should have_field(:age).of_type(Integer) }
end

describe Address do
  it { should be_embedded_in(:person).as_inverse_of(:addresses) }
end

REMARKABLE

Brian Cardarella さんの remarkable-mongoid Gem は、Mongoid 用の RSpec マッチャーの素敵な代替を提供します。マッチャーは以下の例の他に、Remarkable::ActiveModel を元に、全てのバリデーションを含みます。

describe Person do

  it { should reference_one :account }
  it { should reference_many :posts }
  it { should be_referenced_in :organization }
  it { should embed_one :name }
  it { should embed_many :addresses }
  it { should be_embedded_in :group }

  it { should validate_uniqueness_of :dob }
end

RIOT

Riot-Mongoid Gem は、Mongoid 用の riot アサーションを提供します。フィールド、キー、関連、バリデーションのアサーションが含まれます。

context "Person Model" do
  setup { Person.new }

  asserts_topic.has_field :title,       :type => String

  asserts_topic.has_association :references_one, :account
  asserts_topic.has_association :embeds_many, :addresses

  asserts_topic.has_validation :validates_presence_of, :title
end


エクステンションは以上です。