提交 ad98f21c 编写于 作者: J Jeremy Kemper

Merge remote branch 'fxn/master'

require 'active_support/core_ext/module/aliasing'
require 'active_support/core_ext/module/introspection'
require 'active_support/core_ext/module/inclusion'
require 'active_support/core_ext/module/attribute_accessors'
require 'active_support/core_ext/module/attr_internal'
require 'active_support/core_ext/module/attr_accessor_with_default'
require 'active_support/core_ext/module/delegation'
require 'active_support/core_ext/module/loading'
require 'active_support/core_ext/module/synchronization'
class Module
# Returns the classes in the current ObjectSpace where this module has been
# mixed in according to Module#included_modules.
#
# module M
# end
#
# module N
# include M
# end
#
# class C
# include M
# end
#
# class D < C
# end
#
# p M.included_in_classes # => [C, D]
#
def included_in_classes
classes = []
ObjectSpace.each_object(Class) { |k| classes << k if k.included_modules.include?(self) }
classes.reverse.inject([]) do |unique_classes, klass|
unique_classes << klass unless unique_classes.collect { |k| k.to_s }.include?(klass.to_s)
unique_classes
end
end
end
\ No newline at end of file
require 'active_support/core_ext/string/inflections'
class Module
# Returns String#underscore applied to the module name minus trailing classes.
#
# ActiveRecord.as_load_path # => "active_record"
# ActiveRecord::Associations.as_load_path # => "active_record/associations"
# ActiveRecord::Base.as_load_path # => "active_record" (Base is a class)
#
# The Kernel module gives an empty string by definition.
#
# Kernel.as_load_path # => ""
# Math.as_load_path # => "math"
def as_load_path
if self == Object || self == Kernel
''
elsif is_a? Class
parent == self ? '' : parent.as_load_path
else
name.split('::').collect do |word|
word.underscore
end * '/'
end
end
end
\ No newline at end of file
......@@ -72,13 +72,6 @@ def setup
@david = Someone.new("David", Somewhere.new("Paulina", "Chicago"))
end
def test_included_in_classes
assert One.included_in_classes.include?(Ab)
assert One.included_in_classes.include?(Xy::Bc)
assert One.included_in_classes.include?(Yz::Zy::Cd)
assert !One.included_in_classes.include?(De)
end
def test_delegation_to_methods
assert_equal "Paulina", @david.street
assert_equal "Chicago", @david.city
......@@ -170,11 +163,6 @@ def test_parents
def test_local_constants
assert_equal %w(Constant1 Constant3), Ab.local_constants.sort.map(&:to_s)
end
def test_as_load_path
assert_equal 'yz/zy', Yz::Zy.as_load_path
assert_equal 'yz', Yz.as_load_path
end
end
module BarMethodAliaser
......
require 'abstract_unit'
require 'pp'
require 'active_support/dependencies'
require 'active_support/core_ext/module/loading'
require 'active_support/core_ext/kernel/reporting'
module ModuleWithMissing
......@@ -130,10 +129,6 @@ def test_mutual_dependencies_dont_infinite_loop
end
end
def test_as_load_path
assert_equal '', DependenciesTest.as_load_path
end
def test_module_loading
with_autoloading_fixtures do
assert_kind_of Module, A
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册