Merge pull request #34051 from gmcgibbon/module_parent_method_rename

Prefix Module#parent, Module#parents, and Module#parent_name with module
This commit is contained in:
Rafael Mendonça França 2018-10-02 16:04:23 -04:00
commit 92fece96da
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
10 changed files with 84 additions and 37 deletions

View File

@ -7,7 +7,7 @@ module ActionController
super
return unless klass.respond_to?(:helpers_path=)
if namespace = klass.parents.detect { |m| m.respond_to?(:railtie_helpers_paths) }
if namespace = klass.module_parents.detect { |m| m.respond_to?(:railtie_helpers_paths) }
paths = namespace.railtie_helpers_paths
else
paths = ActionController::Helpers.helpers_path

View File

@ -444,7 +444,7 @@ module ActionDispatch
end
def include_helpers_now(klass, include_path_helpers)
namespace = klass.parents.detect { |m| m.respond_to?(:railtie_include_helpers) }
namespace = klass.module_parents.detect { |m| m.respond_to?(:railtie_include_helpers) }
if namespace && namespace.railtie_namespace.routes != self
namespace.railtie_include_helpers(klass, include_path_helpers)

View File

@ -252,7 +252,7 @@ module ActiveModel
# Person.model_name.plural # => "people"
def model_name
@_model_name ||= begin
namespace = parents.detect do |n|
namespace = module_parents.detect do |n|
n.respond_to?(:use_relative_model_naming?) && n.use_relative_model_naming?
end
ActiveModel::Name.new(self, namespace)

View File

@ -24,7 +24,7 @@ module ActiveRecord::Associations::Builder # :nodoc:
if block_given?
extension_module_name = "#{model.name.demodulize}#{name.to_s.camelize}AssociationExtension"
extension = Module.new(&Proc.new)
model.parent.const_set(extension_module_name, extension)
model.module_parent.const_set(extension_module_name, extension)
end
end

View File

@ -218,11 +218,11 @@ module ActiveRecord
end
def full_table_name_prefix #:nodoc:
(parents.detect { |p| p.respond_to?(:table_name_prefix) } || self).table_name_prefix
(module_parents.detect { |p| p.respond_to?(:table_name_prefix) } || self).table_name_prefix
end
def full_table_name_suffix #:nodoc:
(parents.detect { |p| p.respond_to?(:table_name_suffix) } || self).table_name_suffix
(module_parents.detect { |p| p.respond_to?(:table_name_suffix) } || self).table_name_suffix
end
# The array of names of environments where destructive actions should be prohibited. By default,
@ -503,9 +503,9 @@ module ActiveRecord
def compute_table_name
if base_class?
# Nested classes are prefixed with singular parent table name.
if parent < Base && !parent.abstract_class?
contained = parent.table_name
contained = contained.singularize if parent.pluralize_table_names
if module_parent < Base && !module_parent.abstract_class?
contained = module_parent.table_name
contained = contained.singularize if module_parent.pluralize_table_names
contained += "_"
end

View File

@ -1,3 +1,8 @@
* Rename `Module#parent`, `Module#parents`, and `Module#parent_name` to
`module_parent`, `module_parents`, and `module_parent_name`.
*Gannon McGibbon*
* Deprecate the use of `LoggerSilence` in favor of `ActiveSupport::LoggerSilence`
*Edouard Chin*

View File

@ -5,8 +5,8 @@ require "active_support/inflector"
class Module
# Returns the name of the module containing this one.
#
# M::N.parent_name # => "M"
def parent_name
# M::N.module_parent_name # => "M"
def module_parent_name
if defined?(@parent_name)
@parent_name
else
@ -16,6 +16,14 @@ class Module
end
end
def parent_name
ActiveSupport::Deprecation.warn(<<-MSG.squish)
`Module#parent_name` has been renamed to `module_parent_name`.
`parent_name` is deprecated and will be removed in Rails 6.1.
MSG
module_parent_name
end
# Returns the module which contains this one according to its name.
#
# module M
@ -24,15 +32,23 @@ class Module
# end
# X = M::N
#
# M::N.parent # => M
# X.parent # => M
# M::N.module_parent # => M
# X.module_parent # => M
#
# The parent of top-level and anonymous modules is Object.
#
# M.parent # => Object
# Module.new.parent # => Object
# M.module_parent # => Object
# Module.new.module_parent # => Object
def module_parent
module_parent_name ? ActiveSupport::Inflector.constantize(module_parent_name) : Object
end
def parent
parent_name ? ActiveSupport::Inflector.constantize(parent_name) : Object
ActiveSupport::Deprecation.warn(<<-MSG.squish)
`Module#parent` has been renamed to `module_parent`.
`parent` is deprecated and will be removed in Rails 6.1.
MSG
module_parent
end
# Returns all the parents of this module according to its name, ordered from
@ -44,13 +60,13 @@ class Module
# end
# X = M::N
#
# M.parents # => [Object]
# M::N.parents # => [M, Object]
# X.parents # => [M, Object]
def parents
# M.module_parents # => [Object]
# M::N.module_parents # => [M, Object]
# X.module_parents # => [M, Object]
def module_parents
parents = []
if parent_name
parts = parent_name.split("::")
if module_parent_name
parts = module_parent_name.split("::")
until parts.empty?
parents << ActiveSupport::Inflector.constantize(parts * "::")
parts.pop
@ -59,4 +75,12 @@ class Module
parents << Object unless parents.include? Object
parents
end
def parents
ActiveSupport::Deprecation.warn(<<-MSG.squish)
`Module#parents` has been renamed to `module_parents`.
`parents` is deprecated and will be removed in Rails 6.1.
MSG
module_parents
end
end

View File

@ -521,8 +521,8 @@ module ActiveSupport #:nodoc:
end
elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix)
return mod
elsif (parent = from_mod.parent) && parent != from_mod &&
! from_mod.parents.any? { |p| p.const_defined?(const_name, false) }
elsif (parent = from_mod.module_parent) && parent != from_mod &&
! from_mod.module_parents.any? { |p| p.const_defined?(const_name, false) }
# If our parents do not have a constant named +const_name+ then we are free
# to attempt to load upwards. If they do have such a constant, then this
# const_missing must be due to from_mod::const_name, which should not

View File

@ -15,25 +15,43 @@ module ParentA
end
class IntrospectionTest < ActiveSupport::TestCase
def test_parent_name
assert_equal "ParentA", ParentA::B.parent_name
assert_equal "ParentA::B", ParentA::B::C.parent_name
assert_nil ParentA.parent_name
def test_module_parent_name
assert_equal "ParentA", ParentA::B.module_parent_name
assert_equal "ParentA::B", ParentA::B::C.module_parent_name
assert_nil ParentA.module_parent_name
end
def test_parent_name_when_frozen
assert_equal "ParentA", ParentA::FrozenB.parent_name
assert_equal "ParentA::B", ParentA::B::FrozenC.parent_name
def test_module_parent_name_when_frozen
assert_equal "ParentA", ParentA::FrozenB.module_parent_name
assert_equal "ParentA::B", ParentA::B::FrozenC.module_parent_name
end
def test_parent_name
assert_deprecated do
assert_equal "ParentA", ParentA::B.parent_name
end
end
def test_module_parent
assert_equal ParentA::B, ParentA::B::C.module_parent
assert_equal ParentA, ParentA::B.module_parent
assert_equal Object, ParentA.module_parent
end
def test_parent
assert_equal ParentA::B, ParentA::B::C.parent
assert_equal ParentA, ParentA::B.parent
assert_equal Object, ParentA.parent
assert_deprecated do
assert_equal ParentA, ParentA::B.parent
end
end
def test_module_parents
assert_equal [ParentA::B, ParentA, Object], ParentA::B::C.module_parents
assert_equal [ParentA, Object], ParentA::B.module_parents
end
def test_parents
assert_equal [ParentA::B, ParentA, Object], ParentA::B::C.parents
assert_equal [ParentA, Object], ParentA::B.parents
assert_deprecated do
assert_equal [ParentA, Object], ParentA::B.parents
end
end
end

View File

@ -224,7 +224,7 @@ module Rails
end
def railtie_namespace #:nodoc:
@railtie_namespace ||= self.class.parents.detect { |n| n.respond_to?(:railtie_namespace) }
@railtie_namespace ||= self.class.module_parents.detect { |n| n.respond_to?(:railtie_namespace) }
end
protected