summaryrefslogtreecommitdiff
path: root/spec/mspec/lib/mspec/guards/conflict.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/mspec/lib/mspec/guards/conflict.rb')
-rw-r--r--spec/mspec/lib/mspec/guards/conflict.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/spec/mspec/lib/mspec/guards/conflict.rb b/spec/mspec/lib/mspec/guards/conflict.rb
new file mode 100644
index 0000000000..c1d33e3512
--- /dev/null
+++ b/spec/mspec/lib/mspec/guards/conflict.rb
@@ -0,0 +1,19 @@
+require 'mspec/guards/guard'
+
+class ConflictsGuard < SpecGuard
+ def match?
+ # Always convert constants to symbols regardless of version.
+ constants = Object.constants.map { |x| x.to_sym }
+ @parameters.any? { |mod| constants.include? mod }
+ end
+end
+
+class Object
+ # In some cases, libraries will modify another Ruby method's
+ # behavior. The specs for the method's behavior will then fail
+ # if that library is loaded. This guard will not run if any of
+ # the specified constants exist in Object.constants.
+ def conflicts_with(*modules, &block)
+ ConflictsGuard.new(*modules).run_unless(:conflicts_with, &block)
+ end
+end