@@ -9,14 +9,19 @@ def self.parse(args, env = {})
9
9
10
10
attr_reader :args , :options , :env
11
11
12
+ DEFAULT_OPTIONS = {
13
+ target_action : :do_annotations ,
14
+ exit : false
15
+ } . freeze
16
+
12
17
ANNOTATION_POSITIONS = %w[ before top after bottom ] . freeze
13
18
FILE_TYPE_POSITIONS = %w[ position_in_class position_in_factory position_in_fixture position_in_test position_in_routes position_in_serializer ] . freeze
14
19
EXCLUSION_LIST = %w[ tests fixtures factories serializers ] . freeze
15
20
FORMAT_TYPES = %w[ bare rdoc yard markdown ] . freeze
16
21
17
22
def initialize ( args , env )
18
23
@args = args
19
- @options = default_options
24
+ @options = DEFAULT_OPTIONS . dup
20
25
@env = env
21
26
end
22
27
@@ -45,114 +50,150 @@ def commit
45
50
46
51
def add_options_to_parser ( option_parser ) # rubocop:disable Metrics/MethodLength
47
52
has_set_position = { }
48
- positions = ANNOTATION_POSITIONS
49
53
50
54
option_parser . banner = 'Usage: annotate [options] [model_file]*'
51
55
52
- option_parser . on ( '--additional-file-patterns path1,path2,path3' , Array , "Additional file paths or globs to annotate, separated by commas (e.g. `/foo/bar/%model_name%/*.rb,/baz/%model_name%.rb`)" ) do |additional_file_patterns |
56
+ option_parser . on ( '--additional-file-patterns path1,path2,path3' ,
57
+ Array ,
58
+ "Additional file paths or globs to annotate, separated by commas (e.g. `/foo/bar/%model_name%/*.rb,/baz/%model_name%.rb`)" ) do |additional_file_patterns |
53
59
ENV [ 'additional_file_patterns' ] = additional_file_patterns
54
60
end
55
61
56
- option_parser . on ( '-d' , '--delete' , 'Remove annotations from all model files or the routes.rb file' ) do
62
+ option_parser . on ( '-d' ,
63
+ '--delete' ,
64
+ 'Remove annotations from all model files or the routes.rb file' ) do
57
65
@options [ :target_action ] = :remove_annotations
58
66
end
59
67
60
- option_parser . on ( '-p' , '--position [before|top|after|bottom]' , positions ,
61
- 'Place the annotations at the top (before) or the bottom (after) of the model/test/fixture/factory/route/serializer file(s)' ) do |p |
62
- env [ 'position' ] = p
68
+ option_parser . on ( '-p' ,
69
+ '--position [before|top|after|bottom]' ,
70
+ ANNOTATION_POSITIONS ,
71
+ 'Place the annotations at the top (before) or the bottom (after) of the model/test/fixture/factory/route/serializer file(s)' ) do |position |
72
+ env [ 'position' ] = position
63
73
64
74
FILE_TYPE_POSITIONS . each do |key |
65
- env [ key ] = p unless has_set_position [ key ]
75
+ env [ key ] = position unless has_set_position [ key ]
66
76
end
67
77
end
68
78
69
- option_parser . on ( '--pc' , '--position-in-class [before|top|after|bottom]' , positions ,
70
- 'Place the annotations at the top (before) or the bottom (after) of the model file' ) do |p |
71
- env [ 'position_in_class' ] = p
79
+ option_parser . on ( '--pc' ,
80
+ '--position-in-class [before|top|after|bottom]' ,
81
+ ANNOTATION_POSITIONS ,
82
+ 'Place the annotations at the top (before) or the bottom (after) of the model file' ) do |position_in_class |
83
+ env [ 'position_in_class' ] = position_in_class
72
84
has_set_position [ 'position_in_class' ] = true
73
85
end
74
86
75
- option_parser . on ( '--pf' , '--position-in-factory [before|top|after|bottom]' , positions ,
76
- 'Place the annotations at the top (before) or the bottom (after) of any factory files' ) do |p |
77
- env [ 'position_in_factory' ] = p
87
+ option_parser . on ( '--pf' ,
88
+ '--position-in-factory [before|top|after|bottom]' ,
89
+ ANNOTATION_POSITIONS ,
90
+ 'Place the annotations at the top (before) or the bottom (after) of any factory files' ) do |position_in_factory |
91
+ env [ 'position_in_factory' ] = position_in_factory
78
92
has_set_position [ 'position_in_factory' ] = true
79
93
end
80
94
81
- option_parser . on ( '--px' , '--position-in-fixture [before|top|after|bottom]' , positions ,
82
- 'Place the annotations at the top (before) or the bottom (after) of any fixture files' ) do |p |
83
- env [ 'position_in_fixture' ] = p
95
+ option_parser . on ( '--px' ,
96
+ '--position-in-fixture [before|top|after|bottom]' ,
97
+ ANNOTATION_POSITIONS ,
98
+ 'Place the annotations at the top (before) or the bottom (after) of any fixture files' ) do |position_in_fixture |
99
+ env [ 'position_in_fixture' ] = position_in_fixture
84
100
has_set_position [ 'position_in_fixture' ] = true
85
101
end
86
102
87
- option_parser . on ( '--pt' , '--position-in-test [before|top|after|bottom]' , positions ,
88
- 'Place the annotations at the top (before) or the bottom (after) of any test files' ) do |p |
89
- env [ 'position_in_test' ] = p
103
+ option_parser . on ( '--pt' ,
104
+ '--position-in-test [before|top|after|bottom]' ,
105
+ ANNOTATION_POSITIONS ,
106
+ 'Place the annotations at the top (before) or the bottom (after) of any test files' ) do |position_in_test |
107
+ env [ 'position_in_test' ] = position_in_test
90
108
has_set_position [ 'position_in_test' ] = true
91
109
end
92
110
93
- option_parser . on ( '--pr' , '--position-in-routes [before|top|after|bottom]' , positions ,
94
- 'Place the annotations at the top (before) or the bottom (after) of the routes.rb file' ) do |p |
95
- env [ 'position_in_routes' ] = p
111
+ option_parser . on ( '--pr' ,
112
+ '--position-in-routes [before|top|after|bottom]' ,
113
+ ANNOTATION_POSITIONS ,
114
+ 'Place the annotations at the top (before) or the bottom (after) of the routes.rb file' ) do |position_in_routes |
115
+ env [ 'position_in_routes' ] = position_in_routes
96
116
has_set_position [ 'position_in_routes' ] = true
97
117
end
98
118
99
- option_parser . on ( '--ps' , '--position-in-serializer [before|top|after|bottom]' , positions ,
100
- 'Place the annotations at the top (before) or the bottom (after) of the serializer files' ) do |p |
101
- env [ 'position_in_serializer' ] = p
119
+ option_parser . on ( '--ps' ,
120
+ '--position-in-serializer [before|top|after|bottom]' ,
121
+ ANNOTATION_POSITIONS ,
122
+ 'Place the annotations at the top (before) or the bottom (after) of the serializer files' ) do |position_in_serializer |
123
+ env [ 'position_in_serializer' ] = position_in_serializer
102
124
has_set_position [ 'position_in_serializer' ] = true
103
125
end
104
126
105
- option_parser . on ( '--w' , '--wrapper STR' , 'Wrap annotation with the text passed as parameter.' ,
106
- 'If --w option is used, the same text will be used as opening and closing' ) do |p |
107
- env [ 'wrapper' ] = p
127
+ option_parser . on ( '--w' ,
128
+ '--wrapper STR' ,
129
+ 'Wrap annotation with the text passed as parameter.' ,
130
+ 'If --w option is used, the same text will be used as opening and closing' ) do |wrapper |
131
+ env [ 'wrapper' ] = wrapper
108
132
end
109
133
110
- option_parser . on ( '--wo' , '--wrapper-open STR' , 'Annotation wrapper opening.' ) do |p |
111
- env [ 'wrapper_open' ] = p
134
+ option_parser . on ( '--wo' ,
135
+ '--wrapper-open STR' ,
136
+ 'Annotation wrapper opening.' ) do |wrapper_open |
137
+ env [ 'wrapper_open' ] = wrapper_open
112
138
end
113
139
114
- option_parser . on ( '--wc' , '--wrapper-close STR' , 'Annotation wrapper closing' ) do |p |
115
- env [ 'wrapper_close' ] = p
140
+ option_parser . on ( '--wc' ,
141
+ '--wrapper-close STR' ,
142
+ 'Annotation wrapper closing' ) do |wrapper_close |
143
+ env [ 'wrapper_close' ] = wrapper_close
116
144
end
117
145
118
- option_parser . on ( '-r' , '--routes' , "Annotate routes.rb with the output of 'rake routes'" ) do
146
+ option_parser . on ( '-r' ,
147
+ '--routes' ,
148
+ "Annotate routes.rb with the output of 'rake routes'" ) do
119
149
env [ 'routes' ] = 'true'
120
150
end
121
151
122
- option_parser . on ( '--models' , "Annotate ActiveRecord models" ) do
152
+ option_parser . on ( '--models' ,
153
+ "Annotate ActiveRecord models" ) do
123
154
env [ 'models' ] = 'true'
124
155
end
125
156
126
- option_parser . on ( '-a' , '--active-admin' , 'Annotate active_admin models' ) do
157
+ option_parser . on ( '-a' ,
158
+ '--active-admin' ,
159
+ 'Annotate active_admin models' ) do
127
160
env [ 'active_admin' ] = 'true'
128
161
end
129
162
130
- option_parser . on ( '-v' , '--version' , 'Show the current version of this gem' ) do
163
+ option_parser . on ( '-v' ,
164
+ '--version' ,
165
+ 'Show the current version of this gem' ) do
131
166
puts "annotate v#{ Annotate . version } "
132
167
@options [ :exit ] = true
133
168
end
134
169
135
- option_parser . on ( '-m' , '--show-migration' , 'Include the migration version number in the annotation' ) do
170
+ option_parser . on ( '-m' ,
171
+ '--show-migration' ,
172
+ 'Include the migration version number in the annotation' ) do
136
173
env [ 'include_version' ] = 'yes'
137
174
end
138
175
139
- option_parser . on ( '-k' , '--show-foreign-keys' ,
176
+ option_parser . on ( '-k' ,
177
+ '--show-foreign-keys' ,
140
178
"List the table's foreign key constraints in the annotation" ) do
141
179
env [ 'show_foreign_keys' ] = 'yes'
142
180
end
143
181
144
182
option_parser . on ( '--ck' ,
145
- '--complete-foreign-keys' , 'Complete foreign key names in the annotation' ) do
183
+ '--complete-foreign-keys' ,
184
+ 'Complete foreign key names in the annotation' ) do
146
185
env [ 'show_foreign_keys' ] = 'yes'
147
186
env [ 'show_complete_foreign_keys' ] = 'yes'
148
187
end
149
188
150
- option_parser . on ( '-i' , '--show-indexes' ,
189
+ option_parser . on ( '-i' ,
190
+ '--show-indexes' ,
151
191
"List the table's database indexes in the annotation" ) do
152
192
env [ 'show_indexes' ] = 'yes'
153
193
end
154
194
155
- option_parser . on ( '-s' , '--simple-indexes' ,
195
+ option_parser . on ( '-s' ,
196
+ '--simple-indexes' ,
156
197
"Concat the column's related indexes in the annotation" ) do
157
198
env [ 'simple_indexes' ] = 'yes'
158
199
end
@@ -168,84 +209,95 @@ def add_options_to_parser(option_parser) # rubocop:disable Metrics/MethodLength
168
209
end
169
210
170
211
option_parser . on ( '--ignore-model-subdirects' ,
171
- "Ignore subdirectories of the models directory" ) do | _dir |
212
+ "Ignore subdirectories of the models directory" ) do
172
213
env [ 'ignore_model_sub_dir' ] = 'yes'
173
214
end
174
215
175
216
option_parser . on ( '--sort' ,
176
- "Sort columns alphabetically, rather than in creation order" ) do | _dir |
217
+ "Sort columns alphabetically, rather than in creation order" ) do
177
218
env [ 'sort' ] = 'yes'
178
219
end
179
220
180
221
option_parser . on ( '--classified-sort' ,
181
- "Sort columns alphabetically, but first goes id, then the rest columns, then the timestamp columns and then the association columns" ) do | _dir |
222
+ "Sort columns alphabetically, but first goes id, then the rest columns, then the timestamp columns and then the association columns" ) do
182
223
env [ 'classified_sort' ] = 'yes'
183
224
end
184
225
185
- option_parser . on ( '-R' , '--require path' ,
226
+ option_parser . on ( '-R' ,
227
+ '--require path' ,
186
228
"Additional file to require before loading models, may be used multiple times" ) do |path |
187
229
env [ 'require' ] = if env [ 'require' ] . present?
188
- env [ 'require' ] + " ,#{ path } "
230
+ " #{ env [ 'require' ] } ,#{ path } "
189
231
else
190
232
path
191
233
end
192
234
end
193
235
194
- option_parser . on ( '-e' , '--exclude [tests,fixtures,factories,serializers]' , Array , "Do not annotate fixtures, test files, factories, and/or serializers" ) do |exclusions |
236
+ option_parser . on ( '-e' ,
237
+ '--exclude [tests,fixtures,factories,serializers]' ,
238
+ Array ,
239
+ "Do not annotate fixtures, test files, factories, and/or serializers" ) do |exclusions |
195
240
exclusions ||= EXCLUSION_LIST
196
241
exclusions . each { |exclusion | env [ "exclude_#{ exclusion } " ] = 'yes' }
197
242
end
198
243
199
- option_parser . on ( '-f' , '--format [bare|rdoc|yard|markdown]' , FORMAT_TYPES , 'Render Schema Infomation as plain/RDoc/Yard/Markdown' ) do |fmt |
200
- env [ "format_#{ fmt } " ] = 'yes'
244
+ option_parser . on ( '-f' ,
245
+ '--format [bare|rdoc|yard|markdown]' ,
246
+ FORMAT_TYPES ,
247
+ 'Render Schema Infomation as plain/RDoc/Yard/Markdown' ) do |format_type |
248
+ env [ "format_#{ format_type } " ] = 'yes'
201
249
end
202
250
203
- option_parser . on ( '--force' , 'Force new annotations even if there are no changes.' ) do |_force |
251
+ option_parser . on ( '--force' ,
252
+ 'Force new annotations even if there are no changes.' ) do
204
253
env [ 'force' ] = 'yes'
205
254
end
206
255
207
- option_parser . on ( '--frozen' , 'Do not allow to change annotations. Exits non-zero if there are going to be changes to files.' ) do
256
+ option_parser . on ( '--frozen' ,
257
+ 'Do not allow to change annotations. Exits non-zero if there are going to be changes to files.' ) do
208
258
env [ 'frozen' ] = 'yes'
209
259
end
210
260
211
- option_parser . on ( '--timestamp' , 'Include timestamp in (routes) annotation' ) do
261
+ option_parser . on ( '--timestamp' ,
262
+ 'Include timestamp in (routes) annotation' ) do
212
263
env [ 'timestamp' ] = 'true'
213
264
end
214
265
215
- option_parser . on ( '--trace' , 'If unable to annotate a file, print the full stack trace, not just the exception message.' ) do |_value |
266
+ option_parser . on ( '--trace' ,
267
+ 'If unable to annotate a file, print the full stack trace, not just the exception message.' ) do
216
268
env [ 'trace' ] = 'yes'
217
269
end
218
270
219
- option_parser . on ( '-I' , '--ignore-columns REGEX' , "don't annotate columns that match a given REGEX (i.e., `annotate -I '^(id|updated_at|created_at)'`" ) do |regex |
271
+ option_parser . on ( '-I' ,
272
+ '--ignore-columns REGEX' ,
273
+ "don't annotate columns that match a given REGEX (i.e., `annotate -I '^(id|updated_at|created_at)'`" ) do |regex |
220
274
env [ 'ignore_columns' ] = regex
221
275
end
222
276
223
- option_parser . on ( '--ignore-routes REGEX' , "don't annotate routes that match a given REGEX (i.e., `annotate -I '(mobile|resque|pghero)'`" ) do |regex |
277
+ option_parser . on ( '--ignore-routes REGEX' ,
278
+ "don't annotate routes that match a given REGEX (i.e., `annotate -I '(mobile|resque|pghero)'`" ) do |regex |
224
279
env [ 'ignore_routes' ] = regex
225
280
end
226
281
227
- option_parser . on ( '--hide-limit-column-types VALUES' , "don't show limit for given column types, separated by commas (i.e., `integer,boolean,text`)" ) do |values |
282
+ option_parser . on ( '--hide-limit-column-types VALUES' ,
283
+ "don't show limit for given column types, separated by commas (i.e., `integer,boolean,text`)" ) do |values |
228
284
env [ 'hide_limit_column_types' ] = values . to_s
229
285
end
230
286
231
- option_parser . on ( '--hide-default-column-types VALUES' , "don't show default for given column types, separated by commas (i.e., `json,jsonb,hstore`)" ) do |values |
287
+ option_parser . on ( '--hide-default-column-types VALUES' ,
288
+ "don't show default for given column types, separated by commas (i.e., `json,jsonb,hstore`)" ) do |values |
232
289
env [ 'hide_default_column_types' ] = values . to_s
233
290
end
234
291
235
- option_parser . on ( '--ignore-unknown-models' , "don't display warnings for bad model files" ) do |_values |
292
+ option_parser . on ( '--ignore-unknown-models' ,
293
+ "don't display warnings for bad model files" ) do
236
294
env [ 'ignore_unknown_models' ] = 'true'
237
295
end
238
296
239
- option_parser . on ( '--with-comment' , "include database comments in model annotations" ) do |_values |
297
+ option_parser . on ( '--with-comment' ,
298
+ "include database comments in model annotations" ) do
240
299
env [ 'with_comment' ] = 'true'
241
300
end
242
301
end
243
-
244
- def default_options
245
- {
246
- target_action : :do_annotations ,
247
- exit : false
248
- }
249
- end
250
302
end
251
303
end
0 commit comments