The Ruby implementation of the programming language API.
# File lib/cucumber/rb_support/rb_language.rb, line 39 39: def initialize(step_mother) 40: @step_mother = step_mother 41: @step_definitions = [] 42: RbDsl.rb_language = self 43: @world_proc = @world_modules = nil 44: enable_rspec_expectations_if_available 45: end
# File lib/cucumber/rb_support/rb_language.rb, line 111 111: def begin_rb_scenario(scenario) 112: create_world 113: extend_world 114: connect_world(scenario) 115: end
# File lib/cucumber/rb_support/rb_language.rb, line 131 131: def build_rb_world_factory(world_modules, proc) 132: if(proc) 133: raise MultipleWorld.new(@world_proc, proc) if @world_proc 134: @world_proc = proc 135: end 136: @world_modules ||= [] 137: @world_modules += world_modules 138: end
# File lib/cucumber/rb_support/rb_language.rb, line 47 47: def enable_rspec_expectations_if_available 48: begin 49: # RSpec >=2.0 50: require 'rspec/expectations' 51: @rspec_matchers = ::RSpec::Matchers 52: rescue LoadError => try_rspec_1_2_4_or_higher 53: begin 54: require 'spec/expectations' 55: require 'spec/runner/differs/default' 56: require 'ostruct' 57: options = OpenStruct.new(:diff_format => :unified, :context_lines => 3) 58: Spec::Expectations.differ = Spec::Expectations::Differs::Default.new(options) 59: @rspec_matchers = ::Spec::Matchers 60: rescue LoadError => give_up 61: @rspec_matchers = Module.new{} 62: end 63: end 64: end
# File lib/cucumber/rb_support/rb_language.rb, line 140 140: def load_code_file(code_file) 141: require File.expand_path(code_file) # This will cause self.add_step_definition, self.add_hook, and self.add_transform to be called from RbDsl 142: end
# File lib/cucumber/rb_support/rb_language.rb, line 117 117: def register_rb_hook(phase, tag_expressions, proc) 118: add_hook(phase, RbHook.new(self, tag_expressions, proc)) 119: end
# File lib/cucumber/rb_support/rb_language.rb, line 125 125: def register_rb_step_definition(regexp, proc) 126: step_definition = RbStepDefinition.new(self, regexp, proc) 127: @step_definitions << step_definition 128: step_definition 129: end
# File lib/cucumber/rb_support/rb_language.rb, line 121 121: def register_rb_transform(regexp, proc) 122: add_transform(RbTransform.new(self, regexp, proc)) 123: end
# File lib/cucumber/rb_support/rb_language.rb, line 92 92: def snippet_text(step_keyword, step_name, multiline_arg_class) 93: snippet_pattern = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/') 94: arg_count = 0 95: ARGUMENT_PATTERNS.each do |pattern| 96: snippet_pattern = snippet_pattern.gsub(Regexp.new(pattern), pattern) 97: arg_count += snippet_pattern.scan(pattern).length 98: end 99: 100: block_args = (0...arg_count).map {|n| "arg#{n+1}"} 101: block_args << multiline_arg_class.default_arg_name unless multiline_arg_class.nil? 102: block_arg_string = block_args.empty? ? "" : " |#{block_args.join(", ")}|" 103: multiline_class_comment = "" 104: if(multiline_arg_class == Ast::Table) 105: multiline_class_comment = "# #{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n " 106: end 107: 108: "#{Gherkin::I18n.code_keyword_for(step_keyword)} /^#{snippet_pattern}$/ do#{block_arg_string}\n #{multiline_class_comment}pending # express the regexp above with the code you wish you had\nend" 109: end
Gets called for each file under features (or whatever is overridden with —require).
# File lib/cucumber/rb_support/rb_language.rb, line 68 68: def step_definitions_for(rb_file) 69: begin 70: require rb_file # This will cause self.add_step_definition and self.add_hook to be called from RbDsl 71: step_definitions 72: rescue LoadError => e 73: e.message << "\nFailed to load #{code_file}" 74: raise e 75: ensure 76: @step_definitions = nil 77: end 78: end
# File lib/cucumber/rb_support/rb_language.rb, line 80 80: def step_matches(name_to_match, name_to_format) 81: @step_definitions.map do |step_definition| 82: if(arguments = step_definition.arguments_from(name_to_match)) 83: StepMatch.new(step_definition, name_to_match, name_to_format, arguments) 84: else 85: nil 86: end 87: end.compact 88: end
# File lib/cucumber/rb_support/rb_language.rb, line 178 178: def check_nil(o, proc) 179: if o.nil? 180: begin 181: raise NilWorld.new 182: rescue NilWorld => e 183: e.backtrace.clear 184: e.backtrace.push(proc.backtrace_line("World")) 185: raise e 186: end 187: else 188: o 189: end 190: end
# File lib/cucumber/rb_support/rb_language.rb, line 173 173: def connect_world(scenario) 174: @current_world.__cucumber_step_mother = @step_mother 175: @current_world.__natural_language = scenario.language 176: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.