キュウリのシナリオに基づいてアプリコードを生成するプラグインの作成を計画していますが、私はここでホイールを再開発していないことを確認したいと思います。誰もがキュウリと協力してモデル、コントローラ、ビューを生成するプラグインを認識していますか?キュウリのシナリオを使って、モデルやビューなどを生成できるRailsプラグインはありますか?
これが意味をなさない場合に備えて、私がやろうとしていることについてちょっとした背景があります。新しいアプリケーションを作成するときのワークフローは次のとおりです。
ホワイトボードに2種類のハイレベルデザインをスケッチします。 1はモデルと関係を示し、もう1つはレイアウト、フォームなどのプリミティブ画面を示しています。
高レベルデザイン(細かい粒度)に基づいてキュウリのシナリオを作成します。これらの手順の多くは、特定のビューで何を表示するかを記述し、アプリケーションの流れを概説しています。コーディングを開始する前に考えることができるすべてのシナリオを作成するほうが、各シナリオを作成した後に一度に1つずつ行い、コーディングするよりも優れています。
私はキュウリのシナリオを実行し、最初の失敗を見てそこからコーディングを開始します。私は通常、このステップの前にいくつかの追加の設定をして、自分のRailsアプリケーションを自分の環境設定に設定し、使用することがわかっている宝石を含めます。私は、他の人に依存しているものもあるので、私のフィーチャファイルを実行する論理的な命令を見つけました。明らかに認証のようなものから始めます。
次に、シナリオを渡すために必要なコードを作成するために、Railsジェネレータ(スカフォールドまたはモデルのみ)を使用します。私は、私が欲しいものを私に与えるためにいくつかのジェネレータテンプレートを変更します。
次に、必要に応じて生成されたコードを微調整します。ほとんどの場合、モデル内の関係の設定、ビュー内の関連付けの作業、および足場が提供できないその他の非標準機能が含まれます。
必要に応じて
は、私はその後、私は私のシナリオを再実行し、シナリオが通過するまで4-6のいずれかの手順を繰り返し、私のマイグレーションを実行します。
すべてのシナリオが終了するまで、手順4〜7を繰り返します。
私は間違っているかもしれませんが、多くの人がこのようなアプローチを使用していると思います。私を悩ますことは、シナリオの作成とコードの生成/作成の間に重複がたくさんあることです。キュウリのシナリオで自分のアプリのスケルトンを生成し、ステップ定義を使用して生成されるものをカスタマイズするのに役立てたいと考えています。次に例を示します。
Scenario: MODEL widget exists
Given a widget model exists
Then it should belong to a "manufacturer"
And it should have a "quantity:integer" field
And it should validate the presence of "quantity"
And it should have many "wadgets"
And it should accept nested attributes for "wadgets"
#etc...
Scenario: VIEW new widget page
Given I am on the new widgets page
Then I should see a "quantity" field
And I should see a "wadgets:name" nested field
And I should see a button with text "Save Widget"
Scenario: CONTROLLER widget is created
Given a new widget is created
Then I should be on the widgets page
これはそうのようなコードが生成されます。
#FROM SCENARIO 1
class Widget < ActiveRecord::Base
has_many :wadgets
belongs_to :manufacturer
validates_presence_of :quantity
accepts_nested_attributes_for :wadgets
end
#FROM SCENARIO 1
class CreateWidget < ActiveRecord::Migration
def self.up
create_table :widgets do |t|
t.integer :quantity, :null=>false
t.integer :manufacturer_id
t.timestamps
end
end
def self.down
drop_table :widgets
end
end
#FROM SCENARIO 2
#new.html.haml (using formtastic helpers)
=semantic_form_for(@widget) do |f|
= f.inputs do
= f.input :quantity
= f.semantic_fields_for :wadgets do |wadget|
= location.input :name
= f.buttons
=f.commit_button "Save Widget"
#FROM SCENARIO 3 (using inherited resources)
class WidgetsController < InheritedResources::Base
def create
create!{ widget_urls }
end
end
これは、この時点では単なる擬似ですが、私はでアプリケーションを定義するには、実際の時間の節約になると思いますキュウリのシナリオを作成し、これらのシナリオに基づいてコードを生成します。これにより、同時にテストを作成してコードを書くことができます。スカフォールドジェネレータのコマンドラインのフィールドをすべて入力する必要はなく、自動的に関連付けが設定され、ビューに適切なフィールドタイプが作成されます。また、1つのファイルにフィーチャーデザイン全体を保存することもできます。この手法を使用すると、まずシナリオでジェネレータを実行し、生成後にキュウリ試験を実行します。もしそれが正しく設定されていれば、すべてが初めて成功し、あなたがカスタマイズできるかなり頑丈なプロトタイプを持っているでしょう。
この種のテストに似たプラグインがありますか?&世代のコンボはありますか?
あなたがこの記事を読む時間があれば、ありがとう。私はそれが少し長いことを知っています。
が、私はこの非常に興味深いアイデアを考えると、私はそれを偵察しますRagelの仕事になるでしょう – scaney
うわー、これはクールなアイデアです!私はこれを行うことは何も聞いていない。あなたの計画を進めるなら、私はこのプラグインの使用に興味があり、多分貢献しているでしょう。私はあなたがこれについて広範囲にブログをして、Ryan Batesにpingしてもらいたいので、Railscastを使ってRailsコミュニティの大半にさらされるようにしたいと思っています。 – Samo
@Samo - 私は簡単なプロトタイプを作って、今のことを考えようとしています。私はおそらく次週または2日にそれについてブログを書くつもりです。あとでgithubリポジトリへのリンクを送ってきます私はそれにいくつかの仕事を入れ、あなたが手助けしたいものがあるかどうかを見ます。ありがとう! – johnmcaliley