class Gherkin::Formatter::FilterFormatter
Public Class Methods
new(formatter, filters)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 13 def initialize(formatter, filters) @formatter = formatter @filter = detect_filter(filters) @feature_tags = [] @feature_element_tags = [] @examples_tags = [] @examples_range = [] @feature_events = [] @background_events = [] @feature_element_events = [] @examples_events = [] @examples_name = nil @feature_element_name = nil @feature_element_range = nil end
Public Instance Methods
background(background)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 41 def background(background) @feature_element_name = background.name @feature_element_range = background.line_range @background_events = [background] end
done()
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 96 def done @formatter.done end
eof()
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 91 def eof replay! @formatter.eof end
examples(examples)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 63 def examples(examples) replay! @examples_tags = examples.tags @examples_name = examples.name table_body_range = case(examples.rows.length) when 0 then examples.line_range.last..examples.line_range.last when 1 then examples.rows[0].line..examples.rows[0].line else examples.rows[1].line..examples.rows[-1].line end @examples_range = examples.line_range.first..table_body_range.last if(@filter.evaluate([], [], [table_body_range])) examples.rows = @filter.filter_table_body_rows(examples.rows) end @examples_events = [examples] end
feature(feature)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 35 def feature(feature) @feature_tags = feature.tags @feature_name = feature.name @feature_events = [feature] end
scenario(scenario)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 47 def scenario(scenario) replay! @feature_element_tags = scenario.tags @feature_element_name = scenario.name @feature_element_range = scenario.line_range @feature_element_events = [scenario] end
scenario_outline(scenario_outline)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 55 def scenario_outline(scenario_outline) replay! @feature_element_tags = scenario_outline.tags @feature_element_name = scenario_outline.name @feature_element_range = scenario_outline.line_range @feature_element_events = [scenario_outline] end
step(step)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 81 def step(step) if @feature_element_events.any? @feature_element_events << step else @background_events << step end @feature_element_range = @feature_element_range.first..step.line_range.last end
uri(uri)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 31 def uri(uri) @formatter.uri(uri) end
Private Instance Methods
detect_filter(filters)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 102 def detect_filter(filters) raise "Inconsistent filters: #{filters.inspect}. Only one type [line,name,tag] can be used at once." if filters.map{|filter| filter.class}.uniq.length > 1 case(filters[0]) when Fixnum LineFilter.new(filters) when Regexp RegexpFilter.new(filters) when String TagFilter.new(filters) end end
replay!()
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 114 def replay! feature_element_ok = @filter.evaluate( (@feature_tags + @feature_element_tags), [@feature_name, @feature_element_name].compact, [@feature_element_range].compact ) examples_ok = @filter.evaluate( (@feature_tags + @feature_element_tags + @examples_tags), [@feature_name, @feature_element_name, @examples_name].compact, [@feature_element_range, @examples_range].compact ) if feature_element_ok || examples_ok replay_events!(@feature_events) replay_events!(@background_events) replay_events!(@feature_element_events) if examples_ok replay_events!(@examples_events) end end @examples_events.clear @examples_tags = [] @examples_name = nil @examples_range = nil end
replay_events!(events)
click to toggle source
# File lib/gherkin/formatter/filter_formatter.rb, line 142 def replay_events!(events) events.each do |event| event.replay(@formatter) end events.clear end