나는 오이의 시나리오를 기반으로 응용 프로그램 코드를 생성하는 플러그인을 만드는 방법에 대한 계획입니다,하지만 난 여기에 바퀴를 개혁하고 있지 않다 있는지 확인하려면. 누구나 오이와 함께 작동하고 모델, 컨트롤러 및 뷰를 생성하는 플러그인을 알고 있습니까?오이 시나리오를 사용하여 모델, 뷰 등을 생성 할 수있는 레일스 플러그인이 있습니까?
나는이 이해가되지 않는 경우에하는 것을 시도하고있는 무슨에 그냥 약간의 배경. 내 화이트 보드에 높은 수준의 디자인
스케치 2 밖으로 유형 : 나는 새로운 응용 프로그램을 만들 때 여기 내 워크 플로우입니다. 1은 모델과 관계를 표시하고 다른 하나는 레이아웃, 양식 등을위한 기본 화면을 보여줍니다.
높은 수준의 디자인을 기반으로 오이 시나리오를 작성합니다 (세분화되어 있습니다). 이 단계 중 많은 부분이 특정보기에서 볼 수있는 내용을 설명하고 응용 프로그램의 흐름을 개괄적으로 설명합니다. 코딩을 시작하기 전에 생각할 수있는 모든 시나리오를 만드는 것이 한 번에 하나씩 수행하고 각 시나리오를 작성한 후에 코딩하는 것보다 낫습니다.
나는 오이 시나리오를 실행하고 첫 번째 실패를보고 거기에서 코딩을 시작. 보통이 단계 전에 내 기본 설정에 레일스 응용 프로그램을 구성하고 내가 사용할 것으로 알고있는 보석을 포함시키기 위해 몇 가지 추가 설정이 있습니다. 또한 일부는 다른 사람에 의존하기 때문에 필자의 기능 파일을 실행하는 논리적 순서를 찾습니다. 분명히 인증과 같은 것으로 시작합니다.
은 그럼 제가 시나리오를 통과하는 데 필요한 코드를 만들 수 있도록 레일 발전기 (비계하거나 모델)을 사용합니다. 생성자 템플릿 중 일부를 변경하여 원하는 것을 제공합니다. 필요한 경우
은 그 때 나는 생성 된 코드를 조정할. 대부분의 경우 모델의 관계 설정, 뷰의 연관 관계 작업 및 스캐 폴딩이 제공 할 수없는 기타 비표준 기능이 필요합니다. 필요한 경우
나는
- 가 그럼 난 내 시나리오를 다시 실행하고 시나리오가 통과 할 때까지 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
이이 시점에서 바로 사이비입니다,하지만 난 그게에서 응용 프로그램을 정의하는 실제 시간을 절약 할 것이라고 생각 Cucumber 시나리오를 작성한 다음이 시나리오에 기반하여 코드를 생성합니다. 이렇게하면 동시에 테스트를 작성하고 코드를 작성할 수 있습니다. 스캐 폴드 생성기 명령 행에 대한 모든 필드를 입력 할 필요가 없으며 자동으로 연관을 설정하고 뷰에 적절한 필드 유형을 생성합니다. 또한 전체 기능 설계를 하나의 파일로 유지할 수 있습니다.이 방법을 사용하면 시나리오에서 먼저 생성기를 실행 한 다음 생성 후 오이 테스트를 실행합니다. 그것이 올바르게 설정 되었다면 모든 것이 처음으로 통과 할 것이고 사용자 정의 할 수있는 매우 견고한 프로토 타입을 갖게 될 것입니다.
이러한 종류의 테스트와 유사한 플러그인이 있습니까? & 세대 생성 콤보?
시간을내어이 책을 읽으면 고맙습니다. 조금 길다는 것을 알고 있습니다.
나는이 매우 흥미로운 아이디어를 생각을, 나는 그것을 정찰 Ragel을위한 직업이 될 것입니다 – scaney
와우, 이것은 멋진 아이디어입니다! 나는이 일을하는 것에 대해 들어 본 적이 없다. 당신이 계획대로 나아가면이 플러그인을 사용하고 아마도 기여하는 데 매우 흥미가있을 것입니다. 이 블로그에 대해 광범위하게 블로그를 게시하고 Ryan Bates에게 핑 소리를 내기 위해 Railscast를 할 수 있기를 바라고, 레일스 커뮤니티의 대량 노출을 보장하시기 바랍니다. – Samo
@Samo - 지금 당장 간단한 프로토 타입을 작성하고 있습니다. 다음 주 또는 2 일에 블로그에 대해 블로그를 작성하겠습니다. 나중에 github repo에 대한 링크를 보내 드리겠습니다. 나는 그것에 약간의 일을 넣었고 당신이 도와주고 싶은 것이 있는지 보았다. 감사! – johnmcaliley