Class: Cucumber::Glue::StepDefinition
- Inherits:
-
Object
- Object
- Cucumber::Glue::StepDefinition
- Defined in:
- lib/cucumber/glue/step_definition.rb
Overview
A Step Definition holds a Regexp pattern and a Proc, and is typically created by calling Given, When or Then in the step_definitions Ruby files.
Example:
Given /I have (\d+) cucumbers in my belly/ do
# some code here
end
Defined Under Namespace
Classes: MissingProc
Instance Attribute Summary collapse
-
#expression ⇒ Object
readonly
Returns the value of attribute expression.
Class Method Summary collapse
Instance Method Summary collapse
-
#==(step_definition) ⇒ Object
@api private.
-
#arguments_from(step_name) ⇒ Object
@api private.
-
#backtrace_line ⇒ Object
@api private.
-
#file ⇒ Object
@api private.
-
#file_colon_line ⇒ Object
@api private.
-
#initialize(registry, expression, proc) ⇒ StepDefinition
constructor
A new instance of StepDefinition.
-
#invoke(args) ⇒ Object
@api private TODO: inline this and step definition just be a value object.
-
#location ⇒ Object
The source location where the step defintion can be found.
-
#to_hash ⇒ Object
@api private.
Constructor Details
#initialize(registry, expression, proc) ⇒ StepDefinition
Returns a new instance of StepDefinition.
68 69 70 71 72 |
# File 'lib/cucumber/glue/step_definition.rb', line 68 def initialize(registry, expression, proc) raise 'No regexp' if expression.is_a?(Regexp) @registry, @expression, @proc = registry, expression, proc # @registry.available_step_definition(regexp_source, location) end |
Instance Attribute Details
#expression ⇒ Object (readonly)
Returns the value of attribute expression.
66 67 68 |
# File 'lib/cucumber/glue/step_definition.rb', line 66 def expression @expression end |
Class Method Details
.new(registry, string_or_regexp, proc_or_sym, options) ⇒ Object
28 29 30 31 |
# File 'lib/cucumber/glue/step_definition.rb', line 28 def new(registry, string_or_regexp, proc_or_sym, ) raise MissingProc if proc_or_sym.nil? super registry, registry.create_expression(string_or_regexp), create_proc(proc_or_sym, ) end |
Instance Method Details
#==(step_definition) ⇒ Object
@api private
95 96 97 |
# File 'lib/cucumber/glue/step_definition.rb', line 95 def ==(step_definition) expression.source == step_definition.expression.source end |
#arguments_from(step_name) ⇒ Object
@api private
100 101 102 103 104 |
# File 'lib/cucumber/glue/step_definition.rb', line 100 def arguments_from(step_name) args = @expression.match(step_name) # @registry.invoked_step_definition(regexp_source, location) if args args end |
#backtrace_line ⇒ Object
@api private
118 119 120 |
# File 'lib/cucumber/glue/step_definition.rb', line 118 def backtrace_line "#{location}:in `#{@expression}'" end |
#file ⇒ Object
@api private
138 139 140 |
# File 'lib/cucumber/glue/step_definition.rb', line 138 def file @file ||= location.file end |
#file_colon_line ⇒ Object
@api private
123 124 125 126 127 128 129 130 |
# File 'lib/cucumber/glue/step_definition.rb', line 123 def file_colon_line case @proc when Proc location.to_s when Symbol ":#{@proc}" end end |
#invoke(args) ⇒ Object
@api private TODO: inline this and step definition just be a value object
108 109 110 111 112 113 114 115 |
# File 'lib/cucumber/glue/step_definition.rb', line 108 def invoke(args) begin InvokeInWorld.cucumber_instance_exec_in(@registry.current_world, true, @expression.to_s, *args, &@proc) rescue ArityMismatchError => e e.backtrace.unshift(self.backtrace_line) raise e end end |
#location ⇒ Object
The source location where the step defintion can be found
133 134 135 |
# File 'lib/cucumber/glue/step_definition.rb', line 133 def location @location ||= Cucumber::Core::Ast::Location.from_source_location(*@proc.source_location) end |
#to_hash ⇒ Object
@api private
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/cucumber/glue/step_definition.rb', line 75 def to_hash type = expression.is_a?(CucumberExpressions::RegularExpression) ? 'regular expression' : 'cucumber expression' regexp = expression.regexp flags = '' flags += 'm' if (regexp. & Regexp::MULTILINE) != 0 flags += 'i' if (regexp. & Regexp::IGNORECASE) != 0 flags += 'x' if (regexp. & Regexp::EXTENDED) != 0 { source: { type: type, expression: expression.source }, regexp: { source: regexp.source, flags: flags } } end |