Skip to content

Latest commit

 

History

History
executable file
·
215 lines (158 loc) · 8.77 KB

README.ja.md

File metadata and controls

executable file
·
215 lines (158 loc) · 8.77 KB

flextures

Ruby 2.3 higher Rails 4.2 higher MIT Licence

要約

このplug-inは、これまで開発中で溜まっていた Rails標準のfixtureの不満点を解消するために作成しました。 基本的な操作は単純で次のコマンドで、それぞれfixtureのロードとダンプを行います。

rake db:flextures:load
rake db:flextures:dump

また、rspecやminitest中でテストデータを読み込むのにも使用できます。

describe ItemShopController do
  flextures :users, :items
end

通常のfixtureとの主な違いは次の4点です。

  1. yamlよりもcsvを優先する
  2. migrationでテーブル構成が変わっても、カラムの変更点を無視、補完してロードを行う
  3. テーブル名とfixtureのファイル名を一致させないでも、自由なロード&ダンプが出来るオプション
  4. FactoyGirl風の読み込みフィルタで、Fixtureのデータを加工しながら読み込む事が出来る

目次

必要条件

  • ruby2.3以上

使い方

インストール方法

RailsのPlug-inとして使われることを想定しています gem化されているので、bundlerで次のように記述して、普通にbundle install してください

 gem "flextures"
bundle install
bundle exec rails generate flextures:initializer

rakeコマンド

次のコマンドで spec/fixtures/ 以下にあるfixtureのロード&ダンプを行います (読み込む基本のディレクトリは設定ファイルで変更可能)

rake db:flextures:load
rake db:flextures:dump

rake コマンドには以下の様な書式でオプションを指定することができます 指摘出来るオプションは、ロードとダンプで共通です

テーブル名で吐き出し(Userモデルusers)

rake db:flextures:dump TABLE=users

Usersモデルのfixture(users.csvか users.yml)をロードする

rake db:flextures:load MODEL=User

その他オプションは以下の通りです:

オプション 役割
TABLE テーブル名を指定してロード。テーブル名はカンマ切りで複数指定が可能
MODEL モデル名を指定してロード。モデル名はカンマ区切りで複数指定が可能
DIR フィクスチャをロード&ダンプするディレクトリを指定する
FILE loadまたはdumpするファイル名を直接指定(Userモデルのusers.csv以外を指定)
FORMAT ダンプ、またはロードするデータの種類を指定できる(csvかyml)
OPTION その他の細かい読み込みオプションはここで指定出来ます
T TABLEのエイリアス
D ディレクトリ指定のエイリアス
F ファイル名指定のエイリアス

migration等でテーブルの構成が変わった時には generateコマンドを実行すると、テーブル情報のloadとdumpをセットで行なってくれるので便利です

rake db:flextures:generate T=users

さらに詳しい説明に関しては Wiki:Rakeコマンドラインオプションを参照して下さい

ユニットテストでの使い方

ユニットテスト中でデータの読み込みが行いたくなったときのために fixtureのロード機能を使えます

次の例はRSpecからの読み込みですが 基本的な機能は、通常のfixturesと同じですので、fixtures と同じ感覚で使用して下さい

describe ItemShopController do
  flextures :users, :items
end

基本的な違いは、yamlよりcsvを優先する、カラムの変更点を検知して警告を出しながらもロードを行う等ですが もう一つ、ハッシュ引数で指定する事で、テーブル名、ファイル名を一致させなくても フィクスチャ を読み込ませることができます そのため、すべてのテストケースで依存関係を気にしながら共通のfixtureを使わなくても良い様に出来ます

describe ItemShopController do
  flextures :items, :users => :users_for_itemshop # users_for_itemshop.csv をロードする
end

その他現在はShouldからの呼び出しや様々なオプションを載せていますが さらに詳しい使い方に関しては Wiki:Unit Test Supportの説明 を参照して下さい

読み込み・書き出しフィルター

読み込みフィルター

Railsのプロジェクトに config/flextures.factory.rb というファイルを作成して、そこにフィルタを記述することによって フィクスチャの読み込み時に、値を加工して読み込む事が可能になっています 例えば、次の様に記述するとusersテーブルのlast_login_dateの値を、常に現在の時間として設定できます

Flextures::Factory.define :users do |f|
  f.last_login_date = DateTime.now
end

テーブルにdefaultの値を設定していなくても カラムのデータを適当に補完する機能があるので 大量のデータを生成したい時は次のようにfaker等と組み合わせて 必要な分だけ生成をさせると、今までより若干捗るかもしれません

require 'faker'
Flextures::Factory.define :users do |f|
  f.name= Faker::Name.name if !f.name  # ランダムで名前を生成(ただしUS仕様
  f.sex= [0,1].shuffle.first if !f.sex # 性別を設定
  # Factory Girlの様にhas_manyな感じのデータも生成できます。(初期設定でアイテムを2個持たせる)
  f.items<< [ Item.new( master_item_id: 1, count: 5 ), Item.new( master_item_id: 2, count: 3 ) ]
end

書き出しフィルター

データのdump時に加工が必要になった時には、同じくconfig/flextures.factory.rbに テーブル名と、加工したい値をキーに、処理をラムダで渡してやることで可能です

Flextures::DumpFilter.define :users, {
  :encrypted_password => lambda { |v| Base64.encode64(v) }
}

さらに細かい使い方に関しては Wiki:FactoryFilterについて を参照して下さい

設定ファイル

config/initializers/flextures.rb で設定ファイルを作成すると、データをロード&ダンプするディレクトリなどの設定を変更できます

Flextures::Configuration.configure do |config|
  # Load and dump directory change "spec/fixtures/" to "test/fixtures/"
  config.load_directory = "test/fixtures/"
  config.dump_directory = "test/fixtures/"
end

その他の情報は Wiki:設定ファイルの書式についてを参照して下さい

貢献

https://github.com/baban/flextures/graphs/contributors

ライセンス

このソフトウェアは MIT ライセンスによってライセンスされています。