Sinatra+MongoDB+RSpec2な環境を作る

Ruby,Rubygems,MongoDBはインストールされているものとする
MongoDBのインストールについてはCentOSであれば前にちょっと書いた

インストール

Bundlerを使用して必要なGemをインストールする。
なおMongoDBのORMとしてMongoidを使用する

$ gem install bundler

Gemfile

source :rubygems

gem 'sinatra'
gem 'mongoid'
gem 'bson_ext'
gem 'SystemTimer' #1.8.7だけ必要だったぽい

group :test do
  gem 'rspec'
  gem 'rack-test'
end
$ bundle install
bson_extとSystemTimer

bson_ext
パフォーマンスを出すためには入れろよみたいなNoticeがでたので入れた

**Notice: C extension not loaded. This is required for optimum MongoDB Ruby driver performance.
You can install the extension as follows:
gem install bson_ext

SystemTimer
1.8.7だとうまくいかないので入れろよ的な(解読するきねえだろ)

Could not load SystemTimer >= v1.2.0. Falling back to timeout.rb. SystemTimer is STRONGLY recommended for timeouts in Ruby 1.8.7. See http://ph7spot.com/blog/system-timer-1-2-release for details.

Mongoid設定

app.rb

# coding: utf-8
require 'rubygems' # 1.8系だと必要
require 'sinatra'
require 'mongoid'

require 'models/homu'

Mongoid.configure do |config|
  config.master = Mongo::Connection.new.db("db_name")
end

models/homu.rb
String以外は型を指定する

class Homu
  include Mongoid::Document
  field :name
  field :email
  field :date, :type => Date
end

ドキュメントが充実しているのでわからんことがあれば参照するとよい

RSpec周りの設定

rake specでテストを実行したいのでRakefileを用意

Rakefile

# coding: utf-8
require "rspec/core/rake_task"

desc "run spec"
task :default => [:spec]

RSpec::Core::RakeTask.new(:spec) do |spec|
  # - (Object) pattern
  # default:   'spec/**/*_spec.rb'

  # - (Object) rspec_opts=(opts) 
  # default : nil
  spec.pattern = 'spec/*_spec.rb'
  spec.rspec_opts = %w(--color --format progress)

spec/spec_helper.rb

# coding: utf-8
ENV['RACK_ENV'] = "test"

# sinatraのアプリケーションをapp.rbとした場合
require File.dirname(__FILE__) + '/../app'

# rspecとrack-testを読み込む
require 'rspec'
require 'rack/test'

# environmentをtestに設定
set :environment, :test

# rack-testのメソッドを読み込む
RSpec.configure do |conf|
  conf.include Rack::Test::Methods
end

def app
  Sinatra::Application
end

これでspec/*_spec.rbがあるときにrake実行するとテストが実行される。
Mongoidの使い方とかそのへんはまた次回