class Cucumber::CucumberExpressions::ParameterType
Constants
- ILLEGAL_PARAMETER_NAME_PATTERN
- UNESCAPE_PATTERN
Attributes
name[R]
regexps[R]
type[R]
Public Class Methods
check_parameter_type_name(type_name)
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 11 def self.check_parameter_type_name(type_name) unescaped_type_name = type_name.gsub(UNESCAPE_PATTERN) do $2 end if ILLEGAL_PARAMETER_NAME_PATTERN =~ unescaped_type_name raise CucumberExpressionError.new("Illegal character '#{$1}' in parameter name {#{unescaped_type_name}}") end end
new(name, regexp, type, transformer, use_for_snippets, prefer_for_regexp_match)
click to toggle source
Create a new Parameter
@param name the name of the parameter type @param regexp [Array] list of regexps for capture groups. A single regexp can also be used @param type the return type of the transformed @param transformer lambda that transforms a String to (possibly) another type @param use_for_snippets true if this should be used for snippet generation @param prefer_for_regexp_match true if this should be preferred over similar types
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 37 def initialize(name, regexp, type, transformer, use_for_snippets, prefer_for_regexp_match) raise "regexp can't be nil" if regexp.nil? raise "type can't be nil" if type.nil? raise "transformer can't be nil" if transformer.nil? raise "use_for_snippets can't be nil" if use_for_snippets.nil? raise "prefer_for_regexp_match can't be nil" if prefer_for_regexp_match.nil? self.class.check_parameter_type_name(name) unless name.nil? @name, @type, @transformer, @use_for_snippets, @prefer_for_regexp_match = name, type, transformer, use_for_snippets, prefer_for_regexp_match @regexps = string_array(regexp) end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 53 def <=>(other) return -1 if prefer_for_regexp_match? && !other.prefer_for_regexp_match? return 1 if other.prefer_for_regexp_match? && !prefer_for_regexp_match? name <=> other.name end
prefer_for_regexp_match?()
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 20 def prefer_for_regexp_match? @prefer_for_regexp_match end
transform(self_obj, group_values)
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 49 def transform(self_obj, group_values) self_obj.instance_exec(*group_values, &@transformer) end
use_for_snippets?()
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 24 def use_for_snippets? @use_for_snippets end
Private Instance Methods
regexp_source(regexp)
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 66 def regexp_source(regexp) [ 'EXTENDED', 'IGNORECASE', 'MULTILINE' ].each do |option_name| option = Regexp.const_get(option_name) if regexp.options & option != 0 raise CucumberExpressionError.new("ParameterType Regexps can't use option Regexp::#{option_name}") end end regexp.source end
string_array(regexps)
click to toggle source
# File lib/cucumber/cucumber_expressions/parameter_type.rb, line 61 def string_array(regexps) array = regexps.is_a?(Array) ? regexps : [regexps] array.map {|regexp| regexp.is_a?(String) ? regexp : regexp_source(regexp)} end