Permalink
Browse files

Merge pull request #48 from rtlong/master

Implement FactoryGirl
  • Loading branch information...
2 parents 634b6ac + a645dc4 commit 9ce1fd65960b3ebde87fce26b178e07076002474 @ctran ctran committed Sep 15, 2011
Showing with 23 additions and 10 deletions.
  1. +23 −10 lib/annotate/annotate_models.rb
@@ -9,11 +9,15 @@ class << self
# I dont use windows, can`t test
UNIT_TEST_DIR = File.join("test", "unit" )
SPEC_MODEL_DIR = File.join("spec", "models")
- # Object Daddy http://github.com/flogic/object_daddy/tree/master
+ # Object Daddy http://github.com/flogic/object_daddy
EXEMPLARS_TEST_DIR = File.join("test", "exemplars")
EXEMPLARS_SPEC_DIR = File.join("spec", "exemplars")
# Machinist http://github.com/notahat/machinist
BLUEPRINTS_DIR = File.join("test", "blueprints")
+ # FactoryGirl http://github.com/thoughtbot/factory_girl
+ FACTORIES_TEST_DIR = File.join("test", "factories")
+ FACTORIES_SPEC_DIR = File.join("spec", "factories")
+
def model_dir
@model_dir || "app/models"
@@ -119,12 +123,13 @@ def annotate_one_file(file_name, info_block, options={})
old_content = File.read(file_name)
# Ignore the Schema version line because it changes with each migration
- header = Regexp.new(/(^# Table name:.*?\n(#.*[\r]?\n)*[\r]?\n)/)
- old_header = old_content.match(header).to_s
- new_header = info_block.match(header).to_s
-
- old_columns = old_header && old_header.scan(/#[\t\s]+([\w\d]+)[\t\s]+\:([\d\w]+)/).sort
- new_columns = new_header && new_header.scan(/#[\t\s]+([\w\d]+)[\t\s]+\:([\d\w]+)/).sort
+ header_pattern = /(^# Table name:.*?\n(#.*[\r]?\n)*[\r]?\n)/
+ old_header = old_content.match(header_pattern).to_s
+ new_header = info_block.match(header_pattern).to_s
+
+ column_pattern = /^#[\t ]+\w+[\t ]+:\w+/
+ old_columns = old_header && old_header.scan(column_pattern).sort
+ new_columns = new_header && new_header.scan(column_pattern).sort
if old_columns == new_columns
false
@@ -176,7 +181,9 @@ def annotate(klass, file, header,options={})
File.join(SPEC_MODEL_DIR, "#{model_name}_spec.rb"), # spec
].each do |file|
# todo: add an option "position_in_test" -- or maybe just ask if anyone ever wants different positions for model vs. test vs. fixture
- annotate_one_file(file, info, options_with_position(options, :position_in_fixture))
+ if annotate_one_file(file, info, options_with_position(options, :position_in_fixture))
+ annotated = true
+ end
end
end
@@ -185,14 +192,20 @@ def annotate(klass, file, header,options={})
File.join(EXEMPLARS_TEST_DIR, "#{model_name}_exemplar.rb"), # Object Daddy
File.join(EXEMPLARS_SPEC_DIR, "#{model_name}_exemplar.rb"), # Object Daddy
File.join(BLUEPRINTS_DIR, "#{model_name}_blueprint.rb"), # Machinist Blueprints
+ File.join(FACTORIES_TEST_DIR, "#{model_name.pluralize}.rb"), # FactoryGirl Factories
+ File.join(FACTORIES_SPEC_DIR, "#{model_name.pluralize}.rb"), # FactoryGirl Factories
].each do |file|
- annotate_one_file(file, info, options_with_position(options, :position_in_fixture))
+ if annotate_one_file(file, info, options_with_position(options, :position_in_fixture))
+ annotated = true
+ end
end
FIXTURE_DIRS.each do |dir|
fixture_file_name = File.join(dir,klass.table_name + ".yml")
if File.exist?(fixture_file_name)
- annotate_one_file(fixture_file_name, info, options_with_position(options, :position_in_fixture))
+ if annotate_one_file(fixture_file_name, info, options_with_position(options, :position_in_fixture))
+ annotated = true
+ end
end
end
end

0 comments on commit 9ce1fd6

Please sign in to comment.