@@ -9,6 +9,8 @@ module AnnotateModels
99 END_MARK = "== Schema Information End"
1010 PATTERN = /^\r ?\n ?# (?:#{ COMPAT_PREFIX } |#{ COMPAT_PREFIX_MD } ).*?\r ?\n (#.*\r ?\n )*(\r ?\n )*/
1111
12+ MATCHED_TYPES = %w( test fixture factory serializer scaffold )
13+
1214 # File.join for windows reverse bar compat?
1315 # I dont use windows, can`t test
1416 UNIT_TEST_DIR = File . join ( "test" , "unit" )
@@ -44,46 +46,6 @@ module AnnotateModels
4446 SERIALIZERS_TEST_DIR = File . join ( "test" , "serializers" )
4547 SERIALIZERS_SPEC_DIR = File . join ( "spec" , "serializers" )
4648
47-
48- TEST_PATTERNS = [
49- File . join ( UNIT_TEST_DIR , "%MODEL_NAME%_test.rb" ) ,
50- File . join ( MODEL_TEST_DIR , "%MODEL_NAME%_test.rb" ) ,
51- File . join ( SPEC_MODEL_DIR , "%MODEL_NAME%_spec.rb" ) ,
52- ]
53-
54- FIXTURE_PATTERNS = [
55- File . join ( FIXTURE_TEST_DIR , "%TABLE_NAME%.yml" ) ,
56- File . join ( FIXTURE_SPEC_DIR , "%TABLE_NAME%.yml" ) ,
57- File . join ( FIXTURE_TEST_DIR , "%PLURALIZED_MODEL_NAME%.yml" ) ,
58- File . join ( FIXTURE_SPEC_DIR , "%PLURALIZED_MODEL_NAME%.yml" ) ,
59- ]
60-
61- SCAFFOLD_PATTERNS = [
62- File . join ( CONTROLLER_TEST_DIR , "%PLURALIZED_MODEL_NAME%_controller_test.rb" ) ,
63- File . join ( CONTROLLER_SPEC_DIR , "%PLURALIZED_MODEL_NAME%_controller_spec.rb" ) ,
64- File . join ( REQUEST_SPEC_DIR , "%PLURALIZED_MODEL_NAME%_spec.rb" ) ,
65- File . join ( ROUTING_SPEC_DIR , "%PLURALIZED_MODEL_NAME%_routing_spec.rb" ) ,
66- ]
67-
68- FACTORY_PATTERNS = [
69- File . join ( EXEMPLARS_TEST_DIR , "%MODEL_NAME%_exemplar.rb" ) ,
70- File . join ( EXEMPLARS_SPEC_DIR , "%MODEL_NAME%_exemplar.rb" ) ,
71- File . join ( BLUEPRINTS_TEST_DIR , "%MODEL_NAME%_blueprint.rb" ) ,
72- File . join ( BLUEPRINTS_SPEC_DIR , "%MODEL_NAME%_blueprint.rb" ) ,
73- File . join ( FACTORY_GIRL_TEST_DIR , "%MODEL_NAME%_factory.rb" ) , # (old style)
74- File . join ( FACTORY_GIRL_SPEC_DIR , "%MODEL_NAME%_factory.rb" ) , # (old style)
75- File . join ( FACTORY_GIRL_TEST_DIR , "%TABLE_NAME%.rb" ) , # (new style)
76- File . join ( FACTORY_GIRL_SPEC_DIR , "%TABLE_NAME%.rb" ) , # (new style)
77- File . join ( FABRICATORS_TEST_DIR , "%MODEL_NAME%_fabricator.rb" ) ,
78- File . join ( FABRICATORS_SPEC_DIR , "%MODEL_NAME%_fabricator.rb" ) ,
79- ]
80-
81- SERIALIZER_PATTERNS = [
82- File . join ( SERIALIZERS_DIR , "%MODEL_NAME%_serializer.rb" ) ,
83- File . join ( SERIALIZERS_TEST_DIR , "%MODEL_NAME%_serializer_spec.rb" ) ,
84- File . join ( SERIALIZERS_SPEC_DIR , "%MODEL_NAME%_serializer_spec.rb" )
85- ]
86-
8749 # Don't show limit (#) on these column types
8850 # Example: show "integer" instead of "integer(4)"
8951 NO_LIMIT_COL_TYPES = [ "integer" , "boolean" ]
@@ -97,6 +59,64 @@ def model_dir=(dir)
9759 @model_dir = dir
9860 end
9961
62+ def root_dir
63+ @root_dir . is_a? ( Array ) ? @root_dir : [ @root_dir || "" ]
64+ end
65+
66+ def root_dir = ( dir )
67+ @root_dir = dir
68+ end
69+
70+ def get_patterns ( pattern_types = MATCHED_TYPES )
71+ current_patterns = [ ]
72+ root_dir . each do |root_directory |
73+ Array ( pattern_types ) . each do |pattern_type |
74+ current_patterns += case pattern_type
75+ when 'test'
76+ [
77+ File . join ( root_directory , UNIT_TEST_DIR , "%MODEL_NAME%_test.rb" ) ,
78+ File . join ( root_directory , MODEL_TEST_DIR , "%MODEL_NAME%_test.rb" ) ,
79+ File . join ( root_directory , SPEC_MODEL_DIR , "%MODEL_NAME%_spec.rb" ) ,
80+ ]
81+ when 'fixture'
82+ [
83+ File . join ( root_directory , FIXTURE_TEST_DIR , "%TABLE_NAME%.yml" ) ,
84+ File . join ( root_directory , FIXTURE_SPEC_DIR , "%TABLE_NAME%.yml" ) ,
85+ File . join ( root_directory , FIXTURE_TEST_DIR , "%PLURALIZED_MODEL_NAME%.yml" ) ,
86+ File . join ( root_directory , FIXTURE_SPEC_DIR , "%PLURALIZED_MODEL_NAME%.yml" ) ,
87+ ]
88+ when 'scaffold'
89+ [
90+ File . join ( root_directory , CONTROLLER_TEST_DIR , "%PLURALIZED_MODEL_NAME%_controller_test.rb" ) ,
91+ File . join ( root_directory , CONTROLLER_SPEC_DIR , "%PLURALIZED_MODEL_NAME%_controller_spec.rb" ) ,
92+ File . join ( root_directory , REQUEST_SPEC_DIR , "%PLURALIZED_MODEL_NAME%_spec.rb" ) ,
93+ File . join ( root_directory , ROUTING_SPEC_DIR , "%PLURALIZED_MODEL_NAME%_routing_spec.rb" ) ,
94+ ]
95+ when 'factory'
96+ [
97+ File . join ( root_directory , EXEMPLARS_TEST_DIR , "%MODEL_NAME%_exemplar.rb" ) ,
98+ File . join ( root_directory , EXEMPLARS_SPEC_DIR , "%MODEL_NAME%_exemplar.rb" ) ,
99+ File . join ( root_directory , BLUEPRINTS_TEST_DIR , "%MODEL_NAME%_blueprint.rb" ) ,
100+ File . join ( root_directory , BLUEPRINTS_SPEC_DIR , "%MODEL_NAME%_blueprint.rb" ) ,
101+ File . join ( root_directory , FACTORY_GIRL_TEST_DIR , "%MODEL_NAME%_factory.rb" ) , # (old style)
102+ File . join ( root_directory , FACTORY_GIRL_SPEC_DIR , "%MODEL_NAME%_factory.rb" ) , # (old style)
103+ File . join ( root_directory , FACTORY_GIRL_TEST_DIR , "%TABLE_NAME%.rb" ) , # (new style)
104+ File . join ( root_directory , FACTORY_GIRL_SPEC_DIR , "%TABLE_NAME%.rb" ) , # (new style)
105+ File . join ( root_directory , FABRICATORS_TEST_DIR , "%MODEL_NAME%_fabricator.rb" ) ,
106+ File . join ( root_directory , FABRICATORS_SPEC_DIR , "%MODEL_NAME%_fabricator.rb" ) ,
107+ ]
108+ when 'serializer'
109+ [
110+ File . join ( root_directory , SERIALIZERS_DIR , "%MODEL_NAME%_serializer.rb" ) ,
111+ File . join ( root_directory , SERIALIZERS_TEST_DIR , "%MODEL_NAME%_serializer_spec.rb" ) ,
112+ File . join ( root_directory , SERIALIZERS_SPEC_DIR , "%MODEL_NAME%_serializer_spec.rb" )
113+ ]
114+ end
115+ end
116+ end
117+ current_patterns . map { |p | p . sub ( /^[\/ ]*/ , '' ) }
118+ end
119+
100120 # Simple quoting for the default column value
101121 def quote ( value )
102122 case value
@@ -371,13 +391,12 @@ def annotate(klass, file, header, options={})
371391 did_annotate = true
372392 end
373393
374- %w( test fixture factory serializer scaffold ) . each do |key |
394+ MATCHED_TYPES . each do |key |
375395 exclusion_key = "exclude_#{ key . pluralize } " . to_sym
376- patterns_constant = "#{ key . upcase } _PATTERNS" . to_sym
377396 position_key = "position_in_#{ key } " . to_sym
378397
379398 unless options [ exclusion_key ]
380- did_annotate = self . const_get ( patterns_constant ) .
399+ did_annotate = self . get_patterns ( key ) .
381400 map { |file | resolve_filename ( file , model_name , table_name ) } .
382401 map { |file | annotate_one_file ( file , info , position_key , options_with_position ( options , position_key ) ) } .
383402 detect { |result | result } || did_annotate
@@ -483,6 +502,7 @@ def do_annotations(options={})
483502 end
484503
485504 self . model_dir = options [ :model_dir ] if options [ :model_dir ]
505+ self . root_dir = options [ :root_dir ] if options [ :root_dir ]
486506
487507 annotated = [ ]
488508 get_model_files ( options ) . each do |file |
@@ -512,6 +532,7 @@ def annotate_model_file(annotated, file, header, options)
512532
513533 def remove_annotations ( options = { } )
514534 self . model_dir = options [ :model_dir ] if options [ :model_dir ]
535+ self . root_dir = options [ :root_dir ] if options [ :root_dir ]
515536 deannotated = [ ]
516537 deannotated_klass = false
517538 get_model_files ( options ) . each do |file |
@@ -524,7 +545,7 @@ def remove_annotations(options={})
524545 model_file_name = file
525546 deannotated_klass = true if ( remove_annotation_of_file ( model_file_name ) )
526547
527- ( TEST_PATTERNS + SCAFFOLD_PATTERNS + FIXTURE_PATTERNS + FACTORY_PATTERNS + SERIALIZER_PATTERNS ) .
548+ get_patterns .
528549 map { |file | resolve_filename ( file , model_name , table_name ) } .
529550 each do |file |
530551 if File . exist? ( file )
0 commit comments