Class: Cucumber::StepMatch

Inherits:
Object show all
Defined in:
lib/cucumber/step_match.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(step_definition, name_to_match, name_to_report, step_arguments) ⇒ StepMatch

Creates a new StepMatch. The name_to_report argument is what's reported, unless it's is, in which case name_to_report is used instead.


8
9
10
11
12
# File 'lib/cucumber/step_match.rb', line 8

def initialize(step_definition, name_to_match, name_to_report, step_arguments)
  raise "name_to_match can't be nil" if name_to_match.nil?
  raise "step_arguments can't be nil (but it can be an empty array)" if step_arguments.nil?
  @step_definition, @name_to_match, @name_to_report, @step_arguments = step_definition, name_to_match, name_to_report, step_arguments
end

Instance Attribute Details

#step_argumentsObject (readonly)

Returns the value of attribute step_arguments


3
4
5
# File 'lib/cucumber/step_match.rb', line 3

def step_arguments
  @step_arguments
end

#step_definitionObject (readonly)

Returns the value of attribute step_definition


3
4
5
# File 'lib/cucumber/step_match.rb', line 3

def step_definition
  @step_definition
end

Instance Method Details

#argsObject


14
15
16
# File 'lib/cucumber/step_match.rb', line 14

def args
  @step_arguments.map{|g| g.val}
end

#backtrace_lineObject


51
52
53
# File 'lib/cucumber/step_match.rb', line 51

def backtrace_line
  "#{file_colon_line}:in `#{@step_definition.regexp_source}'"
end

#file_colon_lineObject


47
48
49
# File 'lib/cucumber/step_match.rb', line 47

def file_colon_line
  @step_definition.file_colon_line
end

#format_args(format = lambda{|a| a}, &proc) ⇒ Object

Formats the matched arguments of the associated Step. This method is usually called from visitors, which render output.

The format can either be a String or a Proc.

If it is a String it should be a format string according to Kernel#sprinf, for example:

'<span class="param">%s</span></tt>'

If it is a Proc, it should take one argument and return the formatted argument, for example:

lambda { |param| "[#{param}]" }

43
44
45
# File 'lib/cucumber/step_match.rb', line 43

def format_args(format = lambda{|a| a}, &proc)
  @name_to_report || replace_arguments(@name_to_match, @step_arguments, format, &proc)
end

#inspectObject

:nodoc:


80
81
82
# File 'lib/cucumber/step_match.rb', line 80

def inspect #:nodoc:
  sprintf("#<%s:0x%x>", self.class, self.object_id)
end

#invoke(multiline_arg) ⇒ Object


22
23
24
25
26
# File 'lib/cucumber/step_match.rb', line 22

def invoke(multiline_arg)
  all_args = args
  all_args << multiline_arg.to_step_definition_arg if multiline_arg
  @step_definition.invoke(all_args)
end

#nameObject


18
19
20
# File 'lib/cucumber/step_match.rb', line 18

def name
  @name_to_report
end

#replace_arguments(string, step_arguments, format, &proc) ⇒ Object


59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/cucumber/step_match.rb', line 59

def replace_arguments(string, step_arguments, format, &proc)
  s = string.dup
  offset = past_offset = 0
  step_arguments.each do |step_argument|
    next if step_argument.offset.nil? || step_argument.offset < past_offset

    replacement = if block_given?
      proc.call(step_argument.val)
    elsif Proc === format
      format.call(step_argument.val)
    else
      format % step_argument.val
    end

    s[step_argument.offset + offset, step_argument.val.length] = replacement
    offset += replacement.unpack('U*').length - step_argument.val.unpack('U*').length
    past_offset = step_argument.offset + step_argument.val.length
  end
  s
end

#text_lengthObject


55
56
57
# File 'lib/cucumber/step_match.rb', line 55

def text_length
  @step_definition.regexp_source.unpack('U*').length
end