Subscribed unsubscribe Subscribe Subscribe

Scala 版 factory_girl みたいなのを作りました。

Scala

https://github.com/tototoshi/seedbed

Scala で factory_girl っぽいものを作りました。*1かなりお手軽な感じになっています。
依存ライブラリは特にありませんのでどのデータベースライブラリを使っていても大丈夫です。
動作は postgresql と h2 でのみ確認してますが、他のデータベースでも動くと思います。


とりあえず snapshot 版を sonatype にあげときました。

resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"

libraryDependencies += Seq(
  "com.github.tototoshi" %% "seedbed" % "0.1.0-SNAPSHOT"
  // and database driver
)

使い方

以下のサンプルコードでなんとなくわかってもらえると思います。
define でテーブルごとのデフォルト値を定義、 create でデータを1件挿入、get/list はデータベースからレコードを取得するのに使用します。


データの取り扱いは割り切って Map[String, Any] でやってしまいます。基本的に型安全とかよりは手軽さを重視しています。動的言語な気分で使ってください。API は factory_girl より phactory (PHP の factory_girl 的なやつ) に近いです。


あくまでテスト用ライブラリなので、メインのプロダクトコードに入れるのはやめてください。

/*
CREATE table beatles (
  id serial primary key,
  first_name varchar(10) not null,
  middle_name varchar(10),
  last_name varchar(10) not null,
  birth_date date not null
);
*/

import seedbed._

// データベースの設定
trait TestDBConfiguration extends Configuration {
  val driver: String = "org.postgresql.Driver"
  val url: String = "jdbc:postgresql://localhost/seedbed_test"
  val user: String = "user"
  val password: String = "password"
}

// Seedbed クラスのインスタンスを生成
val s = new Seedbed with TestDBConfiguration

// デフォルト値の設定
// めんどくさければ s.define("beatles") だけでも OK。DB のメタデータを見てよしなにしてくれます。
s.define("beatles", Map(
  "first_name" -> "John",
  "middle_name" -> "Winston",
  "last_name" -> "Lennon",
  "birth_date" -> new SimpleDateFormat("yyyy-MM-dd").parse("1940-10-09")
))

// データベースへレコードを1件挿入
s.create("beatles")
// デフォルト値を一部書き換えて挿入
s.create("beatles", Map("first_name" -> "Paul"))

// データベースから first_name=Paul なデータを取得
s.get("beatles", Map("first_name" -> "Paul")) //=>Some(Map(first_name -> Paul, ...))
s.get("beatles", Map("first_name" -> "John")) //=>Some(Map(first_name -> John, ...))

// データベースからデータをまとめて取得する
s.list("beatles")

予定、めも

  • association とか sequence の機能はそのうち欲しくなったら実装します。
  • joda-time くらいには依存してもいい気がしている。

*1:skinny には FactoryGirl http://skinny-framework.org/documentation/factory-girl.html があるけれど、skinny-orm 依存なので自分の用途には合わない。