summaryrefslogtreecommitdiff
path: root/spec/mspec/lib/mspec/utils/name_map.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/mspec/lib/mspec/utils/name_map.rb')
-rw-r--r--spec/mspec/lib/mspec/utils/name_map.rb24
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?