annotate 2.6.8 → 2.6.9
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.
- data/CHANGELOG.rdoc +6 -0
- data/README.rdoc +1 -0
- data/bin/annotate +6 -1
- data/lib/annotate.rb +2 -2
- data/lib/annotate/annotate_models.rb +35 -6
- data/lib/annotate/version.rb +1 -1
- data/lib/generators/annotate/templates/auto_annotate_models.rake +24 -21
- data/lib/tasks/annotate_models.rake +2 -0
- metadata +2 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 2.6.9
|
2
|
+
* Support foreigh key (#241)
|
3
|
+
* Check if model has skip tag in annotate_model_file (#167)
|
4
|
+
* Fix issue where serializer-related flags weren't being honored (#246)
|
5
|
+
* Prefer SQL column type over normalized AR type (#231)
|
6
|
+
|
1
7
|
== 2.6.8
|
2
8
|
* Nothing annotated unless options[:model_dir] is specified, #234
|
3
9
|
|
data/README.rdoc
CHANGED
@@ -175,6 +175,7 @@ you can do so with a simple environment variable, instead of editing the
|
|
175
175
|
-v, --version Show the current version of this gem
|
176
176
|
-m, --show-migration Include the migration version number in the annotation
|
177
177
|
-i, --show-indexes List the table's database indexes in the annotation
|
178
|
+
-k, --show-foreign-keys List the table's foreign key constraints in the annotation
|
178
179
|
-s, --simple-indexes Concat the column's related indexes in the annotation
|
179
180
|
--model-dir dir Annotate model files stored in dir rather than app/models, separate multiple dirs with comas
|
180
181
|
--ignore-model-subdirects Ignore subdirectories of the models directory
|
data/bin/annotate
CHANGED
@@ -33,7 +33,7 @@ OptionParser.new do |opts|
|
|
33
33
|
end
|
34
34
|
|
35
35
|
opts.on('-p', '--position [before|top|after|bottom]', ['before', 'top', 'after', 'bottom'],
|
36
|
-
"Place the annotations at the top (before) or the bottom (after) of the model/test/fixture/factory/
|
36
|
+
"Place the annotations at the top (before) or the bottom (after) of the model/test/fixture/factory/route/serializer file(s)") do |p|
|
37
37
|
ENV['position'] = p
|
38
38
|
[
|
39
39
|
'position_in_class','position_in_factory','position_in_fixture','position_in_test', 'position_in_routes', 'position_in_serializer'
|
@@ -109,6 +109,11 @@ OptionParser.new do |opts|
|
|
109
109
|
ENV['include_version'] = "yes"
|
110
110
|
end
|
111
111
|
|
112
|
+
opts.on('-k', '--show-foreign-keys',
|
113
|
+
"List the table's foreign key constraints in the annotation") do
|
114
|
+
ENV['show_foreign_keys'] = "yes"
|
115
|
+
end
|
116
|
+
|
112
117
|
opts.on('-i', '--show-indexes',
|
113
118
|
"List the table's database indexes in the annotation") do
|
114
119
|
ENV['show_indexes'] = "yes"
|
data/lib/annotate.rb
CHANGED
@@ -20,13 +20,13 @@ module Annotate
|
|
20
20
|
POSITION_OPTIONS=[
|
21
21
|
:position_in_routes, :position_in_class, :position_in_test,
|
22
22
|
:position_in_fixture, :position_in_factory, :position,
|
23
|
-
:position_in_serializer
|
23
|
+
:position_in_serializer
|
24
24
|
]
|
25
25
|
FLAG_OPTIONS=[
|
26
26
|
:show_indexes, :simple_indexes, :include_version, :exclude_tests,
|
27
27
|
:exclude_fixtures, :exclude_factories, :ignore_model_sub_dir,
|
28
28
|
:format_bare, :format_rdoc, :format_markdown, :sort, :force, :trace,
|
29
|
-
:timestamp, :exclude_serializers, :classified_sort
|
29
|
+
:timestamp, :exclude_serializers, :classified_sort, :show_foreign_keys,
|
30
30
|
]
|
31
31
|
OTHER_OPTIONS=[
|
32
32
|
:ignore_columns
|
@@ -7,7 +7,7 @@ module AnnotateModels
|
|
7
7
|
PREFIX = "== Schema Information"
|
8
8
|
PREFIX_MD = "## Schema Information"
|
9
9
|
END_MARK = "== Schema Information End"
|
10
|
-
PATTERN = /^\n?# (?:#{COMPAT_PREFIX}|#{COMPAT_PREFIX_MD}).*?\n(#.*\n)
|
10
|
+
PATTERN = /^\r?\n?# (?:#{COMPAT_PREFIX}|#{COMPAT_PREFIX_MD}).*?\r?\n(#.*\r?\n)*(\r?\n)*/
|
11
11
|
|
12
12
|
# File.join for windows reverse bar compat?
|
13
13
|
# I dont use windows, can`t test
|
@@ -140,7 +140,7 @@ module AnnotateModels
|
|
140
140
|
attrs << "not null" unless col.null
|
141
141
|
attrs << "primary key" if klass.primary_key && (klass.primary_key.is_a?(Array) ? klass.primary_key.collect{|c|c.to_sym}.include?(col.name.to_sym) : col.name.to_sym == klass.primary_key.to_sym)
|
142
142
|
|
143
|
-
col_type = (col.
|
143
|
+
col_type = (col.sql_type || col.type).to_s
|
144
144
|
if col_type == "decimal"
|
145
145
|
col_type << "(#{col.precision}, #{col.scale})"
|
146
146
|
elsif col_type != "spatial"
|
@@ -193,6 +193,10 @@ module AnnotateModels
|
|
193
193
|
info << get_index_info(klass, options)
|
194
194
|
end
|
195
195
|
|
196
|
+
if options[:show_foreign_keys] && klass.table_exists?
|
197
|
+
info << get_foreign_key_info(klass, options)
|
198
|
+
end
|
199
|
+
|
196
200
|
if options[:format_rdoc]
|
197
201
|
info << "#--\n"
|
198
202
|
info << "# #{END_MARK}\n"
|
@@ -223,6 +227,28 @@ module AnnotateModels
|
|
223
227
|
return index_info
|
224
228
|
end
|
225
229
|
|
230
|
+
def get_foreign_key_info(klass, options={})
|
231
|
+
if(options[:format_markdown])
|
232
|
+
fk_info = "#\n# ### Foreign Keys\n#\n"
|
233
|
+
else
|
234
|
+
fk_info = "#\n# Foreign Keys\n#\n"
|
235
|
+
end
|
236
|
+
|
237
|
+
foreign_keys = klass.connection.respond_to?(:foreign_keys) ? klass.connection.foreign_keys(klass.table_name) : []
|
238
|
+
return "" if foreign_keys.empty?
|
239
|
+
|
240
|
+
max_size = foreign_keys.collect{|fk| fk.name.size}.max + 1
|
241
|
+
foreign_keys.sort_by{|fk| fk.name}.each do |fk|
|
242
|
+
ref_info = "#{fk.column} => #{fk.to_table}.#{fk.primary_key}"
|
243
|
+
if(options[:format_markdown])
|
244
|
+
fk_info << sprintf("# * `%s`:\n# * **`%s`**\n", fk.name, ref_info)
|
245
|
+
else
|
246
|
+
fk_info << sprintf("# %-#{max_size}.#{max_size}s %s", fk.name, "(#{ref_info})").rstrip + "\n"
|
247
|
+
end
|
248
|
+
end
|
249
|
+
return fk_info
|
250
|
+
end
|
251
|
+
|
226
252
|
# Add a schema block to a file. If the file already contains
|
227
253
|
# a schema info block (a comment starting with "== Schema Information"), check if it
|
228
254
|
# matches the block that is already there. If so, leave it be. If not, remove the old
|
@@ -309,9 +335,11 @@ module AnnotateModels
|
|
309
335
|
# :position_in_test<Symbol>:: where to place the annotated section in test/spec file(s)
|
310
336
|
# :position_in_fixture<Symbol>:: where to place the annotated section in fixture file
|
311
337
|
# :position_in_factory<Symbol>:: where to place the annotated section in factory file
|
338
|
+
# :position_in_serializer<Symbol>:: where to place the annotated section in serializer file
|
312
339
|
# :exclude_tests<Symbol>:: whether to skip modification of test/spec files
|
313
340
|
# :exclude_fixtures<Symbol>:: whether to skip modification of fixture files
|
314
341
|
# :exclude_factories<Symbol>:: whether to skip modification of factory files
|
342
|
+
# :exclude_serializers<Symbol>:: whether to skip modification of serializer files
|
315
343
|
#
|
316
344
|
def annotate(klass, file, header, options={})
|
317
345
|
begin
|
@@ -350,9 +378,9 @@ module AnnotateModels
|
|
350
378
|
options.merge(:position=>(options[position_in] || options[:position]))
|
351
379
|
end
|
352
380
|
|
353
|
-
# Return a list of the model files to annotate.
|
381
|
+
# Return a list of the model files to annotate.
|
354
382
|
# If we have command line arguments, they're assumed to the path
|
355
|
-
# of model files from root dir. Otherwise we take all the model files
|
383
|
+
# of model files from root dir. Otherwise we take all the model files
|
356
384
|
# in the model_dir directory.
|
357
385
|
def get_model_files(options)
|
358
386
|
models = []
|
@@ -364,7 +392,7 @@ module AnnotateModels
|
|
364
392
|
begin
|
365
393
|
model_dir.each do |dir|
|
366
394
|
Dir.chdir(dir) do
|
367
|
-
lst =
|
395
|
+
lst =
|
368
396
|
if options[:ignore_model_sub_dir]
|
369
397
|
Dir["*.rb"].map{ |f| [dir, f] }
|
370
398
|
else
|
@@ -451,6 +479,7 @@ module AnnotateModels
|
|
451
479
|
|
452
480
|
def annotate_model_file(annotated, file, header, options)
|
453
481
|
begin
|
482
|
+
return false if (/# -\*- SkipSchemaAnnotations.*/ =~ (File.exist?(file) ? File.read(file) : '') )
|
454
483
|
klass = get_model_class(file)
|
455
484
|
if klass && klass < ActiveRecord::Base && !klass.abstract_class? && klass.table_exists?
|
456
485
|
if annotate(klass, file, header, options)
|
@@ -477,7 +506,7 @@ module AnnotateModels
|
|
477
506
|
model_file_name = file
|
478
507
|
deannotated_klass = true if(remove_annotation_of_file(model_file_name))
|
479
508
|
|
480
|
-
(TEST_PATTERNS + FIXTURE_PATTERNS + FACTORY_PATTERNS).
|
509
|
+
(TEST_PATTERNS + FIXTURE_PATTERNS + FACTORY_PATTERNS + SERIALIZER_PATTERNS).
|
481
510
|
map { |file| resolve_filename(file, model_name, table_name) }.
|
482
511
|
each do |file|
|
483
512
|
if File.exist?(file)
|
data/lib/annotate/version.rb
CHANGED
@@ -6,27 +6,30 @@ if Rails.env.development?
|
|
6
6
|
# You can override any of these by setting an environment variable of the
|
7
7
|
# same name.
|
8
8
|
Annotate.set_defaults({
|
9
|
-
'position_in_routes'
|
10
|
-
'position_in_class'
|
11
|
-
'position_in_test'
|
12
|
-
'position_in_fixture'
|
13
|
-
'position_in_factory'
|
14
|
-
'
|
15
|
-
'
|
16
|
-
'
|
17
|
-
'
|
18
|
-
'
|
19
|
-
'
|
20
|
-
'
|
21
|
-
'
|
22
|
-
'
|
23
|
-
'
|
24
|
-
'
|
25
|
-
'
|
26
|
-
'
|
27
|
-
'
|
28
|
-
'
|
29
|
-
'
|
9
|
+
'position_in_routes' => "before",
|
10
|
+
'position_in_class' => "before",
|
11
|
+
'position_in_test' => "before",
|
12
|
+
'position_in_fixture' => "before",
|
13
|
+
'position_in_factory' => "before",
|
14
|
+
'position_in_serializer' => "before",
|
15
|
+
'show_foreign_keys' => "true",
|
16
|
+
'show_indexes' => "true",
|
17
|
+
'simple_indexes' => "false",
|
18
|
+
'model_dir' => "app/models",
|
19
|
+
'include_version' => "false",
|
20
|
+
'require' => "",
|
21
|
+
'exclude_tests' => "false",
|
22
|
+
'exclude_fixtures' => "false",
|
23
|
+
'exclude_factories' => "false",
|
24
|
+
'exclude_serializers' => "false",
|
25
|
+
'ignore_model_sub_dir' => "false",
|
26
|
+
'skip_on_db_migrate' => "false",
|
27
|
+
'format_bare' => "true",
|
28
|
+
'format_rdoc' => "false",
|
29
|
+
'format_markdown' => "false",
|
30
|
+
'sort' => "false",
|
31
|
+
'force' => "false",
|
32
|
+
'trace' => "false",
|
30
33
|
})
|
31
34
|
end
|
32
35
|
|
@@ -16,6 +16,7 @@ task :annotate_models => :environment do
|
|
16
16
|
options[:position_in_fixture] = Annotate.fallback(ENV['position_in_fixture'], ENV['position'])
|
17
17
|
options[:position_in_factory] = Annotate.fallback(ENV['position_in_factory'], ENV['position'])
|
18
18
|
options[:position_in_test] = Annotate.fallback(ENV['position_in_test'], ENV['position'])
|
19
|
+
options[:position_in_serializer] = Annotate.fallback(ENV['position_in_serializer'], ENV['position'])
|
19
20
|
options[:show_indexes] = Annotate.true?(ENV['show_indexes'])
|
20
21
|
options[:simple_indexes] = Annotate.true?(ENV['simple_indexes'])
|
21
22
|
options[:model_dir] = ENV['model_dir'] ? ENV['model_dir'].split(',') : []
|
@@ -24,6 +25,7 @@ task :annotate_models => :environment do
|
|
24
25
|
options[:exclude_tests] = Annotate.true?(ENV['exclude_tests'])
|
25
26
|
options[:exclude_factories] = Annotate.true?(ENV['exclude_factories'])
|
26
27
|
options[:exclude_fixtures] = Annotate.true?(ENV['exclude_fixtures'])
|
28
|
+
options[:exclude_serializers] = Annotate.true?(ENV['exclude_serializers'])
|
27
29
|
options[:ignore_model_sub_dir] = Annotate.true?(ENV['ignore_model_sub_dir'])
|
28
30
|
options[:format_bare] = Annotate.true?(ENV['format_bare'])
|
29
31
|
options[:format_rdoc] = Annotate.true?(ENV['format_rdoc'])
|
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: 2.6.
|
4
|
+
version: 2.6.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2015-
|
16
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: rake
|