Skip to content

Commit 66964f5

Browse files
authored
Feature/enable transformer capture (#234)
* Expose transformer as an attr_reader, remove duplicate reader booleans for use_for_snippets and prefer_for_regexp_match * Use attr readers downstream in gem * Add changelog entry
1 parent 69a3990 commit 66964f5

File tree

4 files changed

+13
-18
lines changed

4 files changed

+13
-18
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1010
- [JavaScript] Added TypeScript source to the package ([#211](https://github.com/cucumber/cucumber-expressions/pull/211))
1111
- [Ruby] Minimum supported ruby is now 2.5+ ([#232](https://github.com/cucumber/cucumber-expressions/pull/232))
1212
- [Ruby] Large suite wide refactor for basic rubocop compliance ([#233](https://github.com/cucumber/cucumber-expressions/pull/233))
13+
- [Ruby] Change public API readers for `ParameterType`
14+
- Expose `transformer` arg as a public reader
15+
- Remove `prefer_for_regexp_match?` and `use_for_snippets?` -> Use their reader equivalents instead (Remove the `?`)
16+
([#234](https://github.com/cucumber/cucumber-expressions/pull/234))
1317

1418
## [16.1.2] - 2023-01-17
1519
### Fixed

ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def generate_expressions(text)
6969
def create_parameter_type_matchers(text)
7070
parameter_matchers = []
7171
@parameter_type_registry.parameter_types.each do |parameter_type|
72-
parameter_matchers += create_parameter_type_matchers2(parameter_type, text) if parameter_type.use_for_snippets?
72+
parameter_matchers += create_parameter_type_matchers2(parameter_type, text) if parameter_type.use_for_snippets
7373
end
7474
parameter_matchers
7575
end

ruby/lib/cucumber/cucumber_expressions/parameter_type.rb

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class ParameterType
88
ILLEGAL_PARAMETER_NAME_PATTERN = /([\[\]()$.|?*+])/.freeze
99
UNESCAPE_PATTERN = /(\\([\[$.|?*+\]]))/.freeze
1010

11-
attr_reader :name, :type, :regexps
11+
attr_reader :name, :type, :transformer, :use_for_snippets, :prefer_for_regexp_match, :regexps
1212

1313
def self.check_parameter_type_name(type_name)
1414
raise CucumberExpressionError.new("Illegal character in parameter name {#{type_name}}. Parameter names may not contain '[]()$.|?*+'") unless is_valid_parameter_type_name(type_name)
@@ -21,14 +21,6 @@ def self.is_valid_parameter_type_name(type_name)
2121
!(ILLEGAL_PARAMETER_NAME_PATTERN =~ unescaped_type_name)
2222
end
2323

24-
def prefer_for_regexp_match?
25-
@prefer_for_regexp_match
26-
end
27-
28-
def use_for_snippets?
29-
@use_for_snippets
30-
end
31-
3224
# Create a new Parameter
3325
#
3426
# @param name the name of the parameter type
@@ -55,24 +47,23 @@ def transform(self_obj, group_values)
5547
end
5648

5749
def <=>(other)
58-
return -1 if prefer_for_regexp_match? && !other.prefer_for_regexp_match?
59-
return 1 if other.prefer_for_regexp_match? && !prefer_for_regexp_match?
50+
return -1 if prefer_for_regexp_match && !other.prefer_for_regexp_match
51+
return 1 if other.prefer_for_regexp_match && !prefer_for_regexp_match
6052
return name <=> other.name
6153
end
6254

6355
private
6456

65-
6657
def string_array(regexps)
6758
array = regexps.is_a?(Array) ? regexps : [regexps]
6859
array.map { |regexp| regexp.is_a?(String) ? regexp : regexp_source(regexp) }
6960
end
7061

7162
def regexp_source(regexp)
7263
[
73-
'EXTENDED',
74-
'IGNORECASE',
75-
'MULTILINE'
64+
'EXTENDED',
65+
'IGNORECASE',
66+
'MULTILINE'
7667
].each do |option_name|
7768
option = Regexp.const_get(option_name)
7869
raise CucumberExpressionError.new("ParameterType Regexps can't use option Regexp::#{option_name}") if regexp.options & option != 0

ruby/lib/cucumber/cucumber_expressions/parameter_type_registry.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def lookup_by_type_name(name)
3838
def lookup_by_regexp(parameter_type_regexp, expression_regexp, text)
3939
parameter_types = @parameter_types_by_regexp[parameter_type_regexp]
4040
return nil if parameter_types.nil?
41-
if parameter_types.length > 1 && !parameter_types[0].prefer_for_regexp_match?
41+
if parameter_types.length > 1 && !parameter_types[0].prefer_for_regexp_match
4242
# We don't do this check on insertion because we only want to restrict
4343
# ambiguity when we look up by Regexp. Users of CucumberExpression should
4444
# not be restricted.
@@ -66,7 +66,7 @@ def define_parameter_type(parameter_type)
6666

6767
parameter_type.regexps.each do |parameter_type_regexp|
6868
parameter_types = @parameter_types_by_regexp[parameter_type_regexp]
69-
if parameter_types.any? && parameter_types[0].prefer_for_regexp_match? && parameter_type.prefer_for_regexp_match?
69+
if parameter_types.any? && parameter_types[0].prefer_for_regexp_match && parameter_type.prefer_for_regexp_match
7070
raise CucumberExpressionError.new("There can only be one preferential parameter type per regexp. The regexp /#{parameter_type_regexp}/ is used for two preferential parameter types, {#{parameter_types[0].name}} and {#{parameter_type.name}}")
7171
end
7272
parameter_types.push(parameter_type)

0 commit comments

Comments
 (0)