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.