Class: Gherkin::Parser::FilterListener
- Inherits:
-
Object
- Object
- Gherkin::Parser::FilterListener
- Defined in:
- lib/gherkin/parser/filter_listener.rb
Overview
This class filters events based on filter criteria.
Instance Method Summary collapse
-
#initialize(listener, filters) ⇒ FilterListener
constructor
Creates a new instance that replays events to
listener
, filtered byfilters
, an Array that can contain one of the following:. - #location(uri, offset) ⇒ Object
Constructor Details
#initialize(listener, filters) ⇒ FilterListener
Creates a new instance that replays events to listener
, filtered by filters
, an Array that can contain one of the following:
-
Line numbers (Fixnum) to filter on.
-
Name regexen (Regexp) to filter on. Matches against :feature, :background, :scenario, :scenario_outline and :examples
-
Tag expressions (String) to filter on.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/gherkin/parser/filter_listener.rb', line 18 def initialize(listener, filters) @listener = listener @filter_method = detect_filter(filters) @meta_buffer = [] @feature_buffer = [] @scenario_buffer = [] @examples_buffer = [] @examples_rows_buffer = [] @feature_tags = [] @scenario_tags = [] @example_tags = [] @table_state = :step end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(*event_args) ⇒ Object (private)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/gherkin/parser/filter_listener.rb', line 41 def method_missing(*event_args) event = Event.new(event_args) return event.replay(@listener) if no_filters? case(event.event) when :tag @meta_buffer << event when :comment @meta_buffer << event when :feature @feature_buffer = @meta_buffer @feature_buffer << event @feature_tags = @meta_buffer = [] @feature_ok = true if filter_match?(event) when :background @feature_buffer += @meta_buffer @feature_buffer << event @meta_buffer = [] @table_state = :background @background_ok = true if filter_match?(event) when :scenario replay_examples_rows_buffer @scenario_buffer = @meta_buffer @scenario_buffer << event @scenario_tags = @example_tags = [] @meta_buffer = [] @scenario_ok = filter_match?(*@scenario_buffer) || tag_match? @examples_ok = false @background_ok = false @table_state = :step when :scenario_outline replay_examples_rows_buffer @scenario_buffer = @meta_buffer @scenario_buffer << event @scenario_tags = @example_tags = [] @meta_buffer = [] @scenario_ok = filter_match?(*@scenario_buffer) @examples_ok = false @background_ok = false @table_state = :step when :examples replay_examples_rows_buffer @examples_buffer = @meta_buffer @examples_buffer << event @example_tags = @meta_buffer = [] @examples_rows_buffer = [] @examples_ok = filter_match?(*@examples_buffer) || tag_match? @table_state = :examples when :step case(@table_state) when :background @feature_buffer += @meta_buffer @feature_buffer << event @meta_buffer = [] @background_ok = true if filter_match?(event) else @scenario_buffer << event @scenario_ok ||= filter_match?(*@scenario_buffer) @table_state = :step end when :row case(@table_state) when :examples unless header_row_already_buffered? @examples_buffer << event @examples_ok = true if filter_match?(*@examples_buffer) else @examples_rows_buffer << event if @scenario_ok || @examples_ok || @feature_ok || filter_match?(event) end when :step @scenario_buffer << event @scenario_ok ||= filter_match?(*@scenario_buffer) when :background @feature_buffer += @meta_buffer @feature_buffer << event @meta_buffer = [] else raise "Bad table_state:#{@table_state.inspect}" end when :py_string if @table_state == :background @feature_buffer << event @feature_ok ||= filter_match?(*@feature_buffer) else @scenario_buffer << event @scenario_ok ||= filter_match?(*@scenario_buffer) end when :eof replay_examples_rows_buffer event.replay(@listener) return else super end if @scenario_ok || @examples_ok || @feature_ok || @background_ok replay_buffers end end |
Instance Method Details
#location(uri, offset) ⇒ Object
35 36 37 |
# File 'lib/gherkin/parser/filter_listener.rb', line 35 def location(uri, offset) @listener.location(uri, offset) end |