module Cucumber::Core::Filter
Filters process test cases.
Each filter must respond to the following protocol:
* `with_receiver(new_receiver)` * `test_case(test_case, &describe_test_steps)` * `done`
The ‘with_receiver` method is used to assemble the filters into a chain. It should return a new instance of the filter with the receiver attribute set to the new receiver. The receiver will also respond to the filter protocol.
When a ‘test_case` message is received, the filter can choose to:
-
pass the
test_case
directly to its receiver (no-op) -
pass a modified copy of the
test_case
to its receiver -
not pass the
test_case
to its receiver at all
Finally, the ‘done` message is sent. A filter should pass this message directly to its receiver.
Public Class Methods
Utility method for quick construction of filter classes.
@example Example usage:
class BlankingFilter < Filter.new(:name_to_blank, :receiver) def test_case(test_case) if name_to_blank == test_case.name test_case.with_steps([]).describe_to(receiver) else test_case.describe_to(receiver) end end end
The attribute names passed to the Filter
constructor will become private attributes of your filter class.
# File lib/cucumber/core/filter.rb, line 43 def self.new(*attributes, &block) attributes << :receiver result = Class.new do attr_reader(*attributes) private(*attributes) define_method(:initialize) do |*args| attributes.zip(args) do |name, value| instance_variable_set("@#{name}".to_sym, value) end end def test_case(test_case) test_case.describe_to receiver self end def done receiver.done self end define_method(:with_receiver) do |new_receiver| args = attributes.map { |name| instance_variable_get("@#{name}".to_sym) } args[-1] = new_receiver self.class.new(*args) end end if block Class.new(result, &block) else result end end
Public Instance Methods
# File lib/cucumber/core/filter.rb, line 61 def done receiver.done self end
# File lib/cucumber/core/filter.rb, line 56 def test_case(test_case) test_case.describe_to receiver self end