cucumber-expressions 6.0.1 → 6.6.2

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: a9d12cb9c8cd02a9bd908fd7a7f8a4fc7923bafb4b5aa0b4ef6339cb74d634dd
4
- data.tar.gz: ae0fe8368985342ea0395a1077cab630c4c699ebd65e4c392d69d577fdbf3cd6
3
+ metadata.gz: f1c9bb3c99f56112e47e4b97965dad048c1817e76e5f4ed0f270e519132eb86f
4
+ data.tar.gz: 8004b7f168e0b6a35b5d58f9d7582b87daca2b3c35b8bffaa32e2d1e25e87a96
5
5
  SHA512:
6
- metadata.gz: baacf4121341d24159301ac93259656f4ca28710c6bd63a4dbbc946e7476003b85aca70f11760130d626a6dccf81fcc32e10645aac27e347f040d4897457d3f6
7
- data.tar.gz: 2da1c94551f4d7d2de12360f437d080364bea94805d7eeb5bdcef2af09b03d59c9471bdf3c12c77b3d8a59a419313de66bb18c47541dd24299906aa0546a2233
6
+ metadata.gz: 320da65062874ccecd9131884d5c972ff1c73b748617dbd6aae6566d2d01f489997dc024530152d66f3dfed7c44f140ffee4a78141cc6845ea5122a42df1d090
7
+ data.tar.gz: 3c0bdf0c5270ed65247bfec949c48eea39e1aba8d6e35300c63efd0cd5e7783079690a3098818ae5eeb0021fba38fb32d94fa3e720d7576a4e862895e31a154f
data/.rsync CHANGED
@@ -1,4 +1,4 @@
1
1
  ../../LICENSE LICENSE
2
2
  ../../.templates/github/ .github/
3
- ../../.templates/ruby/.travis.yml .travis.yml
3
+ ../../.templates/ruby/ .
4
4
  ../examples.txt examples.txt
data/.subrepo CHANGED
@@ -1 +1 @@
1
- cucumber/cucumber-expressions-ruby.git
1
+ cucumber/cucumber-expressions-ruby
@@ -1,16 +1,23 @@
1
- # Please update /.templates/ruby/.travis.yml in the cucumber/cucumber monorepo
2
- # and sync:
3
- #
4
- # source scripts/functions.sh && rsync_files
5
- #
6
1
  sudo: false
7
2
  language: ruby
8
-
9
3
  rvm:
10
- - "2.5.1"
11
- - "2.4.4"
12
- - "2.3.7"
13
- - "2.2.10"
14
- - "jruby-9.1.17.0"
15
-
16
- script: make default
4
+ - 2.5.3
5
+ - 2.4.5
6
+ - 2.3.8
7
+ - jruby-9.2.0.0
8
+ script: make default
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: jruby-9.2.0.0
12
+ jobs:
13
+ include:
14
+ - stage: deploy
15
+ ruby: 2.5.3
16
+ deploy:
17
+ skip_cleanup: true
18
+ provider: rubygems
19
+ gem: cucumber-expressions
20
+ on:
21
+ tags: true
22
+ api_key:
23
+ secure: qe+bx0MBxImttvjLt5TVkxWlanjPkSLzqmI6q3LlrhDcNiEy7jEJhBWEdVWWD3l6FG/1AY+XN1o18Re7eaAuun8C8QKmT6MjyMsYlf4bXMH2kfJ0IeRuNne1JRSvqVG6rAlVYHvHGJsReWGwfLAxvaEN0xAmx0cTW2MAmswUtV0LWFqMohV83Vbdcgsdvk2VMvtrtWuZTGod/o1QtcIcVimdnOjvdT79lo60IjgSa+tS7B7hEoehPa1kXZs5QYMEBhZOdIxG0rXCbIzz9wAY/4V4Z2F7SaPNBCuDZXz8Fmv9ZrAEYRsPGnNAbhLX3LFpxUEzmyHwubRRIysFCXrjgDakj4oSBiYAQResGqU0EBcbLiub1rNT72XpXbydI3N8NDdLg2CyZlAE83r7aTkEPdTvNoNwVfLQxpzP9GDKAFj5Fz4VdR0BiGhB+C5uqacpRByjiOyP2G8m2sqQhW6nTxYh61ZjCb38OLlHkdi2t7qECDD8ALlTgWPiVoeFz/cH7wVQR5dD5LoFXCq/BmOoOVGdYc8VbRyy/MPJWEepxK+v0j+LQlAwZdrtqvnE9fYKh8spQQ5+WQi5MfPWJzeXl+SzRFp5l380C3HpjYT4G/5TUaLlPzkPtpehsft9AwqgWiBvuhje2P+MesRk/tUtlWitBrpVLKCG+Dnt2fzhXIE=
data/Makefile CHANGED
@@ -1,8 +1 @@
1
- default:
2
- bundle install
3
- rake
4
- rake install
5
- .PHONY: default
6
-
7
- clean:
8
- .PHONY: clean
1
+ include default.mk
data/README.md CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/cucumber/cucumber-expressions-ruby.svg?branch=master)](https://travis-ci.org/cucumber/cucumber-expressions-ruby)
4
4
 
5
- [The docs are here](http://docs.cucumber.io/cucumber-expressions/).
5
+ [The docs are here](https://docs.cucumber.io/cucumber/cucumber-expressions/).
@@ -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 = '6.0.1'
4
+ s.version = '6.6.2'
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,14 @@ Gem::Specification.new do |s|
11
11
  s.license = "MIT"
12
12
  s.required_ruby_version = ">= 1.9.3"
13
13
 
14
+ s.metadata = {
15
+ 'bug_tracker_uri' => 'https://github.com/cucumber/cucumber/issues',
16
+ 'changelog_uri' => 'https://github.com/cucumber/cucumber/blob/master/cucumber-expressions/CHANGELOG.md',
17
+ 'documentation_uri' => 'https://docs.cucumber.io/cucumber/cucumber-expressions/',
18
+ 'mailing_list_uri' => 'https://groups.google.com/forum/#!forum/cukes',
19
+ 'source_code_uri' => 'https://github.com/cucumber/cucumber/blob/master/cucumber-expressions/ruby',
20
+ }
21
+
14
22
  s.add_development_dependency 'bundler'
15
23
  s.add_development_dependency 'rake', '~> 12.3'
16
24
  s.add_development_dependency 'rspec', '~> 3.7'
@@ -0,0 +1,33 @@
1
+ SHELL := /usr/bin/env bash
2
+ RUBY_SOURCE_FILES = $(shell find . -name "*.rb")
3
+ GEMSPECS = $(shell find . -name "*.gemspec")
4
+
5
+ ifdef TRAVIS_BRANCH
6
+ LIBRARY_VERSION=$(TRAVIS_BRANCH)
7
+ endif
8
+ ifdef TRAVIS_TAG
9
+ LIBRARY_VERSION=$(TRAVIS_TAG)
10
+ endif
11
+ ifndef LIBRARY_VERSION
12
+ LIBRARY_VERSION=$(shell git rev-parse --abbrev-ref HEAD)
13
+ endif
14
+
15
+ default: .tested
16
+ .PHONY: default
17
+
18
+ .deps: Gemfile.lock
19
+
20
+ Gemfile.lock: Gemfile $(GEMSPECS)
21
+ bundle install
22
+ touch $@
23
+
24
+ .tested: .deps $(RUBY_SOURCE_FILES)
25
+ bundle exec rspec --color
26
+ touch $@
27
+
28
+ clean: clean-ruby
29
+ .PHONY: clean
30
+
31
+ clean-ruby:
32
+ rm -f .deps .linked .tested Gemfile.lock
33
+ .PHONY: clean-ruby
@@ -17,3 +17,15 @@ I have 1 cuke in my belly now
17
17
  /^Something( with an optional argument)?$/
18
18
  Something
19
19
  [null]
20
+ ---
21
+ Привет, {word}!
22
+ Привет, Мир!
23
+ ["Мир"]
24
+ ---
25
+ /I have (.*) cukes? in my (.*) now/
26
+ I have 22 cukes in my belly now
27
+ ["22","belly"]
28
+ ---
29
+ I have {} cuke(s) in my {} now
30
+ I have 22 cukes in my belly now
31
+ ["22","belly"]
@@ -15,9 +15,14 @@ module Cucumber
15
15
  generated_expressions
16
16
  end
17
17
 
18
- private
18
+ # 256 generated expressions ought to be enough for anybody
19
+ MAX_EXPRESSIONS = 256
19
20
 
20
21
  def generate_permutations(generated_expressions, depth, current_parameter_types)
22
+ if generated_expressions.length >= MAX_EXPRESSIONS
23
+ return
24
+ end
25
+
21
26
  if depth == @parameter_type_combinations.length
22
27
  generated_expression = GeneratedExpression.new(@expression_template, current_parameter_types)
23
28
  generated_expressions.push(generated_expression)
@@ -25,6 +30,10 @@ module Cucumber
25
30
  end
26
31
 
27
32
  (0...@parameter_type_combinations[depth].length).each do |i|
33
+ # Avoid recursion if no elements can be added.
34
+ if generated_expressions.length >= MAX_EXPRESSIONS
35
+ return
36
+ end
28
37
  new_current_parameter_types = current_parameter_types.dup # clone
29
38
  new_current_parameter_types.push(@parameter_type_combinations[depth][i])
30
39
  generate_permutations(
@@ -7,7 +7,7 @@ module Cucumber
7
7
  class CucumberExpression
8
8
  # Does not include (){} characters because they have special meaning
9
9
  ESCAPE_REGEXP = /([\\^\[$.|?*+\]])/
10
- PARAMETER_REGEXP = /(\\\\)?{([^}]+)}/
10
+ PARAMETER_REGEXP = /(\\\\)?{([^}]*)}/
11
11
  OPTIONAL_REGEXP = /(\\\\)?\(([^)]+)\)/
12
12
  ALTERNATIVE_NON_WHITESPACE_TEXT_REGEXP = /([^\s^\/]+)((\/[^\s^\/]+)+)/
13
13
  DOUBLE_ESCAPE = '\\\\'
@@ -19,7 +19,7 @@ module Cucumber
19
19
  def initialize(expression, parameter_type_registry)
20
20
  @source = expression
21
21
  @parameter_types = []
22
-
22
+
23
23
  expression = process_escapes(expression)
24
24
  expression = process_optional(expression)
25
25
  expression = process_alternation(expression)
@@ -51,9 +51,22 @@ module Cucumber
51
51
  # Create non-capturing, optional capture groups from parenthesis
52
52
  expression.gsub(OPTIONAL_REGEXP) do
53
53
  g2 = $2
54
- check_no_parameter_type(g2, PARAMETER_TYPES_CANNOT_BE_OPTIONAL)
54
+ # When using Parameter Types, the () characters are used to represent an optional
55
+ # item such as (a ) which would be equivalent to (?:a )? in regex
56
+ #
57
+ # You cannot have optional Parameter Types i.e. ({int}) as this causes
58
+ # problems during the conversion phase to regex. So we check for that here
59
+ #
60
+ # One exclusion to this rule is if you actually want the brackets i.e. you
61
+ # want to capture (3) then we still permit this as an individual rule
62
+ # See: https://github.com/cucumber/cucumber-ruby/issues/1337 for more info
55
63
  # look for double-escaped parentheses
56
- $1 == DOUBLE_ESCAPE ? "\\(#{g2}\\)" : "(?:#{g2})?"
64
+ if $1 == DOUBLE_ESCAPE
65
+ "\\(#{g2}\\)"
66
+ else
67
+ check_no_parameter_type(g2, PARAMETER_TYPES_CANNOT_BE_OPTIONAL)
68
+ "(?:#{g2})?"
69
+ end
57
70
  end
58
71
  end
59
72
 
@@ -9,7 +9,14 @@ module Cucumber
9
9
  end
10
10
 
11
11
  def advance_to(new_match_position)
12
- self.class.new(parameter_type, @regexp, @text, new_match_position)
12
+ (new_match_position...@text.length).each {|advancedPos|
13
+ matcher = self.class.new(parameter_type, @regexp, @text, advancedPos)
14
+ if matcher.find
15
+ return matcher
16
+ end
17
+ }
18
+
19
+ self.class.new(parameter_type, @regexp, @text, @text.length)
13
20
  end
14
21
 
15
22
  def find
@@ -7,17 +7,19 @@ module Cucumber
7
7
  class ParameterTypeRegistry
8
8
  INTEGER_REGEXPS = [/-?\d+/, /\d+/]
9
9
  FLOAT_REGEXP = /-?\d*\.\d+/
10
- WORD_REGEXP = /\w+/
10
+ WORD_REGEXP = /[^\s]+/
11
11
  STRING_REGEXP = /"([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'/
12
+ ANONYMOUS_REGEXP = /.*/
12
13
 
13
14
  def initialize
14
15
  @parameter_type_by_name = {}
15
16
  @parameter_types_by_regexp = Hash.new {|hash, regexp| hash[regexp] = []}
16
17
 
17
- define_parameter_type(ParameterType.new('int', INTEGER_REGEXPS, Integer, lambda {|s=nil| s && s.to_i}, true, true))
18
- define_parameter_type(ParameterType.new('float', FLOAT_REGEXP, Float, lambda {|s=nil| s && s.to_f}, true, false))
19
- define_parameter_type(ParameterType.new('word', WORD_REGEXP, String, lambda {|s=nil| s}, false, false))
20
- define_parameter_type(ParameterType.new('string', STRING_REGEXP, String, lambda {|s=nil| s && s.gsub(/\\"/, '"').gsub(/\\'/, "'")}, true, false))
18
+ define_parameter_type(ParameterType.new('int', INTEGER_REGEXPS, Integer, lambda {|s = nil| s && s.to_i}, true, true))
19
+ define_parameter_type(ParameterType.new('float', FLOAT_REGEXP, Float, lambda {|s = nil| s && s.to_f}, true, false))
20
+ define_parameter_type(ParameterType.new('word', WORD_REGEXP, String, lambda {|s = nil| s}, false, false))
21
+ define_parameter_type(ParameterType.new('string', STRING_REGEXP, String, lambda {|s = nil| s && s.gsub(/\\"/, '"').gsub(/\\'/, "'")}, true, false))
22
+ define_parameter_type(ParameterType.new('', ANONYMOUS_REGEXP, String, lambda {|s = nil| s}, false, true))
21
23
  end
22
24
 
23
25
  def lookup_by_type_name(name)
@@ -42,9 +44,13 @@ module Cucumber
42
44
  end
43
45
 
44
46
  def define_parameter_type(parameter_type)
45
- if parameter_type.name
47
+ if parameter_type.name != nil
46
48
  if @parameter_type_by_name.has_key?(parameter_type.name)
47
- raise CucumberExpressionError.new("There is already a parameter with name #{parameter_type.name}")
49
+ if parameter_type.name.length == 0
50
+ raise CucumberExpressionError.new("The anonymous parameter type has already been defined")
51
+ else
52
+ raise CucumberExpressionError.new("There is already a parameter with name #{parameter_type.name}")
53
+ end
48
54
  end
49
55
  @parameter_type_by_name[parameter_type.name] = parameter_type
50
56
  end
@@ -13,13 +13,18 @@ module Cucumber
13
13
  last = nil
14
14
  escaping = false
15
15
  non_capturing_maybe = false
16
+ char_class = false
16
17
 
17
18
  @regexp.source.split('').each_with_index do |c, n|
18
- if c == '(' && !escaping
19
+ if c == '[' && !escaping
20
+ char_class = true
21
+ elsif c == ']' && !escaping
22
+ char_class = false
23
+ elsif c == '(' && !escaping && !char_class
19
24
  stack.push(GroupBuilder.new)
20
25
  group_start_stack.push(n+1)
21
26
  non_capturing_maybe = false
22
- elsif c == ')' && !escaping
27
+ elsif c == ')' && !escaping && !char_class
23
28
  gb = stack.pop
24
29
  group_start = group_start_stack.pop
25
30
  if gb.capturing?
@@ -13,7 +13,7 @@ module CaptureWarnings
13
13
  end
14
14
 
15
15
  if other_warnings.any?
16
- puts "#{ other_warnings.count } non-cucumber-expressions warnings detected, set VIEW_OTHER_WARNINGS=true to see them."
16
+ puts "#{ other_warnings.count } warnings detected, set VIEW_OTHER_WARNINGS=true to see them."
17
17
  print_warnings('other', other_warnings) if ENV['VIEW_OTHER_WARNINGS']
18
18
  end
19
19
 
@@ -23,7 +23,7 @@ module CaptureWarnings
23
23
  end
24
24
 
25
25
  if project_warnings.any?
26
- puts "#{ project_warnings.count } cucumber-expressions warnings detected"
26
+ puts "#{ project_warnings.count } warnings detected"
27
27
  print_warnings('cucumber-expressions', project_warnings)
28
28
  fail "Please remove all cucumber-expressions warnings."
29
29
  end
@@ -35,7 +35,7 @@ module CaptureWarnings
35
35
  old_stderr = STDERR.clone
36
36
  pipe_r, pipe_w = IO.pipe
37
37
  pipe_r.sync = true
38
- error = String.new
38
+ error = String.new
39
39
  reader = Thread.new do
40
40
  begin
41
41
  loop do
@@ -3,4 +3,5 @@ require 'simplecov'
3
3
  formatters = [ SimpleCov::Formatter::HTMLFormatter ]
4
4
 
5
5
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(*formatters)
6
+ SimpleCov.add_filter 'spec/'
6
7
  SimpleCov.start
@@ -98,7 +98,7 @@ module Cucumber
98
98
  expect(types).to eq([Integer, Float])
99
99
  end
100
100
 
101
- it "ignores parameter types with optional capture groups" do
101
+ it "matches parameter types with optional capture groups" do
102
102
  @parameter_type_registry.define_parameter_type(ParameterType.new(
103
103
  'optional-flight',
104
104
  /(1st flight)?/,
@@ -116,15 +116,57 @@ module Cucumber
116
116
  false
117
117
  ))
118
118
 
119
- expression = @generator.generate_expressions("I reach Stage4: 1st flight-1st hotl")[0]
120
- expect(expression.source).to eq("I reach Stage{int}: {int}st flight{int}st hotl")
119
+ expression = @generator.generate_expressions("I reach Stage4: 1st flight-1st hotel")[0]
120
+ # While you would expect this to be `I reach Stage{int}: {optional-flight}-{optional-hotel}`
121
+ # the `-1` causes {int} to match just before {optional-hotel}.
122
+ expect(expression.source).to eq("I reach Stage{int}: {optional-flight}{int}st hotel")
123
+ end
124
+
125
+ it "generates at most 256 expressions" do
126
+ for i in 0..3
127
+ @parameter_type_registry.define_parameter_type(ParameterType.new(
128
+ "my-type-#{i}",
129
+ /[a-z]/,
130
+ String,
131
+ lambda {|s| s},
132
+ true,
133
+ false
134
+ ))
135
+ end
136
+ # This would otherwise generate 4^11=419430 expressions and consume just shy of 1.5GB.
137
+ expressions = @generator.generate_expressions("a simple step")
138
+ expect(expressions.length).to eq(256)
139
+ end
140
+
141
+ it "prefers expression with longest non empty match" do
142
+ @parameter_type_registry.define_parameter_type(ParameterType.new(
143
+ 'zero-or-more',
144
+ /[a-z]*/,
145
+ String,
146
+ lambda {|s| s},
147
+ true,
148
+ false
149
+ ))
150
+ @parameter_type_registry.define_parameter_type(ParameterType.new(
151
+ 'exactly-one',
152
+ /[a-z]/,
153
+ String,
154
+ lambda {|s| s},
155
+ true,
156
+ false
157
+ ))
158
+
159
+ expressions = @generator.generate_expressions("a simple step")
160
+ expect(expressions.length).to eq(2)
161
+ expect(expressions[0].source).to eq("{exactly-one} {zero-or-more} {zero-or-more}")
162
+ expect(expressions[1].source).to eq("{zero-or-more} {zero-or-more} {zero-or-more}")
121
163
  end
122
164
 
123
165
  def assert_expression(expected_expression, expected_argument_names, text)
124
166
  generated_expression = @generator.generate_expression(text)
125
167
  expect(generated_expression.parameter_names).to eq(expected_argument_names)
126
168
  expect(generated_expression.source).to eq(expected_expression)
127
-
169
+
128
170
  cucumber_expression = CucumberExpression.new(generated_expression.source, @parameter_type_registry)
129
171
  match = cucumber_expression.match(text)
130
172
  if match.nil?
@@ -44,6 +44,13 @@ module Cucumber
44
44
  /^I have many big(?:ish)? cukes$/
45
45
  )
46
46
  end
47
+
48
+ it "translates parenthesis with alpha unicode" do
49
+ assert_regexp(
50
+ "Привет, Мир(ы)!",
51
+ /^Привет, Мир(?:ы)?!$/
52
+ )
53
+ end
47
54
  end
48
55
  end
49
56
  end
@@ -76,6 +76,10 @@ module Cucumber
76
76
  expect(match("{float}", ".22")).to eq([0.22])
77
77
  end
78
78
 
79
+ it "matches anonymous" do
80
+ expect(match("{}", "0.22")).to eq(["0.22"])
81
+ end
82
+
79
83
  '[]()$.|?*+'.split('').each do |char|
80
84
  it "does not allow parameter type with #{char}" do
81
85
  expect {match("{#{char}string}", "something")}.to raise_error("Illegal character '#{char}' in parameter name {#{char}string}")
@@ -90,6 +94,10 @@ module Cucumber
90
94
  expect {match("({int})", "3")}.to raise_error('Parameter types cannot be optional: ({int})')
91
95
  end
92
96
 
97
+ it "does allow escaped optional parameter types" do
98
+ expect(match("\\({int})", "(3)")).to eq([3])
99
+ end
100
+
93
101
  it "does not allow text/parameter type alternation" do
94
102
  expect {match("x/{int}", "3")}.to raise_error('Parameter types cannot be alternative: x/{int}')
95
103
  end
@@ -154,7 +154,7 @@ module Cucumber
154
154
  /.*/,
155
155
  Color,
156
156
  lambda {|s| Color.new(s)},
157
- true,
157
+ false,
158
158
  false
159
159
  ))
160
160
  end
@@ -20,6 +20,10 @@ module Cucumber
20
20
  expect( match(/(\d\d)/, "22") ).to eq(["22"])
21
21
  end
22
22
 
23
+ it "does not transform anonymous" do
24
+ expect( match(/(.*)/, "22") ).to eq(["22"])
25
+ end
26
+
23
27
  it "transforms negative int" do
24
28
  expect( match(/(-?\d+)/, "-22") ).to eq([-22])
25
29
  end
@@ -85,6 +85,14 @@ module Cucumber
85
85
  expect(group.value).to eq("hello")
86
86
  end
87
87
 
88
+ it('does not consider parenthesis in character class as group') do
89
+ tr = TreeRegexp.new(/^drawings: ([A-Z_, ()]+)$/)
90
+ group = tr.match('drawings: ONE, TWO(ABC)')
91
+ expect(group.value).to eq('drawings: ONE, TWO(ABC)')
92
+ expect(group.children[0].value).to eq('ONE, TWO(ABC)')
93
+ expect(group.children.length).to eq(1)
94
+ end
95
+
88
96
  it 'throws an error when there are named capture groups because they are buggy in Ruby' do
89
97
  # https://github.com/cucumber/cucumber/issues/329
90
98
  expect {
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: 6.0.1
4
+ version: 6.6.2
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-06-14 00:00:00.000000000 Z
11
+ date: 2019-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,6 +84,7 @@ files:
84
84
  - README.md
85
85
  - Rakefile
86
86
  - cucumber-expressions.gemspec
87
+ - default.mk
87
88
  - examples.txt
88
89
  - lib/cucumber/cucumber_expressions/argument.rb
89
90
  - lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb
@@ -113,7 +114,12 @@ files:
113
114
  homepage: https://github.com/cucumber/cucumber-expressions-ruby#readme
114
115
  licenses:
115
116
  - MIT
116
- metadata: {}
117
+ metadata:
118
+ bug_tracker_uri: https://github.com/cucumber/cucumber/issues
119
+ changelog_uri: https://github.com/cucumber/cucumber/blob/master/cucumber-expressions/CHANGELOG.md
120
+ documentation_uri: https://docs.cucumber.io/cucumber/cucumber-expressions/
121
+ mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
122
+ source_code_uri: https://github.com/cucumber/cucumber/blob/master/cucumber-expressions/ruby
117
123
  post_install_message:
118
124
  rdoc_options:
119
125
  - "--charset=UTF-8"
@@ -130,11 +136,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
136
  - !ruby/object:Gem::Version
131
137
  version: '0'
132
138
  requirements: []
133
- rubyforge_project:
134
- rubygems_version: 2.7.6
139
+ rubygems_version: 3.0.3
135
140
  signing_key:
136
141
  specification_version: 4
137
- summary: cucumber-expressions-6.0.1
142
+ summary: cucumber-expressions-6.6.2
138
143
  test_files:
139
144
  - spec/capture_warnings.rb
140
145
  - spec/coverage.rb