cucumber-expressions 5.0.18 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
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