From 97d084764d3273d8576838a7583073f8a28b4762 Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Thu, 5 Oct 2023 18:34:14 +0100 Subject: [PATCH 1/3] Expose transformer as an attr_reader, remove duplicate reader booleans for use_for_snippets and prefer_for_regexp_match --- .../cucumber_expressions/parameter_type.rb | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb b/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb index e5fb0c03f..68c1882ce 100644 --- a/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb +++ b/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb @@ -8,7 +8,7 @@ class ParameterType ILLEGAL_PARAMETER_NAME_PATTERN = /([\[\]()$.|?*+])/.freeze UNESCAPE_PATTERN = /(\\([\[$.|?*+\]]))/.freeze - attr_reader :name, :type, :regexps + attr_reader :name, :type, :transformer, :use_for_snippets, :prefer_for_regexp_match, :regexps def self.check_parameter_type_name(type_name) 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) !(ILLEGAL_PARAMETER_NAME_PATTERN =~ unescaped_type_name) end - def prefer_for_regexp_match? - @prefer_for_regexp_match - end - - def use_for_snippets? - @use_for_snippets - end - # Create a new Parameter # # @param name the name of the parameter type @@ -62,7 +54,6 @@ def <=>(other) private - def string_array(regexps) array = regexps.is_a?(Array) ? regexps : [regexps] array.map { |regexp| regexp.is_a?(String) ? regexp : regexp_source(regexp) } @@ -70,9 +61,9 @@ def string_array(regexps) def regexp_source(regexp) [ - 'EXTENDED', - 'IGNORECASE', - 'MULTILINE' + 'EXTENDED', + 'IGNORECASE', + 'MULTILINE' ].each do |option_name| option = Regexp.const_get(option_name) raise CucumberExpressionError.new("ParameterType Regexps can't use option Regexp::#{option_name}") if regexp.options & option != 0 From b93b0172498e361f07ff91c43e02e9aa7a6a467f Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Thu, 5 Oct 2023 18:36:31 +0100 Subject: [PATCH 2/3] Use attr readers downstream in gem --- .../cucumber_expressions/cucumber_expression_generator.rb | 2 +- ruby/lib/cucumber/cucumber_expressions/parameter_type.rb | 4 ++-- .../cucumber/cucumber_expressions/parameter_type_registry.rb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb index 9e8e39743..62ccfc1fe 100644 --- a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb +++ b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb @@ -69,7 +69,7 @@ def generate_expressions(text) def create_parameter_type_matchers(text) parameter_matchers = [] @parameter_type_registry.parameter_types.each do |parameter_type| - parameter_matchers += create_parameter_type_matchers2(parameter_type, text) if parameter_type.use_for_snippets? + parameter_matchers += create_parameter_type_matchers2(parameter_type, text) if parameter_type.use_for_snippets end parameter_matchers end diff --git a/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb b/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb index 68c1882ce..6dbe2842c 100644 --- a/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb +++ b/ruby/lib/cucumber/cucumber_expressions/parameter_type.rb @@ -47,8 +47,8 @@ def transform(self_obj, group_values) end 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? + return -1 if prefer_for_regexp_match && !other.prefer_for_regexp_match + return 1 if other.prefer_for_regexp_match && !prefer_for_regexp_match return name <=> other.name end diff --git a/ruby/lib/cucumber/cucumber_expressions/parameter_type_registry.rb b/ruby/lib/cucumber/cucumber_expressions/parameter_type_registry.rb index 3369293a4..af4f0f5ed 100644 --- a/ruby/lib/cucumber/cucumber_expressions/parameter_type_registry.rb +++ b/ruby/lib/cucumber/cucumber_expressions/parameter_type_registry.rb @@ -38,7 +38,7 @@ def lookup_by_type_name(name) def lookup_by_regexp(parameter_type_regexp, expression_regexp, text) parameter_types = @parameter_types_by_regexp[parameter_type_regexp] return nil if parameter_types.nil? - if parameter_types.length > 1 && !parameter_types[0].prefer_for_regexp_match? + if parameter_types.length > 1 && !parameter_types[0].prefer_for_regexp_match # We don't do this check on insertion because we only want to restrict # ambiguity when we look up by Regexp. Users of CucumberExpression should # not be restricted. @@ -66,7 +66,7 @@ def define_parameter_type(parameter_type) parameter_type.regexps.each do |parameter_type_regexp| parameter_types = @parameter_types_by_regexp[parameter_type_regexp] - if parameter_types.any? && parameter_types[0].prefer_for_regexp_match? && parameter_type.prefer_for_regexp_match? + if parameter_types.any? && parameter_types[0].prefer_for_regexp_match && parameter_type.prefer_for_regexp_match 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}}") end parameter_types.push(parameter_type) From b22deda5d6788ba563f33d58a834bd667049e5c3 Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Thu, 5 Oct 2023 18:42:04 +0100 Subject: [PATCH 3/3] Add changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e00597cd..85ed929a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - [JavaScript] Added TypeScript source to the package ([#211](https://github.com/cucumber/cucumber-expressions/pull/211)) - [Ruby] Minimum supported ruby is now 2.5+ ([#232](https://github.com/cucumber/cucumber-expressions/pull/232)) - [Ruby] Large suite wide refactor for basic rubocop compliance ([#233](https://github.com/cucumber/cucumber-expressions/pull/233)) +- [Ruby] Change public API readers for `ParameterType` + - Expose `transformer` arg as a public reader + - Remove `prefer_for_regexp_match?` and `use_for_snippets?` -> Use their reader equivalents instead (Remove the `?`) + ([#234](https://github.com/cucumber/cucumber-expressions/pull/234)) ## [16.1.2] - 2023-01-17 ### Fixed