From 9f26cabfdf0cd250321d56e380375b454b4d7456 Mon Sep 17 00:00:00 2001 From: Mike Gehard Date: Mon, 11 Jul 2011 21:11:06 -0600 Subject: [PATCH] Move generators from rails3-generators gem over to factory_girl_rails. --- features/generators.feature | 13 +++++++++++++ lib/generators/factory_girl.rb | 11 +++++++++++ .../factory_girl/model/model_generator.rb | 14 ++++++++++++++ .../factory_girl/model/templates/fixtures.rb | 9 +++++++++ 4 files changed, 47 insertions(+) create mode 100644 features/generators.feature create mode 100644 lib/generators/factory_girl.rb create mode 100644 lib/generators/factory_girl/model/model_generator.rb create mode 100644 lib/generators/factory_girl/model/templates/fixtures.rb diff --git a/features/generators.feature b/features/generators.feature new file mode 100644 index 0000000..d140409 --- /dev/null +++ b/features/generators.feature @@ -0,0 +1,13 @@ +Feature: + In order to easily generate factory files instead of fixture files when generating models + As a user of Rails3 and factory_girl + I would like to use factory_girl_rails generators. + + Scenario: The factory_girl_rails generators create a factory file + for each model that I generate + When I successfully run `bundle exec rails new testapp` + And I cd to "testapp" + And I add "factory_girl_rails" from this project as a dependency + When I successfully run `bundle install` + And I successfully run `bundle exec rails generate model User name:string --fixture-replacement=factory_girl` + Then the output should contain "test/factories/users.rb" \ No newline at end of file diff --git a/lib/generators/factory_girl.rb b/lib/generators/factory_girl.rb new file mode 100644 index 0000000..40f5bd3 --- /dev/null +++ b/lib/generators/factory_girl.rb @@ -0,0 +1,11 @@ +require 'rails/generators/named_base' + +module FactoryGirl + module Generators + class Base < Rails::Generators::NamedBase #:nodoc: + def self.source_root + @_factory_girl_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'factory_girl', generator_name, 'templates')) + end + end + end +end \ No newline at end of file diff --git a/lib/generators/factory_girl/model/model_generator.rb b/lib/generators/factory_girl/model/model_generator.rb new file mode 100644 index 0000000..49698fb --- /dev/null +++ b/lib/generators/factory_girl/model/model_generator.rb @@ -0,0 +1,14 @@ +require 'generators/factory_girl' + +module FactoryGirl + module Generators + class ModelGenerator < Base + argument :attributes, :type => :array, :default => [], :banner => "field:type field:type" + class_option :dir, :type => :string, :default => "test/factories", :desc => "The directory where the factories should go" + + def create_fixture_file + template 'fixtures.rb', File.join(options[:dir], "#{table_name}.rb") + end + end + end +end diff --git a/lib/generators/factory_girl/model/templates/fixtures.rb b/lib/generators/factory_girl/model/templates/fixtures.rb new file mode 100644 index 0000000..cbfdd99 --- /dev/null +++ b/lib/generators/factory_girl/model/templates/fixtures.rb @@ -0,0 +1,9 @@ +# Read about factories at http://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :<%= singular_name %> do + <% for attribute in attributes -%> + <%= attribute.name %> <%= attribute.default.inspect %> + <% end -%> + end +end \ No newline at end of file