Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test-ruby.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
fail-fast: true
matrix:
os: [ubuntu-latest]
ruby: ['3.2', '3.3', '3.4', '4.0']
ruby: ['3.3', '3.4', '4.0']
include:
- os: windows-latest
ruby: '4.0'
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
### Fixed
- [Ruby] Ensure `CiEnvironments.json` is published (in new dir), in gem package
- BREAKING CHANGE: [Ruby] change `VariableExpression` module namespace to be top level alongside `CiEnvironment` module
- [Ruby] Minimum ruby version is now 3.3

## [14.0.0] - 2026-06-11
### Changed
Expand Down
4 changes: 2 additions & 2 deletions ruby/.rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
inherit_from: .rubocop_todo.yml

require:
plugins:
- rubocop-performance
- rubocop-rake
- rubocop-rspec

AllCops:
TargetRubyVersion: 3.2
TargetRubyVersion: 3.3
NewCops: enable

# Keep dev dependencies in gemspec
Expand Down
10 changes: 5 additions & 5 deletions ruby/cucumber-ci-environment.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Gem::Specification.new do |s|
s.homepage = 'https://github.com/cucumber/ci-environment'
s.platform = Gem::Platform::RUBY
s.license = 'MIT'
s.required_ruby_version = '>= 3.2'
s.required_ruby_version = '>= 3.3'
s.required_rubygems_version = '>= 3.2.8'

s.metadata = {
Expand All @@ -23,10 +23,10 @@ Gem::Specification.new do |s|

s.add_development_dependency 'rake', '~> 13.3'
s.add_development_dependency 'rspec', '~> 3.13'
s.add_development_dependency 'rubocop', '~> 1.81.0'
s.add_development_dependency 'rubocop-performance', '~> 1.23.0'
s.add_development_dependency 'rubocop-rake', '~> 0.6.0'
s.add_development_dependency 'rubocop-rspec', '~> 3.7.0'
s.add_development_dependency 'rubocop', '~> 1.88.2'
s.add_development_dependency 'rubocop-performance', '~> 1.26.1'
s.add_development_dependency 'rubocop-rake', '~> 0.7.1'
s.add_development_dependency 'rubocop-rspec', '~> 3.10.2'

s.files = Dir['README.md', 'LICENSE', 'lib/**/*']
s.rdoc_options = ['--charset=UTF-8']
Expand Down
3 changes: 2 additions & 1 deletion ruby/lib/cucumber/ci_environment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

require 'uri'
require 'json'
require 'cucumber/variable_expression'

require_relative 'variable_expression'

module Cucumber
class CiEnvironment
Expand Down
1 change: 0 additions & 1 deletion ruby/spec/cucumber/ci_environment_spec.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# frozen_string_literal: true

require 'cucumber/ci_environment'
require 'json'

describe Cucumber::CiEnvironment do
describe '.detect_ci_environment' do
Expand Down
18 changes: 11 additions & 7 deletions ruby/spec/cucumber/variable_expression_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,43 @@

describe Cucumber::VariableExpression do
describe '.evaluate' do
subject(:ci_environment) { Cucumber::CiEnvironment }
subject(:variable_klazz) do
Class.new do
extend Cucumber::VariableExpression
end
end

it 'returns nil when a variable is undefined' do
expression = 'hello-${SOME_VAR}'
result = ci_environment.evaluate(expression, {})
result = variable_klazz.evaluate(expression, {})

expect(result).to be_nil
end

it 'gets a value without replacement' do
expression = '${SOME_VAR}'
result = ci_environment.evaluate(expression, { 'SOME_VAR' => 'some_value' })
result = variable_klazz.evaluate(expression, { 'SOME_VAR' => 'some_value' })

expect(result).to eq('some_value')
end

it 'captures a group' do
expression = '${SOME_REF/refs/heads/(.*)/\\1}'
result = ci_environment.evaluate(expression, { 'SOME_REF' => 'refs/heads/main' })
result = variable_klazz.evaluate(expression, { 'SOME_REF' => 'refs/heads/main' })

expect(result).to eq('main')
end

it 'works with star wildcard in var' do
expression = '${GO_SCM_*_PR_BRANCH/.*:(.*)/\\1}'
result = ci_environment.evaluate(expression, { 'GO_SCM_MY_MATERIAL_PR_BRANCH' => 'ashwankthkumar:feature-1' })
result = variable_klazz.evaluate(expression, { 'GO_SCM_MY_MATERIAL_PR_BRANCH' => 'ashwankthkumar:feature-1' })

expect(result).to eq('feature-1')
end

it 'ci_environment.evaluates a complex expression' do
it 'variable_klazz.evaluates a complex expression' do
expression = 'hello-${VAR1}-${VAR2/(.*) (.*)/\\2-\\1}-world'
result = ci_environment.evaluate(expression, { 'VAR1' => 'amazing', 'VAR2' => 'gorgeous beautiful' })
result = variable_klazz.evaluate(expression, { 'VAR1' => 'amazing', 'VAR2' => 'gorgeous beautiful' })

expect(result).to eq('hello-amazing-beautiful-gorgeous-world')
end
Expand Down
Loading