Skip to content

Commit 7c2d14b

Browse files
committed
Add root_dir capability for multiple roots
1 parent 6fd2fb6 commit 7c2d14b

File tree

5 files changed

+76
-44
lines changed

5 files changed

+76
-44
lines changed

bin/annotate

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ OptionParser.new do |opts|
129129
ENV['model_dir'] = dir
130130
end
131131

132+
opts.on('--root-dir dir',
133+
"Annotate files stored within root dir projects, separate multiple dirs with comas") do |dir|
134+
ENV['root_dir'] = dir
135+
end
136+
132137
opts.on('--ignore-model-subdirects',
133138
"Ignore subdirectories of the models directory") do |dir|
134139
ENV['ignore_model_sub_dir'] = "yes"

lib/annotate.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module Annotate
3333
:ignore_columns, :skip_on_db_migrate, :wrapper_open, :wrapper_close, :wrapper
3434
]
3535
PATH_OPTIONS=[
36-
:require, :model_dir
36+
:require, :model_dir, :root_dir
3737
]
3838

3939

@@ -76,6 +76,10 @@ def self.setup_options(options = {})
7676
options[:model_dir] = ['app/models']
7777
end
7878

79+
if(options[:root_dir].empty?)
80+
options[:root_dir] = ['/']
81+
end
82+
7983
options[:wrapper_open] ||= options[:wrapper]
8084
options[:wrapper_close] ||= options[:wrapper]
8185

lib/annotate/annotate_models.rb

Lines changed: 63 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -44,46 +44,6 @@ module AnnotateModels
4444
SERIALIZERS_TEST_DIR = File.join("test", "serializers")
4545
SERIALIZERS_SPEC_DIR = File.join("spec", "serializers")
4646

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-
8747
# Don't show limit (#) on these column types
8848
# Example: show "integer" instead of "integer(4)"
8949
NO_LIMIT_COL_TYPES = ["integer", "boolean"]
@@ -97,6 +57,64 @@ def model_dir=(dir)
9757
@model_dir = dir
9858
end
9959

60+
def root_dir
61+
@root_dir.is_a?(Array) ? @root_dir : [@root_dir || "/"]
62+
end
63+
64+
def root_dir=(dir)
65+
@root_dir = dir
66+
end
67+
68+
def get_patterns(pattern_types)
69+
current_patterns = []
70+
root_dir.each do |root_directory|
71+
Array(pattern_types).each do |pattern_type|
72+
current_patterns += case pattern_type
73+
when 'test'
74+
[
75+
File.join(root_directory, UNIT_TEST_DIR, "%MODEL_NAME%_test.rb"),
76+
File.join(root_directory, MODEL_TEST_DIR, "%MODEL_NAME%_test.rb"),
77+
File.join(root_directory, SPEC_MODEL_DIR, "%MODEL_NAME%_spec.rb"),
78+
]
79+
when 'fixture'
80+
[
81+
File.join(root_directory, FIXTURE_TEST_DIR, "%TABLE_NAME%.yml"),
82+
File.join(root_directory, FIXTURE_SPEC_DIR, "%TABLE_NAME%.yml"),
83+
File.join(root_directory, FIXTURE_TEST_DIR, "%PLURALIZED_MODEL_NAME%.yml"),
84+
File.join(root_directory, FIXTURE_SPEC_DIR, "%PLURALIZED_MODEL_NAME%.yml"),
85+
]
86+
when 'scaffold'
87+
[
88+
File.join(root_directory, CONTROLLER_TEST_DIR, "%PLURALIZED_MODEL_NAME%_controller_test.rb"),
89+
File.join(root_directory, CONTROLLER_SPEC_DIR, "%PLURALIZED_MODEL_NAME%_controller_spec.rb"),
90+
File.join(root_directory, REQUEST_SPEC_DIR, "%PLURALIZED_MODEL_NAME%_spec.rb"),
91+
File.join(root_directory, ROUTING_SPEC_DIR, "%PLURALIZED_MODEL_NAME%_routing_spec.rb"),
92+
]
93+
when 'factory'
94+
[
95+
File.join(root_directory, EXEMPLARS_TEST_DIR, "%MODEL_NAME%_exemplar.rb"),
96+
File.join(root_directory, EXEMPLARS_SPEC_DIR, "%MODEL_NAME%_exemplar.rb"),
97+
File.join(root_directory, BLUEPRINTS_TEST_DIR, "%MODEL_NAME%_blueprint.rb"),
98+
File.join(root_directory, BLUEPRINTS_SPEC_DIR, "%MODEL_NAME%_blueprint.rb"),
99+
File.join(root_directory, FACTORY_GIRL_TEST_DIR, "%MODEL_NAME%_factory.rb"), # (old style)
100+
File.join(root_directory, FACTORY_GIRL_SPEC_DIR, "%MODEL_NAME%_factory.rb"), # (old style)
101+
File.join(root_directory, FACTORY_GIRL_TEST_DIR, "%TABLE_NAME%.rb"), # (new style)
102+
File.join(root_directory, FACTORY_GIRL_SPEC_DIR, "%TABLE_NAME%.rb"), # (new style)
103+
File.join(root_directory, FABRICATORS_TEST_DIR, "%MODEL_NAME%_fabricator.rb"),
104+
File.join(root_directory, FABRICATORS_SPEC_DIR, "%MODEL_NAME%_fabricator.rb"),
105+
]
106+
when 'serializer'
107+
[
108+
File.join(root_directory, SERIALIZERS_DIR, "%MODEL_NAME%_serializer.rb"),
109+
File.join(root_directory, SERIALIZERS_TEST_DIR, "%MODEL_NAME%_serializer_spec.rb"),
110+
File.join(root_directory, SERIALIZERS_SPEC_DIR, "%MODEL_NAME%_serializer_spec.rb")
111+
]
112+
end
113+
end
114+
end
115+
return current_patterns.map{ |p| p.sub(/^[\/]*/, '') }
116+
end
117+
100118
# Simple quoting for the default column value
101119
def quote(value)
102120
case value
@@ -373,11 +391,11 @@ def annotate(klass, file, header, options={})
373391

374392
%w(test fixture factory serializer scaffold).each do |key|
375393
exclusion_key = "exclude_#{key.pluralize}".to_sym
376-
patterns_constant = "#{key.upcase}_PATTERNS".to_sym
394+
patterns_type = "#{key.downcase}"
377395
position_key = "position_in_#{key}".to_sym
378396

379397
unless options[exclusion_key]
380-
did_annotate = self.const_get(patterns_constant).
398+
did_annotate = self.get_patterns(patterns_type).
381399
map { |file| resolve_filename(file, model_name, table_name) }.
382400
map { |file| annotate_one_file(file, info, position_key, options_with_position(options, position_key)) }.
383401
detect { |result| result } || did_annotate
@@ -483,6 +501,7 @@ def do_annotations(options={})
483501
end
484502

485503
self.model_dir = options[:model_dir] if options[:model_dir]
504+
self.root_dir = options[:root_dir] if options[:root_dir]
486505

487506
annotated = []
488507
get_model_files(options).each do |file|
@@ -512,6 +531,7 @@ def annotate_model_file(annotated, file, header, options)
512531

513532
def remove_annotations(options={})
514533
self.model_dir = options[:model_dir] if options[:model_dir]
534+
self.root_dir = options[:root_dir] if options[:root_dir]
515535
deannotated = []
516536
deannotated_klass = false
517537
get_model_files(options).each do |file|
@@ -524,7 +544,7 @@ def remove_annotations(options={})
524544
model_file_name = file
525545
deannotated_klass = true if(remove_annotation_of_file(model_file_name))
526546

527-
(TEST_PATTERNS + SCAFFOLD_PATTERNS + FIXTURE_PATTERNS + FACTORY_PATTERNS + SERIALIZER_PATTERNS).
547+
(get_patterns(%w[test scaffold fixture factory serializer])).
528548
map { |file| resolve_filename(file, model_name, table_name) }.
529549
each do |file|
530550
if File.exist?(file)

lib/generators/annotate/templates/auto_annotate_models.rake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ if Rails.env.development?
1616
'show_indexes' => 'true',
1717
'simple_indexes' => 'false',
1818
'model_dir' => 'app/models',
19+
'root_dir' => '/',
1920
'include_version' => 'false',
2021
'require' => '',
2122
'exclude_tests' => 'false',

lib/tasks/annotate_models.rake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ task :annotate_models => :environment do
2121
options[:show_indexes] = Annotate.true?(ENV['show_indexes'])
2222
options[:simple_indexes] = Annotate.true?(ENV['simple_indexes'])
2323
options[:model_dir] = ENV['model_dir'] ? ENV['model_dir'].split(',') : ['app/models']
24+
options[:root_dir] = ENV['root_dir'] ? ENV['root_dir'].split(',') : ['/']
2425
options[:include_version] = Annotate.true?(ENV['include_version'])
2526
options[:require] = ENV['require'] ? ENV['require'].split(',') : []
2627
options[:exclude_tests] = Annotate.true?(ENV['exclude_tests'])
@@ -48,6 +49,7 @@ task :remove_annotation => :environment do
4849

4950
options={ :is_rake => true }
5051
options[:model_dir] = ENV['model_dir']
52+
options[:root_dir] = ENV['root_dir']
5153
options[:require] = ENV['require'] ? ENV['require'].split(',') : []
5254
options[:trace] = Annotate.true?(ENV['trace'])
5355
AnnotateModels.remove_annotations(options)

0 commit comments

Comments
 (0)