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
         |