Skip to content

Commit 0fbfdc3

Browse files
committed
Merge pull request #292 from djsegal/develop
Add root_dir capability for multiple roots
2 parents d9623df + bcecce3 commit 0fbfdc3

File tree

5 files changed

+78
-45
lines changed

5 files changed

+78
-45
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: 65 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

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'])
@@ -49,6 +50,7 @@ task :remove_annotation => :environment do
4950

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

0 commit comments

Comments
 (0)