Parses a spec file and finds the nearest example for a given line number.
Methods
public class
public instance
protected instance
Attributes
| best_match | [R] |
Public class methods
new
(run_options)
[show source]
# File lib/spec/runner/line_number_query.rb, line 7 def initialize(run_options) @best_match = {} @run_options = run_options end
Public instance methods
example_line_for
(file, line_number)
[show source]
# File lib/spec/runner/line_number_query.rb, line 27 def example_line_for(file, line_number) determine_best_match(file, line_number) best_match[:line] end
spec_name_for
(file, line_number)
[show source]
# File lib/spec/runner/line_number_query.rb, line 12 def spec_name_for(file, line_number) best_match.clear file = File.expand_path(file) determine_best_match(file, line_number) if best_match[:example_group] if best_match[:example] "#{best_match[:example_group].description} #{best_match[:example].description}" else best_match[:example_group].description end else nil end end
Protected instance methods
consider_example_for_best_match
(example, example_group, file, line_number)
[show source]
# File lib/spec/runner/line_number_query.rb, line 56 def consider_example_for_best_match(example, example_group, file, line_number) example_file, example_line = parse_location(example.location) if is_best_match?(file, line_number, example_file, example_line) best_match.clear best_match[:example_group] = example_group best_match[:example] = example best_match[:line] = example_line end end
consider_example_group_for_best_match
(example_group, file, line_number)
[show source]
# File lib/spec/runner/line_number_query.rb, line 47 def consider_example_group_for_best_match(example_group, file, line_number) example_group_file, example_group_line = parse_location(example_group.location) if is_best_match?(file, line_number, example_group_file, example_group_line) best_match.clear best_match[:example_group] = example_group best_match[:line] = example_group_line end end
determine_best_match
(file, line_number)
[show source]
# File lib/spec/runner/line_number_query.rb, line 34 def determine_best_match(file, line_number) best_match.clear file = File.expand_path(file) @run_options.example_groups.each do |example_group| next unless example_group.location consider_example_group_for_best_match(example_group, file, line_number) example_group.examples.each do |example| consider_example_for_best_match(example, example_group, file, line_number) end end end
is_best_match?
(file, line_number, example_file, example_line)
[show source]
# File lib/spec/runner/line_number_query.rb, line 66 def is_best_match?(file, line_number, example_file, example_line) file == File.expand_path(example_file) && example_line <= line_number && example_line > best_match[:line].to_i end
parse_location
(location)
[show source]
# File lib/spec/runner/line_number_query.rb, line 72 def parse_location(location) location =~ /(.*)\:(\d*)(\:|$)/ return $1, Integer($2) end