cucumber-expressions 4.0.3 → 4.0.4

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
  SHA1:
3
- metadata.gz: 7f078db7f6aa1421bebcd4ab1dd9706637a253f0
4
- data.tar.gz: 8c2b581f749dbf37abf0fa8f05026bd5b9396bb2
3
+ metadata.gz: 585a2bd12be1402edbd044df4eba75a3facc8ae7
4
+ data.tar.gz: e2f73a0945067fc0f36aee14c2fd2c8a0a1953cf
5
5
  SHA512:
6
- metadata.gz: 21c2dd0bc60847678a08db4bce0a0d61a6c00544b889e212b3dddba44a285ddf8446cfb38fedd41169be9c3b0e7bc1589f7175eb39a3803240ecac598ebc3995
7
- data.tar.gz: 5e0988875e133251cb0b0aae14cbd7b0da4ae8f3384e7cda7451de6da906206953342f1ffdc850e15215a2aeaf3be4d403c30e2b67d4c938bf6a6b1a393a1766
6
+ metadata.gz: 107cee1adc2c92cf7fde7b709dc01ae34b316e34ce604adc19232d75ed66d5abfb28be5cf29c96d6e633d34bf38c5650a8626d314a4db0c6064e481622e28923
7
+ data.tar.gz: caebefb4d97b8abe78c6565a643bb35c6f96175b5169394b46d03b9cfab339512d7167d6df1a0ea4071033a2139a77e88586139ed0868df45ff4275bb768c215
data/.rsync CHANGED
@@ -1,2 +1,3 @@
1
1
  ../../LICENSE LICENSE
2
+ ../../.travis/ruby/.travis.yml .travis.yml
2
3
  ../examples.txt examples.txt
@@ -1,10 +1,15 @@
1
+ # Please update /.travis/ruby/.travis.yml in the cucumber/cucumber monorepo
2
+ # and sync:
3
+ #
4
+ # source scripts/functions.sh && rsync_files
5
+ #
1
6
  language: ruby
2
7
 
3
8
  rvm:
4
- - 2.4.0
5
- - 2.3.3
6
- - 2.2.6
7
- - jruby-9.1.7.0
9
+ - 2.4.2
10
+ - 2.3.5
11
+ - 2.2.8
12
+ - jruby-9.1.13.0
8
13
 
9
14
  notifications:
10
15
  webhooks:
@@ -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 = '4.0.3'
4
+ s.version = '4.0.4'
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}"
@@ -51,7 +51,7 @@ module Cucumber
51
51
 
52
52
  parameter_type_combinations.push(parameter_types)
53
53
 
54
- expression_template += text.slice(pos...best_parameter_type_matcher.start)
54
+ expression_template += escape_for_sprintf(text.slice(pos...best_parameter_type_matcher.start))
55
55
  expression_template += "{%s}"
56
56
 
57
57
  pos = best_parameter_type_matcher.start + best_parameter_type_matcher.group.length
@@ -64,7 +64,7 @@ module Cucumber
64
64
  end
65
65
  end
66
66
 
67
- expression_template += text.slice(pos..-1)
67
+ expression_template += escape_for_sprintf(text.slice(pos..-1))
68
68
 
69
69
  CombinatorialGeneratedExpressionFactory.new(
70
70
  expression_template,
@@ -94,6 +94,9 @@ module Cucumber
94
94
  result
95
95
  end
96
96
 
97
+ def escape_for_sprintf(s)
98
+ s.gsub(/%/, '%%')
99
+ end
97
100
  end
98
101
  end
99
102
  end
@@ -3,6 +3,8 @@ require 'cucumber/cucumber_expressions/group'
3
3
  module Cucumber
4
4
  module CucumberExpressions
5
5
  class GroupBuilder
6
+ attr_accessor :source
7
+
6
8
  def initialize
7
9
  @group_builders = []
8
10
  @capturing = true
@@ -31,6 +33,10 @@ module Cucumber
31
33
  group_builder.add(child)
32
34
  end
33
35
  end
36
+
37
+ def children
38
+ @group_builders
39
+ end
34
40
  end
35
41
  end
36
42
  end
@@ -5,7 +5,6 @@ require 'cucumber/cucumber_expressions/tree_regexp'
5
5
  module Cucumber
6
6
  module CucumberExpressions
7
7
  class RegularExpression
8
- CAPTURE_GROUP_PATTERN = /\((?!\?:)([^(]+)\)/
9
8
 
10
9
  def initialize(expression_regexp, parameter_type_registry)
11
10
  @expression_regexp = expression_regexp
@@ -14,30 +13,20 @@ module Cucumber
14
13
  end
15
14
 
16
15
  def match(text)
17
- parameter_types = []
18
-
19
- match_offset = 0
20
-
21
- loop do
22
- match = CAPTURE_GROUP_PATTERN.match(@expression_regexp.source, match_offset)
23
- break if match.nil?
24
- match_offset = match.offset(0)[1]
25
-
26
- parameter_type_regexp = match[1]
27
-
28
- parameter_type = @parameter_type_registry.lookup_by_regexp(parameter_type_regexp, @expression_regexp, text)
29
- if parameter_type.nil?
30
- parameter_type = ParameterType.new(
31
- parameter_type_regexp,
32
- parameter_type_regexp,
33
- String,
34
- lambda {|s| s},
35
- false,
36
- false
37
- )
38
- end
39
-
40
- parameter_types.push(parameter_type)
16
+ parameter_types = @tree_regexp.group_builder.children.map do |group_builder|
17
+ parameter_type_regexp = group_builder.source
18
+ @parameter_type_registry.lookup_by_regexp(
19
+ parameter_type_regexp,
20
+ @expression_regexp,
21
+ text
22
+ ) || ParameterType.new(
23
+ parameter_type_regexp,
24
+ parameter_type_regexp,
25
+ String,
26
+ lambda {|s| s},
27
+ false,
28
+ false
29
+ )
41
30
  end
42
31
 
43
32
  Argument.build(@tree_regexp, text, parameter_types)
@@ -3,21 +3,25 @@ require 'cucumber/cucumber_expressions/group_builder'
3
3
  module Cucumber
4
4
  module CucumberExpressions
5
5
  class TreeRegexp
6
- attr_reader :regexp
6
+ attr_reader :regexp, :group_builder
7
7
 
8
8
  def initialize(regexp)
9
9
  @regexp = regexp.is_a?(Regexp) ? regexp : Regexp.new(regexp)
10
10
 
11
11
  stack = [GroupBuilder.new]
12
+ group_start_stack = []
12
13
  last = nil
13
14
  non_capturing_maybe = false
14
- @regexp.source.split('').each do |c|
15
+ @regexp.source.split('').each_with_index do |c, n|
15
16
  if c == '(' && last != '\\'
16
17
  stack.push(GroupBuilder.new)
18
+ group_start_stack.push(n+1)
17
19
  non_capturing_maybe = false
18
20
  elsif c == ')' && last != '\\'
19
21
  gb = stack.pop
22
+ group_start = group_start_stack.pop
20
23
  if gb.capturing?
24
+ gb.source = @regexp.source[group_start...n]
21
25
  stack.last.add(gb)
22
26
  else
23
27
  gb.move_children_to(stack.last)
@@ -40,6 +40,12 @@ module Cucumber
40
40
  'I like "bangers" and \'mash\'')
41
41
  end
42
42
 
43
+ it "generates expression for strings with % sign" do
44
+ assert_expression(
45
+ "I am {int}% foobar", ["int"],
46
+ 'I am 20% foobar')
47
+ end
48
+
43
49
  it "generates expression for just int" do
44
50
  assert_expression(
45
51
  "{int}", ["int"],
@@ -48,12 +48,12 @@ module Cucumber
48
48
  parameter_registry = ParameterTypeRegistry.new
49
49
  ### [add-color-parameter-type]
50
50
  parameter_registry.define_parameter_type(ParameterType.new(
51
- 'color',
52
- /red|blue|yellow/,
53
- Color,
54
- lambda {|s| Color.new(s)},
55
- true,
56
- false
51
+ 'color', # name
52
+ /red|blue|yellow/, # regexp
53
+ Color, # type
54
+ lambda {|s| Color.new(s)}, # transform
55
+ true, # use_for_snippets
56
+ false # prefer_for_regexp_match
57
57
  ))
58
58
  ### [add-color-parameter-type]
59
59
  @parameter_type_registry = parameter_registry
@@ -47,6 +47,10 @@ module Cucumber
47
47
  ).to eq(["I", "can", 1, "slide"])
48
48
  end
49
49
 
50
+ it "works with escaped parenthesis" do
51
+ expect( match(/Across the line\(s\)/, 'Across the line(s)') ).to eq([])
52
+ end
53
+
50
54
  it "exposes source and regexp" do
51
55
  regexp = /I have (\d+) cukes? in my (\+) now/
52
56
  expression = RegularExpression.new(regexp, ParameterTypeRegistry.new)
@@ -3,6 +3,11 @@ require 'cucumber/cucumber_expressions/tree_regexp'
3
3
  module Cucumber
4
4
  module CucumberExpressions
5
5
  describe TreeRegexp do
6
+ it 'exposes group source' do
7
+ tr = TreeRegexp.new(/(a(?:b)?)(c)/)
8
+ expect(tr.group_builder.children.map{|gb| gb.source}).to eq(['a(?:b)?', 'c'])
9
+ end
10
+
6
11
  it 'builds tree' do
7
12
  tr = TreeRegexp.new(/(a(?:b)?)(c)/)
8
13
  group = tr.match('ac')
@@ -57,4 +62,4 @@ module Cucumber
57
62
  end
58
63
  end
59
64
  end
60
- end
65
+ 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: 4.0.3
4
+ version: 4.0.4
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: 2017-07-24 00:00:00.000000000 Z
11
+ date: 2017-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,7 +130,7 @@ rubyforge_project:
130
130
  rubygems_version: 2.6.8
131
131
  signing_key:
132
132
  specification_version: 4
133
- summary: cucumber-expressions-4.0.3
133
+ summary: cucumber-expressions-4.0.4
134
134
  test_files:
135
135
  - spec/capture_warnings.rb
136
136
  - spec/coverage.rb