cucumber-expressions 5.0.18 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d661edfcc1203904d6471736027ab45c6036ec6a4015347ca190a7397b9a18f0
4
- data.tar.gz: 5aefbf1fbc78226c404a23b39131e966bcdac8f621711ab6b3b9997d23f4bd1f
3
+ metadata.gz: a4e80f6b342fd980a7e30ed217e54f83d5ee4da8198e93487470daff410e4959
4
+ data.tar.gz: 9cb0efc96dfc3f26257ac35998bdce354470543ccafdb604e227645fb6f5dd75
5
5
  SHA512:
6
- metadata.gz: 727ad5c75d452c0ad4b549045cbb2cfc15dc4cd5bc8e0b34333dd4d176969cac8960b780ce452927bca5c81cfdba7e2faff31c3ca0d7c21ac56688ced0b4e981
7
- data.tar.gz: 6e1a3dc1fe998cd396278f48a0fcd410e2bbe5b8e6eb35a43aea857c70f74391dda987106b4b7b13b40da0f512f2eb5b165897cf20dafb64e9c60c5db28833d5
6
+ metadata.gz: 844a25bb968e193a071b4bdfef1a79cc9bd3da3f5211c75adeef363b74ba3e34f7b6cbe578c06fbaf7e6d8f118eae33be2acdca0af5ecd70c8c77c42aac78252
7
+ data.tar.gz: e9359ff92fccbc88eb457bec080607397d723d6c488ee4ce87053b360e43268d8a5b3bd4523c3415e76ac8c1b79965db9aff7d4ae6ddb486f3acf02e08e32c7c
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'cucumber-expressions'
4
- s.version = '5.0.18'
4
+ s.version = '6.0.0'
5
5
  s.authors = ["Aslak Hellesøy"]
6
6
  s.description = 'Cucumber Expressions - a simpler alternative to Regular Expressions'
7
7
  s.summary = "cucumber-expressions-#{s.version}"
@@ -11,6 +11,8 @@ module Cucumber
11
11
  OPTIONAL_REGEXP = /(\\\\)?\(([^)]+)\)/
12
12
  ALTERNATIVE_NON_WHITESPACE_TEXT_REGEXP = /([^\s^\/]+)((\/[^\s^\/]+)+)/
13
13
  DOUBLE_ESCAPE = '\\\\'
14
+ PARAMETER_TYPES_CANNOT_BE_ALTERNATIVE = 'Parameter types cannot be alternative: '
15
+ PARAMETER_TYPES_CANNOT_BE_OPTIONAL = 'Parameter types cannot be optional: '
14
16
 
15
17
  attr_reader :source
16
18
 
@@ -48,8 +50,10 @@ module Cucumber
48
50
  def process_optional(expression)
49
51
  # Create non-capturing, optional capture groups from parenthesis
50
52
  expression.gsub(OPTIONAL_REGEXP) do
53
+ g2 = $2
54
+ check_no_parameter_type(g2, PARAMETER_TYPES_CANNOT_BE_OPTIONAL)
51
55
  # look for double-escaped parentheses
52
- $1 == DOUBLE_ESCAPE ? "\\(#{$2}\\)" : "(?:#{$2})?"
56
+ $1 == DOUBLE_ESCAPE ? "\\(#{g2}\\)" : "(?:#{g2})?"
53
57
  end
54
58
  end
55
59
 
@@ -58,7 +62,14 @@ module Cucumber
58
62
  # replace \/ with /
59
63
  # replace / with |
60
64
  replacement = $&.tr('/', '|').gsub(/\\\|/, '/')
61
- "(?:#{replacement})"
65
+ if replacement.include?('|')
66
+ replacement.split(/\|/).each do |part|
67
+ check_no_parameter_type(part, PARAMETER_TYPES_CANNOT_BE_ALTERNATIVE)
68
+ end
69
+ "(?:#{replacement})"
70
+ else
71
+ replacement
72
+ end
62
73
  end
63
74
  end
64
75
 
@@ -83,6 +94,12 @@ module Cucumber
83
94
  capture_groups = regexps.map { |group| "(?:#{group})" }
84
95
  "(#{capture_groups.join('|')})"
85
96
  end
97
+
98
+ def check_no_parameter_type(s, message)
99
+ if PARAMETER_REGEXP =~ s
100
+ raise CucumberExpressionError.new("#{message}#{source}")
101
+ end
102
+ end
86
103
  end
87
104
  end
88
105
  end
@@ -35,7 +35,7 @@ module Cucumber
35
35
  end
36
36
 
37
37
  def transform(self_obj, group_values)
38
- self_obj.instance_exec(*group_values, &@transformer)
38
+ group_values.empty? ? nil : self_obj.instance_exec(*group_values, &@transformer)
39
39
  end
40
40
 
41
41
  def <=>(other)
@@ -80,6 +80,18 @@ module Cucumber
80
80
  expect {match("{unknown}", "something")}.to raise_error('Undefined parameter type {unknown}')
81
81
  end
82
82
 
83
+ it "does not allow optional parameter types" do
84
+ expect {match("({int})", "3")}.to raise_error('Parameter types cannot be optional: ({int})')
85
+ end
86
+
87
+ it "does not allow text/parameter type alternation" do
88
+ expect {match("x/{int}", "3")}.to raise_error('Parameter types cannot be alternative: x/{int}')
89
+ end
90
+
91
+ it "does not allow parameter type/text alternation" do
92
+ expect {match("{int}/x", "3")}.to raise_error('Parameter types cannot be alternative: {int}/x')
93
+ end
94
+
83
95
  it "exposes source" do
84
96
  expr = "I have {int} cuke(s)"
85
97
  expect(CucumberExpression.new(expr, ParameterTypeRegistry.new).source).to eq(expr)
@@ -55,6 +55,13 @@ module Cucumber
55
55
  ).to eq(["I", "can", 1, "slide"])
56
56
  end
57
57
 
58
+ it "matches capture group nested in optional one" do
59
+ regexp = /^a (pre-commercial transaction |pre buyer fee model )?purchase(?: for \$(\d+))?$/
60
+ expect( match(regexp, 'a purchase') ).to eq([nil, nil])
61
+ expect( match(regexp, 'a purchase for $33') ).to eq([nil, 33])
62
+ expect( match(regexp, 'a pre buyer fee model purchase') ).to eq(['pre buyer fee model ', nil])
63
+ end
64
+
58
65
  it "works with escaped parenthesis" do
59
66
  expect( match(/Across the line\(s\)/, 'Across the line(s)') ).to eq([])
60
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-expressions
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.18
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-21 00:00:00.000000000 Z
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -134,7 +134,7 @@ rubyforge_project:
134
134
  rubygems_version: 2.7.6
135
135
  signing_key:
136
136
  specification_version: 4
137
- summary: cucumber-expressions-5.0.18
137
+ summary: cucumber-expressions-6.0.0
138
138
  test_files:
139
139
  - spec/capture_warnings.rb
140
140
  - spec/coverage.rb