moduleCucumbermoduleTreeclassBaseStepattr_reader:scenarioattr_accessor:errordefself.new_id!@next_id||=-1@next_id+=1endattr_reader:errordeffile@scenario.fileenddefstepsselfenddeflengthkeyword.jlength+1+name.jlengthendifdefined?(JRUBY_VERSION)PENDING_ADJUSTMENT=2REGULAR_ADJUSTMENT=1elsePENDING_ADJUSTMENT=3REGULAR_ADJUSTMENT=2enddefexecute_in(world,regexp,args,proc)strip_pos=nilbeginproc.call_in(world,*args)rescueArityMismatchError=>ee.backtrace[0]=proc.to_backtrace_linestrip_pos=e.backtrace.index("#{__FILE__}:#{__LINE__-3}:in `execute_in'")format_error(strip_pos,proc,e)rescue=>emethod_line="#{__FILE__}:#{__LINE__-6}:in `execute_in'"method_line_pos=e.backtrace.index(method_line)ifmethod_line_posstrip_pos=method_line_pos-(Pending===e?PENDING_ADJUSTMENT:REGULAR_ADJUSTMENT)else# This happens with rails, because they screw up the backtrace# before we get here (injecting erb stacktrace and such)endformat_error(strip_pos,proc,e)endenddefformat_error(strip_pos,proc,e)@error=e# Remove lines underneath the plain text stepe.backtrace[strip_pos..-1]=nilunlessstrip_pos.nil?e.backtrace.flatten# Replace the step line with something more readablee.backtrace.replace(e.backtrace.map{|l|l.gsub(/`#{proc.meth}'/,"`#{keyword}#{proc.name}'")})ifrow?e.backtrace<<"#{file}:#{line}:in `#{proc.name}'"elsee.backtrace<<"#{file}:#{line}:in `#{keyword}#{name}'"endraiseeenddefid@id||=self.class.new_id!enddefactual_keywordkeyword==Cucumber.language['and']?previous_step.actual_keyword:keywordenddefprevious_step@scenario.previous_step(self)enddefpadding_length@scenario.step_padding_length(self)endendclassStep<BaseStepattr_reader:keyword,:name,:lineattr_accessor:arity,:extra_argsdefrow?falseenddefinitialize(scenario,keyword,name,line)@scenario,@keyword,@name,@line=scenario,keyword,name,line@extra_args=[]@arity=0enddefregexp_args_proc(step_mother)regexp,args,proc=step_mother.regexp_args_proc(name)@arity=args.length[regexp,(args+extra_args),proc]enddefformat(regexp,format=nil,&proc)regexp.nil??name:name.gzub(regexp,format,&proc)endendclassRowStep<BaseStepattr_reader:keyworddefinitialize(scenario,step,args)@scenario,@step,@args=scenario,step,argsenddefregexp_args_proc(step_mother)regexp,_,proc=@step.regexp_args_proc(step_mother)[regexp,@args,proc]enddefrow?trueenddefline@scenario.lineendendendend