Skip to content

Commit e53fc41

Browse files
committed
Support Gherkin 36
Added support for version 36.x of the `cucumber-gherkin` gem.
1 parent 572a9db commit e53fc41

File tree

8 files changed

+80
-11
lines changed

8 files changed

+80
-11
lines changed

.github/workflows/ci.yml

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
gherkin15, gherkin16, gherkin17, gherkin18, gherkin19, gherkin20,
2020
gherkin21, gherkin22, gherkin23, gherkin24, gherkin25, gherkin26,
2121
gherkin27, gherkin28, gherkin29, gherkin30, gherkin31, gherkin32,
22-
gherkin33, gherkin34, gherkin35 ]
22+
gherkin33, gherkin34, gherkin35, gherkin36 ]
2323
exclude:
2424
# Requires at least Ruby 2.5
2525
- ruby-version: 2.3
@@ -85,6 +85,15 @@ jobs:
8585
- ruby-version: 3.0
8686
gemfile: gherkin35
8787

88+
- ruby-version: 2.3
89+
gemfile: gherkin36
90+
- ruby-version: 2.5
91+
gemfile: gherkin36
92+
- ruby-version: 2.7
93+
gemfile: gherkin36
94+
- ruby-version: 3.0
95+
gemfile: gherkin36
96+
8897
runs-on: ${{ matrix.os }}
8998
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
9099
BUNDLE_GEMFILE: testing/gemfiles/${{ matrix.gemfile }}.gemfile
@@ -121,7 +130,7 @@ jobs:
121130
gherkin15, gherkin16, gherkin17, gherkin18, gherkin19, gherkin20,
122131
gherkin21, gherkin22, gherkin23, gherkin24, gherkin25, gherkin26,
123132
gherkin27, gherkin28, gherkin29, gherkin30, gherkin31, gherkin32,
124-
gherkin33, gherkin34, gherkin35 ]
133+
gherkin33, gherkin34, gherkin35, gherkin36 ]
125134
exclude:
126135
# Requires at least Ruby 2.5
127136
- ruby-version: jruby-9.1.17.0
@@ -172,6 +181,13 @@ jobs:
172181
- ruby-version: jruby-9.4.12.0
173182
gemfile: gherkin35
174183

184+
- ruby-version: jruby-9.1.17.0
185+
gemfile: gherkin36
186+
- ruby-version: jruby-9.3.4.0
187+
gemfile: gherkin36
188+
- ruby-version: jruby-9.4.12.0
189+
gemfile: gherkin36
190+
175191
runs-on: ${{ matrix.os }}
176192
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
177193
BUNDLE_GEMFILE: testing/gemfiles/${{ matrix.gemfile }}.gemfile
@@ -209,7 +225,7 @@ jobs:
209225
gherkin15, gherkin16, gherkin17, gherkin18, gherkin19, gherkin20,
210226
gherkin21, gherkin22, gherkin23, gherkin24, gherkin25, gherkin26,
211227
gherkin27, gherkin28, gherkin29, gherkin30, gherkin31, gherkin32,
212-
gherkin33, gherkin34, gherkin35 ]
228+
gherkin33, gherkin34, gherkin35, gherkin36 ]
213229
exclude:
214230
# Requires at least Ruby 2.5
215231
- ruby-version: 2.3
@@ -315,6 +331,21 @@ jobs:
315331
- ruby-version: jruby-9.4.12.0
316332
gemfile: gherkin35
317333

334+
- ruby-version: 2.3
335+
gemfile: gherkin36
336+
- ruby-version: 2.5
337+
gemfile: gherkin36
338+
- ruby-version: 2.7
339+
gemfile: gherkin36
340+
- ruby-version: 3.0
341+
gemfile: gherkin36
342+
- ruby-version: jruby-9.1.17.0
343+
gemfile: gherkin36
344+
- ruby-version: jruby-9.3.4.0
345+
gemfile: gherkin36
346+
- ruby-version: jruby-9.4.12.0
347+
gemfile: gherkin36
348+
318349
# Note: GitHub Actions 'include' can't override any matrix values. It can only add them. So an exhaustive
319350
# list of exclusions has to be used instead if we want to work with just one job matrix.
320351

@@ -376,7 +407,7 @@ jobs:
376407
gherkin15, gherkin16, gherkin17, gherkin18, gherkin19, gherkin20,
377408
gherkin21, gherkin22, gherkin23, gherkin24, gherkin25, gherkin26,
378409
gherkin27, gherkin28, gherkin29, gherkin30, gherkin31, gherkin32,
379-
gherkin33, gherkin34, gherkin35 ]
410+
gherkin33, gherkin34, gherkin35, gherkin36 ]
380411
exclude:
381412
# Requires at least Ruby 2.5
382413
- ruby-version: 2.3
@@ -482,6 +513,21 @@ jobs:
482513
- ruby-version: jruby-9.4.12.0
483514
gemfile: gherkin35
484515

516+
- ruby-version: 2.3
517+
gemfile: gherkin36
518+
- ruby-version: 2.5
519+
gemfile: gherkin36
520+
- ruby-version: 2.7
521+
gemfile: gherkin36
522+
- ruby-version: 3.0
523+
gemfile: gherkin36
524+
- ruby-version: jruby-9.1.17.0
525+
gemfile: gherkin36
526+
- ruby-version: jruby-9.3.4.0
527+
gemfile: gherkin36
528+
- ruby-version: jruby-9.4.12.0
529+
gemfile: gherkin36
530+
485531
# Just not worth it to get these working and no additional and meaningful proof is provided by these
486532
# combinations, given the other combinations that are being tested.
487533

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
- Support added for more versions of the `cucumber-gherkin` gem
1111
- 34.x
1212
- 35.x
13+
- 36.x
1314

1415

1516
## [3.25.0] - 2025-07-15

Gemfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ source 'http://rubygems.org'
44
gemspec
55

66

7-
gherkin_major_version_used = 35
8-
gherkin_major_versions_without_cucumber_support = [9, 11, 12, 16, 17, 19, 21, 28, 29, 30, 31, 32, 35]
7+
gherkin_major_version_used = 36
8+
gherkin_major_versions_without_cucumber_support = [9, 11, 12, 16, 17, 19, 21, 28, 29, 30, 31, 32, 35, 36]
99

1010
# rubocop:disable Bundler/DuplicatedGem
1111
if RUBY_VERSION =~ /^2\.[34]/

cuke_modeler.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
3636

3737
spec.required_ruby_version = '>= 2.3', '< 4.0'
3838

39-
spec.add_runtime_dependency 'cucumber-gherkin', '< 36.0'
39+
spec.add_runtime_dependency 'cucumber-gherkin', '< 37.0'
4040

4141
spec.add_development_dependency 'bundler', '< 3.0'
4242
spec.add_development_dependency 'childprocess', '< 6.0'
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
require_relative 'gherkin_20_adapter'
2+
3+
4+
module CukeModeler
5+
6+
# @api private
7+
#
8+
# An adapter that can convert the output of version 36.x of the *cucumber-gherkin* gem into input that is consumable
9+
# by this gem. Internal helper class.
10+
class Gherkin36Adapter < Gherkin20Adapter; end
11+
12+
private_constant :Gherkin36Adapter
13+
end

lib/cuke_modeler/parsing.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# an 'adapter' appropriate to the version of the *cucumber-gherkin* gem that has been activated.
1010
gherkin_version = Gem.loaded_specs['cucumber-gherkin'].version.version
1111
gherkin_major_version = gherkin_version.match(/^(\d+)\./)[1].to_i
12-
supported_gherkin_versions = (9..35)
12+
supported_gherkin_versions = (9..36)
1313

1414
raise("Unknown Gherkin version: '#{gherkin_version}'") unless supported_gherkin_versions.include?(gherkin_major_version)
1515

@@ -86,7 +86,7 @@ def parse_text(source_text, filename = 'cuke_modeler_fake_file.feature')
8686
# inside of it, so I'm leaving this here in case it changes again
8787
# rubocop:disable Lint/DuplicateMethods
8888
case gherkin_major_version
89-
when 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
89+
when 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36
9090
# The method to use for parsing Gherkin text
9191
def parsing_method(source_text, filename)
9292
messages = Gherkin.from_source(filename,

testing/gemfiles/gherkin36.gemfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
source 'https://rubygems.org'
2+
3+
gemspec path: '../../'
4+
5+
# Only versions of Cucumber that rely on the old `gherkin3` gem can be used
6+
# with versions of the gherkin gem for which there was never a cucumber release
7+
gem 'cucumber', '2.2.0'
8+
9+
gem 'cucumber-gherkin', '~> 36.0'

testing/rspec/spec/unit/cuke_modeler_unit_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@
198198
expect(ruby_version_limits).to match_array(['>=2.3', '<4.0'])
199199
end
200200

201-
it 'works with Gherkin 9-35' do
201+
it 'works with Gherkin 9-36' do
202202
cucumber_gherkin_version_limits = @gemspec.dependencies
203203
.find do |dependency|
204204
(dependency.type == :runtime) &&
@@ -207,7 +207,7 @@
207207
.requirement.requirements.map(&:join)
208208

209209
# NOTE: No lower bound is specified because 9.x was the first release of the gem
210-
expect(cucumber_gherkin_version_limits).to match_array(['<36.0'])
210+
expect(cucumber_gherkin_version_limits).to match_array(['<37.0'])
211211
end
212212

213213
end

0 commit comments

Comments
 (0)