Class: Rails::Generators::NamedBase
Class Attribute Summary
Base
- Inherited
Class Method Summary
-
.check_class_collision(options = {})
private
Add a class collisions name to be checked on class initialization.
- .new(args, *options) ⇒ NamedBase constructor Internal use only
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 | |
.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 |
Instance Attribute Summary
- #file_name readonly private
- #inside_template readonly private
- #inside_template? ⇒ Boolean readonly private
- #mountable_engine? ⇒ Boolean readonly private
- #pluralize_table_names? ⇒ Boolean readonly private
- #uncountable? ⇒ Boolean readonly private
Base
- Inherited
Instance Method Summary
-
#application_name
private
Tries to retrieve the application name or simply return application.
- #assign_names!(name) private
- #attributes_names private
- #class_name private
- #class_path private
- #edit_helper private
- #file_path private
- #fixture_file_name private
- #human_name private
- #i18n_scope private
- #index_helper(type: nil) private
- #model_resource_name(base_name = singular_table_name, prefix: "") private
- #namespaced_class_path private
- #new_helper(type: :url) private
-
#parse_attributes!
private
Convert attributes array into
GeneratedAttribute
objects. - #plural_file_name private
- #plural_name private
- #plural_route_name private
- #plural_table_name private
- #redirect_resource_name private
- #regular_class_path private
- #route_url private
- #show_helper(arg = "@#{singular_table_name}", type: :url) private
-
#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.
- #singular_route_name private
- #singular_table_name private
- #table_name private
- #url_helper_prefix private
Base
- Inherited
#class_collisions | Check whether the given class names are already taken by user application or Ruby on |
#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 |
#application | Alias for Actions#environment. |
#environment | Adds configuration code to a Rails runtime environment. |
#gem | Adds a |
#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 |
#lib | Creates a file in |
#rails_command | Runs the specified Rails command. |
#rake | Runs the specified Rake task. |
#rakefile | Creates a Rake tasks file in |
#readme | Reads the given file at the source root and prints it in the console. |
#route | Make an entry in Rails routing file |
#vendor | Creates a file in |
#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 |
#log | Define log for backwards compatibility. |
#match_file, | |
#optimize_indentation | Returns optimized string with indentation. |
#quote | Always returns value in double quotes. |
#rebase_indentation | Alias for Actions#optimize_indentation. |
#route_namespace_pattern, | |
#with_indentation | Manage |
#initialize |
Constructor Details
.new(args, *options) ⇒ NamedBase
# File 'railties/lib/rails/generators/named_base.rb', line 11
def initialize(args, * ) # :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”.
# File 'railties/lib/rails/generators/named_base.rb', line 214
def self.check_class_collision( = {}) # :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 "#{ [:prefix]}#{name}#{ [: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.
# 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 [: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.
# 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 [: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.
# 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 [: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