diff options
Diffstat (limited to 'spec/mspec/lib/mspec/utils/name_map.rb')
| -rw-r--r-- | spec/mspec/lib/mspec/utils/name_map.rb | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/spec/mspec/lib/mspec/utils/name_map.rb b/spec/mspec/lib/mspec/utils/name_map.rb index a93b0d001e..9b04112e2e 100644 --- a/spec/mspec/lib/mspec/utils/name_map.rb +++ b/spec/mspec/lib/mspec/utils/name_map.rb @@ -51,7 +51,11 @@ class NameMap SpecVersion ] - def initialize(filter=false) + ALWAYS_PRIVATE = %w[ + initialize initialize_copy initialize_clone initialize_dup respond_to_missing? + ].map(&:to_sym) + + def initialize(filter = false) @seen = {} @filter = filter end @@ -62,10 +66,17 @@ class NameMap end def class_or_module(c) - const = Object.const_get(c, false) + begin + const = Object.const_get(c, false) + rescue NameError, RuntimeError + # Either the constant doesn't exist or it is + # explicitly raising an error, like `SortedSet`. + return nil + end + return nil unless Module === const + filtered = @filter && EXCLUDED.include?(const.name) - return const if Module === const and !filtered - rescue NameError + return const unless filtered end def namespace(mod, const) @@ -73,7 +84,7 @@ class NameMap "#{mod}::#{const}" end - def map(hash, constants, mod=nil) + def map(hash, constants, mod = nil) @seen = {} unless mod constants.each do |const| @@ -86,7 +97,8 @@ class NameMap hash["#{name}."] = ms.sort unless ms.empty? ms = m.public_instance_methods(false) + - m.protected_instance_methods(false) + m.protected_instance_methods(false) + + (m.private_instance_methods(false) & ALWAYS_PRIVATE) ms.map! { |x| x.to_s } hash["#{name}#"] = ms.sort unless ms.empty? |
