annotate_models icon indicating copy to clipboard operation
annotate_models copied to clipboard

How to add models in additional files within modules?

Open oldigor opened this issue 5 years ago • 3 comments

I have models that are within modules. I also have a folder called queries. Examples of files in the queries folder: app/queries/a_module_name/model_names_query.rb app/queres/model_names_query.rb The model names are pluralized. I don't know what pattern I should use in the "additional_file_patterns" option. Here's my configuration:

# NOTE: only doing this in development as some production environments (Heroku)
# NOTE: are sensitive to local FS writes, and besides -- it's just not proper
# NOTE: to have a dev-mode tool do its thing in production.
if Rails.env.development?
  require 'annotate'
  task :set_annotation_options do
    # You can override any of these by setting an environment variable of the
    # same name.
    Annotate.set_defaults(
      'additional_file_patterns' => File.join(Rails.application.root, 'app/queries/%PLURALIZED_MODEL_NAME%_query.rb'),
      'routes'                    => 'false',
      'position_in_routes'        => 'before',
      'position_in_class'         => 'before',
      'position_in_test'          => 'before',
      'position_in_fixture'       => 'before',
      'position_in_factory'       => 'before',
      'position_in_serializer'    => 'before',
      'show_foreign_keys'         => 'true',
      'show_complete_foreign_keys' => 'false',
      'show_indexes'              => 'true',
      'simple_indexes'            => 'false',
      'model_dir'                 => 'app/models',
      'root_dir'                  => '',
      'include_version'           => 'false',
      'require'                   => '',
      'exclude_tests'             => 'false',
      'exclude_fixtures'          => 'false',
      'exclude_factories'         => 'false',
      'exclude_serializers'       => 'false',
      'exclude_scaffolds'         => 'true',
      'exclude_controllers'       => 'true',
      'exclude_helpers'           => 'true',
      'exclude_sti_subclasses'    => 'false',
      'ignore_model_sub_dir'      => 'false',
      'ignore_columns'            => nil,
      'ignore_routes'             => nil,
      'ignore_unknown_models'     => 'false',
      'hide_limit_column_types'   => 'integer,boolean',
      'hide_default_column_types' => 'json,jsonb,hstore',
      'skip_on_db_migrate'        => 'false',
      'format_bare'               => 'true',
      'format_rdoc'               => 'false',
      'format_markdown'           => 'false',
      'sort'                      => 'false',
      'force'                     => 'false',
      'classified_sort'           => 'true',
      'trace'                     => 'false',
      'wrapper_open'              => nil,
      'wrapper_close'             => nil,
      'with_comment'              => true
    )
  end

  Annotate.load_tasks
end

This configuration is the default configuration plus the additional_file_patterns.

Version

  • annotate v2.7.4
  • Rails 4.2.11.1
  • ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]

oldigor avatar Aug 14 '19 12:08 oldigor

+1, have the same problem:

# NOTE: only doing this in development as some production environments (Heroku)
# NOTE: are sensitive to local FS writes, and besides -- it's just not proper
# NOTE: to have a dev-mode tool do its thing in production.
if Rails.env.development?
  require 'annotate'
  task :set_annotation_options do
    # You can override any of these by setting an environment variable of the
    # same name.
    Annotate.set_defaults(
      'additional_file_patterns' => File.join(Rails.application.root, 'app/policies/%MODEL_NAME%_policy.rb'),
      'routes'                    => 'false',
      'routes'                    => 'false',
      'position_in_routes'        => 'before',
      'position_in_class'         => 'before',
      'position_in_test'          => 'before',
      'position_in_fixture'       => 'before',
      'position_in_factory'       => 'before',
      'position_in_serializer'    => 'before',
      'show_foreign_keys'         => 'true',
      'show_complete_foreign_keys' => 'false',
      'show_indexes'              => 'true',
      'simple_indexes'            => 'false',
      'model_dir'                 => 'app/models',
      'root_dir'                  => '',
      'include_version'           => 'false',
      'require'                   => '',
      'exclude_tests'             => 'false',
      'exclude_fixtures'          => 'false',
      'exclude_factories'         => 'false',
      'exclude_serializers'       => 'false',
      'exclude_scaffolds'         => 'true',
      'exclude_controllers'       => 'true',
      'exclude_helpers'           => 'true',
      'exclude_sti_subclasses'    => 'false',
      'ignore_model_sub_dir'      => 'false',
      'ignore_columns'            => nil,
      'ignore_routes'             => nil,
      'ignore_unknown_models'     => 'false',
      'hide_limit_column_types'   => 'integer,bigint,boolean',
      'hide_default_column_types' => 'json,jsonb,hstore',
      'skip_on_db_migrate'        => 'false',
      'format_bare'               => 'true',
      'format_rdoc'               => 'false',
      'format_markdown'           => 'false',
      'sort'                      => 'false',
      'force'                     => 'false',
      'frozen'                    => 'false',
      'classified_sort'           => 'true',
      'trace'                     => 'false',
      'wrapper_open'              => nil,
      'wrapper_close'             => nil,
      'with_comment'              => 'true'
    )
  end

  Annotate.load_tasks
end

And:

rake annotate_model

Does nothing.

lchojnowski avatar Oct 09 '19 11:10 lchojnowski

It looks like the additional_file_patterns option wasn't introduced until version 3.

tmichaelreis avatar Jan 27 '20 22:01 tmichaelreis

We solved this issue by creating a file that represents the module and defining the table_name_prefix method like the example below:

Let's suppose our file that we want to annotate is inside app/model/client/address.rb

So, just create a module file that represents client module using this path app/model/client.rb

module Client
  def self.table_name_prefix
    'client_'
  end
end

Then, your address.rb file looks like as simple as this.

class Client::Address
end

It won't be necessary to add nothing to Address class.

bamonde avatar Jul 25 '23 19:07 bamonde