123456789_123456789_123456789_123456789_123456789_

Class: Rails::Generators::NamedBase

Class Attribute Summary

Base - Inherited

Class Method Summary

Base - Inherited

.base_root

Returns the base root for a common set of generators.

.default_source_root

Returns the default source root for a given generator.

.desc

Tries to get the description from a USAGE file one folder above the source root otherwise uses a default description.

.hide!

Convenience method to hide this generator from the available ones when running rails generator command.

.hook_for

Invoke a generator based on the value supplied by the user to the given option named “name”.

.namespace

Convenience method to get the namespace from the class name.

.remove_hook_for

Remove a previously added hook.

.source_root

Returns the source root for this generator using default_source_root as default.

.add_shebang_option!

Small macro to add ruby as an option to the generator with proper default value plus an instance helper method called shebang.

.banner

Use Rails default banner.

.base_name

Sets the base_name taking into account the current class namespace.

.default_aliases_for_option

Returns default aliases for the option name given doing a lookup in aliases.

.default_for_option

Returns default for the option name given doing a lookup in config.

.default_generator_root,
.default_value_for_option

Returns the default value for the option name given doing a lookup in options.

.generator_name

Removes the namespaces and get the generator name.

.usage_path,
.class_option

Make class option aware of options and aliases.

.inherited

Cache source root and add lib/generators/base/generator/templates to source paths.

.hooks

Keep hooks configuration that are used on prepare_for_invocation.

.prepare_for_invocation

Prepare class invocation to search on ::Rails namespace if a previous added hook is being used.

Instance Attribute Summary

Base - Inherited

Instance Method Summary

Base - Inherited

#class_collisions

Check whether the given class names are already taken by user application or Ruby on ::Rails.

#extract_last_module

Takes in an array of nested modules and extracts the last module.

#indent,
#module_namespacing

Wrap block with namespace of current application if namespace exists and is not skipped.

#namespace, #namespace_dirs, #namespaced_path, #wrap_with_namespace

Actions - Included

#add_source

Add the given source to Gemfile

#application
#environment

Adds configuration code to a Rails runtime environment.

#gem

Adds a gem declaration to the Gemfile for the specified gem.

#gem_group

Wraps gem entries inside a group.

#generate

Runs another generator.

#git

Runs one or more git commands.

#github,
#initializer

Creates an initializer file in config/initializers/.

#lib

Creates a file in lib/.

#rails_command

Runs the specified Rails command.

#rake

Runs the specified Rake task.

#rakefile

Creates a Rake tasks file in lib/tasks/.

#readme

Reads the given file at the source root and prints it in the console.

#route

Make an entry in Rails routing file config/routes.rb.

#vendor

Creates a file in vendor/.

#append_file_with_newline

Append string to a file with a newline if necessary.

#execute_command

Runs the supplied command using either “rake …” or “rails …” based on the executor parameter provided.

#indentation

Indent the Gemfile to the depth of @indentation.

#log

Define log for backwards compatibility.

#match_file,
#optimize_indentation

Returns optimized string with indentation.

#quote

Always returns value in double quotes.

#rebase_indentation
#route_namespace_pattern,
#with_indentation

Manage Gemfile indentation for a DSL action block.

#initialize

Constructor Details

.new(args, *options) ⇒ NamedBase

This method is for internal use only.
[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 11

def initialize(args, *options) # :nodoc:
  @inside_template = nil
  # Unfreeze name in case it's given as a frozen string
  args[0] = args[0].dup if args[0].is_a?(String) && args[0].frozen?
  super
  assign_names!(name)
  parse_attributes! if respond_to?(:attributes)
end

Class Method Details

.check_class_collision(options = {}) (private)

Add a class collisions name to be checked on class initialization. You can supply a hash with a :prefix or :suffix to be tested.

Examples

check_class_collision suffix: "Decorator"

If the generator is invoked with class name Admin, it will check for the presence of “AdminDecorator”.

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 214

def self.check_class_collision(options = {}) # :doc:
  define_method :check_class_collision do
    name = if respond_to?(:controller_class_name, true) # for ResourceHelpers
      controller_class_name
    else
      class_name
    end

    class_collisions "#{options[:prefix]}#{name}#{options[:suffix]}"
  end
end

Instance Attribute Details

#file_name (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 35

attr_reader :file_name

#inside_template (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 43

def inside_template # :doc:
  @inside_template = true
  yield
ensure
  @inside_template = false
end

#inside_template?Boolean (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 50

def inside_template? # :doc:
  @inside_template
end

#mountable_engine?Boolean (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 200

def mountable_engine? # :doc:
  defined?(ENGINE_ROOT) && namespaced?
end

#pluralize_table_names?Boolean (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 196

def pluralize_table_names? # :doc:
  !defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names
end

#uncountable?Boolean (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 93

def uncountable? # :doc:
  singular_name == plural_name
end

Instance Method Details

#application_name (private)

Tries to retrieve the application name or simply return application.

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 138

def application_name # :doc:
  if defined?(Rails) && Rails.application
    Rails.application.class.name.split("::").first.underscore
  else
    "application"
  end
end

#assign_names!(name) (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 175

def assign_names!(name)
  @class_path = name.include?("/") ? name.split("/") : name.split("::")
  @class_path.map!(&:underscore)
  @file_name = @class_path.pop
end

#attributes_names (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 188

def attributes_names # :doc:
  @attributes_names ||= attributes.each_with_object([]) do |a, names|
    names << a.column_name
    names << "password_confirmation" if a.password_digest?
    names << "#{a.name}_type" if a.polymorphic?
  end
end

#class_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 70

def class_name # :doc:
  (class_path + [file_name]).map!(&:camelize).join("::")
end

#class_path (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 58

def class_path # :doc:
  inside_template? || !namespaced? ? regular_class_path : namespaced_class_path
end

#edit_helper (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 105

def edit_helper(...) # :doc:
  "edit_#{show_helper(...)}"
end

#file_path (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 54

def file_path # :doc:
  @file_path ||= (class_path + [file_name]).join("/")
end

#fixture_file_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 125

def fixture_file_name # :doc:
  @fixture_file_name ||= (pluralize_table_names? ? plural_file_name : file_name)
end

#human_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 74

def human_name # :doc:
  @human_name ||= singular_name.humanize
end

#i18n_scope (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 82

def i18n_scope # :doc:
  @i18n_scope ||= file_path.tr("/", ".")
end

#index_helper(type: nil) (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 97

def index_helper(type: nil) # :doc:
  [plural_route_name, ("index" if uncountable?), type].compact.join("_")
end

#model_resource_name(base_name = singular_table_name, prefix: "") (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 150

def model_resource_name(base_name = singular_table_name, prefix: "") # :doc:
  resource_name = "#{prefix}#{base_name}"
  if options[:model_name]
    "[#{controller_class_path.map { |name| ":" + name }.join(", ")}, #{resource_name}]"
  else
    resource_name
  end
end

#namespaced_class_path (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 66

def namespaced_class_path # :doc:
  @namespaced_class_path ||= namespace_dirs + @class_path
end

#new_helper(type: :url) (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 109

def new_helper(type: :url) # :doc:
  "new_#{singular_route_name}_#{type}"
end

#parse_attributes! (private)

Convert attributes array into GeneratedAttribute objects.

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 182

def parse_attributes!
  self.attributes = (attributes || []).map do |attr|
    Rails::Generators::GeneratedAttribute.parse(attr)
  end
end

#plural_file_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 121

def plural_file_name # :doc:
  @plural_file_name ||= file_name.pluralize
end

#plural_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 78

def plural_name # :doc:
  @plural_name ||= singular_name.pluralize
end

#plural_route_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 167

def plural_route_name # :doc:
  if options[:model_name]
    "#{controller_class_path.join('_')}_#{plural_table_name}"
  else
    plural_table_name
  end
end

#plural_table_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 117

def plural_table_name # :doc:
  @plural_table_name ||= (pluralize_table_names? ? table_name : table_name.pluralize)
end

#redirect_resource_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 146

def redirect_resource_name # :doc:
  model_resource_name(prefix: "@")
end

#regular_class_path (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 62

def regular_class_path # :doc:
  @class_path
end

#route_url (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 129

def route_url # :doc:
  @route_url ||= controller_class_path.collect { |dname| "/" + dname }.join + "/" + plural_file_name
end

#show_helper(arg = "@#{singular_table_name}", type: :url) (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 101

def show_helper(arg = "@#{singular_table_name}", type: :url) # :doc:
  "#{singular_route_name}_#{type}(#{arg})"
end

#singular_name (private)

FIXME: We are avoiding to use alias because a bug on thor that make this method public and add it to the task list.

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 39

def singular_name # :doc:
  file_name
end

#singular_route_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 159

def singular_route_name # :doc:
  if options[:model_name]
    "#{controller_class_path.join('_')}_#{singular_table_name}"
  else
    singular_table_name
  end
end

#singular_table_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 113

def singular_table_name # :doc:
  @singular_table_name ||= (pluralize_table_names? ? table_name.singularize : table_name)
end

#table_name (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 86

def table_name # :doc:
  @table_name ||= begin
    base = pluralize_table_names? ? plural_name : singular_name
    (class_path + [base]).join("_")
  end
end

#url_helper_prefix (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/named_base.rb', line 133

def url_helper_prefix # :doc:
  @url_helper_prefix ||= (class_path + [file_name]).join("_")
end