Merbのプラグインを作る場合、merb-gen plugin plugin-name でひな形が生成されますが、現状では生成されるspecがほとんど空っぽなので、 ちゃんとしたspecを書くための足場の作り方を紹介します。

まずは、spec/spec_helper.rb を以下のような感じに準備します (これはdm-has-versionsの例です)

   1  $:.push File.join(File.dirname(__FILE__), '..', 'lib')
   2  
   3  require 'rubygems'
   4  require 'merb-core'
   5  require 'dm-core'
   6  require "spec"
   7  require 'dm-has-versions/has/versions'
   8  require 'dm-aggregates'
   9  
  10  DataMapper::Model.append_extensions DataMapper::Has::Versions
  11  Merb.disable(:initfile)
  12  Merb.start_environment(
  13    :testing      => true,
  14    :adapter      => 'runner',
  15    :environment  => ENV['MERB_ENV'] || 'test',
  16    :merb_root    => File.dirname(__FILE__) / 'fixture',
  17    :log_file     => File.dirname(__FILE__) / "merb_test.log"
  18  )
  19  DataMapper.setup(:default, "sqlite3::memory:")
  20  
  21  Spec::Runner.configure do |config|
  22    config.include(Merb::Test::ViewHelper)
  23    config.include(Merb::Test::RouteHelper)
  24    config.include(Merb::Test::ControllerHelper)
  25  
  26    DataMapper.auto_migrate!
  27  end

この例では、DataMapperを使う事を前提としています。 "sqlite3::memory:" を指定することで、テストのための データベースファイルなどを用意する必要がないので楽です。

テストで利用されるクラス群は、spec/fixture 以下に、 通常のMerbアプリケーションと同様のディレクトリ階層で用意します。

   1  % tree spec/fixture [~/project/dm-has-versions:master]
   2  spec/fixture
   3  `-- app
   4      `-- models
   5          |-- comment.rb
   6          `-- story.rb

posted by Png genki on Fri 16 Jan 2009 at 13:35

DataMapper用のバージョン管理プラグイン、 dm-has-versions をリリースしました。

dm-is-versionedというライブラリが既にあるのですが、Railsで慣れ親しんだacts_as_versionedと微妙に挙動が違うのと、revert_toやversion=ができないなど、細かいところが足りない感じがしたので作りました。

USAGE:

以下のコードをご覧の通りです。

   1  class Story
   2    include DataMapper::Resource
   3          
   4    property :id, Integer, :serial => true
   5    property :title, String
   6    property :updated_at, DateTime
   7  
   8    has_versions :ignore => [:updated_at]
   9  end
  10  
  11  Story.auto_upgrade!
  12  
  13  story = Story.create(:title => 'hello')
  14  story.version #=> 0
  15  story.update_attributes :title => 'good night'
  16  story.version #=> 1
  17  story.title #=> 'good night'
  18  story.version = 0
  19  story.title #=> 'hello'

auto_upgrade!は最初に一回だけ必要です。

posted by Png genki on Fri 16 Jan 2009 at 03:42
Contents
Merbプラグインのspecの書き方
dm-has-versions-0.1.0をリリース
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ