Parent

Included Modules

Class Index [+]

Quicksearch

Cucumber::RbSupport::RbLanguage

The Ruby implementation of the programming language API.

Constants

ARGUMENT_PATTERNS

Attributes

current_world[R]

Public Class Methods

new(step_mother) click to toggle source
    # 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

Public Instance Methods

begin_rb_scenario(scenario) click to toggle source
     # 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
build_rb_world_factory(world_modules, proc) click to toggle source
     # 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
enable_rspec_expectations_if_available() click to toggle source
    # 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
load_code_file(code_file) click to toggle source
     # 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
register_rb_hook(phase, tag_expressions, proc) click to toggle source
     # 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
register_rb_step_definition(regexp, proc) click to toggle source
     # 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
register_rb_transform(regexp, proc) click to toggle source
     # 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
snippet_text(step_keyword, step_name, multiline_arg_class) click to toggle source
     # 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
step_definitions_for(rb_file) click to toggle source

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
step_matches(name_to_match, name_to_format) click to toggle source
    # 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

Protected Instance Methods

begin_scenario(scenario) click to toggle source
     # File lib/cucumber/rb_support/rb_language.rb, line 146
146:       def begin_scenario(scenario)
147:         begin_rb_scenario(scenario)
148:       end
end_scenario() click to toggle source
     # File lib/cucumber/rb_support/rb_language.rb, line 150
150:       def end_scenario
151:         @current_world = nil
152:       end

Private Instance Methods

check_nil(o, proc) click to toggle source
     # 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
connect_world(scenario) click to toggle source
     # 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
create_world() click to toggle source
     # File lib/cucumber/rb_support/rb_language.rb, line 156
156:       def create_world
157:         if(@world_proc)
158:           @current_world = @world_proc.call
159:           check_nil(@current_world, @world_proc)
160:         else
161:           @current_world = Object.new
162:         end
163:       end
extend_world() click to toggle source
     # File lib/cucumber/rb_support/rb_language.rb, line 165
165:       def extend_world
166:         @current_world.extend(RbWorld)
167:         @current_world.extend(@rspec_matchers)
168:         (@world_modules || []).each do |mod|
169:           @current_world.extend(mod)
170:         end
171:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.