47 lines
1.1 KiB
Ruby
47 lines
1.1 KiB
Ruby
module Spec
|
|
module Matchers
|
|
|
|
class Satisfy #:nodoc:
|
|
def initialize(&block)
|
|
@block = block
|
|
end
|
|
|
|
def matches?(actual, &block)
|
|
@block = block if block
|
|
@actual = actual
|
|
@block.call(actual)
|
|
end
|
|
|
|
def failure_message
|
|
"expected #{@actual} to satisfy block"
|
|
end
|
|
|
|
def negative_failure_message
|
|
"expected #{@actual} not to satisfy block"
|
|
end
|
|
end
|
|
|
|
# :call-seq:
|
|
# should satisfy {}
|
|
# should_not satisfy {}
|
|
#
|
|
# Passes if the submitted block returns true. Yields target to the
|
|
# block.
|
|
#
|
|
# Generally speaking, this should be thought of as a last resort when
|
|
# you can't find any other way to specify the behaviour you wish to
|
|
# specify.
|
|
#
|
|
# If you do find yourself in such a situation, you could always write
|
|
# a custom matcher, which would likely make your specs more expressive.
|
|
#
|
|
# == Examples
|
|
#
|
|
# 5.should satisfy { |n|
|
|
# n > 3
|
|
# }
|
|
def satisfy(&block)
|
|
Matchers::Satisfy.new(&block)
|
|
end
|
|
end
|
|
end
|