annotate 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +8 -0
- data/README.rdoc +7 -7
- data/annotate.gemspec +2 -0
- data/lib/annotate.rb +5 -6
- data/lib/annotate/annotate_models.rb +3 -3
- data/lib/annotate/constants.rb +5 -0
- data/lib/annotate/parser.rb +251 -0
- data/lib/annotate/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ed01c42404ffa9b87f256ce671d68a47065b6dc6880bf2e351a2ca94bc01e24
|
4
|
+
data.tar.gz: 62fa4fa3174f2a32b3d045d50ab3be26ff4647053c3e455f2fce70e8d4f8e24e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec228f10fb750acdc34f8708385daa5943e0cda4ebe1f59633d67c29b906ff70e13880c800b5e8778d242007cec75e123e67969cdc61e6a2c84af9c2122d1613
|
7
|
+
data.tar.gz: 492a844a0e1be69e77a689c79e3b5896d187813b02be71c0a16d8666dedc29aabae91387f0c0031b103338dbaae0ee4dac3cf2d13e7aecee3ba1bfae865b9fd6
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 3.0.2
|
2
|
+
* Fixes `LoadError` due to gemspec not referencing `parser.rb`, issue #657 (#660)
|
3
|
+
* Changes `--additional_file_patterns` to use dashes `--additional-file-patterns` for consistency (#649)
|
4
|
+
* Refactor: moving constants into `constants.rb` (#653)
|
5
|
+
|
6
|
+
== 3.0.1
|
7
|
+
* Skipped as an official release, used the 3.0.1 patch for setting up Github Actions (#619)
|
8
|
+
|
1
9
|
== 3.0.0
|
2
10
|
* Added `--models` CLI option fixing issue #563 (#647)
|
3
11
|
* Added `--additional_file_patterns` option for additional file patterns (#633) #636) #637)
|
data/README.rdoc
CHANGED
@@ -163,7 +163,7 @@ you can do so with a simple environment variable, instead of editing the
|
|
163
163
|
== Options
|
164
164
|
|
165
165
|
Usage: annotate [options] [model_file]*
|
166
|
-
--
|
166
|
+
--additional-file-patterns Additional file paths or globs to annotate, separated by commas (e.g. `/foo/bar/%model_name%/*.rb,/baz/%model_name%.rb`)
|
167
167
|
-d, --delete Remove annotations from all model files or the routes.rb file
|
168
168
|
-p [before|top|after|bottom], Place the annotations at the top (before) or the bottom (after) of the model/test/fixture/factory/route/serializer file(s)
|
169
169
|
--position
|
@@ -216,18 +216,18 @@ you can do so with a simple environment variable, instead of editing the
|
|
216
216
|
--ignore-unknown-models don't display warnings for bad model files
|
217
217
|
--with-comment include database comments in model annotations
|
218
218
|
|
219
|
-
=== Option: +
|
219
|
+
=== Option: +additional-file-patterns+
|
220
220
|
|
221
|
-
CLI: +--
|
222
|
-
Ruby: +:
|
221
|
+
CLI: +--additional-file-patterns+<br>
|
222
|
+
Ruby: +:additional-file-patterns+
|
223
223
|
|
224
224
|
Provide additional paths for the gem to annotate. These paths can include globs.
|
225
225
|
It is recommended to use absolute paths. Here are some examples:
|
226
226
|
|
227
227
|
|
228
|
-
- <code>/app/lib/decorates/%MODEL_NAME
|
229
|
-
- <code>/app/lib/forms/%PLURALIZED_MODEL_NAME
|
230
|
-
- <code>/app/lib/forms/%TABLE_NAME
|
228
|
+
- <code>/app/lib/decorates/%MODEL_NAME%/*.rb</code>
|
229
|
+
- <code>/app/lib/forms/%PLURALIZED_MODEL_NAME%/**/*.rb</code>
|
230
|
+
- <code>/app/lib/forms/%TABLE_NAME%/*.rb</code>
|
231
231
|
|
232
232
|
The appropriate model will be inferred using the <code>%*%</code> syntax, annotating any matching files.
|
233
233
|
It works with existing filename resolutions (options for which can be found in the +resolve_filename+ method of
|
data/annotate.gemspec
CHANGED
@@ -26,6 +26,8 @@ Gem::Specification.new do |s|
|
|
26
26
|
'lib/annotate/active_record_patch.rb',
|
27
27
|
'lib/annotate/annotate_models.rb',
|
28
28
|
'lib/annotate/annotate_routes.rb',
|
29
|
+
'lib/annotate/constants.rb',
|
30
|
+
'lib/annotate/parser.rb',
|
29
31
|
'lib/annotate/tasks.rb',
|
30
32
|
'lib/annotate/version.rb',
|
31
33
|
'lib/generators/annotate/USAGE',
|
data/lib/annotate.rb
CHANGED
@@ -4,6 +4,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
4
4
|
require 'annotate/version'
|
5
5
|
require 'annotate/annotate_models'
|
6
6
|
require 'annotate/annotate_routes'
|
7
|
+
require 'annotate/constants'
|
7
8
|
|
8
9
|
begin
|
9
10
|
# ActiveSupport 3.x...
|
@@ -16,8 +17,6 @@ rescue StandardError
|
|
16
17
|
end
|
17
18
|
|
18
19
|
module Annotate
|
19
|
-
TRUE_RE = /^(true|t|yes|y|1)$/i
|
20
|
-
|
21
20
|
##
|
22
21
|
# The set of available options to customize the behavior of Annotate.
|
23
22
|
#
|
@@ -107,15 +106,15 @@ module Annotate
|
|
107
106
|
end
|
108
107
|
|
109
108
|
def self.skip_on_migration?
|
110
|
-
ENV['ANNOTATE_SKIP_ON_DB_MIGRATE'] =~ TRUE_RE || ENV['skip_on_db_migrate'] =~ TRUE_RE
|
109
|
+
ENV['ANNOTATE_SKIP_ON_DB_MIGRATE'] =~ Constants::TRUE_RE || ENV['skip_on_db_migrate'] =~ Constants::TRUE_RE
|
111
110
|
end
|
112
111
|
|
113
112
|
def self.include_routes?
|
114
|
-
ENV['routes'] =~ TRUE_RE
|
113
|
+
ENV['routes'] =~ Constants::TRUE_RE
|
115
114
|
end
|
116
115
|
|
117
116
|
def self.include_models?
|
118
|
-
ENV['models'] =~ TRUE_RE
|
117
|
+
ENV['models'] =~ Constants::TRUE_RE
|
119
118
|
end
|
120
119
|
|
121
120
|
def self.loaded_tasks=(val)
|
@@ -199,7 +198,7 @@ module Annotate
|
|
199
198
|
|
200
199
|
def self.true?(val)
|
201
200
|
return false if val.blank?
|
202
|
-
return false unless val =~ TRUE_RE
|
201
|
+
return false unless val =~ Constants::TRUE_RE
|
203
202
|
true
|
204
203
|
end
|
205
204
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'bigdecimal'
|
4
4
|
|
5
|
-
|
6
|
-
TRUE_RE = /^(true|t|yes|y|1)$/i
|
5
|
+
require 'annotate/constants'
|
7
6
|
|
7
|
+
module AnnotateModels
|
8
8
|
# Annotate Models plugin use this header
|
9
9
|
COMPAT_PREFIX = '== Schema Info'.freeze
|
10
10
|
COMPAT_PREFIX_MD = '## Schema Info'.freeze
|
@@ -590,7 +590,7 @@ module AnnotateModels
|
|
590
590
|
|
591
591
|
def matched_types(options)
|
592
592
|
types = MATCHED_TYPES.dup
|
593
|
-
types << 'admin' if options[:active_admin] =~ TRUE_RE && !types.include?('admin')
|
593
|
+
types << 'admin' if options[:active_admin] =~ Annotate::Constants::TRUE_RE && !types.include?('admin')
|
594
594
|
types << 'additional_file_patterns' if options[:additional_file_patterns].present?
|
595
595
|
|
596
596
|
types
|
@@ -0,0 +1,251 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Annotate
|
4
|
+
# Class for handling command line arguments
|
5
|
+
class Parser # rubocop:disable Metrics/ClassLength
|
6
|
+
def self.parse(args, env = {})
|
7
|
+
new(args, env).parse
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :args, :options, :env
|
11
|
+
|
12
|
+
ANNOTATION_POSITIONS = %w[before top after bottom].freeze
|
13
|
+
FILE_TYPE_POSITIONS = %w[position_in_class position_in_factory position_in_fixture position_in_test position_in_routes position_in_serializer].freeze
|
14
|
+
EXCLUSION_LIST = %w[tests fixtures factories serializers].freeze
|
15
|
+
FORMAT_TYPES = %w[bare rdoc markdown].freeze
|
16
|
+
|
17
|
+
def initialize(args, env)
|
18
|
+
@args = args
|
19
|
+
@options = default_options
|
20
|
+
@env = env
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse
|
24
|
+
# To split up because right now this method parses and commits
|
25
|
+
parser.parse!(args)
|
26
|
+
|
27
|
+
commit
|
28
|
+
|
29
|
+
options
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def commit
|
35
|
+
env.each_pair do |key, value|
|
36
|
+
ENV[key] = value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def parser
|
41
|
+
OptionParser.new do |option_parser|
|
42
|
+
add_options_to_parser(option_parser)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_options_to_parser(option_parser) # rubocop:disable Metrics/MethodLength
|
47
|
+
has_set_position = {}
|
48
|
+
positions = ANNOTATION_POSITIONS
|
49
|
+
|
50
|
+
option_parser.banner = 'Usage: annotate [options] [model_file]*'
|
51
|
+
|
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|
|
53
|
+
ENV['additional_file_patterns'] = additional_file_patterns
|
54
|
+
end
|
55
|
+
|
56
|
+
option_parser.on('-d', '--delete', 'Remove annotations from all model files or the routes.rb file') do
|
57
|
+
@options[:target_action] = :remove_annotations
|
58
|
+
end
|
59
|
+
|
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
|
63
|
+
|
64
|
+
FILE_TYPE_POSITIONS.each do |key|
|
65
|
+
env[key] = p unless has_set_position[key]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
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
|
72
|
+
has_set_position['position_in_class'] = true
|
73
|
+
end
|
74
|
+
|
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
|
78
|
+
has_set_position['position_in_factory'] = true
|
79
|
+
end
|
80
|
+
|
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
|
84
|
+
has_set_position['position_in_fixture'] = true
|
85
|
+
end
|
86
|
+
|
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
|
90
|
+
has_set_position['position_in_test'] = true
|
91
|
+
end
|
92
|
+
|
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
|
96
|
+
has_set_position['position_in_routes'] = true
|
97
|
+
end
|
98
|
+
|
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
|
102
|
+
has_set_position['position_in_serializer'] = true
|
103
|
+
end
|
104
|
+
|
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
|
108
|
+
end
|
109
|
+
|
110
|
+
option_parser.on('--wo', '--wrapper-open STR', 'Annotation wrapper opening.') do |p|
|
111
|
+
env['wrapper_open'] = p
|
112
|
+
end
|
113
|
+
|
114
|
+
option_parser.on('--wc', '--wrapper-close STR', 'Annotation wrapper closing') do |p|
|
115
|
+
env['wrapper_close'] = p
|
116
|
+
end
|
117
|
+
|
118
|
+
option_parser.on('-r', '--routes', "Annotate routes.rb with the output of 'rake routes'") do
|
119
|
+
env['routes'] = 'true'
|
120
|
+
end
|
121
|
+
|
122
|
+
option_parser.on('--models', "Annotate ActiveRecord models") do
|
123
|
+
env['models'] = 'true'
|
124
|
+
end
|
125
|
+
|
126
|
+
option_parser.on('-a', '--active-admin', 'Annotate active_admin models') do
|
127
|
+
env['active_admin'] = 'true'
|
128
|
+
end
|
129
|
+
|
130
|
+
option_parser.on('-v', '--version', 'Show the current version of this gem') do
|
131
|
+
puts "annotate v#{Annotate.version}"
|
132
|
+
@options[:exit] = true
|
133
|
+
end
|
134
|
+
|
135
|
+
option_parser.on('-m', '--show-migration', 'Include the migration version number in the annotation') do
|
136
|
+
env['include_version'] = 'yes'
|
137
|
+
end
|
138
|
+
|
139
|
+
option_parser.on('-k', '--show-foreign-keys',
|
140
|
+
"List the table's foreign key constraints in the annotation") do
|
141
|
+
env['show_foreign_keys'] = 'yes'
|
142
|
+
end
|
143
|
+
|
144
|
+
option_parser.on('--ck',
|
145
|
+
'--complete-foreign-keys', 'Complete foreign key names in the annotation') do
|
146
|
+
env['show_foreign_keys'] = 'yes'
|
147
|
+
env['show_complete_foreign_keys'] = 'yes'
|
148
|
+
end
|
149
|
+
|
150
|
+
option_parser.on('-i', '--show-indexes',
|
151
|
+
"List the table's database indexes in the annotation") do
|
152
|
+
env['show_indexes'] = 'yes'
|
153
|
+
end
|
154
|
+
|
155
|
+
option_parser.on('-s', '--simple-indexes',
|
156
|
+
"Concat the column's related indexes in the annotation") do
|
157
|
+
env['simple_indexes'] = 'yes'
|
158
|
+
end
|
159
|
+
|
160
|
+
option_parser.on('--model-dir dir',
|
161
|
+
"Annotate model files stored in dir rather than app/models, separate multiple dirs with commas") do |dir|
|
162
|
+
env['model_dir'] = dir
|
163
|
+
end
|
164
|
+
|
165
|
+
option_parser.on('--root-dir dir',
|
166
|
+
"Annotate files stored within root dir projects, separate multiple dirs with commas") do |dir|
|
167
|
+
env['root_dir'] = dir
|
168
|
+
end
|
169
|
+
|
170
|
+
option_parser.on('--ignore-model-subdirects',
|
171
|
+
"Ignore subdirectories of the models directory") do |_dir|
|
172
|
+
env['ignore_model_sub_dir'] = 'yes'
|
173
|
+
end
|
174
|
+
|
175
|
+
option_parser.on('--sort',
|
176
|
+
"Sort columns alphabetically, rather than in creation order") do |_dir|
|
177
|
+
env['sort'] = 'yes'
|
178
|
+
end
|
179
|
+
|
180
|
+
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|
|
182
|
+
env['classified_sort'] = 'yes'
|
183
|
+
end
|
184
|
+
|
185
|
+
option_parser.on('-R', '--require path',
|
186
|
+
"Additional file to require before loading models, may be used multiple times") do |path|
|
187
|
+
env['require'] = if !env['require'].blank?
|
188
|
+
env['require'] + ",#{path}"
|
189
|
+
else
|
190
|
+
path
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
option_parser.on('-e', '--exclude [tests,fixtures,factories,serializers]', Array, "Do not annotate fixtures, test files, factories, and/or serializers") do |exclusions|
|
195
|
+
exclusions ||= EXCLUSION_LIST
|
196
|
+
exclusions.each { |exclusion| env["exclude_#{exclusion}"] = 'yes' }
|
197
|
+
end
|
198
|
+
|
199
|
+
option_parser.on('-f', '--format [bare|rdoc|markdown]', FORMAT_TYPES, 'Render Schema Infomation as plain/RDoc/Markdown') do |fmt|
|
200
|
+
env["format_#{fmt}"] = 'yes'
|
201
|
+
end
|
202
|
+
|
203
|
+
option_parser.on('--force', 'Force new annotations even if there are no changes.') do |_force|
|
204
|
+
env['force'] = 'yes'
|
205
|
+
end
|
206
|
+
|
207
|
+
option_parser.on('--frozen', 'Do not allow to change annotations. Exits non-zero if there are going to be changes to files.') do
|
208
|
+
env['frozen'] = 'yes'
|
209
|
+
end
|
210
|
+
|
211
|
+
option_parser.on('--timestamp', 'Include timestamp in (routes) annotation') do
|
212
|
+
env['timestamp'] = 'true'
|
213
|
+
end
|
214
|
+
|
215
|
+
option_parser.on('--trace', 'If unable to annotate a file, print the full stack trace, not just the exception message.') do |_value|
|
216
|
+
env['trace'] = 'yes'
|
217
|
+
end
|
218
|
+
|
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|
|
220
|
+
env['ignore_columns'] = regex
|
221
|
+
end
|
222
|
+
|
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|
|
224
|
+
env['ignore_routes'] = regex
|
225
|
+
end
|
226
|
+
|
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|
|
228
|
+
env['hide_limit_column_types'] = values.to_s
|
229
|
+
end
|
230
|
+
|
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|
|
232
|
+
env['hide_default_column_types'] = values.to_s
|
233
|
+
end
|
234
|
+
|
235
|
+
option_parser.on('--ignore-unknown-models', "don't display warnings for bad model files") do |_values|
|
236
|
+
env['ignore_unknown_models'] = 'true'
|
237
|
+
end
|
238
|
+
|
239
|
+
option_parser.on('--with-comment', "include database comments in model annotations") do |_values|
|
240
|
+
env['with_comment'] = 'true'
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def default_options
|
245
|
+
{
|
246
|
+
target_action: :do_annotations,
|
247
|
+
exit: false
|
248
|
+
}
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
data/lib/annotate/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: annotate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Chaffee
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2019-09-
|
15
|
+
date: 2019-09-29 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rake
|
@@ -81,6 +81,8 @@ files:
|
|
81
81
|
- lib/annotate/active_record_patch.rb
|
82
82
|
- lib/annotate/annotate_models.rb
|
83
83
|
- lib/annotate/annotate_routes.rb
|
84
|
+
- lib/annotate/constants.rb
|
85
|
+
- lib/annotate/parser.rb
|
84
86
|
- lib/annotate/tasks.rb
|
85
87
|
- lib/annotate/version.rb
|
86
88
|
- lib/generators/annotate/USAGE
|